KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > datatypes > util > xml > DataTypeReader


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10 package org.mmbase.datatypes.util.xml;
11
12 import java.util.*;
13 import org.w3c.dom.*;
14 import org.w3c.dom.NodeList JavaDoc;
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 /**
22  * This class contains static methods used for reading a 'datatypes' XML into a DataTypeCollector.
23  *
24  * @author Pierre van Rooden
25  * @version $Id: DataTypeReader.java,v 1.20 2006/04/10 15:21:37 michiel Exp $
26  * @since MMBase-1.8
27  **/

28 public class DataTypeReader {
29
30     private static final Logger log = Logging.getLoggerInstance(DataTypeReader.class);
31
32     public static final String JavaDoc XSD_DATATYPES_1_0 = "datatypes.xsd";
33     public static final String JavaDoc NAMESPACE_DATATYPES_1_0 = "http://www.mmbase.org/xmlns/datatypes";
34
35     /** enumeration query (expansion of standard searchquery) */
36     public static final String JavaDoc XSD_ENUMERATIONQUERY_1_0 = "enumerationquery.xsd";
37     public static final String JavaDoc NAMESPACE_ENUMERATIONQUERY_1_0 = "http://www.mmbase.org/xmlns/enumerationquery";
38
39     /** most recent version */
40     public static final String JavaDoc NAMESPACE_DATATYPES = NAMESPACE_DATATYPES_1_0;
41     public static final String JavaDoc NAMESPACE_ENUMERATIONQUERY = NAMESPACE_ENUMERATIONQUERY_1_0;
42
43     /**
44      * Register the namespace and XSD used by DataTypeConfigurer
45      * This method is called by XMLEntityResolver.
46      */

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     /**
53      * Returns the value of a certain attribute, either an unqualified attribute or an attribute that fits in the
54      * searchquery namespace
55      */

56     static private String JavaDoc getAttribute(Element element, String JavaDoc localName) {
57         return DocumentReader.getAttribute(element, NAMESPACE_DATATYPES_1_0, localName);
58     }
59
60
61     /**
62      * Initialize the data types default supported by the system.
63      */

64     public static void readDataTypes(Element dataTypesElement, DataTypeCollector collector) {
65         readDataTypes(dataTypesElement, collector, null);
66     }
67
68     /**
69      * Initialize the data types default supported by the system.
70      */

71     public static void readDataTypes(Element dataTypesElement, DataTypeCollector collector, BasicDataType baseDataType) {
72         NodeList JavaDoc 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 JavaDoc localName = childElement.getLocalName();
77                 try {
78                     if (log.isDebugEnabled()) log.debug("Found child " + childElement.getTagName());
79                     if ("fieldtype".equals(localName) || // backward compatibility XXXX DO WE NEED BACKWARDS COMPATIBILITY??!
80
"specialization".equals(localName) || // backward compatibility
81
"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 JavaDoc 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     /**
101      * Reads a datatype.
102      */

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