1 package org.apache.slide.projector.descriptor; 2 3 import java.util.Iterator ; 4 import java.util.List ; 5 6 import org.apache.slide.projector.Store; 7 import org.apache.slide.projector.URI; 8 import org.apache.slide.projector.util.StoreHelper; 9 import org.apache.slide.projector.value.AnyValue; 10 import org.apache.slide.projector.value.URIValue; 11 import org.apache.slide.projector.value.Value; 12 import org.jdom.Element; 13 14 import de.zeigermann.xml.XMLStringWriter; 15 import de.zeigermann.xml.XMLWriter; 16 17 public class AnyValueFactory implements ValueFactory { 18 private final static String PROCESSOR = "processor"; 19 private final static String RESULT = "result"; 20 private final static String STORE = "store"; 21 private final static String KEY = "key"; 22 private final static String DOMAIN = "domain"; 23 24 public Class getValueClass() { 25 return AnyValue.class; 26 } 27 28 public String getElementName() { 29 return "value"; 30 } 31 32 public Value load(Element element) { 33 String processor = element.getAttributeValue("processor"); 34 String result = element.getAttributeValue("result"); 35 String store = element.getAttributeValue("store"); 36 int storeId = StoreHelper.getStoreByName(store); 37 String key = element.getAttributeValue("key"); 38 String domain = element.getAttributeValue("domain"); 39 URI processorUri = ( processor == null ? null : new URIValue(processor) ); 40 Iterator children = element.getChildren().iterator(); 41 Value input = null; 42 if ( children.hasNext() ) { 43 Element childElement = (Element)children.next(); 44 input = ValueFactoryManager.getInstance().loadValue(childElement); 45 } 46 return new AnyValue(processor, input, result, storeId, key, domain); 47 } 48 49 public void save(Value value, XMLStringWriter writer) { 50 AnyValue anyValue = (AnyValue)value; 51 if ( anyValue.getProcessorUri() == null ) { 52 writer.writeEmptyElement(XMLWriter.createEmptyTag(getElementName(), new String [] { STORE, KEY, DOMAIN }, new String [] { Store.stores[anyValue.getStoreId()], anyValue.getKey(), anyValue.getDomain() })); 53 } else { 54 if ( anyValue.getInput() == null ) { 55 writer.writeStartTag(XMLWriter.createStartTag(getElementName(), new String [] { PROCESSOR, RESULT, STORE, KEY, DOMAIN }, new String [] { anyValue.getProcessorUri().toString(), anyValue.getResult(), Store.stores[anyValue.getStoreId()], anyValue.getKey(), anyValue.getDomain() })); 56 } else { 57 writer.writeStartTag(XMLWriter.createStartTag(getElementName(), new String [] { PROCESSOR, RESULT }, new String [] { anyValue.getProcessorUri().toString(), anyValue.getResult() })); 58 ValueFactoryManager.getInstance().saveValue(anyValue.getInput(), writer); 59 writer.writeEndTag(XMLWriter.createEndTag(getElementName())); 60 } 61 } 62 } 63 64 public ValueDescriptor loadDescriptor(Element element) { 65 AnyValueDescriptor valueDescriptor = new AnyValueDescriptor(); 66 List allowedValueElements = element.getChildren("allowed-content-type"); 67 for ( Iterator i = allowedValueElements.iterator(); i.hasNext(); ) { 68 Element allowedValueElement = (Element)i.next(); 69 String allowedValue = allowedValueElement.getTextTrim(); 70 valueDescriptor.addAllowedContentType(allowedValue); 71 } 72 return valueDescriptor; 73 } 74 } | Popular Tags |