1 package org.apache.slide.projector.descriptor; 2 3 import java.util.HashMap ; 4 import java.util.Iterator ; 5 import java.util.Map ; 6 7 import org.apache.slide.projector.i18n.ParameterMessage; 8 import org.apache.slide.projector.value.MapValue; 9 import org.apache.slide.projector.value.Value; 10 import org.jdom.Element; 11 12 import de.zeigermann.xml.XMLStringWriter; 13 import de.zeigermann.xml.XMLWriter; 14 15 public class MapValueFactory implements ValueFactory { 16 public Class getValueClass() { 17 return MapValue.class; 18 } 19 20 public String getElementName() { 21 return "map"; 22 } 23 24 public Value load(Element element) { 25 Map map = new HashMap (); 26 for ( Iterator i = element.getChildren().iterator(); i.hasNext(); ) { 27 Element childElement = (Element)i.next(); 28 String key = childElement.getAttributeValue("key"); 29 Element entryElement = (Element)childElement.getChildren().iterator().next(); 30 map.put(key, ValueFactoryManager.getInstance().loadValue(entryElement)); 31 } 32 return new MapValue(map); 33 } 34 35 public void save(Value value, XMLStringWriter writer) { 36 Map map = ((MapValue)value).getMap(); 37 writer.writeStartTag(XMLWriter.createStartTag(getElementName())); 38 for ( Iterator i = map.entrySet().iterator(); i.hasNext(); ) { 39 Map.Entry entry = (Map.Entry )i.next(); 40 if ( entry.getValue() instanceof Value ) { 41 writer.writeStartTag(XMLWriter.createStartTag("entry", "key", (String )entry.getKey())); 42 ValueFactoryManager.getInstance().saveValue((Value)entry.getValue(), writer); 43 writer.writeEndTag(XMLWriter.createEndTag("entry")); 44 } 45 } 46 writer.writeEndTag(XMLWriter.createEndTag(getElementName())); 47 } 48 49 public ValueDescriptor loadDescriptor(Element element) { 50 MapValueDescriptor valueDescriptor = new MapValueDescriptor(); 51 for ( Iterator i = element.getChildren().iterator(); i.hasNext(); ) { 52 Element entry = (Element)i.next(); 53 String key = entry.getAttributeValue("key"); 54 String description = entry.getAttributeValue("description"); 55 Element allowedEntryValueElement = (Element)element.getChildren().iterator().next(); 56 ValueDescriptor allowedEntryValue = ValueFactoryManager.getInstance().loadValueDescriptor(allowedEntryValueElement); 57 valueDescriptor.addEntryDescriptor(new ParameterDescriptor(key, new ParameterMessage(description), allowedEntryValue)); 58 } 59 return valueDescriptor; 60 } 61 } | Popular Tags |