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

Quick Search    Search Deep

Source code: dexter/core/AbstractService.java


1   /*
2    * AbstractService.java
3    *
4    * Created on November 7, 2002, 3:24 PM
5    */
6   
7   package dexter.core;
8   
9   import javax.swing.tree.*;
10  import java.util.HashMap;
11  import java.util.Vector;
12  import javax.swing.JPopupMenu;
13  import javax.swing.JMenu;
14  import javax.swing.JMenuBar;
15  import javax.swing.ImageIcon;
16  import javax.swing.JPanel;
17  import javax.swing.JMenuItem;
18  import dexter.swingExtensions.*;
19  import dexter.property.*;
20  
21  
22  /**
23   *
24   * @author  Tobias Riemer
25   */
26  abstract public class AbstractService implements Service, Entry, Trayable {
27      
28      int id = 0;
29      protected JPopupMenu popup           = new JPopupMenu();
30      protected JMenuItem  optionMenuItem  = new JMenuItem();
31      protected PluginMenu pluginMenu      = new PluginMenu();
32      protected OptionAction optionAction;
33      protected String classname = "";
34      Vector dataChangeListeners = new Vector();
35      Vector trayListeners = new Vector();
36      protected DefaultMutableTreeNode root = new DefaultMutableTreeNode(this);
37      String name = new String();
38      String toolTipText = new String();
39      javax.swing.ImageIcon icon;
40         
41      protected TreePanel treePanel = null;
42      
43      protected Property pTray      =   new Property("Show in Tray",Property.BOOLEAN_VALUE);
44      protected PropertyFile propertyFile = new PropertyFile();
45      
46      /** Creates a new instance of Service */
47      public AbstractService() {        
48          classname = this.getClass().getName();
49          int ci = classname.lastIndexOf('.');
50          if (ci != -1) classname = classname.substring(ci+1);
51          classname = classname + ":" + this.getId();    
52          
53          treePanel = new TreePanel(root, this);
54          updateUI();
55          this.addDataChangeListener((dexter.core.DataChangeListener) treePanel);
56          fireNodeChanged(root);
57      }
58          
59      public void addDataChangeListener(DataChangeListener dcl) {
60          dataChangeListeners.add(dcl);
61      }
62      
63      public void removeDataChangeListener(DataChangeListener dcl) {
64          dataChangeListeners.remove(dcl);
65      }
66      
67      public void addTrayListener(TrayListener tcl) {
68          trayListeners.add(tcl);
69      }
70      
71      public void removeTrayListener(TrayListener tcl) {
72          trayListeners.remove(tcl);
73      }
74      
75      public void fireNodeRemoved(DefaultMutableTreeNode node) {
76          for(int i=0;i<dataChangeListeners.size();i++) {
77              DataChangeListener dcl = (DataChangeListener) dataChangeListeners.get(i);
78              dcl.removeNode(node);
79          }
80      }
81      
82      public void fireNodeRemoveAll(DefaultMutableTreeNode node) {
83          for(int i=0;i<dataChangeListeners.size();i++) {
84              DataChangeListener dcl = (DataChangeListener) dataChangeListeners.get(i);
85              while (node.getChildCount() > 0) {
86                  dcl.removeNode((DefaultMutableTreeNode) node.getChildAt(0));
87              }
88          }
89      }
90      
91      
92      public void fireNodeAdded(DefaultMutableTreeNode parent, DefaultMutableTreeNode node) {
93          for(int i=0;i<dataChangeListeners.size();i++) {
94              DataChangeListener dcl = (DataChangeListener) dataChangeListeners.get(i);
95              dcl.addNode(parent, node);
96          }
97      }
98      
99      public void fireAddToTray() {
100         for(int i=0;i<trayListeners.size();i++) {
101             TrayListener tcl = (TrayListener) trayListeners.get(i);
102             tcl.addTrayIcon((Trayable) this);
103         }
104         for(int i=0;i<dataChangeListeners.size();i++) {
105             DataChangeListener dcl = (DataChangeListener) dataChangeListeners.get(i);
106             dcl.hideRoot();
107         }
108     }
109     
110     public void fireRemoveFromTray() {
111         for(int i=0;i<trayListeners.size();i++) {
112             TrayListener tcl = (TrayListener) trayListeners.get(i);
113             tcl.removeTrayIcon((Trayable) this);
114         }
115         for(int i=0;i<dataChangeListeners.size();i++) {
116             DataChangeListener dcl = (DataChangeListener) dataChangeListeners.get(i);
117             dcl.showRoot();
118         }
119     }
120     
121     public void fireChangeTray() {
122         for(int i=0;i<trayListeners.size();i++) {
123             TrayListener tcl = (TrayListener) trayListeners.get(i);
124             tcl.changeTrayIcon((Trayable) this);
125         }
126     }
127     
128     public void fireNodeMoved(DefaultMutableTreeNode newParent, DefaultMutableTreeNode node) {
129         for(int i=0;i<dataChangeListeners.size();i++) {
130             DataChangeListener dcl = (DataChangeListener) dataChangeListeners.get(i);
131             dcl.moveNode(newParent, node);
132         }
133     }
134     
135     public void fireNodeChanged(DefaultMutableTreeNode node) {
136         for(int i=0;i<dataChangeListeners.size();i++) {
137             DataChangeListener dcl = (DataChangeListener) dataChangeListeners.get(i);
138             dcl.changeNode(node);
139         }
140         if (node == root) {
141             fireChangeTray();
142         }
143     }
144     
145     public DefaultMutableTreeNode getRootTreeNode() {
146         return root;
147     }
148     
149     public void setServiceName(String name) {
150         this.name = name;
151     }
152     
153     public void setToolTipText(String ttt) {
154         this.toolTipText = ttt;
155     }
156     
157     public void fireSelected() {}
158     
159     public javax.swing.ImageIcon getIcon() {
160         return icon;
161     }
162     
163     public void setIcon(javax.swing.ImageIcon icon) {
164         this.icon = icon;                
165     }
166     
167     
168     public String getToolTipText() {
169         return toolTipText;
170     }
171     
172     public String toString() {
173         return name;
174     }
175     
176     protected void invokePropertyDlg() {
177         new PropertiesDlg(null, propertyFile).show();
178     }
179     
180     public JPopupMenu getPopupMenu() {
181         return popup;
182     }
183     
184     public PropertyFile getPropertyFile() {
185         return propertyFile;
186     } 
187                     
188     public void init() {
189         
190         
191         PluginMenu m1 = new PluginMenu("OPTIONS", pluginMenu);        
192         PluginMenu m2 = new PluginMenu("PLUGINS", m1);
193         m1.add(m2);
194         optionAction = new OptionAction();
195         m2.add(optionAction);
196         pluginMenu.add(m1);
197                 
198         optionMenuItem = new JMenuItem("Options");
199         
200         propertyFile.setId(id);
201         optionMenuItem.addActionListener(new java.awt.event.ActionListener() {
202             public void actionPerformed(java.awt.event.ActionEvent evt) {
203                 invokePropertyDlg();
204             }
205         });
206         popup.add(optionMenuItem);                
207         
208         popup.addSeparator();        
209         
210         propertyFile.getHiddenPropertyGroup().addProperty(pTray);
211         if (!propertyFile.loadFile()) {
212             PropertyWizard setupWizard = Dexter.getInstance().getSetupWizard();            
213             setupWizard.addPropertyFile(propertyFile);
214             setupWizard.setVisible(true);
215         }
216         pTray.addPropertyChangedListener(new dexter.property.PropertyChangedListener() {
217             public void propertyChanged(Property p) {
218                 System.out.println("tray prop");
219                 if (pTray.booleanValue()) {
220                     fireAddToTray();
221                 } else {
222                     fireRemoveFromTray();
223                 }
224             }
225         });        
226         if (isTray()) fireAddToTray();
227     }
228         
229     public void destroy() {
230         propertyFile.saveFile();
231     }
232     
233     public java.awt.Font getFont() {
234         return null;
235     }
236     
237     public JPanel getPanel() {
238         return treePanel;
239     }
240     
241     /** Getter for property id.
242      * @return Value of property id.
243      */
244     public int getId() {
245         return id;
246     }
247     
248     /** Setter for property id.
249      * @param id New value of property id.
250      */
251     public void setId(int id) {
252         this.id = id;
253     }
254     
255     public ImageIcon getRollOverIcon() {
256         return getIcon();
257     }
258     
259     public ImageIcon getTrayIcon() {
260         return getIcon();
261     }
262     
263     public JPopupMenu getTrayPopupMenu() {
264         return null;
265     }
266     
267     public boolean isTray() {
268         return pTray.booleanValue();
269     }
270     
271     public void removeFromTray() {
272         pTray.setValue(false);
273         pTray.commitValue();
274     }
275         
276     abstract public boolean isDestroyed() ;
277        
278     public void sendToTray() {
279         pTray.setValue(true);
280         pTray.commitValue();
281     }
282     
283     public void updateUI() {
284         System.out.println("updateUI: " + name);
285         treePanel.setIcons(
286             dexter.core.Dexter.resourceFactory().getIcon("dexter","PANEL_MAXIMIZE"),
287             dexter.core.Dexter.resourceFactory().getIcon("dexter","PANEL_MINIMIZE"),
288             dexter.core.Dexter.resourceFactory().getIcon("dexter","PANEL_FULLSCREEN"),
289             dexter.core.Dexter.resourceFactory().getIcon("dexter","PANEL_TO_TRAY"));
290         treePanel.setBarIcon(dexter.core.Dexter.resourceFactory().getIcon("dexter","TREE_BARICON"));
291         Integer end = (Integer) javax.swing.UIManager.get("BAR_END");
292         if (end != null) 
293             treePanel.setBarEnd(end.intValue());
294         Integer beg = (Integer) javax.swing.UIManager.get("BAR_BEG");
295         if (beg != null) 
296             treePanel.setBarEnd(beg.intValue());
297         //treePanel.updateUI();
298     };
299             
300     public PluginMenu getPluginMenu() {        
301         return pluginMenu;
302     }
303     
304     
305     public class OptionAction extends javax.swing.AbstractAction {
306         
307         /**
308          * @todo Provide an Icon for Send
309          */
310         public OptionAction() {
311             super(classname);
312         }
313         
314         /** Invoked when an action occurs.
315          */
316         public void actionPerformed(java.awt.event.ActionEvent e) {
317             invokePropertyDlg();
318         }
319     }
320     
321 }