1
5 package debugger.gui.actions.editor;
6
7 import debugger.resources.pr.RuleModel;
8 import debugger.resources.ResourcesFactory;
9 import debugger.resources.PhaseController;
10 import debugger.resources.JapeFile;
11 import debugger.gui.GuiFactory;
12
13 import java.util.Iterator;
14 import java.util.StringTokenizer;
15 import java.awt.*;
16 import java.io.File;
17 import java.io.BufferedReader;
18 import java.io.FileReader;
19 import java.io.IOException;
20 import java.net.URL;
21
22 import gate.AnnotationSet;
23 import gate.jape.SinglePhaseTransducer;
24 import gate.util.Files;
25
26 public class ShowRuleInfoAction
27 {
28 private static ShowRuleInfoAction ourInstance;
29
30 public synchronized static ShowRuleInfoAction getInstance()
31 {
32 if(ourInstance == null)
33 {
34 ourInstance = new ShowRuleInfoAction();
35 }
36 return ourInstance;
37 }
38
39 private ShowRuleInfoAction()
40 {
41 }
42
43 public void actionPerformed(RuleModel ruleModel)
44 {
45
49 int startSelection = 0;
50 int endSelection = 0;
51 Iterator it = ruleModel.getBindings().keySet().iterator();
52 while (it.hasNext()) {
53 String s = (String) it.next();
54 if (s.startsWith("(")) {
55 AnnotationSet as = (AnnotationSet) ruleModel.getBindings().get(s);
56 if (as != null)
57 try {
58 startSelection = ((AnnotationSet) ruleModel.getBindings().get(s)).firstNode().getOffset().intValue();
59 endSelection = ((AnnotationSet) ruleModel.getBindings().get(s)).lastNode().getOffset().intValue();
60 GuiFactory.getDocumentEditor().setTextSelection(Color.cyan, startSelection, endSelection);
65 } catch (Exception e) {
66 e.printStackTrace();
67 }
68 else
69 GuiFactory.getDocumentEditor().setTextSelection(Color.cyan, 0, 0);
70 }
72 }
73 ResourcesFactory.setCurrentJapeFile(getJapeFile(ruleModel));
74 ResourcesFactory.setCurrentJapeText(getJapeText());
75 GuiFactory.getDebugPanel().getRulePanel().ruleSelected();
77 GuiFactory.getDebugPanel().getJapeSourcePanel().upgradeTextPane();
78 GuiFactory.getDebugPanel().getTraceHistoryPanel().setCurrentRule(ruleModel);
80 GuiFactory.getDebugPanel().getTraceHistoryPanel().updateRulePanel(ruleModel, null);
81 }
87
88 private int getSlashNAmount(int offset, AnnotationSet as) {
89 try {
90 String temp = as.getDocument().getContent().getContent(new Long(0), new Long(offset)).toString();
91 if (temp.equals("")) return 0;
92 StringTokenizer st = new StringTokenizer(temp, "\n");
93 if (temp.endsWith("\n")) {
94 return st.countTokens();
95 } else {
96 return st.countTokens() - 1;
97 }
98 } catch (Exception e) {
99 e.printStackTrace();
100 }
101 return 0;
102 }
103
104 private JapeFile getJapeFile(RuleModel ruleModel)
106 {
107 SinglePhaseTransducer spt = ruleModel.getParentPhase().getSPT();
108 JapeFile result;
110 if (spt == null)
111 {
112 return null;
113 }
114 URL japeURL = spt.getBaseURL();
115 if(!japeURL.toString().startsWith("file"))
116 {
117 japeURL = PhaseController.class.getResource(Files.getResourcePath() + japeURL.getPath());
118 }
119 if(japeURL == null)
120 {
121 System.out.println("Not valid SPT BaseURL (" + spt.getBaseURL()+")");
122 return null;
123 }
124 result = new JapeFile(japeURL);
126 return result;
127 }
128
129 public String getJapeText()
130 {
131 JapeFile f = ResourcesFactory.getCurrentJapeFile();
133 if (f == null) return "";
134 StringBuffer result = new StringBuffer("");
136 String chunk = "";
137 try {
138 BufferedReader br = new BufferedReader(f.getReader());
140 while ((chunk = br.readLine()) != null) {
141 result.append(chunk).append("\n");
142 }
143 br.close();
144 } catch (IOException e) {
145 e.printStackTrace();
146 }
147 return result.toString();
151
152 }
153 }
154
155