1 10 package org.mmbase.datatypes.util.xml; 11 12 import java.util.*; 13 import org.w3c.dom.*; 14 import org.w3c.dom.NodeList ; 15 16 import org.mmbase.datatypes.*; 17 import org.mmbase.util.*; 18 import org.mmbase.util.xml.DocumentReader; 19 import org.mmbase.util.logging.*; 20 21 28 public class DataTypeReader { 29 30 private static final Logger log = Logging.getLoggerInstance(DataTypeReader.class); 31 32 public static final String XSD_DATATYPES_1_0 = "datatypes.xsd"; 33 public static final String NAMESPACE_DATATYPES_1_0 = "http://www.mmbase.org/xmlns/datatypes"; 34 35 36 public static final String XSD_ENUMERATIONQUERY_1_0 = "enumerationquery.xsd"; 37 public static final String NAMESPACE_ENUMERATIONQUERY_1_0 = "http://www.mmbase.org/xmlns/enumerationquery"; 38 39 40 public static final String NAMESPACE_DATATYPES = NAMESPACE_DATATYPES_1_0; 41 public static final String NAMESPACE_ENUMERATIONQUERY = NAMESPACE_ENUMERATIONQUERY_1_0; 42 43 47 static { 48 XMLEntityResolver.registerSystemID(NAMESPACE_DATATYPES_1_0 + ".xsd", XSD_DATATYPES_1_0, DataTypeReader.class); 49 XMLEntityResolver.registerSystemID(NAMESPACE_ENUMERATIONQUERY_1_0 + ".xsd", XSD_ENUMERATIONQUERY_1_0, DataTypeReader.class); 50 } 51 52 56 static private String getAttribute(Element element, String localName) { 57 return DocumentReader.getAttribute(element, NAMESPACE_DATATYPES_1_0, localName); 58 } 59 60 61 64 public static void readDataTypes(Element dataTypesElement, DataTypeCollector collector) { 65 readDataTypes(dataTypesElement, collector, null); 66 } 67 68 71 public static void readDataTypes(Element dataTypesElement, DataTypeCollector collector, BasicDataType baseDataType) { 72 NodeList childNodes = dataTypesElement.getChildNodes(); 73 for (int k = 0; k < childNodes.getLength(); k++) { 74 if (childNodes.item(k) instanceof Element) { 75 Element childElement = (Element) childNodes.item(k); 76 String localName = childElement.getLocalName(); 77 try { 78 if (log.isDebugEnabled()) log.debug("Found child " + childElement.getTagName()); 79 if ("fieldtype".equals(localName) || "specialization".equals(localName) || "datatype".equals(localName)) { 82 BasicDataType dataType = readDataType(childElement, baseDataType, collector).dataType; 83 collector.finish(dataType); 84 BasicDataType old = collector.addDataType(dataType); 85 if (log.isDebugEnabled()) { 86 log.debug((old == null ? "Created " : "Configured ") + dataType + (baseDataType != null ? " based on " + baseDataType : "")); 87 if (log.isTraceEnabled()) { 88 log.trace("Now " + collector); 89 } 90 } 91 readDataTypes(childElement, collector, dataType); 92 } 93 } catch (Exception e) { 94 log.error("Error while parsing element '" + org.mmbase.util.xml.XMLWriter.write(childElement, true, true) + "': " + e.getMessage(), e); 95 } 96 } 97 } 98 } 99 100 103 public static DataTypeDefinition readDataType(Element typeElement, BasicDataType baseDataType, DataTypeCollector collector) { 104 DataTypeDefinition definition = collector.getDataTypeDefinition(); 105 definition.configure(typeElement, baseDataType); 106 definition.dataType.setXml(typeElement); 107 return definition; 108 } 109 110 } 111 112 113 | Popular Tags |