Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: fzi/injectj/config/panel/NamespacePanel.java


1   // This file is part of the Inject/J project
2   // (C) 1999-2001 Forschungszentrum Informatik (FZI) Karlsruhe
3   // Please visit our website at http://injectj.fzi.de
4   
5   package fzi.injectj.config.panel;
6   
7   import java.awt.*;
8   import java.awt.event.*;
9   import javax.swing.*;
10  import java.util.*;
11  import fzi.injectj.config.*;
12  import fzi.injectj.*;
13  import fzi.injectj.language.*;
14  import fzi.injectj.util.StringUtil;
15  
16  /** panel to choose Inject/J's namespace. Namespace are all classes which are
17    * visible to Inject/J.
18    *
19    * @author Volker Kuttruff
20    */
21  public class NamespacePanel extends JPanel implements InjectJPanel
22  {
23    protected MainWindow mainWindow;
24  
25    JButton nextButton = new JButton();
26    JButton helpButton = new JButton();
27    JButton prevButton = new JButton();
28    JButton quitButton = new JButton();
29    JTextField classnameField = new JTextField();
30    JButton chooseClassnameButton = new JButton();
31    JButton addClassnameButton = new JButton();
32    JScrollPane namespaceListScrollPane = new JScrollPane();
33    JList namespaceList = new JList();
34    JLabel classnameFieldLabel = new JLabel();
35    JLabel namespaceListLabel = new JLabel();
36    JButton removeButton = new JButton();
37    JButton allClassesButton = new JButton();
38  
39    Vector currentNamespace = new Vector();
40  
41    public NamespacePanel()
42    {
43      try
44      {
45        jbInit();
46      }
47      catch(Exception ex)
48      {
49        ex.printStackTrace();
50      }
51    }
52  
53    private void jbInit() throws Exception
54    {
55      this.setLayout(null);
56      this.setPreferredSize(new Dimension(600, 400));
57  
58      prevButton.setText("<<Previous");
59      prevButton.setBounds(new Rectangle(270 ,360, 100, 30));
60      prevButton.addActionListener(new java.awt.event.ActionListener()
61      {
62  
63        public void actionPerformed(ActionEvent e)
64        {
65          prevButton_actionPerformed(e);
66        }
67      });
68  
69      nextButton.setText("Next >>");
70      nextButton.setBounds(new Rectangle(385, 360, 100, 30));
71      nextButton.addActionListener(new java.awt.event.ActionListener()
72      {
73  
74        public void actionPerformed(ActionEvent e)
75        {
76          nextButton_actionPerformed(e);
77        }
78      });
79  
80      helpButton.setText("Help");
81      helpButton.setBounds(new Rectangle(500, 360, 75, 30));
82      helpButton.addActionListener(new java.awt.event.ActionListener()
83      {
84  
85        public void actionPerformed(ActionEvent e)
86        {
87          helpButton_actionPerformed(e);
88        }
89      });
90  
91      classnameFieldLabel.setText("Please enter next namespace item");
92      classnameFieldLabel.setBounds(new Rectangle(25, 285, 450, 25));
93      classnameField.setBounds(new Rectangle(25, 310, 400, 25));
94      classnameField.addKeyListener(new java.awt.event.KeyListener() {
95        public void keyPressed(KeyEvent e) {}
96        public void keyTyped(KeyEvent e) {}
97        public void keyReleased(KeyEvent e) {
98          if (e.getKeyCode()==KeyEvent.VK_ENTER) {
99            addClassnameButton_actionPerformed(null);
100         }
101       }
102     });
103 
104     chooseClassnameButton.setText("...");
105     chooseClassnameButton.setBounds(new Rectangle(425, 310, 25, 25));
106     chooseClassnameButton.addActionListener(new java.awt.event.ActionListener()
107     {
108 
109       public void actionPerformed(ActionEvent e)
110       {
111         chooseClassnameButton_actionPerformed(e);
112       }
113     });
114 
115     addClassnameButton.setText("Add");
116     addClassnameButton.setBounds(new Rectangle(475, 310, 100, 25));
117     addClassnameButton.addActionListener(new java.awt.event.ActionListener()
118     {
119 
120       public void actionPerformed(ActionEvent e)
121       {
122         addClassnameButton_actionPerformed(e);
123       }
124     });
125 
126     allClassesButton.setText("All");
127     allClassesButton.setBounds(new Rectangle(475, 40, 100, 25));
128     allClassesButton.addActionListener(new java.awt.event.ActionListener()
129     {
130 
131       public void actionPerformed(ActionEvent e)
132       {
133         allClassesButton_actionPerformed(e);
134       }
135     });
136 
137     namespaceListLabel.setText("Current namespace");
138     namespaceListLabel.setBounds(new Rectangle(25, 15, 450, 25));
139     namespaceListScrollPane.setBounds(new Rectangle(25, 40, 425, 230));
140 
141     removeButton.setText("Remove");
142     removeButton.setBounds(new Rectangle(475, 245, 100, 25));
143     removeButton.addActionListener(new java.awt.event.ActionListener()
144     {
145 
146       public void actionPerformed(ActionEvent e)
147       {
148         removeButton_actionPerformed(e);
149       }
150     });
151 
152     quitButton.setText("Quit");
153     quitButton.setBounds(new Rectangle(25, 360, 150, 30));
154     quitButton.addActionListener(new java.awt.event.ActionListener()
155     {
156 
157       public void actionPerformed(ActionEvent e)
158       {
159         quitButton_actionPerformed(e);
160       }
161     });
162 
163     this.add(prevButton, null);
164     this.add(nextButton, null);
165     this.add(helpButton, null);
166     this.add(quitButton, null);
167     this.add(classnameField, null);
168     this.add(chooseClassnameButton, null);
169     this.add(namespaceListScrollPane, null);
170     this.add(addClassnameButton, null);
171     this.add(classnameFieldLabel, null);
172     this.add(namespaceListLabel, null);
173     this.add(removeButton, null);
174     this.add(allClassesButton,null);
175     namespaceListScrollPane.getViewport().add(namespaceList, null);
176 
177   }
178 
179   void prevButton_actionPerformed(ActionEvent e)
180   {
181     mainWindow.switchToPrevious();
182   }
183 
184   void nextButton_actionPerformed(ActionEvent e)
185   {
186     mainWindow.switchToNext();
187   }
188 
189   /** Updates the look&feel of the given component. Subcomponents are
190     * recursively updated.
191     *
192     * @param component the component to update its look&feel
193     */
194   protected void updateComponentUI(JComponent component) {
195     component.updateUI();
196     Component[] components = component.getComponents();
197     for (int i=0; i<components.length; i++) {
198       if(components[i] instanceof JComponent) {
199         updateComponentUI((JComponent) components[i]);
200       }
201     }
202   }
203 
204   /** Updates labels of all buttons */
205   protected void updateLabels() {
206     quitButton.setText(CodeMapper.getText(LabelCode.QUIT_BUTTON));
207     helpButton.setText(CodeMapper.getText(LabelCode.HELP_BUTTON));
208     prevButton.setText(CodeMapper.getText(LabelCode.PREVIOUS_BUTTON));
209     nextButton.setText(CodeMapper.getText(LabelCode.NEXT_BUTTON));
210     removeButton.setText(CodeMapper.getText(LabelCode.REMOVE_BUTTON));
211     addClassnameButton.setText(CodeMapper.getText(LabelCode.ADD_BUTTON));
212     allClassesButton.setText(CodeMapper.getText(LabelCode.ALL_BUTTON));
213     namespaceListLabel.setText(CodeMapper.getText(LabelCode.CURNAMESPACE_LABEL));
214     classnameFieldLabel.setText(CodeMapper.getText(LabelCode.NEXTNAMESPACEITEM_LABEL));
215   }
216 
217   public void updateAll() {
218     updateLabels();
219     updateComponentUI(this);
220   }
221 
222   public void setMainWindow(MainWindow mainWindow)
223   {
224     this.mainWindow = mainWindow;
225   }
226 
227   public void newProjectCreated()
228   {
229 
230   }
231 
232   public boolean panelActivated(boolean fromPreviousPanel)
233   {
234     if (fromPreviousPanel) {
235       if (mainWindow.getCurrentProject().getNamespaceNames()!=null) {
236         currentNamespace = mainWindow.getCurrentProject().getNamespaceNames();
237         classnameField.setText("");
238         namespaceList.setListData(currentNamespace);
239       }
240     }
241     setWindowTitle();
242     return false;
243   }
244 
245   public boolean panelDeactivated(boolean toNextPanel)
246   {
247     if (!toNextPanel) return false;
248 
249     if (!currentNamespace.isEmpty()) mainWindow.getCurrentProject().setNamespaceNames(currentNamespace);
250     else {
251       MessageDialog dlg = new MessageDialog(mainWindow,CodeMapper.getText(LabelCode.ERROR_LABEL), true);
252       dlg.setMessage(CodeMapper.getText(ErrorCode.EMPTYNAMESPACE_TEXT));
253       dlg.show();
254       return true;
255     }
256     return false;
257   }
258 
259   public void setWindowTitle()
260   {
261     if(mainWindow!=null) mainWindow.setTitle(CodeMapper.getText(LabelCode.NAMESPACE_TITLE));
262   }
263 
264   void chooseClassnameButton_actionPerformed(ActionEvent e)
265   {
266     mainWindow.setWaitCursor();
267     ClassChooser classChooser = new ClassChooser(mainWindow);
268     mainWindow.setDefaultCursor();
269     classChooser.show();
270 
271     Vector selectedPackages = classChooser.getSelectedPackages();
272     Enumeration packageEnum = selectedPackages.elements();
273     while (packageEnum.hasMoreElements()) {
274       String temp = (String) packageEnum.nextElement();
275       String packageName = "package "+temp;
276       if (temp.trim().equals("root package")) packageName = temp;
277       if (!currentNamespace.contains(packageName)) currentNamespace.add(packageName);
278     }
279 
280     Vector selectedClasses = classChooser.getSelectedClasses();
281     Enumeration classEnum = selectedClasses.elements();
282     while (classEnum.hasMoreElements()) {
283       String className = (String) classEnum.nextElement();
284       if (!currentNamespace.contains(className)) {
285         currentNamespace.add(className);
286         mainWindow.getCurrentProject().setChanged();
287       }
288     }
289     removeRedundancies();
290     namespaceList.setListData(currentNamespace);
291 
292   }
293 
294   void removeButton_actionPerformed(ActionEvent e)
295   {
296     Object selectedValues[] = namespaceList.getSelectedValues();
297     for (int i=0; i<selectedValues.length; i++) {
298       currentNamespace.removeElement(selectedValues[i]);
299       mainWindow.getCurrentProject().setChanged();
300     }
301     removeRedundancies();
302     namespaceList.setListData(currentNamespace);
303   }
304 
305   void addClassnameButton_actionPerformed(ActionEvent e)
306   {
307     String text = classnameField.getText();
308     if (text==null) return;
309     text = text.trim();
310     if (text.toLowerCase().startsWith("package ")) {
311       StringTokenizer tokenizer = new StringTokenizer(text," \t");
312       if (tokenizer.countTokens()!=2) return;
313       tokenizer.nextToken();
314       String packageName = "package "+tokenizer.nextToken();
315       if (!currentNamespace.contains(packageName)) {
316         currentNamespace.addElement(packageName);
317       }
318     }
319     else {
320       boolean classFound = false;
321       Enumeration enum = GlobalSettings.mopAccess.allClassNames();
322       while (enum.hasMoreElements()) {
323         if (enum.nextElement().equals(text)) {
324           classFound = true;
325           break;
326         }
327       }
328       if (!classFound) {
329         Main.err.println("Unknown class '"+text+"'");
330         classnameField.selectAll();
331         return;
332       }
333       currentNamespace.addElement(text);
334     }
335 
336     classnameField.setText("");
337     namespaceList.setListData(currentNamespace);
338     mainWindow.getCurrentProject().setChanged();
339   }
340 
341   void allClassesButton_actionPerformed(ActionEvent e)
342   {
343     currentNamespace.removeAllElements();
344     Enumeration classEnum = GlobalSettings.mopAccess.allClassNames();
345     while (classEnum.hasMoreElements()) {
346       String name = (String) classEnum.nextElement();
347       if (name.equals("root package") || name.startsWith("package ")) {
348         if (!currentNamespace.contains(name)) {
349           currentNamespace.addElement(name);
350         }
351         continue;
352       }
353       String packageName = StringUtil.getPackageName(name);
354       if (packageName==null) continue;
355       if (packageName.equals("")) {
356         if (!currentNamespace.contains("root package")) {
357           currentNamespace.addElement("root package");
358         }
359         continue;
360       }
361       if (!currentNamespace.contains("package "+packageName)) {
362         currentNamespace.addElement("package "+packageName);
363       }
364     }
365     namespaceList.setListData(currentNamespace);
366     mainWindow.getCurrentProject().setChanged();
367     classnameField.setText("");
368   }
369 
370   void removeRedundancies() {
371     Vector currentPackages = new Vector();
372     Vector resultingNamespace = new Vector();
373     boolean rootPackageIncluded = false;
374     Enumeration enum = currentNamespace.elements();
375     while (enum.hasMoreElements()) {
376       String name = (String) enum.nextElement();
377       if (name.startsWith("package")) {
378         currentPackages.addElement(name);
379         resultingNamespace.addElement(name);
380       }
381       if (name.equals("root package")) {
382         resultingNamespace.addElement(name);
383         rootPackageIncluded = true;
384       }
385     }
386     enum = currentNamespace.elements();
387     while (enum.hasMoreElements()) {
388       String name = (String) enum.nextElement();
389       if (name.equals("root package") || name.startsWith("package")) continue;
390       // insert class to namespace (if package isn't already in it)
391       String packageName = StringUtil.getPackageName(name);
392       if (packageName==null) continue;
393       if (packageName.equals("") && !rootPackageIncluded) {
394         resultingNamespace.addElement(name);
395         continue;
396       }
397       if (!currentPackages.contains("package "+packageName)) {
398         resultingNamespace.addElement(name);
399       }
400     }
401     currentNamespace = resultingNamespace;
402   }
403 
404   void helpButton_actionPerformed(ActionEvent e)
405   {
406     mainWindow.showHelp();
407   }
408 
409   void quitButton_actionPerformed(ActionEvent e)
410   {
411     if(mainWindow!=null) mainWindow.dispose();
412     mainWindow.exit();
413   }
414 
415   public String helpFilename() {
416     return "namespace.html";
417   }
418 
419 }