1   
13  package gate.creole;
14  
15  import java.util.*;
16  
17  import gate.*;
18  import gate.event.*;
19  
20  
21  public abstract class AbstractController extends AbstractResource
22                                           implements Controller{
23  
24  
25      
29    public void execute() throws ExecutionException {
30      throw new ExecutionException(
31        "Controller " + getClass() + " hasn't overriden the execute() method"
32      );  }
33  
34  
35    
36    public Resource init() throws ResourceInstantiationException{
37      return this;
38    }
39  
40    
41    public void cleanup(){
42    }
43  
44    
53    public void setPRs(Collection PRs){}
54  
55    
59    public synchronized void interrupt(){
60      interrupted = true;
61      Iterator prIter = getPRs().iterator();
62      while(prIter.hasNext()){
63        ((ProcessingResource)prIter.next()).interrupt();
64      }
65    }
66  
67    public synchronized boolean isInterrupted() {
68      return interrupted;
69    }
70  
71  
72      
77    public synchronized void removeStatusListener(StatusListener l) {
78      if (statusListeners != null && statusListeners.contains(l)) {
79        Vector v = (Vector) statusListeners.clone();
80        v.removeElement(l);
81        statusListeners = v;
82      }
83    }
84  
85    
89    public synchronized void addStatusListener(StatusListener l) {
90      Vector v = statusListeners == null ? new Vector(2) : (Vector) statusListeners.clone();
91      if (!v.contains(l)) {
92        v.addElement(l);
93        statusListeners = v;
94      }
95    }
96  
97    
101   protected void fireStatusChanged(String e) {
102     if (statusListeners != null) {
103       Vector listeners = statusListeners;
104       int count = listeners.size();
105       for (int i = 0; i < count; i++) {
106         ((StatusListener) listeners.elementAt(i)).statusChanged(e);
107       }
108     }
109   }
110 
111   
115   public synchronized void addProgressListener(ProgressListener l) {
116     Vector v = progressListeners == null ? new Vector(2) : (Vector) progressListeners.clone();
117     if (!v.contains(l)) {
118       v.addElement(l);
119       progressListeners = v;
120     }
121   }
122 
123   
127   public synchronized void removeProgressListener(ProgressListener l) {
128     if (progressListeners != null && progressListeners.contains(l)) {
129       Vector v = (Vector) progressListeners.clone();
130       v.removeElement(l);
131       progressListeners = v;
132     }
133   }
134 
135 
136 
137   
142   protected void fireProgressChanged(int e) {
143     if (progressListeners != null) {
144       Vector listeners = progressListeners;
145       int count = listeners.size();
146       for (int i = 0; i < count; i++) {
147         ((ProgressListener) listeners.elementAt(i)).progressChanged(e);
148       }
149     }
150   }
151 
152   
156   protected void fireProcessFinished() {
157     if (progressListeners != null) {
158       Vector listeners = progressListeners;
159       int count = listeners.size();
160       for (int i = 0; i < count; i++) {
161         ((ProgressListener) listeners.elementAt(i)).processFinished();
162       }
163     }
164   }
165 
166   
169   protected class IntervalProgressListener implements ProgressListener{
170     public IntervalProgressListener(int start, int end){
171       this.start = start;
172       this.end = end;
173     }
174     public void progressChanged(int i){
175       fireProgressChanged(start + (end - start) * i / 100);
176     }
177 
178     public void processFinished(){
179       fireProgressChanged(end);
180     }
181 
182     int start;
183     int end;
184   }
186 
187   
190   protected class InternalStatusListener implements StatusListener{
191     public void statusChanged(String message){
192       fireStatusChanged(message);
193     }
194   }
195 
196 
197   
208   public List getOffendingPocessingResources()
209          throws ResourceInstantiationException{
210         ArrayList badPRs = new ArrayList(getPRs());
212         Iterator prIter = getPRs().iterator();
214     while(prIter.hasNext()){
215       ProcessingResource pr = (ProcessingResource)prIter.next();
216       ResourceData rData = (ResourceData)Gate.getCreoleRegister().
217                                               get(pr.getClass().getName());
218       if(AbstractResource.checkParameterValues(pr,
219                                                rData.getParameterList().
220                                                getRuntimeParameters())){
221         badPRs.remove(pr);
222       }
223     }
224     return badPRs.isEmpty() ? null : badPRs;
225   }
226 
227   
228   public void setName(String name){
229     this.name = name;
230   }
231 
232   
233   public String getName(){
234     return name;
235   }
236 
237   public synchronized void removeControllerListener(ControllerListener l) {
238     if (controllerListeners != null && controllerListeners.contains(l)) {
239       Vector v = (Vector) controllerListeners.clone();
240       v.removeElement(l);
241       controllerListeners = v;
242     }
243   }
244 
245   public synchronized void addControllerListener(ControllerListener l) {
246     Vector v = controllerListeners == null ? new Vector(2) : (Vector) controllerListeners.clone();
247     if (!v.contains(l)) {
248       v.addElement(l);
249       controllerListeners = v;
250     }
251   }
252 
253   protected String name;
254 
255   
259   private transient Vector statusListeners;
260 
261   
265   private transient Vector progressListeners;
266 
267 
268   
272   private transient Vector controllerListeners;
273 
274   protected boolean interrupted = false;
275   protected void fireResourceAdded(ControllerEvent e) {
276     if (controllerListeners != null) {
277       Vector listeners = controllerListeners;
278       int count = listeners.size();
279       for (int i = 0; i < count; i++) {
280         ((ControllerListener) listeners.elementAt(i)).resourceAdded(e);
281       }
282     }
283   }
284   protected void fireResourceRemoved(ControllerEvent e) {
285     if (controllerListeners != null) {
286       Vector listeners = controllerListeners;
287       int count = listeners.size();
288       for (int i = 0; i < count; i++) {
289         ((ControllerListener) listeners.elementAt(i)).resourceRemoved(e);
290       }
291     }
292   }
293 }