001: //==============================================================================
002: //===
003: //=== SimpleContentEntry
004: //===
005: //==============================================================================
006: //=== Copyright (C) 2001-2007 Food and Agriculture Organization of the
007: //=== United Nations (FAO-UN), United Nations World Food Programme (WFP)
008: //=== and United Nations Environment Programme (UNEP)
009: //===
010: //=== This program is free software; you can redistribute it and/or modify
011: //=== it under the terms of the GNU General Public License as published by
012: //=== the Free Software Foundation; either version 2 of the License, or (at
013: //=== your option) any later version.
014: //===
015: //=== This program is distributed in the hope that it will be useful, but
016: //=== WITHOUT ANY WARRANTY; without even the implied warranty of
017: //=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
018: //=== General Public License for more details.
019: //===
020: //=== You should have received a copy of the GNU General Public License
021: //=== along with this program; if not, write to the Free Software
022: //=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
023: //===
024: //=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2,
025: //=== Rome - Italy. email: geonetwork@osgeo.org
026: //==============================================================================
027:
028: package org.fao.geonet.kernel.schema;
029:
030: import java.util.ArrayList;
031: import java.util.List;
032:
033: import org.jdom.Attribute;
034: import org.jdom.Element;
035: import jeeves.utils.Xml;
036:
037: //==============================================================================
038:
039: class SimpleContentEntry {
040: public String base;
041:
042: public ArrayList alElements = new ArrayList();
043: public ArrayList alAttribs = new ArrayList();
044: public ArrayList alAttribGroups = new ArrayList();
045: public boolean restriction = false;
046:
047: //---------------------------------------------------------------------------
048: //---
049: //--- Constructor
050: //---
051: //---------------------------------------------------------------------------
052:
053: public SimpleContentEntry(Element el, String file, String targetNS,
054: String targetNSPrefix) {
055: this (new ElementInfo(el, file, targetNS, targetNSPrefix));
056: }
057:
058: //---------------------------------------------------------------------------
059:
060: public SimpleContentEntry(ElementInfo ei) {
061: handleAttribs(ei);
062: handleChildren(ei);
063: }
064:
065: //---------------------------------------------------------------------------
066: //---
067: //--- Private methods
068: //---
069: //---------------------------------------------------------------------------
070:
071: private void handleAttribs(ElementInfo ei) {
072: List attribs = ei.element.getAttributes();
073:
074: for (int i = 0; i < attribs.size(); i++) {
075: Attribute at = (Attribute) attribs.get(i);
076:
077: String attrName = at.getName();
078:
079: // TODO; handle attributes
080:
081: Logger.log("Unknown attribute '" + attrName
082: + "' in <simpleContent> element", ei);
083: }
084: }
085:
086: //---------------------------------------------------------------------------
087:
088: private void handleChildren(ElementInfo ei) {
089: List children = ei.element.getChildren();
090:
091: for (int i = 0; i < children.size(); i++) {
092: Element elChild = (Element) children.get(i);
093: String elName = elChild.getName();
094:
095: if (elChild.getName().equals("extension"))
096: handleExtension(elChild, ei);
097: else if (elChild.getName().equals("restriction"))
098: handleExtension(elChild, ei);
099:
100: else
101: Logger.log("Unknown child '" + elName
102: + "' in <simpleContent> element", ei);
103: }
104: }
105:
106: //---------------------------------------------------------------------------
107:
108: private void handleExtension(Element el, ElementInfo ei) {
109: restriction = false;
110: base = el.getAttributeValue("base");
111: List extension = el.getChildren();
112: for (int j = 0; j < extension.size(); j++) {
113: Element elExt = (Element) extension.get(j);
114: String elName = elExt.getName();
115:
116: if (elName.equals("attribute"))
117: alAttribs.add(new AttributeEntry(elExt, ei.file,
118: ei.targetNS, ei.targetNSPrefix));
119: else if (elName.equals("attributeGroup")) {
120: String attribGroup = elExt.getAttributeValue("ref");
121:
122: if (attribGroup == null)
123: throw new IllegalArgumentException(
124: "'ref' is null for element in <attributeGroup> of SimpleContent with extension base "
125: + base);
126:
127: alAttribGroups.add(attribGroup);
128:
129: }
130:
131: else
132: Logger.log("Unknown child '" + elName
133: + "' in <restriction> element", ei);
134:
135: }
136: }
137:
138: //---------------------------------------------------------------------------
139:
140: private void handleRestriction(Element el, ElementInfo ei) {
141: restriction = true;
142: base = el.getAttributeValue("base");
143:
144: List attribs = el.getAttributes();
145:
146: for (int i = 0; i < attribs.size(); i++) {
147: Attribute at = (Attribute) attribs.get(i);
148:
149: String attrName = at.getName();
150:
151: Logger.log("Unknown attribute '" + attrName
152: + "' in <restriction> element", ei);
153: }
154:
155: //--- handle children
156:
157: List children = el.getChildren();
158:
159: for (int i = 0; i < children.size(); i++) {
160: Element elRes = (Element) children.get(i);
161: String elName = elRes.getName();
162:
163: if (elName.equals("attribute"))
164: alAttribs.add(new AttributeEntry(elRes, ei.file,
165: ei.targetNS, ei.targetNSPrefix));
166: else if (elName.equals("attributeGroup")) {
167: String attribGroup = elRes.getAttributeValue("ref");
168:
169: if (attribGroup == null)
170: throw new IllegalArgumentException(
171: "'ref' is null for element in <attributeGroup> of SimpleContent with restriction base "
172: + base);
173:
174: alAttribGroups.add(attribGroup);
175:
176: }
177:
178: else
179: Logger.log("Unknown child '" + elName
180: + "' in <restriction> element", ei);
181:
182: }
183: }
184: }
185:
186: //==============================================================================
|