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.")) {
153 if(typeName.equals("java.lang.Boolean"))
154 value = Boolean.valueOf(stringValue);
155 else if(typeName.equals("java.lang.Long")) {
156 if(stringValue != null && !stringValue.equals("")) {
157 value = Long.valueOf(stringValue);
158 }
159 }
160 else if(typeName.equals("java.lang.Integer")) {
161 if(stringValue != null && !stringValue.equals("")) {
162 value = Integer.valueOf(stringValue);
163 }
164 }
165 else if(typeName.equals("java.lang.String"))
166 value = stringValue;
167 else if(typeName.equals("java.lang.Double")) {
168 if(stringValue != null && !stringValue.equals("")) {
169 value = Double.valueOf(stringValue);
170 }
171 }
172 else if(typeName.equals("java.lang.Float")) {
173 if(stringValue != null && !stringValue.equals("")) {
174 value = Float.valueOf(stringValue);
175 }
176 }
177 else if(typeName.equals("java.net.URL"))
178 try{
179 value = new URL(baseURL, stringValue);
180 }catch(MalformedURLException mue){
181 value = null;
182 }
183 else{
184 try{
187 if(!paramClass.isAssignableFrom(String.class)){
188 value = paramClass.getConstructor(new Class[]{String.class}).
189 newInstance(new Object[]{stringValue});
190 }
191 }catch(Exception e){
192 throw new ParameterException("Unsupported parameter type " + typeName);
193 }
194 }
195 } else {
196 if(resData == null)
198 resData = (ResourceData) Gate.getCreoleRegister().get(typeName);
199 if(resData == null){
200 return null;
202 }
203
204 WeakBumpyStack instantiations = resData.getInstantiations();
205 if(! instantiations.isEmpty()) value = instantiations.peek();
206 }
207
208 return value;
209 }
211
212
213 protected ResourceData resData;
214
215
219 public Object getDefaultValue() throws ParameterException {
220 return calculateDefaultValue();
221 }
223
226 String defaultValueString;
227
228
231 public void setDefaultValueString(String defaultValueString) {
232 this.defaultValueString = defaultValueString;
233 }
235
238 public String getDefaultValueString() { return defaultValueString; }
239
240
241 String comment;
242
243
244 public void setComment(String comment) { this.comment = comment; }
245
246
247 public String getComment() { return comment; }
248
249
250 String name;
251
252
253 public void setName(String name) { this.name = name; }
254
255
256 public String getName() { return name; }
257
258
261 public Set getSuffixes(){ return suffixes;}
262
263
264 boolean runtime = false;
265
266
271 protected URL baseURL;
272
273 public void setRuntime(boolean runtime) { this.runtime = runtime; }
274
275
276 public boolean isRuntime() { return runtime; }
277
278
279 protected Class paramClass;
280
281
282 protected Class getParameterClass() throws ParameterException
283 {
284 try {
286 ResourceData resData = (ResourceData)
287 Gate.getCreoleRegister().get(typeName);
288 if(resData == null){
289 paramClass = Gate.getClassLoader().loadClass(typeName);
290 }else{
291 paramClass = resData.getResourceClass();
292 }
293
294 } catch(ClassNotFoundException e) {
306 throw new ParameterException(
307 "Couldn't find class " + typeName + ": " + Strings.getNl() + e
308 );
309 }
310
311 if(paramClass == null)
312 throw new ParameterException("Couldn't find class " + typeName);
313
314 return paramClass;
315 }
317
318 public String toString() {
319 try{
320 return "Parameter: name="+ name+ "; valueString=" + typeName +
321 "; optional=" + optional +
322 "; defaultValueString=" + defaultValueString +
323 "; defaultValue=" + getDefaultValue() + "; comment=" +
324 comment + "; runtime=" + runtime +
325 "; itemClassName=" + itemClassName +
326 "; suffixes=" + suffixes;
327 }catch(ParameterException pe){
328 throw new GateRuntimeException(pe.toString());
329 }
330 }
331
332
336 public String getItemClassName() {
337 return itemClassName;
338 } }