1
14
15 package gate.gui;
16
17 import java.util.List;
18
19 import gate.Gate;
20 import gate.Resource;
21 import gate.creole.*;
22 import gate.event.CreoleEvent;
23 import gate.event.CreoleListener;
24 import gate.util.GateRuntimeException;
25
26
32 public class ParameterDisjunction implements CreoleListener {
33
34
45 public ParameterDisjunction(Resource resource, List parameters){
46 Gate.getCreoleRegister().addCreoleListener(this);
47 this.resource = resource;
48 params = new Parameter[parameters.size()];
49 names = new String[parameters.size()];
50 values = new Object[parameters.size()];
51 comments = new String[parameters.size()];
52 types = new String[parameters.size()];
53 required = new Boolean[parameters.size()];
54
55 for(int i = 0; i < parameters.size(); i++){
56 params[i] = (Parameter)parameters.get(i);
57 names[i] = params[i].getName();
58 comments[i] = params[i].getComment();
59 types[i] = params[i].getTypeName();
60 try{
61 values[i] = (resource == null) ?
62 null : resource.getParameterValue(params[i].getName());
63 if(values[i] == null) values[i] = params[i].getDefaultValue();
64
65 }catch(ResourceInstantiationException rie){
66 throw new GateRuntimeException(
67 "Could not get read accessor method for \"" + names[i] +
68 "\"property of " + resource.getClass().getName());
69 }catch(ParameterException pe){
70 throw new GateRuntimeException(
71 "Could not get default value for \"" + names[i] +
72 "\"property of " + resource.getClass().getName());
73 }
74 required[i] = new Boolean(!params[i].isOptional());
75 }
76
77 setSelectedIndex(0);
78 }
79
80
83 public void setSelectedIndex(int index){
84 selectedIndex = index;
85 }
86
87
90 public int size(){
91 return params.length;
92 }
93
94
97 public Boolean isRequired(){
98 return required[selectedIndex];
99 }
100
101
104 public String getName(){
105 return names[selectedIndex];
106 }
107
108
111 public String getComment(){
112 return comments[selectedIndex];
113 }
114
115
118 public String getType(){
119 return types[selectedIndex];
120 }
121
122
125 public String[] getNames(){
126 return names;
127 }
128
129 public void setValue(Object value){
130 values[selectedIndex] = value;
131 }
132
133 public Object getValue(){
134 return values[selectedIndex];
135 }
136
137 public Parameter[] getParameters(){
138 return params;
139 }
140
141 public Parameter getParameter(){
142 return params[selectedIndex];
143 }
144
145 public void cleanup(){
146 Gate.getCreoleRegister().removeCreoleListener(this);
147 resource = null;
148 }
149
150
154 void removeCreoleListenerLink(){
155 Gate.getCreoleRegister().removeCreoleListener(this);
156 }
157
158
165 protected void updateValues(Resource res){
166 for(int i =0 ; i < values.length; i++){
167 if(values[i] == res){
168 values[i] = null;
169 try{
170 values[i] = (resource == null) ?
171 null : resource.getParameterValue(params[i].getName());
172 if(values[i] == null) values[i] = params[i].getDefaultValue();
173 }catch(ResourceInstantiationException rie){
174 throw new GateRuntimeException(
175 "Could not get read accessor method for \"" + names[i] +
176 "\"property of " + resource.getClass().getName());
177 }catch(ParameterException pe){
178 throw new GateRuntimeException(
179 "Could not get default value for \"" + names[i] +
180 "\"property of " + resource.getClass().getName());
181 }
182 }
183 }
184 }
185
186
187 int selectedIndex;
188 String[] names;
189 String[] comments;
190 String[] types;
191 Object[] values;
192 Boolean[] required;
193 Parameter[] params;
194 Resource resource;
195
196 public void resourceLoaded(CreoleEvent e) {
197 updateValues(null);
198 }
199
200 public void resourceUnloaded(CreoleEvent e) {
201 updateValues(e.getResource());
202 }
203
204 public void resourceRenamed(Resource resource, String oldName,
205 String newName){
206 updateValues(resource);
207 }
208 public void datastoreOpened(CreoleEvent e) {
209 }
210 public void datastoreCreated(CreoleEvent e) {
211 }
212 public void datastoreClosed(CreoleEvent e) {
213 }
214 }