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