1 package debugger.resources.pr;
2
3 import debugger.ClassRipper;
4 import gate.ProcessingResource;
5 import gate.jape.Batch;
6 import gate.jape.MultiPhaseTransducer;
7 import gate.jape.SinglePhaseTransducer;
8
9 import java.util.ArrayList;
10
11
17
18 public class PrModel {
20 private static byte DebugLevel = 3;
21 final ProcessingResource processingResource;
22 final MultiPhaseTransducer transducer;
23 private final PRName prName;
24 private ArrayList phases = new ArrayList();
25
26 public PrModel(ProcessingResource pr) {
27 this.processingResource = pr;
28 this.prName = new PRName(this.processingResource);
29 this.transducer = getMPTfromPR(processingResource);
31 if (null != this.transducer) {
32 ArrayList spts = this.transducer.getPhases();
33 for (int i = 0; i < spts.size(); i++) {
34 SinglePhaseTransducer phaseTransducer = (SinglePhaseTransducer) spts.get(i);
35 phases.add(new PhaseModel(phaseTransducer));
36 }
37
43 }
44 }
49
50 public String getName() {
51 return this.prName.toString();
52 }
53
54 public MultiPhaseTransducer getTransducer() {
55 return this.transducer;
56 }
57
58 public ProcessingResource getProcessingResource() {
59 return processingResource;
60 }
61
62 public ArrayList getPhases() {
63 return this.phases;
64 }
66
67 public PhaseModel getPhase(String phaseName) {
68 for (int i = 0; i < phases.size(); i++) {
70 PhaseModel phaseModel = (PhaseModel) phases.get(i);
71 if (phaseModel.getName().equals(phaseName)) {
72 return phaseModel;
73 }
74 }
75 return null;
84 }
85
86 public PhaseModel getPhase(SinglePhaseTransducer spt) {
87 if (DebugLevel >= 4) {
88 System.out.print("DEBUG [" + this.getClass().getName() + "]: ");
89 }
93 for (int i = 0; i < phases.size(); i++) {
94 PhaseModel phaseModel = (PhaseModel) phases.get(i);
95 if (phaseModel.containsSPT(spt)) {
96 return phaseModel;
97 }
98 }
99
100 return null;
114 }
115
116
131 static MultiPhaseTransducer getMPTfromPR(ProcessingResource pr) {
132 if (!(pr instanceof gate.creole.Transducer)) {
133 return null;
134 }
135 try {
136 Batch batch = (Batch) ClassRipper.getFieldValue(pr, "batch");
137 gate.jape.Transducer tr = batch.getTransducer();
138 if (DebugLevel >= 4) {
139 System.out.print("DEBUG [" + PrModel.class.getName() + "]: ");
140 System.out.print("Batch Transducer: ");
141 System.out.print("Name = [" + tr.getName() + "]");
142 System.out.print("BaseUrl = [" + tr.getBaseURL() + "]");
143 System.out.print("Class = [" + tr.getClass() + "]");
144 System.out.print("\n");
145 }
146 if (null != tr && tr instanceof MultiPhaseTransducer) {
147 return (MultiPhaseTransducer) tr;
148 } else {
149 return null;
150 }
151 } catch (SecurityException e) {
152 e.printStackTrace();
153 return null;
154 } catch (IllegalArgumentException e) {
155 e.printStackTrace();
156 return null;
157 } catch (IllegalAccessException e) {
158 e.printStackTrace();
159 return null;
160 }
161 }
162
163 public boolean equals(Object obj) {
164 if (obj instanceof PrModel) {
165 return this.processingResource.equals(((PrModel) obj).processingResource);
166 }
167 return super.equals(obj);
168 }
169
170 class PRName {
171 private final ProcessingResource pr;
172
173 public PRName(ProcessingResource pr) {
174 if (null == pr) {
175 throw new RuntimeException("ProcessingResource is null!");
176 }
177 this.pr = pr;
178 }
179
180 public String toString() {
181 if (null == this.pr.getName() || this.pr.getName().length() == 0) {
182 return "Unnamed Resource";
183 } else {
184 return this.pr.getName();
185 }
186 }
187
188 public boolean equals(Object obj) {
189 if (null == obj || null == this.pr || null == this.pr.getName()) {
190 return false;
191 }
192 if (obj instanceof String) {
193 return this.pr.getName().equals(obj);
194 }
195 if (obj instanceof PRName) {
196 return this.pr.getName().equals(((PRName) obj).pr.getName());
197 }
198 return false;
199 }
200 }
201 }
202