1
15
16 package gate.creole;
17
18 import java.io.Serializable;
19 import java.net.MalformedURLException;
20 import java.net.URL;
21 import java.util.*;
22
23 import gate.Gate;
24 import gate.util.*;
25
26
27
29 public class Parameter implements Serializable
30 {
31
37 public Parameter(URL baseUrl){
38 this.baseURL = baseUrl;
39 }
40
41
42 String typeName;
43
44
45 public void setTypeName(String typeName) { this.typeName = typeName; }
46
47
48 public String getTypeName() { return typeName; }
49
50
51 boolean optional = false;
52
53
54 public void setOptional(boolean optional) { this.optional = optional; }
55
56
57 public boolean isOptional() { return optional; }
58
59
63 String itemClassName = null;
64
65
66 Set suffixes = null;
67
68
69 public Object calculateDefaultValue() throws ParameterException {
70 if(
72 defaultValueString == null && typeName != null &&
73 typeName.startsWith("java.")
74 )
75 return null;
76
77 return calculateValueFromString(defaultValueString);
78 }
80
82 public Object calculateValueFromString(String stringValue)
83 throws ParameterException {
84 Object value = null;
86
87 Class paramClass = getParameterClass();
89
90
91 if (Collection.class.isAssignableFrom(paramClass) &&
95 (!paramClass.isInterface())){
96 Collection colection = null;
98 try{
99 colection = (Collection)paramClass.getConstructor(new Class[]{}).
100 newInstance(new Object[]{});
101 } catch(Exception ex){
102 throw new ParameterException("Could not construct an object of type "
103 + typeName + " for param " + name +
104 "\nProblem was: " + ex.toString());
105 } if(itemClassName == null){
110 StringTokenizer strTokenizer = new StringTokenizer(
113 defaultValueString,";");
114 while(strTokenizer.hasMoreTokens()){
115 String itemStringValue = strTokenizer.nextToken();
116 colection.add(itemStringValue);
117 } }else{
119 Class itemClass = null;
120 try{
121 itemClass = Gate.getClassLoader().loadClass(itemClassName);
122 }catch(ClassNotFoundException e){
123 throw new ParameterException("Could not construct a class object for "
124 + itemClassName + " for param "+ name +
125 ", with type name="+ typeName);
126 } StringTokenizer strTokenizer = new StringTokenizer(
130 defaultValueString,";");
131 while(strTokenizer.hasMoreTokens()){
132 String itemStringValue = strTokenizer.nextToken();
135 Object itemValue = null;
136 try{
137 itemValue = itemClass.getConstructor(new Class[]{String.class}).
138 newInstance(new Object[]{itemStringValue});
139 }catch(Exception e){
140 throw new ParameterException("Could not create an object of " +
141 itemClassName + " for param name "+ name + ", with type name ="+
142 typeName);
143 } colection.add(itemValue);
146 } } return colection;
149 } if(typeName.startsWith("java.")) {
152 if(typeName.equals("java.lang.Boolean"))
153 value = Boolean.valueOf(stringValue);
154 else if(typeName.equals("java.lang.Long"))
155 value = Long.valueOf(stringValue);
156 else if(typeName.equals("java.lang.Integer"))
157 value = Integer.valueOf(stringValue);
158 else if(typeName.equals("java.lang.String"))
159 value = stringValue;
160 else if(typeName.equals("java.lang.Double"))
161 value = Double.valueOf(stringValue);
162 else if(typeName.equals("java.lang.Float"))
163 value = Float.valueOf(stringValue);
164 else if(typeName.equals("java.net.URL"))
165 try{
166 value = new URL(baseURL, stringValue);
167 }catch(MalformedURLException mue){
168 value = null;
169 }
170 else{
171 try{
174 if(!paramClass.isAssignableFrom(String.class)){
175 value = paramClass.getConstructor(new Class[]{String.class}).
176 newInstance(new Object[]{stringValue});
177 }
178 }catch(Exception e){
179 throw new ParameterException("Unsupported parameter type " + typeName);
180 }
181 }
182 } else {
183 if(resData == null)
185 resData = (ResourceData) Gate.getCreoleRegister().get(typeName);
186 if(resData == null){
187 return null;
189 }
190
191 WeakBumpyStack instantiations = resData.getInstantiations();
192 if(! instantiations.isEmpty()) value = instantiations.peek();
193 }
194
195 return value;
196 }
198
199
200 protected ResourceData resData;
201
202
206 public Object getDefaultValue() throws ParameterException {
207 return calculateDefaultValue();
208 }
210
213 String defaultValueString;
214
215
218 public void setDefaultValueString(String defaultValueString) {
219 this.defaultValueString = defaultValueString;
220 }
222
225 public String getDefaultValueString() { return defaultValueString; }
226
227
228 String comment;
229
230
231 public void setComment(String comment) { this.comment = comment; }
232
233
234 public String getComment() { return comment; }
235
236
237 String name;
238
239
240 public void setName(String name) { this.name = name; }
241
242
243 public String getName() { return name; }
244
245
248 public Set getSuffixes(){ return suffixes;}
249
250
251 boolean runtime = false;
252
253
258 protected URL baseURL;
259
260 public void setRuntime(boolean runtime) { this.runtime = runtime; }
261
262
263 public boolean isRuntime() { return runtime; }
264
265
266 protected Class paramClass;
267
268
269 protected Class getParameterClass() throws ParameterException
270 {
271 try {
273 ResourceData resData = (ResourceData)
274 Gate.getCreoleRegister().get(typeName);
275 if(resData == null){
276 paramClass = Gate.getClassLoader().loadClass(typeName);
277 }else{
278 paramClass = resData.getResourceClass();
279 }
280
281 } catch(ClassNotFoundException e) {
293 throw new ParameterException(
294 "Couldn't find class " + typeName + ": " + Strings.getNl() + e
295 );
296 }
297
298 if(paramClass == null)
299 throw new ParameterException("Couldn't find class " + typeName);
300
301 return paramClass;
302 }
304
305 public String toString() {
306 try{
307 return "Parameter: name="+ name+ "; valueString=" + typeName +
308 "; optional=" + optional +
309 "; defaultValueString=" + defaultValueString +
310 "; defaultValue=" + getDefaultValue() + "; comment=" +
311 comment + "; runtime=" + runtime +
312 "; itemClassName=" + itemClassName +
313 "; suffixes=" + suffixes;
314 }catch(ParameterException pe){
315 throw new GateRuntimeException(pe.toString());
316 }
317 }
318
319
323 public String getItemClassName() {
324 return itemClassName;
325 } }