| FeatureSchema.java |
1 /*
2 * FeatureSchema.java
3 *
4 * Copyright (c) 1998-2005, The University of Sheffield.
5 *
6 * This file is part of GATE (see http://gate.ac.uk/), and is free
7 * software, licenced under the GNU Library General Public License,
8 * Version 2, June 1991 (in the distribution as file licence.html,
9 * and also available at http://gate.ac.uk/gate/licence.html).
10 *
11 * Cristian URSU, 27/Sept/2000
12 *
13 * $Id: FeatureSchema.java,v 1.15 2005/01/11 13:51:31 ian Exp $
14 */
15
16 package gate.creole;
17
18 import java.io.Serializable;
19 import java.util.*;
20
21 /**
22 * This class describes a schema for a feature. It is used as part of
23 * {@link gate.creole.AnnotationSchema} class.
24 */
25 public class FeatureSchema implements Serializable {
26
27 /** Debug flag */
28 private static final boolean DEBUG = false;
29
30 /** The name of this feature. */
31 String featureName = null;
32
33 /** The class name of the feature value*/
34 String featureValueClassName = null;
35
36 /** The value of the feature. This must be read only when "use" is default
37 * or fixed.
38 */
39 String featureValue = null;
40
41 /** The use of that feature can be one of:
42 * prohibited | optional | required | default | fixed : optional
43 */
44 String featureUse = null;
45
46 /** The default or fixed value for that feature*/
47
48 /** Permisible value set, if appropriate. */
49 Set featurePermissibleValuesSet = null;
50
51 /** Construction given a name of an feature and a feature value class name
52 */
53 public FeatureSchema( String aFeatureName,
54 String aFeatureValueClassName,
55 String aFeatureValue,
56 String aFeatureUse,
57 Set aFeaturePermissibleValuesSet ){
58
59 featureName = aFeatureName;
60 featureValueClassName = aFeatureValueClassName;
61 featureValue = aFeatureValue;
62 featureUse = aFeatureUse;
63 featurePermissibleValuesSet = aFeaturePermissibleValuesSet;
64 }
65
66 /** Tests whether the values are an enumeration or not. */
67 public boolean isEnumeration() {
68 return featurePermissibleValuesSet != null;
69 }// isEnumeration()
70
71 /** Get the feature name */
72 public String getFeatureName() {
73 return featureName;
74 }// getFeatureName()
75
76
77 /** Get the feature value class name */
78 public String getValueClassName() {
79 return featureValueClassName;
80 }// getValueClassName()
81
82 /** Returns the permissible values as a Set*/
83 public Set getPermissibleValues() {
84 return featurePermissibleValuesSet;
85 }// getPermissibleValues()
86
87
88 /** Adds all values from the given set as permissible values for
89 * the given feature. No check is performed to see if the
90 * class name of the feature value is the same as the
91 * the elements of the given set. Returns true if the set has been assigned.
92 */
93 public boolean setPermissibleValues(Set aPermisibleValuesSet) {
94 featurePermissibleValuesSet.clear();
95 return featurePermissibleValuesSet.addAll(aPermisibleValuesSet);
96 }// setPermissibleValues()
97
98 /** Adds a value to the enumeration of permissible value for an
99 * feature of this type. Returns false, i.e. fails, if the
100 * class name of the feature value does not match the class name
101 * of the given object
102 *
103 * @param obj the object representing a permissible value. If null then
104 * simply returns with false.
105 */
106 public boolean addPermissibleValue(Object obj) {
107 if(obj == null) return false;
108 if (! obj.getClass().getName().equals(featureValueClassName))
109 return false;
110 if (featurePermissibleValuesSet == null)
111 featurePermissibleValuesSet = new HashSet();
112 return featurePermissibleValuesSet.add(obj);
113 }// addPermissibleValue()
114
115 /** This method transforms a feature to its XSchema representation. It is used
116 * in toXSchema().
117 *
118 * @param aJava2XSchemaMap a Java map object that will be serialized in XSchema
119 * @return a String containing the XSchema representation
120 */
121 public String toXSchema(Map aJava2XSchemaMap){
122
123 StringBuffer schemaString = new StringBuffer();
124 schemaString.append("<attribute name=\"" + featureName + "\" ");
125 schemaString.append("use=\"" + featureUse + "\"");
126
127 // If there are no permissible values that means that the type must
128 // be specified as an attribute for the attribute element
129 if (!isEnumeration())
130 schemaString.append(" type=\"" +
131 (String) aJava2XSchemaMap.get(featureValueClassName) + "\"/>\n");
132 else {
133 schemaString.append(">\n <simpleType>\n");
134 schemaString.append(" <restriction base=\"" + featureValueClassName +
135 "\">\n");
136 Iterator featurePermissibleValuesSetIterator =
137 featurePermissibleValuesSet.iterator();
138
139 while (featurePermissibleValuesSetIterator.hasNext()){
140 String featurePermissibleValue =
141 (String) featurePermissibleValuesSetIterator.next();
142 schemaString.append(" <enumeration value=\"" +
143 featurePermissibleValue + "\"/>\n");
144 }// end while
145
146 schemaString.append(" </restriction>\n");
147 schemaString.append(" </simpleType>\n");
148 schemaString.append("</attribute>\n");
149
150 }// end if else
151
152 return schemaString.toString();
153 } // end toXSchema
154
155 /** This method returns the value of the feature.
156 * If featureUse is something else than "default" or "fixed" it will return
157 * the empty string "".
158 */
159 public String getFeatureValue(){
160 if (isDefault() || isFixed())
161 return featureValue;
162 else
163 return "";
164 } // getFeatureValue
165
166 /** This method sets the value of the feature.
167 * @param aFeatureValue a String representing the value of a feature.
168 */
169 public void setFeatureValue(String aFeatureValue){
170 featureValue = aFeatureValue;
171 } // setFeatureValue
172
173 /**
174 * This method is used to check if the feature is required.
175 * @return true if the feature is required. Otherwhise returns false
176 */
177 public boolean isRequired(){
178 return "required".equals(featureUse);
179 } // isRequired
180
181 /** This method is used to check if the feature is default.
182 * Default is used if the feature was omitted.
183 * @return true if the feature is default. Otherwhise returns false
184 */
185 public boolean isDefault(){
186 return "default".equals(featureUse);
187 } // isDefault
188
189 /** This method is used to check if the feature, is fixed.
190 * @return true if the feature is fixed. Otherwhise returns false
191 */
192 public boolean isFixed(){
193 return "fixed".equals(featureUse);
194 } // isFixed
195
196 /** This method is used to check if the feature is optional.
197 * @return true if the optional is fixed. Otherwhise returns false
198 */
199 public boolean isOptional(){
200 return "optional".equals(featureUse);
201 } // isOptional
202
203 /** This method is used to check if the feature is prohibited.
204 * @return true if the prohibited is fixed. Otherwhise returns false
205 */
206 public boolean isProhibited(){
207 return "prohibited".equals(featureUse);
208 } // isProhibited
209
210 } // FeatureSchema
211