package org.ojim.logic.state;
import java.util.HashMap;
import java.util.Map;
import org.jdom.DataConversionException;
import org.jdom.Element;
import org.ojim.log.OJIMLogger;
import org.ojim.logic.ServerLogic;
import org.ojim.logic.state.fields.Field;
import org.ojim.logic.state.fields.FieldGroup;
import org.ojim.logic.state.fields.Street;
import org.ojim.logic.state.fields.TaxField;
public class GameFieldLoader {
public enum FieldName {
// STREET,
// CARD,
// GO,
// TAX,
// STATION,
// JAIL,
// INFRASTRUCTURE,
// FREE_PARKING,
// GO_TO_JAIL;
STREET("street"),
CARD("card"),
GO("go"),
TAX("tax"),
STATION("station"),
JAIL("jail"),
INFRASTRUCTURE("infrastructure"),
FREE_PARKING("freeparking"),
GO_TO_JAIL("gotojail");
public final String name;
private static final Map<String, FieldName> FIELD_NAME = new HashMap<String, FieldName>(FieldName.values().length);
public static FieldName getNameToString(String name) {
return FIELD_NAME.get(name);
}
private FieldName(String name) {
this.name = name;
if (placeName(name)) {
throw new IllegalArgumentException("Name is already set! (" + name + ")");
}
}
private boolean placeName(String name) {
return FIELD_NAME.put(name, this) != null;
}
}
public static Field readElement(Element element, ServerLogic logic, Map<Integer, FieldGroup> groups) throws DataConversionException {
FieldName fieldName = FieldName.getNameToString(element.getName());
switch (fieldName) {
case STREET :
return new Street(element, logic, groups);
// case CARD :
// break;
// case GO :
// break;
case TAX :
return new TaxField(element, groups, logic);
// case STATION :
// return new Station
// break;
// case JAIL :
// return new Jai
// break;
// case INFRASTRUCTURE :
// return new Infr
// break;
// case FREE_PARKING :
// return new FreeP
// break;
// case GO_TO_JAIL :
// return new GoToJ
// break;
default :
OJIMLogger.getLogger(GameFieldLoader.class.toString()).warning("Requested unrecognized field (" + (fieldName == null ? "name: " + element.getName() : fieldName.toString() + " name: " + fieldName.name));
return null;
}
}
}