| TraceContainer.java |
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 /**
16 * Copyright (c) Ontos AG (http://www.ontosearch.com).
17 * This class is part of JAPE Debugger component for
18 * GATE (Copyright (c) "The University of Sheffield" see http://gate.ac.uk/) <br>
19 * @author Vladimir Karasev
20 */
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 = result.phaseCut.keySet().iterator(); iterator.hasNext();)
48 // {
49 // PhaseModel phaseModel = (PhaseModel) iterator.next();
50 // if(null != ((AnnotationSet)result.phaseCut.get(phaseModel)).get("GraduateNoun"))
51 // {
52 // System.out.println("phaseModel = " + phaseModel.getName());
53 // System.out.println("start = " + start);
54 // }
55 //
56 // }
57 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 getTraceByPhase(String phaseName)
66 // {
67 // TraceContainer result = new TraceContainer();
68 // for (Iterator iterator = this.iterator(); iterator.hasNext();)
69 // {
70 // RuleTrace ruleTrace = (RuleTrace) iterator.next();
71 // if(ruleTrace.getPhaseName().equals(phaseName))
72 // result.add(ruleTrace);
73 // }
74 // return result;
75 // }
76 //
77 // public TraceContainer getTraceByRule(String ruleName)
78 // {
79 // TraceContainer result = new TraceContainer();
80 // for (Iterator iterator = this.iterator(); iterator.hasNext();)
81 // {
82 // RuleTrace ruleTrace = (RuleTrace) iterator.next();
83 // if(ruleTrace.getRuleName().equals(ruleName))
84 // result.add(ruleTrace);
85 // }
86 // return result;
87 // }
88 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 //System.out.println("phaseCut.size() = " + phaseCut.size());
102 return (AnnotationSet) phaseCut.get(pm);
103 }
104
105 public void putPhaseCut(SinglePhaseTransducer spt, AnnotationSet annotations) {
106 //by Shafirin Andrey
107 // don't do anything without JapeDebugger running
108 // was an error: resources loaded after MorphHashGazetteer not visible
109 // because of to early init of PrRoot while running internal MorphHashGazetteer's
110 // tokenizer during parsing MorphHashGazetteer's word list
111 //if(null == JapeDebugger.getMainFrame()) return;
112
113 AnnotationSet storedAnnotations = null;
114 boolean isSPTFound = false;
115 //clone annotations
116 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 // if(!isSPTFound)
135 // System.out.println("spt " + spt.getName()+ " not found!");
136
137 }
138
139 public void addAll(TraceContainer tc) {
140 super.addAll(tc);
141 // for(Iterator iterator = tc.phaseCut.keySet().iterator(); iterator.hasNext();)
142 // {
143 // PhaseModel phaseModel = (PhaseModel) iterator.next();
144 // if(null != ((AnnotationSet)tc.phaseCut.get(phaseModel)).get("GraduateNoun"))
145 // {
146 // System.out.println("-------in addAll Transit-------------------------------");
147 // System.out.println("phaseModel = " + phaseModel.getName());
148 // }
149 //
150 // }
151 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 // System.out.println("Merge annotations:"+tc.getPhaseCut(phaseModel).getDocument().getContent().toString());
162 } else
163 this.phaseCut.put(phaseModel, tc.phaseCut.get(phaseModel));
164 }
165 // for(Iterator iterator = this.phaseCut.keySet().iterator(); iterator.hasNext();)
166 // {
167 // PhaseModel phaseModel = (PhaseModel) iterator.next();
168 // if(null != ((AnnotationSet)this.phaseCut.get(phaseModel)).get("GraduateNoun"))
169 // {
170 // System.out.println("-------in addAll in--------------------------------");
171 // System.out.println("phaseModel = " + phaseModel.getName());
172 // }
173 //
174 // }
175
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