KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > enhydra > shark > corbaclient > workflowadmin > monitoring > ProcessMonitor


1 package org.enhydra.shark.corbaclient.workflowadmin.monitoring;
2
3 import java.awt.*;
4 import java.awt.event.*;
5 import java.text.SimpleDateFormat JavaDoc;
6 import java.util.Date JavaDoc;
7 import java.util.HashMap JavaDoc;
8 import java.util.Map JavaDoc;
9
10 import javax.swing.*;
11 import javax.swing.border.Border JavaDoc;
12 import javax.swing.event.TreeSelectionEvent JavaDoc;
13 import javax.swing.event.TreeSelectionListener JavaDoc;
14 import javax.swing.table.DefaultTableModel JavaDoc;
15 import javax.swing.tree.*;
16
17 import org.enhydra.shark.corbaclient.*;
18 import org.enhydra.shark.corbaclient.workflowadmin.*;
19 import org.enhydra.shark.corbaclient.workflowadmin.monitoring.actions.*;
20 import org.enhydra.shark.corbaclient.ResourceManager;
21 import org.enhydra.shark.corbaclient.SharkClient;
22 import org.omg.WorkflowModel.WfProcess;
23 import org.omg.WorkflowModel.WfProcessMgr;
24
25 /**
26  * Implements the user interface and program logic to monitor
27  * the instantiated processes.
28  *
29  * @author Sasa Bojanic
30  * @version 1.0
31  */

