1 7 8 package org.dom4j.datatype; 9 10 import com.sun.msv.datatype.xsd.XSDatatype; 11 12 import java.util.HashMap ; 13 import java.util.Map ; 14 15 import org.dom4j.Attribute; 16 import org.dom4j.DocumentFactory; 17 import org.dom4j.Element; 18 import org.dom4j.QName; 19 20 30 public class DatatypeElementFactory extends DocumentFactory { 31 private QName elementQName; 32 33 37 private Map attributeXSDatatypes = new HashMap (); 38 39 43 private Map childrenXSDatatypes = new HashMap (); 44 45 public DatatypeElementFactory(QName elementQName) { 46 this.elementQName = elementQName; 47 } 48 49 54 public QName getQName() { 55 return elementQName; 56 } 57 58 67 public XSDatatype getAttributeXSDatatype(QName attributeQName) { 68 return (XSDatatype) attributeXSDatatypes.get(attributeQName); 69 } 70 71 80 public void setAttributeXSDatatype(QName attributeQName, XSDatatype type) { 81 attributeXSDatatypes.put(attributeQName, type); 82 } 83 84 93 public XSDatatype getChildElementXSDatatype(QName qname) { 94 return (XSDatatype) childrenXSDatatypes.get(qname); 95 } 96 97 public void setChildElementXSDatatype(QName qname, XSDatatype dataType) { 98 childrenXSDatatypes.put(qname, dataType); 99 } 100 101 public Element createElement(QName qname) { 104 XSDatatype dataType = getChildElementXSDatatype(qname); 107 108 if (dataType != null) { 109 return new DatatypeElement(qname, dataType); 110 } 111 112 DocumentFactory factory = qname.getDocumentFactory(); 113 114 if (factory instanceof DatatypeElementFactory) { 115 DatatypeElementFactory dtFactory = (DatatypeElementFactory) factory; 116 dataType = dtFactory.getChildElementXSDatatype(qname); 117 118 if (dataType != null) { 119 return new DatatypeElement(qname, dataType); 120 } 121 } 122 123 return super.createElement(qname); 124 } 125 126 public Attribute createAttribute(Element owner, QName qname, String value) { 127 XSDatatype dataType = getAttributeXSDatatype(qname); 128 129 if (dataType == null) { 130 return super.createAttribute(owner, qname, value); 131 } else { 132 return new DatatypeAttribute(qname, dataType, value); 133 } 134 } 135 } 136 137 173 | Popular Tags |