1 package org.enhydra.shark.corbaclient.workflowadmin.monitoring; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 import java.text.SimpleDateFormat ; 6 import java.util.Date ; 7 import java.util.HashMap ; 8 import java.util.Map ; 9 10 import javax.swing.*; 11 import javax.swing.border.Border ; 12 import javax.swing.event.TreeSelectionEvent ; 13 import javax.swing.event.TreeSelectionListener ; 14 import javax.swing.table.DefaultTableModel ; 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 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 actions=new HashMap (); 46 47 public ProcessMonitor (SharkAdmin wa) { 48 super(); 49 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 } 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 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.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 emptyb=BorderFactory.createEmptyBorder(emptyBorderVSize,emptyBorderHSize, 124 emptyBorderVSize,emptyBorderHSize); 125 Border 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 allItems=new JTree(treeModel) { 133 public boolean isCellEditable(int row, int col) { 134 return false; 135 } 136 }; 137 138 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 ) || 146 (node.getUserObject() instanceof WfProcessMgr)) return; 147 148 JPopupMenu jpm = new JPopupMenu(); 149 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 ToolTipManager.sharedInstance().registerComponent(allItems); 162 allItems.getSelectionModel().setSelectionMode 163 (TreeSelectionModel.SINGLE_TREE_SELECTION); 164 allItems.setCellRenderer(new EngineTreeRenderer()); 166 167 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 private Component createTablePanel() { 183 JPanel tp=new JPanel(); 184 int emptyBorderHSize=8; 185 int emptyBorderVSize=8; 186 Border emptyb=BorderFactory.createEmptyBorder(emptyBorderVSize,emptyBorderHSize, 187 emptyBorderVSize,emptyBorderHSize); 188 Border 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 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 getTreeSelectionListener () { 215 return pimSL; 216 } 217 218 public ProcessViewer getProcessViewer () { 219 return processViewer; 220 } 221 222 public Object 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 { 232 public void valueChanged(TreeSelectionEvent 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 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 { 261 DescriptionTableModel () { 262 super(new String [] { 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 state=ResourceManager.getLanguageDependentString(proc.state()); 279 if (state==null) { 280 state=proc.state(); 281 } 282 setValueAt(state,1,1); 283 SimpleDateFormat sdf=new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss"); 284 long t=SharkClient.getAdminMiscUtilities().getProcessCreatedTime(proc.key()); 285 String dte=sdf.format(new Date (t)); 286 setValueAt(dte,2,1); 287 } catch (Exception ex) { 288 setValueAt("",0,1); 289 setValueAt("",1,1); 290 setValueAt("",2,1); 291 } 292 } 293 294 } 295 296 public static void main (String [] 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 |