1 package debugger.resources.pr;
2
3 import debugger.resources.ResourcesFactory;
4 import gate.Annotation;
5 import gate.AnnotationSet;
6 import gate.annotation.AnnotationSetImpl;
7 import gate.fsm.State;
8 import gate.jape.RightHandSide;
9 import gate.jape.SinglePhaseTransducer;
10
11 import java.util.ArrayList;
12 import java.util.HashMap;
13 import java.util.Iterator;
14
15
21
22 public class TraceContainer extends ArrayList {
23 private HashMap phaseCut = new HashMap();
24
25 public RuleTrace getStateContainer(State state) {
26 RuleTrace result = null;
27 ArrayList helpList = new ArrayList();
28 for (Iterator iter = iterator(); iter.hasNext();) {
29 RuleTrace rt = (RuleTrace) iter.next();
30 if (rt.containsState(state)) {
31 helpList.add(rt);
32 }
33 }
34 if (helpList.isEmpty()) return result;
35 result = (RuleTrace) helpList.remove(0);
36 for (Iterator iterator = helpList.iterator(); iterator.hasNext();) {
37 RuleTrace ruleTrace = (RuleTrace) iterator.next();
38 if (ruleTrace.getAnnotations().lastNode().getOffset().longValue() > result.getAnnotations().lastNode().getOffset().longValue())
39 result = ruleTrace;
40 }
41 return result;
42 }
43
44 public TraceContainer getTraceByOffset(Long start, Long end) {
45 TraceContainer result = new TraceContainer();
46 result.phaseCut.putAll(this.phaseCut);
47 for (Iterator iterator = this.iterator(); iterator.hasNext();) {
58 RuleTrace ruleTrace = (RuleTrace) iterator.next();
59 if (ruleTrace.getAnnotations().firstNode().getOffset().longValue() >= start.longValue())
60 if (ruleTrace.getAnnotations().firstNode().getOffset().longValue() < end.longValue())
61 result.add(ruleTrace);
62 }
63 return result;
64 }
65 public TraceContainer getTraceByRuleModel(RuleModel ruleModel) {
89 TraceContainer result = new TraceContainer();
90 Iterator iter = this.iterator();
91 while (iter.hasNext()) {
92 RuleTrace ruleTrace = (RuleTrace) iter.next();
93 if (ruleTrace.getRuleModel() == ruleModel)
94 result.add(ruleTrace);
95 }
96 result.phaseCut.putAll(this.phaseCut);
97 return result;
98 }
99
100 public AnnotationSet getPhaseCut(PhaseModel pm) {
101 return (AnnotationSet) phaseCut.get(pm);
103 }
104
105 public void putPhaseCut(SinglePhaseTransducer spt, AnnotationSet annotations) {
106
113 AnnotationSet storedAnnotations = null;
114 boolean isSPTFound = false;
115 storedAnnotations = new AnnotationSetImpl(annotations.getDocument());
117 for (Iterator iterator = annotations.iterator(); iterator.hasNext();) {
118 Annotation annotation = (Annotation) iterator.next();
119 storedAnnotations.add(annotation);
120 }
121 for (int i = 0; i < ResourcesFactory.getPrRoot().getPRs().size(); i++) {
122 PrModel prModel = (PrModel) ResourcesFactory.getPrRoot().getPRs().get(i);
123 for (int j = 0; j < prModel.getPhases().size(); j++) {
124 PhaseModel phaseModel = (PhaseModel) prModel.getPhases().get(j);
125 if (phaseModel.getSPT() == spt) {
126 if (this.phaseCut.containsKey(phaseModel)) {
127 ((AnnotationSet) this.phaseCut.get(phaseModel)).addAll(storedAnnotations);
128 } else
129 this.phaseCut.put(phaseModel, storedAnnotations);
130 isSPTFound = true;
131 }
132 }
133 }
134
137 }
138
139 public void addAll(TraceContainer tc) {
140 super.addAll(tc);
141 for (Iterator iterator = tc.phaseCut.keySet().iterator(); iterator.hasNext();) {
152 PhaseModel phaseModel = (PhaseModel) iterator.next();
153 if (this.phaseCut.containsKey(phaseModel)) {
154 if (phaseModel.getName().equalsIgnoreCase("postprocess")) {
155 this.phaseCut.clear();
156 super.clear();
157 super.addAll(tc);
158 this.phaseCut.put(phaseModel, tc.phaseCut.get(phaseModel));
159 } else
160 ((AnnotationSet) this.phaseCut.get(phaseModel)).addAll((AnnotationSet) tc.phaseCut.get(phaseModel));
161 } else
163 this.phaseCut.put(phaseModel, tc.phaseCut.get(phaseModel));
164 }
165
176 }
177
178 public void leaveLast(RightHandSide currentRHS) {
179 Iterator iter = iterator();
180 RuleTrace last = null;
181 while (iter.hasNext()) {
182 RuleTrace ruleTrace = (RuleTrace) iter.next();
183 if (ruleTrace.getRuleModel().getRHS() == currentRHS) {
184 last = ruleTrace;
185 }
186 }
187 iter = iterator();
188 while (iter.hasNext()) {
189 RuleTrace ruleTrace = (RuleTrace) iter.next();
190 if (ruleTrace != last)
191 if (ruleTrace.isFinished())
192 ruleTrace.setOverrided(last.getRuleModel());
193 }
194 }
195 }
196