32 public class ProcessMonitor extends ActionPanel {
33
34    private SharkAdmin workflowAdmin;
35    private ProcessViewer processViewer;
36
37    private static Dimension tDimension=new Dimension(300,200);
38
39    private DefaultTreeModel treeModel;
40    private JTree allItems;
41    private PIMTreeSelectionListener pimSL;
42
43    private DescriptionTableModel processDescription;
44
45    Map JavaDoc actions=new HashMap JavaDoc();
46
47    public ProcessMonitor (SharkAdmin wa) {
48       super();
49       // it is important to initialize workflowAdmin and tree model
50
// before calling init method
51
this.workflowAdmin=wa;
52       this.processViewer=new ProcessViewer(wa.getFrame());
53       this.treeModel=wa.getEngineTreeModel();
54
55       super.init();
56
57
58
59       addFocusListener(new FocusListener () {
60                public void focusGained (FocusEvent fe) {
61                   pimSL.valueChanged(null);
62                }
63                public void focusLost (FocusEvent fe) {
64                   //
65
}
66             });
67    }
68
69    protected void createActions () {
70       defaultActions=new Action[] {
71          new SuspendProcess(this),
72             new ResumeProcess(this),
73             new TerminateProcess(this),
74             new AbortProcess(this),
75             new StartProcess(this),
76             new ShowHistory(this),
77             new ProcessDescription(this),
78             new ProcessVariables(this),
79             new ActivityManagement(this),
80             new WorkflowObjectProperties(this),
81             new DeleteFinishedProcesses(this),
82             new DeleteSelectedProcesses(this),
83             new CheckDeadlines(this),
84             new CheckLimits(this)
85       };
86    }
87
88    /**
89     * Create the center component of this panel. This creates a scroll-
90     * pane for the current graph variable and stores the scrollpane
91     * in the scrollPane variable.
92     */

93    protected Component createCenterComponent() {
94       Component treePanel=createTreePanel();
95       Component tablePanel=createTablePanel();
96       JSplitPane ttPane=new JSplitPane(JSplitPane.VERTICAL_SPLIT,
97                                        treePanel,tablePanel);
98       // ttPane.setBorder(BorderFactory.createEtchedBorder());
99
ttPane.setDividerLocation(350);
100
101       JSplitPane splitPane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
102                                           ttPane,processViewer);
103
104       return splitPane;
105    }
106
107    public void clear () {
108       processDescription.setData(null);
109       processViewer.displayProcess(null,null,null);
110    }
111
112    public synchronized void refresh (boolean mandatoryRefreshing) {
113       if (mandatoryRefreshing || isShowing()) {
114          pimSL.valueChanged(null);
115          processViewer.updateSelection ();
116       }
117    }
118
119    private Component createTreePanel() {
120       JPanel tp=new JPanel();
121       int emptyBorderHSize=8;
122       int emptyBorderVSize=8;
123       Border JavaDoc emptyb=BorderFactory.createEmptyBorder(emptyBorderVSize,emptyBorderHSize,
124                                                     emptyBorderVSize,emptyBorderHSize);
125       Border JavaDoc inb=BorderFactory.createMatteBorder(1,1,1,1,Color.darkGray);
126       inb=BorderFactory.createTitledBorder(inb,
127                                            ResourceManager.getLanguageDependentString("SelectProcessKey"));
128       tp.setBorder(BorderFactory.createCompoundBorder(emptyb,inb));
129       tp.setLayout(new BoxLayout(tp,BoxLayout.Y_AXIS));
130
131       // creating a tree which do not allow cell editing
132
allItems=new JTree(treeModel) {
133          public boolean isCellEditable(int row, int col) {
134             return false;
135          }
136       };
137
138       // adding mouse listener that willl perform action of arising popup menu
139
// with properties action, when right button is clicked
140
allItems.addMouseListener(new MouseAdapter() {
141                public void mousePressed(MouseEvent e) {
142                   if (e.getButton()==MouseEvent.BUTTON3) {
143                      DefaultMutableTreeNode node = (DefaultMutableTreeNode)
144                         allItems.getLastSelectedPathComponent();
145                      if ((node == null) || (node.getUserObject() instanceof String JavaDoc) ||
146                             (node.getUserObject() instanceof WfProcessMgr)) return;
147
148                      JPopupMenu jpm = new JPopupMenu();
149                      // adding Properties action
150
jpm.add(BarFactory.createMenuItem(
151                                 Utils.getUnqualifiedClassName(WorkflowObjectProperties.class),
152                                 commands));
153                      jpm.show(allItems,e.getX(),e.getY());
154                   }
155                }
156             });
157
158
159
160       // setting some tree properties
161
ToolTipManager.sharedInstance().registerComponent(allItems);
162       allItems.getSelectionModel().setSelectionMode
163          (TreeSelectionModel.SINGLE_TREE_SELECTION);
164       //allItems.setRootVisible(false);
165
allItems.setCellRenderer(new EngineTreeRenderer());
166
167       // creates panel
168
JScrollPane allItemsPane=new JScrollPane();
169       allItemsPane.setViewportView(allItems);
170       allItemsPane.setPreferredSize(tDimension);
171
172       tp.add(allItemsPane);
173       tp.add(Box.createVerticalGlue());
174
175       pimSL=new PIMTreeSelectionListener();
176       allItems.addTreeSelectionListener(pimSL);
177
178       return tp;
179    }
180
181    // setting table
182
private Component createTablePanel() {
183       JPanel tp=new JPanel();
184       int emptyBorderHSize=8;
185       int emptyBorderVSize=8;
186       Border JavaDoc emptyb=BorderFactory.createEmptyBorder(emptyBorderVSize,emptyBorderHSize,
187                                                     emptyBorderVSize,emptyBorderHSize);
188       Border JavaDoc inb=BorderFactory.createMatteBorder(1,1,1,1,Color.darkGray);
189       inb=BorderFactory.createTitledBorder(inb,
190                                            ResourceManager.getLanguageDependentString("ProcessPropertiesKey"));
191
192       tp.setBorder(BorderFactory.createCompoundBorder(emptyb,inb));
193       tp.setLayout(new BoxLayout(tp,BoxLayout.Y_AXIS));
194       JScrollPane tablePane=new JScrollPane();
195       processDescription=new DescriptionTableModel();
196       JTable t=new JTable(processDescription);
197       // setting some table properties
198
t.setColumnSelectionAllowed(false);
199       t.setRowSelectionAllowed(true);
200       t.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
201       t.getTableHeader().setReorderingAllowed(false);
202       t.setPreferredScrollableViewportSize(tDimension);
203       tablePane.setViewportView(t);
204       tp.add(tablePane);
205       tp.add(Box.createVerticalGlue());
206       return tp;
207    }
208
209
210    public SharkAdmin getWorkflowAdmin () {
211       return workflowAdmin;
212    }
213
214    public TreeSelectionListener JavaDoc getTreeSelectionListener () {
215       return pimSL;
216    }
217
218    public ProcessViewer getProcessViewer () {
219       return processViewer;
220    }
221
222    public Object JavaDoc getSelectedUserObject () {
223       DefaultMutableTreeNode dmtn=(DefaultMutableTreeNode)allItems.getLastSelectedPathComponent();
224       if (dmtn!=null) {
225          return dmtn.getUserObject();
226       } else {
227          return null;
228       }
229    }
230
231    class PIMTreeSelectionListener implements TreeSelectionListener JavaDoc {
232       public void valueChanged(TreeSelectionEvent JavaDoc e) {
233          DefaultMutableTreeNode node = (DefaultMutableTreeNode)
234             allItems.getLastSelectedPathComponent();
235
236          if (node == null) return;
237
238          if (node.getUserObject() instanceof WfProcess) {
239             try {
240                DefaultMutableTreeNode mgrN=(DefaultMutableTreeNode)node.getParent();
241                DefaultMutableTreeNode pkgN=(DefaultMutableTreeNode)mgrN.getParent();
242                processDescription.setData((WfProcess)node.getUserObject());
243                processViewer.displayProcess(
244                                               (org.enhydra.jawe.xml.elements.Package)pkgN.getUserObject(),
245                                               (WfProcessMgr)mgrN.getUserObject(),
246                                               (WfProcess)node.getUserObject());
247             } catch (Exception JavaDoc ex) {
248                System.out.println("WRONG SEL");
249                processDescription.setData(null);
250                processViewer.displayProcess(null,null,null);
251             }
252          } else {
253             processDescription.setData(null);
254             processViewer.displayProcess(null,null,null);
255          }
256       }
257    }
258
259
260    class DescriptionTableModel extends DefaultTableModel JavaDoc {
261       DescriptionTableModel () {
262          super(new String JavaDoc[] {
263                   ResourceManager.getLanguageDependentString("PropertyKey"),
264                      ResourceManager.getLanguageDependentString("ValueKey")
265                },3);
266          setValueAt(ResourceManager.getLanguageDependentString("NameKey"),0,0);
267          setValueAt(ResourceManager.getLanguageDependentString("StateKey"),1,0);
268          setValueAt(ResourceManager.getLanguageDependentString("CreatedKey"),2,0);
269       }
270
271       public boolean isCellEditable(int row, int col) {
272          return false;
273       }
274
275       public void setData (WfProcess proc) {
276          try {
277             setValueAt(proc.name(),0,1);
278             String JavaDoc state=ResourceManager.getLanguageDependentString(proc.state());
279             if (state==null) {
280                state=proc.state();
281             }
282             setValueAt(state,1,1);
283             SimpleDateFormat JavaDoc sdf=new SimpleDateFormat JavaDoc("yyyy-MM-dd HH:mm:ss");
284             long t=SharkClient.getAdminMiscUtilities().getProcessCreatedTime(proc.key());
285             String JavaDoc dte=sdf.format(new Date JavaDoc(t));
286             setValueAt(dte,2,1);
287          } catch (Exception JavaDoc ex) {
288             setValueAt("",0,1);
289             setValueAt("",1,1);
290             setValueAt("",2,1);
291          }
292       }
293
294    }
295
296    //******************** TEST
297
public static void main (String JavaDoc[] args) {
298       ProcessMonitor pm=new ProcessMonitor(null);
299       JFrame f=new JFrame();
300       f.setBackground(Color.lightGray);
301       f.getContentPane().setLayout(new BorderLayout());
302       f.getContentPane().add(pm,BorderLayout.CENTER);
303       f.pack();
304       f.setSize(1000,700);
305       f.setVisible(true);
306    }
307 }
308
Popular Tags