001: //==============================================================================
002: //===
003: //=== MetadataType
004: //===
005: //==============================================================================
006: //=== Copyright (C) 2001-2005 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 org.fao.geonet.constants.Edit;
036:
037: //==============================================================================
038:
039: public class MetadataType {
040: private String name;
041: private boolean isOrType;
042: public boolean hasContainers = false;
043:
044: private ArrayList alElements = new ArrayList();
045: private ArrayList alTypes = new ArrayList();
046: private ArrayList alMinCard = new ArrayList();
047: private ArrayList alMaxCard = new ArrayList();
048: private ArrayList alAttribs = new ArrayList();
049: private ArrayList alExamineSubs = new ArrayList();
050:
051: //---------------------------------------------------------------------------
052: //---
053: //--- Constructor
054: //---
055: //---------------------------------------------------------------------------
056:
057: MetadataType() {
058: }
059:
060: //---------------------------------------------------------------------------
061: //---
062: //--- API methods
063: //---
064: //---------------------------------------------------------------------------
065:
066: public int getElementCount() {
067: return alElements.size();
068: }
069:
070: public void resetElementAt(int pos, String name, String type) {
071: alElements.set(pos, name);
072: alTypes.set(pos, type);
073: }
074:
075: public ArrayList getElementList() {
076: return (ArrayList) alElements.clone();
077: }
078:
079: //--------------------------------------------------------------------------
080: /** Return the component in a given position */
081:
082: public String getElementAt(int pos) {
083: return (String) alElements.get(pos);
084: }
085:
086: //--------------------------------------------------------------------------
087: /** Return the type of element in a given position */
088:
089: public String getElementTypeAt(int pos) {
090: return (String) alTypes.get(pos);
091: }
092:
093: //--------------------------------------------------------------------------
094: /** Return true if subs for element in given position need to be examined,
095: * false otherwise */
096:
097: public Boolean examineSubs(int pos) {
098: return (Boolean) alExamineSubs.get(pos);
099: }
100:
101: //--------------------------------------------------------------------------
102: /** Returns the min cardinality of element in a given pos */
103:
104: public int getMinCardinAt(int pos) {
105: return ((Integer) alMinCard.get(pos)).intValue();
106: }
107:
108: //--------------------------------------------------------------------------
109: /** Returns the max cardinality of element in a given pos */
110:
111: public int getMaxCardinAt(int pos) {
112: return ((Integer) alMaxCard.get(pos)).intValue();
113: }
114:
115: //--------------------------------------------------------------------------
116: /** Returns true is this type has children in or mode */
117:
118: public boolean isOrType() {
119: return isOrType;
120: }
121:
122: //--------------------------------------------------------------------------
123:
124: public int getAttributeCount() {
125: return alAttribs.size();
126: }
127:
128: //--------------------------------------------------------------------------
129:
130: public MetadataAttribute getAttributeAt(int i) {
131: return (MetadataAttribute) alAttribs.get(i);
132: }
133:
134: //--------------------------------------------------------------------------
135:
136: public String getName() {
137: return name;
138: }
139:
140: //--------------------------------------------------------------------------
141:
142: public String toString() {
143: String res = "";
144:
145: if (isOrType)
146: res += "IsOrType = TRUE ";
147: else
148: res += "IsOrType = FALSE ";
149:
150: for (int i = 0; i < alElements.size(); i++) {
151: String comp = getElementAt(i);
152:
153: int min = getMinCardinAt(i);
154: int max = getMaxCardinAt(i);
155:
156: String sMax = (max > 1) ? "n" : max + "";
157:
158: res += comp + "/" + min + "-" + sMax + " ";
159: }
160:
161: String attrs = "";
162: for (int i = 0; i < alAttribs.size(); i++) {
163: attrs += "Attribute (" + i + ") " + getAttributeAt(i).name
164: + ": ";
165: ArrayList alAtts = getAttributeAt(i).values;
166: if (alAtts.size() > 0) {
167: attrs += getAttributeAt(i).values.toString();
168: attrs += " ";
169: }
170: attrs += "Default Value: " + getAttributeAt(i).defValue;
171: if (getAttributeAt(i).required)
172: attrs += " REQUIRED ";
173: }
174: if (attrs.length() > 0)
175: res += " Attributes: " + attrs;
176:
177: return res;
178: }
179:
180: //---------------------------------------------------------------------------
181: //---
182: //--- Package protected API methods
183: //---
184: //---------------------------------------------------------------------------
185:
186: void addElementWithType(String name, String elementType,
187: int minCard, int maxCard) {
188: addElement(name, elementType, false, minCard, maxCard);
189: }
190:
191: //---------------------------------------------------------------------------
192:
193: void addElementWithNoType(String name, int minCard, int maxCard) {
194: addElement(name, null, false, minCard, maxCard);
195: }
196:
197: //---------------------------------------------------------------------------
198:
199: void addRefElementWithType(String name, String elementType,
200: int minCard, int maxCard) {
201: addElement(name, elementType, true, minCard, maxCard);
202: }
203:
204: //---------------------------------------------------------------------------
205:
206: void addRefElementWithNoType(String name, int minCard, int maxCard) {
207: addElement(name, null, true, minCard, maxCard);
208: }
209:
210: //---------------------------------------------------------------------------
211:
212: void addElement(String name, String elementType,
213: Boolean examineElementSubs, int minCard, int maxCard) {
214:
215: // Don't add the same element to a type
216: if (alElements.contains(name)) {
217: if (alElements.indexOf(name) == alTypes
218: .indexOf(elementType)) {
219: return;
220: }
221: }
222: alElements.add(name);
223: alTypes.add(elementType);
224: alExamineSubs.add(examineElementSubs);
225: alMinCard.add(new Integer(minCard));
226: alMaxCard.add(new Integer(maxCard));
227: if (name.contains(Edit.RootChild.CHOICE)
228: || name.contains(Edit.RootChild.GROUP)
229: || name.contains(Edit.RootChild.SEQUENCE))
230: hasContainers = true;
231: }
232:
233: //---------------------------------------------------------------------------
234:
235: void addAttribute(MetadataAttribute ma) {
236: alAttribs.add(ma);
237: }
238:
239: //---------------------------------------------------------------------------
240:
241: void setName(String name) {
242: this .name = name;
243: }
244:
245: //---------------------------------------------------------------------------
246:
247: void setOrType(boolean yesno) {
248: isOrType = yesno;
249: }
250: }
251:
252: //==============================================================================
|