package ttt.organization; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Map.Entry; import nu.xom.Attribute; import nu.xom.Element; import nu.xom.Elements; import toritools.math.Vector2; import ttt.TTT_Constants; import ttt.io.XMLSerializeable; /** * Can hold and save/load: String, float, XMLSerializeable * * @author toriscope * */ public class TTT_VariableCase implements XMLSerializeable { private final HashMap<String, Object> variables; public TTT_VariableCase() { variables = new HashMap<String, Object>(); store(TTT_Constants.ID_KEY, "DEFAULT"); } public void store(final String key, final String value) { variables.put(key, value); } public void store(final String key, final float value) { variables.put(key, value); } public void store(final String key, final Vector2 value) { variables.put(key, value); } public Object load(final String key) { return variables.get(key); } public String loadString(final String key) { return (String) variables.get(key); } public float loadFloat(final String key) { return (Float) variables.get(key); } public Vector2 loadVector(final String key) { return (Vector2) variables.get(key); } public boolean has(final String s) { return variables.containsKey(s); } @Override public String toString() { StringBuffer bu = new StringBuffer(); bu.append("VARIABLES [\n"); for (Entry<String, Object> s : this.variables.entrySet()) { bu.append("\t").append(s.getKey()).append(": ") .append(s.getValue().toString()).append("\n"); } return bu.append("]").toString(); } @Override public Element writeToElement() { Element variables = new Element(getElementName()); ArrayList<Entry<String, Object>> li = new ArrayList<Entry<String, Object>>( this.variables.entrySet()); Collections.sort(li, new Comparator<Entry<String, Object>>() { @Override public int compare(Entry<String, Object> arg0, Entry<String, Object> arg1) { return arg0.getKey().compareTo(arg1.getKey()); } }); for (Entry<String, Object> s : li) { if (s.getValue() instanceof String || s.getValue() instanceof Float) { Element var = new Element(s.getKey()); var.addAttribute(new Attribute("type", (s.getValue() instanceof Float ? "Float" : "String"))); var.appendChild(s.getValue().toString()); variables.appendChild(var); } else if (s.getValue() instanceof Vector2) { Element v = Vector2.writeToElement((Vector2) s.getValue(), s.getKey()); variables.appendChild(v); } } return variables; } @Override public void assembleFromElement(Element entity) { variables.clear(); int childCount = entity.getChildCount(); Elements children = entity.getChildElements(); for (int i = 0; i < childCount; i++) { Element variable = children.get(i); String type = variable.getAttribute("type").getValue(); Object obj = null; if (type.equals("Vector2")) { obj = Vector2.assembleFromElement(variable); } else if (type.equals("Float")) { obj = Float.parseFloat(variable.getValue()); } else { obj = variable.getValue(); } variables.put(variable.getLocalName(), obj); } } @Override public String getElementName() { return "variables"; } }