AddPRResourceCustomiser.java
01 package gate.util.spring;
02 
03 import gate.Controller;
04 import gate.ProcessingResource;
05 import gate.Resource;
06 import gate.creole.SerialController;
07 
08 /**
09  * Resource customiser that customises a {@link SerialController} by
10  * adding an extra PR. By default the PR is added to the end of the
11  * controller's PR list, but can optionally be added at a specific
12  * index, or before or after another named PR.
13  */
14 public class AddPRResourceCustomiser implements ResourceCustomiser {
15 
16   private int index = -1;
17 
18   private String addBefore = null;
19 
20   private String addAfter = null;
21 
22   private ProcessingResource pr;
23 
24   @Override
25   public void customiseResource(Resource resthrows Exception {
26     if(!(res instanceof SerialController)) {
27       throw new IllegalArgumentException(this.getClass().getName()
28               " can only customise serial controllers");
29     }
30 
31     SerialController c = (SerialController)res;
32 
33     int indexToAdd = index;
34     if(indexToAdd < 0) {
35       if(addBefore != null) {
36         if(addAfter != null) {
37           throw new IllegalArgumentException(
38                   "Use either addBefore or addAfter, but not both");
39         }
40         else {
41           indexToAdd = findPR(addBefore, c);
42         }
43       }
44       else {
45         if(addAfter != null) {
46           indexToAdd = findPR(addAfter, c1;
47         }
48       }
49     }
50 
51     if(indexToAdd >= 0) {
52       c.add(indexToAdd, pr);
53     }
54     else {
55       c.add(pr);
56     }
57   }
58 
59   /**
60    * Find the index of the first PR with the given name in the
61    * controller.
62    
63    @param name the PR name to search for
64    @param c the controller
65    @return the index of the first PR with this name in the controller,
66    *         or -1 if no such PR exists.
67    */
68   private int findPR(String name, Controller c) {
69     int i = 0;
70     for(Object pr : c.getPRs()) {
71       if(name.equals(((ProcessingResource)pr).getName())) {
72         return i;
73       }
74       i++;
75     }
76 
77     return -1;
78   }
79 
80   public void setIndex(int index) {
81     this.index = index;
82   }
83 
84   public void setAddBefore(String addBefore) {
85     this.addBefore = addBefore;
86   }
87 
88   public void setAddAfter(String addAfter) {
89     this.addAfter = addAfter;
90   }
91 
92   public void setPr(ProcessingResource pr) {
93     this.pr = pr;
94   }
95 
96 }