/** * Handle a "setBuildQueue"-message. * * @param server The <code>FreeColServer</code> handling the message. * @param player The <code>Player</code> the message applies to. * @param connection The <code>Connection</code> message was received on. * @return An update containing the new queue or an error <code>Element</code> on failure. */ public Element handle(FreeColServer server, Player player, Connection connection) { ServerPlayer serverPlayer = server.getPlayer(connection); Game game = server.getGame(); Specification spec = game.getSpecification(); Colony colony; try { colony = player.getOurFreeColGameObject(colonyId, Colony.class); } catch (Exception e) { return DOMMessage.clientError(e.getMessage()); } if (queue == null) { return DOMMessage.clientError("Empty queue"); } List<BuildableType> buildQueue = new ArrayList<BuildableType>(); for (int i = 0; i < queue.length; i++) { try { buildQueue.add(i, spec.getType(queue[i], BuildableType.class)); } catch (Exception cce) { return DOMMessage.clientError("Not a buildable type: " + queue[i]); } } // Proceed to set the build queue. return server.getInGameController().setBuildQueue(serverPlayer, colony, buildQueue); }
/** * Get a FreeColGameObjectType by identifier from a stream from a specification. * * @param spec The <code>Specification</code> to look in. * @param attributeName the name of the attribute identifying the <code>FreeColGameObjectType * </code>. * @param returnClass The expected class of the return value. * @param defaultValue A default value to return if the attributeName attribute is not present. * @return The <code>FreeColGameObjectType</code> found, or the <code>defaultValue</code>. */ public <T extends FreeColGameObjectType> T getType( Specification spec, String attributeName, Class<T> returnClass, T defaultValue) { final String attrib = // @compat 0.10.7 (FreeColObject.ID_ATTRIBUTE_TAG.equals(attributeName)) ? readId() : // end @compat getAttribute(attributeName, (String) null); return (attrib == null) ? defaultValue : spec.getType(attrib, returnClass); }
// @compat 0.10.7 public <T extends FreeColGameObjectType> T getRole( Specification spec, String attributeName, Class<T> returnClass, T defaultValue) { String attrib = (FreeColObject.ID_ATTRIBUTE_TAG.equals(attributeName)) ? readId() : getAttribute(attributeName, (String) null); if (attrib == null) { return defaultValue; } attrib = Role.fixRoleId(attrib); return spec.getType(attrib, returnClass); }