1 package hero.client.manager; 2 3 24 25 import hero.interfaces.Constants; 26 import hero.util.EventConstants; 27 import hero.util.BonitaClient; 28 import hero.net.UserSession.BnProjectLightValue; 29 30 import java.awt.BorderLayout ; 31 import java.awt.Color ; 32 import java.awt.Dimension ; 33 import java.awt.GridLayout ; 34 import java.awt.Toolkit ; 35 import java.awt.Component ; 36 import java.awt.event.ActionEvent ; 37 import java.awt.event.ActionListener ; 38 import java.awt.event.MouseEvent ; 39 import java.awt.event.MouseListener ; 40 import java.util.Hashtable ; 41 import java.util.Iterator ; 42 import java.util.Collection ; 43 import java.util.ArrayList ; 44 import java.util.Enumeration ; 45 46 import javax.swing.JComboBox ; 47 import javax.swing.JMenuItem ; 48 import javax.swing.JOptionPane ; 49 import javax.swing.JPanel ; 50 import javax.swing.JLabel ; 51 import javax.swing.JPopupMenu ; 52 import javax.swing.JScrollPane ; 53 import javax.swing.ImageIcon ; 54 import javax.swing.JTextField ; 55 import javax.swing.SwingConstants ; 56 import javax.swing.tree.DefaultMutableTreeNode ; 57 import javax.swing.tree.MutableTreeNode ; 58 import javax.swing.tree.TreeCellRenderer ; 59 import javax.swing.event.TreeModelListener ; 60 import javax.swing.event.TreeModelEvent ; 61 import javax.swing.tree.DefaultTreeCellRenderer ; 62 import javax.swing.tree.DefaultTreeModel ; 63 import javax.swing.tree.TreeSelectionModel ; 64 import javax.swing.JTree ; 65 import java.beans.PropertyChangeListener ; 66 import java.beans.PropertyChangeEvent ; 67 68 public class JProjectList 69 extends JPanel 70 implements PropertyChangeListener , Constants.Nd, EventConstants, MouseListener { 71 72 class MyTreeModelListener implements TreeModelListener { 73 public void treeNodesChanged(TreeModelEvent e) { 75 } 76 public void treeNodesInserted(TreeModelEvent e) { 77 } 78 public void treeNodesRemoved(TreeModelEvent e) { 79 } 80 public void treeStructureChanged(TreeModelEvent e) { 81 } 82 } 83 84 protected static class CustomDefaultRenderer 85 extends DefaultTreeCellRenderer { 86 public Component getTreeCellRendererComponent( 87 JTree tree, 88 Object value, 89 boolean selected, 90 boolean expanded, 91 boolean leaf, 92 int row, 93 boolean hasFocus) { 94 Component c = super.getTreeCellRendererComponent( 96 tree, value, selected, 97 expanded, leaf, row, 98 hasFocus); 99 100 if (leaf) { 101 if (leafForeground != null) { 104 c.setForeground(leafForeground); 105 } 106 } 107 108 return c; 109 } 110 public void setLeafForeground(Color color) { 111 this.leafForeground = color; 112 } 113 114 private Color leafForeground; 115 } 116 117 118 static java.util.ResourceBundle resource = java.util.ResourceBundle.getBundle("resources.Traduction"); 119 120 private JScrollPane jsppl; 121 private JTree tree; 122 private MListener ml; 123 private DefaultMutableTreeNode top; 124 private DefaultTreeModel treeModel; 125 public final static String SELECTED = "selected"; 126 public final static String PROJECTCLOSE = "close"; 127 public Hashtable projects = new Hashtable (); 128 private hero.client.grapheditor.Frame frame; 129 private BonitaClient soapclient; 130 private String newStatus=Constants.Pj.ACTIVE; 131 private Collection actualProjects; 132 public final static String imageBase = "images/"; 133 public final static ImageIcon icon = new ImageIcon (Thread.currentThread().getContextClassLoader().getResource(imageBase + "icon.png")); 134 private Toolkit toolkit = Toolkit.getDefaultToolkit(); 135 136 137 public JProjectList(BonitaClient soapclient,MListener ml,Collection initialProjects) { 138 try { 139 this.actualProjects = initialProjects; 140 ml.addEventProjectListener(this); 141 142 this.add(new JLabel (resource.getString("jprojectlist.project")), BorderLayout.NORTH); 143 this.soapclient = soapclient; 144 145 top = new DefaultMutableTreeNode (resource.getString("jprojectlist.project")); 146 treeModel = new DefaultTreeModel (top); 147 treeModel.addTreeModelListener(new MyTreeModelListener()); 148 149 tree = new JTree (treeModel); 150 tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); 151 152 TreeCellRenderer cr = tree.getCellRenderer(); 153 CustomDefaultRenderer dtcr = new CustomDefaultRenderer(); 154 tree.setCellRenderer(dtcr); 155 dtcr.setBackgroundNonSelectionColor(Color.white); 156 dtcr.setTextSelectionColor(Color.white); 157 dtcr.setTextNonSelectionColor(Color.black); 158 dtcr.setLeafForeground(Color.blue); 159 160 javax.swing.Icon leafIcon = new ImageIcon ("images/ast.gif"); 162 dtcr.setLeafIcon(leafIcon); 163 dtcr.setClosedIcon(leafIcon); 164 dtcr.setOpenIcon(leafIcon); 165 166 tree.setRowHeight(0); 167 168 tree.setBackground(Color.white); 170 171 this.createNodes(actualProjects); 172 jsppl = new JScrollPane (tree); 173 174 this.setLayout(new BorderLayout ()); 175 this.setBackground(new Color (177,177,251)); 176 this.add(jsppl, BorderLayout.CENTER); 177 tree.addMouseListener(this); 178 tree.setVisibleRowCount(10); 179 this.setVisible(true); 180 181 182 } catch (Exception e) {} 183 } 184 185 public void newProject() { 186 JPanel jp = new JPanel (); 187 ArrayList types = new ArrayList (); 188 types.add("Model"); 189 types.add("Cooperative"); 190 JComboBox processTypes = new JComboBox (types.toArray()); 191 processTypes.setSelectedItem("Model"); 192 193 JTextField projectName = new JTextField (); 194 jp.add(new JLabel (resource.getString("wfwindowsmanager.newproj"), SwingConstants.LEFT)); 195 jp.add(projectName); 196 197 jp.setLayout(new GridLayout (0, 2)); 198 jp.add(new JLabel (resource.getString("wfwindowsmanager.choosetype"), SwingConstants.LEFT)); 199 jp.add(processTypes); 200 201 int cloneOption =JOptionPane.showConfirmDialog(null,jp,resource.getString("wfwindowsmanager.newproj"),JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE, icon); 202 if (cloneOption != JOptionPane.CANCEL_OPTION) { 203 while ((projectName.getText()).equals("") 204 && cloneOption != JOptionPane.CANCEL_OPTION) { 205 JOptionPane.showMessageDialog(null,resource.getString("wfwindowsmanager.enterproj"),resource.getString("wfwindowsmanager.newproj"),JOptionPane.INFORMATION_MESSAGE, icon); 206 cloneOption =JOptionPane.showConfirmDialog(null,jp,resource.getString("wfwindowsmanager.newproj"),JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE, icon); 207 } 208 if (cloneOption != JOptionPane.CANCEL_OPTION) { 209 try { 210 if (exists(projectName.getText())) { 211 JOptionPane.showMessageDialog(null,resource.getString("jprojectlist.exist"),resource.getString("jprojectlist.name"), JOptionPane.INFORMATION_MESSAGE,icon); 212 } else { 213 if (processTypes.getSelectedItem().equals("Model")) 214 soapclient.createModel(projectName.getText()); 215 else 216 soapclient.createProject(projectName.getText()); 217 } 218 } catch (Exception ex) {ex.printStackTrace(); 219 JOptionPane.showMessageDialog(null,resource.getString("jprojectlist.exist"),resource.getString("jprojectlist.new"),JOptionPane.INFORMATION_MESSAGE,icon); 220 } 221 } 222 } 223 } 224 225 private boolean exists(String project) { 226 try { 227 Object [] elems = this.actualProjects.toArray(); 228 for (int i = 0; i < elems.length; i++) { 229 if (((String ) elems[i]).equalsIgnoreCase(project)) 230 return true; 231 } 232 return false; 233 } catch (Exception e) { 234 e.printStackTrace(); 235 } 236 return true; 237 } 238 239 240 public void mouseReleased(MouseEvent e) { 241 try { 242 if (!tree.isSelectionEmpty()) { 243 DefaultMutableTreeNode node = (DefaultMutableTreeNode )tree.getLastSelectedPathComponent(); 244 if ((e.getModifiers() & java.awt.event.InputEvent.BUTTON3_MASK) 245 != 0) { 246 JPopupMenu menu = new JPopupMenu (); 247 PopupMenu(menu); 248 249 Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); 250 Dimension size = menu.getPreferredSize(); 251 252 254 int x = e.getX(); 255 int y = e.getY(); 256 257 menu.show(this,e.getX() - (int) jsppl.getViewport().getViewPosition().getX(),e.getY()- (int) jsppl.getViewport().getViewPosition().getY()); 258 } else if (e.getClickCount() == 1 && !node.isRoot()) { 259 String pl = node.getUserObject().toString(); 260 firePropertyChange(SELECTED, "", pl); 261 } else if (e.getClickCount() == 2 && !node.isRoot()) { 262 try { 263 if (!projects.containsKey(node.getUserObject().toString())) { 264 frame = new hero.client.grapheditor.Frame(node.getUserObject().toString(),soapclient, false); 265 frame.setSize(new Dimension (500, 400)); 266 frame.setVisible(true); 267 projects.put(node.getUserObject().toString(),frame); 268 frame.addPropertyChangeListener(PROJECTCLOSE, this); 269 } else { 270 frame =(hero.client.grapheditor.Frame) projects.get(node.getUserObject().toString()); 271 frame.requestFocus(); 272 } 273 } catch (Exception ce) { 274 } 276 } 277 } 278 } catch (Exception e1){ 279 JOptionPane.showMessageDialog(null,resource.getString("jprojectlist.error"),resource.getString("jprojectlist.interror"),JOptionPane.INFORMATION_MESSAGE,icon); 280 } 281 } 282 283 public String getProjectType (String projectName) { 284 try { 285 soapclient.initProject(projectName); 286 return (soapclient.getType()); 287 }catch (Exception e){return null;} 288 } 289 290 public String getProjectStatus (String projectName) { 291 try{ 292 soapclient.initProject(projectName); 293 return (soapclient.getStatus()); 294 }catch (Exception e){return null;} 295 296 } 297 298 public void PopupMenu(JPopupMenu menu) { 299 JMenuItem mi; 300 ClassLoader cl = this.getClass().getClassLoader(); 301 302 if (!((DefaultMutableTreeNode )tree.getLastSelectedPathComponent()).isRoot()) 303 { 304 try { 305 DefaultMutableTreeNode node = (DefaultMutableTreeNode )tree.getLastSelectedPathComponent(); 306 String status = this.getProjectStatus(node.getUserObject().toString()); 307 if (status != null) 308 { 309 String message =""; 310 if (status.equals(Constants.Pj.ACTIVE)) 311 { 312 message = resource.getString("jprojectlist.hideproject"); 313 newStatus = Constants.Pj.HIDDEN; 314 } 315 else 316 { 317 message = resource.getString("jprojectlist.activeproject"); 318 newStatus = Constants.Pj.ACTIVE; 319 } 320 321 mi = (JMenuItem ) menu.add(new JMenuItem (message)); 322 mi.addActionListener(new ActionListener () { 323 public void actionPerformed(ActionEvent e) { 324 DefaultMutableTreeNode node = (DefaultMutableTreeNode )tree.getLastSelectedPathComponent(); 325 setStatus(node.getUserObject().toString()); 326 } 327 }); 328 } 329 }catch (Exception statusEx) {statusEx.printStackTrace();} 330 331 mi = (JMenuItem ) menu.add(new JMenuItem (resource.getString("jprojectlist.clone"))); 332 mi.addActionListener(new ActionListener () { 333 public void actionPerformed(ActionEvent e) { 334 DefaultMutableTreeNode node = (DefaultMutableTreeNode )tree.getLastSelectedPathComponent(); 335 cloneProject(node.getUserObject().toString()); 336 } 337 }); 338 339 mi = (JMenuItem ) menu.add(new JMenuItem (resource.getString("jprojectlist.inst"))); 340 mi.addActionListener(new ActionListener () { 341 public void actionPerformed(ActionEvent e) { 342 DefaultMutableTreeNode node = (DefaultMutableTreeNode )tree.getLastSelectedPathComponent(); 343 instantiateProject(node.getUserObject().toString()); 344 } 345 }); 346 347 mi = (JMenuItem ) menu.add(new JMenuItem (resource.getString("jprojectlist.details"))); 348 mi.addActionListener(new ActionListener () { 349 public void actionPerformed(ActionEvent e) { 350 DefaultMutableTreeNode node = (DefaultMutableTreeNode )tree.getLastSelectedPathComponent(); 351 BrowserControl.displayURL(java.lang.System.getProperty("bonita.host") 352 + "/bonita/protected/Action.jsp?projectname=" 353 + node.getUserObject().toString()); 354 } 355 }); 356 357 mi = (JMenuItem ) menu.add(new JMenuItem (resource.getString("jprojectlist.terminate"))); 358 mi.addActionListener(new ActionListener () { 359 public void actionPerformed(ActionEvent e) { 360 DefaultMutableTreeNode node = (DefaultMutableTreeNode )tree.getLastSelectedPathComponent(); 361 terminateProject(node.getUserObject().toString()); 362 } 363 }); 364 365 mi = (JMenuItem ) menu.add(new JMenuItem (resource.getString("jprojectlist.delete"))); 366 mi.addActionListener(new ActionListener () { 367 public void actionPerformed(ActionEvent e) { 368 DefaultMutableTreeNode node = (DefaultMutableTreeNode )tree.getLastSelectedPathComponent(); 369 deleteProject(node.getUserObject().toString()); 370 } 371 }); 372 } 373 } 374 375 public void deleteProject(String project) { 376 try { 377 int option = JOptionPane.showConfirmDialog(null,resource.getString("jprojectlist.deleteproject"),resource.getString("jprojectlist.delete"),JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE,icon); 378 if (option == JOptionPane.OK_OPTION) { 379 if (soapclient.deleteProject(project) == true) 380 JOptionPane.showMessageDialog(null,resource.getString("jprojectlist.proj") + project + " " +resource.getString("jprojectlist.remove"),resource.getString("jprojectlist.delete"),JOptionPane.INFORMATION_MESSAGE,icon); 381 } 382 } catch (Exception e) { 383 JOptionPane.showMessageDialog(null,e.getMessage(), resource.getString("jprojectlist.delete"),JOptionPane.INFORMATION_MESSAGE,icon); 384 } 385 } 386 387 public void cloneProject(String project) { 388 try { 389 String newProject = (String )JOptionPane.showInputDialog(null,resource.getString("jprojectlist.name"),resource.getString("jprojectlist.clone"),JOptionPane.QUESTION_MESSAGE,icon,null,null); 390 391 while (newProject != null && newProject.equals("")) { 392 JOptionPane.showMessageDialog(null,resource.getString("jprojectlist.enternew"),resource.getString("jprojectlist.clone"),JOptionPane.INFORMATION_MESSAGE,icon); 393 newProject =(String ) JOptionPane.showInputDialog(null,resource.getString("jprojectlist.name"),resource.getString("jprojectlist.clone"),JOptionPane.INFORMATION_MESSAGE,icon,null,null); 394 } 395 if (newProject != null) 396 soapclient.cloneProject(project, newProject); 397 398 } catch (Exception e) { 399 JOptionPane.showMessageDialog(null,resource.getString("jprojectlist.exist"),resource.getString("jprojectlist.clone"),JOptionPane.INFORMATION_MESSAGE,icon); 400 } 401 } 402 public void setStatus(String project) { 403 try { 404 String type = this.getProjectType(project); 405 if (project.matches(".*_instance.*")) 406 soapclient.initProject(project); 407 else 408 { 409 if (type.equals(Constants.Pj.MODEL)) 410 soapclient.initModel(project); 411 else 412 soapclient.initProject(project); 413 } 414 soapclient.setStatus(newStatus); 415 } catch (Exception e) { 416 JOptionPane.showMessageDialog(null,resource.getString("jprojectlist.status"),resource.getString("jprojectlist.clone"),JOptionPane.INFORMATION_MESSAGE,icon); 417 } 418 } 419 public void instantiateProject(String project) { 420 try { 421 soapclient.instantiateProject(project); 422 } catch (Exception e) { 423 JOptionPane.showMessageDialog(null,resource.getString("jprojectlist.inst.error")+", "+e.getMessage(),resource.getString("jprojectlist.inst"),JOptionPane.INFORMATION_MESSAGE,icon); 424 } 425 } 426 427 public void terminateProject(String project) { 428 try { 429 soapclient.terminateProject(project); 430 } catch (Exception e) { 431 JOptionPane.showMessageDialog(null,resource.getString("jprojectlist.term.error") +": "+ e.getMessage(),resource.getString("jprojectlist.inst"),JOptionPane.INFORMATION_MESSAGE,icon); 432 } 433 } 434 435 public void changeEvent(Object [] e, String projectName) { 436 DefaultMutableTreeNode node = this.findParent(projectName); 437 if (node != null) 438 { 439 treeModel.removeNodeFromParent(node); 441 this.actualProjects.remove(projectName); 442 } 443 } 444 445 public void addElement(String projectName) { 446 if (!exists(projectName)){ 447 this.addObject(projectName); 448 } 449 } 450 451 public void addObject(String child) { 452 int startRow = 0; 453 String prefix = null; 454 if (child.matches(".*_instance.*")) 456 prefix = child.substring(0,child.indexOf("_instance")); 457 else 458 prefix = resource.getString("jprojectlist.project"); 459 DefaultMutableTreeNode nd = this.findParent(prefix); 460 MutableTreeNode node; 461 if (nd !=null) 462 node = nd; 463 else 464 { 465 treeModel.insertNodeInto(new DefaultMutableTreeNode (this.getModel(child)), top, top.getChildCount()); 466 actualProjects.add(this.getModel(child)); 467 node = this.findParent(prefix); 468 } 469 470 MutableTreeNode newNode = new DefaultMutableTreeNode (child); 472 473 treeModel.insertNodeInto(newNode, node, node.getChildCount()); 475 actualProjects.add(child); 476 } 477 478 public void propertyChange(PropertyChangeEvent e) { 479 try { 480 if (e.getPropertyName().equals(PROJECTCLOSE)) { 481 projects.remove(e.getNewValue()); 482 } 483 } catch (Exception e1) { 484 e1.printStackTrace(); 485 } 486 } 487 488 private void createNodes(Collection iniProj) throws Exception { 489 DefaultMutableTreeNode project = null; 490 DefaultMutableTreeNode instance = null; 491 492 Collection instances = soapclient.getInstances(); 493 Iterator inst = instances.iterator(); 494 while (inst.hasNext()) 495 { 496 String instName = (String )inst.next(); 497 if (!iniProj.contains(this.getModel(instName))) 498 iniProj.add(this.getModel(instName)); 499 } 500 501 Iterator i = iniProj.iterator(); 502 while (i.hasNext()) 503 { 504 String projectName = (String )i.next(); 505 project = new DefaultMutableTreeNode (projectName); 506 top.add(project); 507 } 508 509 Iterator pInst = instances.iterator(); 510 while (pInst.hasNext()) 511 { 512 String instName = (String )pInst.next(); 513 (this.findParent(this.getModel(instName))).add(new DefaultMutableTreeNode (instName)); 514 } 515 this.actualProjects.addAll(instances); 516 } 517 518 private DefaultMutableTreeNode findParent (String parent) { 519 DefaultMutableTreeNode root = (DefaultMutableTreeNode )treeModel.getRoot(); 520 DefaultMutableTreeNode node = null; 521 if (root != null) 522 for (Enumeration e = root.breadthFirstEnumeration(); e.hasMoreElements();){ 523 DefaultMutableTreeNode current = (DefaultMutableTreeNode )e.nextElement(); 524 if (parent.equals(current.getUserObject())) 525 { 526 node = current; 527 break; 528 } 529 }if (node != null){ return node; 531 } 532 return null; 533 } 534 535 private String getModel(String instanceName) { 537 int i = instanceName.indexOf("_instance"); 538 return (instanceName.substring(0, i)); 539 } 540 541 public Collection getActualProjects () 542 { 543 return this.actualProjects; 544 } 545 546 public void mousePressed(MouseEvent e) { 548 } 549 public void mouseEntered(MouseEvent e) { 550 } 551 public void mouseExited(MouseEvent e) { 552 } 553 public void mouseClicked(MouseEvent e) { 554 } 555 556 } 557 | Popular Tags |