1   /**
2    * @author Andrey Shafirin, Oleg Mishchenko
3    *
4    */
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  //        this.currentRuleModel = currentRuleModel;
46  //        DebugController.getInstance().getPrController().setCurrentPR((PRModelImpl) this.currentRuleModel.getParent().getParent());
47          //debug
48  
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  //System.out.println("rule "+currentRuleModel.getName()+" checked! "+startSelection+" "+endSelection);
61  //                        startSelection = startSelection - getSlashNAmount(startSelection, as);
62  //                        endSelection = endSelection - getSlashNAmount(endSelection, as);
63  //                        DebugController.getInstance().getLRController().setSelected(startSelection, endSelection);
64                          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  //                    DebugController.getInstance().getLRController().setSelected(0, 0);
71              }
72          }
73          ResourcesFactory.setCurrentJapeFile(getJapeFile(ruleModel));
74          ResourcesFactory.setCurrentJapeText(getJapeText());
75          /////////////////////////////////////
76          GuiFactory.getDebugPanel().getRulePanel().ruleSelected();
77          GuiFactory.getDebugPanel().getJapeSourcePanel().upgradeTextPane();
78          /////////////////////////////////////
79          GuiFactory.getDebugPanel().getTraceHistoryPanel().setCurrentRule(ruleModel);
80          GuiFactory.getDebugPanel().getTraceHistoryPanel().updateRulePanel(ruleModel, null);
81  //        this.ruleView.ruleSelected();
82  //        getJapeSourceView().upgradeTextPane();
83  //        ((JapeSourceView)((JapePanel)((MainPanel)(((DebugView)DebugController.getInstance().getDebugView()).getMainPanel())).getJapePanel()).getJapeSourceTab()).upgradeTextPane();
84  //        ((JapeSourceView) this.japeSourceView).upgradeTextPane();
85          //ruleModel.getRuleText();
86      }
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 File getJapeFile(RuleModel ruleModel)
105     private JapeFile getJapeFile(RuleModel ruleModel)
106     {
107         SinglePhaseTransducer spt = ruleModel.getParentPhase().getSPT();
108         //File result;
109         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 File(japeURL.getFile());
125         result = new JapeFile(japeURL);
126         return result;
127     }
128 
129     public String getJapeText()
130     {
131         //File f = ResourcesFactory.getCurrentJapeFile();
132         JapeFile f = ResourcesFactory.getCurrentJapeFile();
133         if (f == null) return "";
134 //        if (lastPhase4Editor.equals(((PhaseModelIfc) currentRuleModel.getParent()).getName())) return lastJapeText;
135         StringBuffer result = new StringBuffer("");
136         String chunk = "";
137         try {
138             //BufferedReader br = new BufferedReader(new FileReader(f));
139             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         //System.out.println("result = " + result);
148 //        lastPhase4Editor = ((PhaseModelIfc) currentRuleModel.getParent()).getName();
149 //        lastJapeText = result.toString();
150         return result.toString();
151 
152     }
153 }
154 
155