mev-4.0.01/source/org/tigr/microarray/mev/script/scriptGUI/ScriptTreeViewer.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2004, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4  */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * ScriptTreeViewer.java
2 26 Feb 07 jari 7  *
2 26 Feb 07 jari 8  * Created on February 28, 2004, 4:36 PM
2 26 Feb 07 jari 9  */
2 26 Feb 07 jari 10
2 26 Feb 07 jari 11 package org.tigr.microarray.mev.script.scriptGUI;
2 26 Feb 07 jari 12
2 26 Feb 07 jari 13 import java.awt.event.ActionListener;
2 26 Feb 07 jari 14 import java.awt.event.MouseAdapter;
2 26 Feb 07 jari 15 import java.awt.event.MouseEvent;
2 26 Feb 07 jari 16 import java.io.Serializable;
2 26 Feb 07 jari 17
2 26 Feb 07 jari 18 import javax.swing.JComponent;
2 26 Feb 07 jari 19 import javax.swing.JMenuItem;
2 26 Feb 07 jari 20 import javax.swing.JPopupMenu;
2 26 Feb 07 jari 21
2 26 Feb 07 jari 22 import org.tigr.microarray.mev.cluster.gui.IFramework;
2 26 Feb 07 jari 23 import org.tigr.microarray.mev.cluster.gui.impl.ViewerAdapter;
2 26 Feb 07 jari 24 import org.tigr.microarray.mev.script.ScriptDocument;
2 26 Feb 07 jari 25 import org.tigr.microarray.mev.script.ScriptManager;
2 26 Feb 07 jari 26 import org.tigr.microarray.mev.script.event.ScriptDocumentEvent;
2 26 Feb 07 jari 27 import org.tigr.microarray.mev.script.event.ScriptEventListener;
2 26 Feb 07 jari 28 import org.tigr.microarray.mev.script.util.AlgorithmNode;
2 26 Feb 07 jari 29 import org.tigr.microarray.mev.script.util.AlgorithmSet;
2 26 Feb 07 jari 30 import org.tigr.microarray.mev.script.util.DataNode;
2 26 Feb 07 jari 31 import org.tigr.microarray.mev.script.util.ScriptConstants;
2 26 Feb 07 jari 32 import org.tigr.microarray.mev.script.util.ScriptNode;
2 26 Feb 07 jari 33 import org.tigr.microarray.mev.script.util.ScriptTree;
2 26 Feb 07 jari 34
2 26 Feb 07 jari 35
2 26 Feb 07 jari 36 /** ScriptTreeViewer renders the script in an intuitive tree where
2 26 Feb 07 jari 37  * data nodes and algorithm nodes are identified.
2 26 Feb 07 jari 38  * @author braisted
2 26 Feb 07 jari 39  */
2 26 Feb 07 jari 40 public class ScriptTreeViewer extends ViewerAdapter implements Serializable {
2 26 Feb 07 jari 41     public static final long serialVersionUID = 1000102010301040001L;
2 26 Feb 07 jari 42     
2 26 Feb 07 jari 43     /** Data for the tree rendering, scriptTree
2 26 Feb 07 jari 44      */
2 26 Feb 07 jari 45     ScriptTree scriptTree;
2 26 Feb 07 jari 46     
2 26 Feb 07 jari 47     JPopupMenu dataPopup;
2 26 Feb 07 jari 48     JPopupMenu algPopup;
2 26 Feb 07 jari 49     JPopupMenu defaultMenu;
2 26 Feb 07 jari 50     
2 26 Feb 07 jari 51     ScriptTreeListener listener;
2 26 Feb 07 jari 52     
2 26 Feb 07 jari 53     ScriptManager manager;
2 26 Feb 07 jari 54     
2 26 Feb 07 jari 55     private boolean isAlgSetViewer = false;
2 26 Feb 07 jari 56     private DataNode algSetRoot;
2 26 Feb 07 jari 57     
2 26 Feb 07 jari 58     boolean selected = false;
2 26 Feb 07 jari 59     /** Creates a new instance of ScriptTreeViewer
2 26 Feb 07 jari 60      * @param tree ScriptTree data structure
2 26 Feb 07 jari 61      * @param manager script manager to support mev-script interactions.
2 26 Feb 07 jari 62      */
2 26 Feb 07 jari 63     public ScriptTreeViewer(ScriptTree tree, ScriptManager manager) {
2 26 Feb 07 jari 64         scriptTree = tree;
2 26 Feb 07 jari 65         this.manager = manager;
2 26 Feb 07 jari 66         listener = new ScriptTreeListener();
2 26 Feb 07 jari 67         scriptTree.addMouseListener(listener);
2 26 Feb 07 jari 68         scriptTree.getDocument().addDocumentListener(new ScriptListener());
2 26 Feb 07 jari 69         //scriptTree.setBackground(new Color(255,255,220));
2 26 Feb 07 jari 70         dataPopup = createPopupMenu(listener, "data");
2 26 Feb 07 jari 71         algPopup = createPopupMenu(listener, "alg");
2 26 Feb 07 jari 72         defaultMenu = createPopupMenu(listener, "default");
2 26 Feb 07 jari 73         isAlgSetViewer = false;
2 26 Feb 07 jari 74     }
2 26 Feb 07 jari 75     
2 26 Feb 07 jari 76     
2 26 Feb 07 jari 77     /** Creates a new instance of ScriptTreeViewer
2 26 Feb 07 jari 78      * @param tree ScriptTree data structure
2 26 Feb 07 jari 79      * @param manager script manager to support mev-script interactions.
2 26 Feb 07 jari 80      */
2 26 Feb 07 jari 81     public ScriptTreeViewer(ScriptTree tree, ScriptManager manager, DataNode algSetRoot) {
2 26 Feb 07 jari 82         scriptTree = tree;
2 26 Feb 07 jari 83         this.manager = manager;
2 26 Feb 07 jari 84         //listener = new ScriptTreeListener();
2 26 Feb 07 jari 85         //scriptTree.addMouseListener(listener);
2 26 Feb 07 jari 86         //scriptTree.getDocument().addDocumentListener(new ScriptListener());
2 26 Feb 07 jari 87         
2 26 Feb 07 jari 88         this.algSetRoot = findLocalAlgSetRoot(algSetRoot.toString());
2 26 Feb 07 jari 89         
2 26 Feb 07 jari 90         if(this.algSetRoot != null){
2 26 Feb 07 jari 91             scriptTree.highlightAlgSet(this.algSetRoot);
2 26 Feb 07 jari 92             isAlgSetViewer = true;
2 26 Feb 07 jari 93         } else {
2 26 Feb 07 jari 94             isAlgSetViewer = false;
2 26 Feb 07 jari 95         }
2 26 Feb 07 jari 96         
2 26 Feb 07 jari 97         //dataPopup = createPopupMenu(listener, "data");
2 26 Feb 07 jari 98         //algPopup = createPopupMenu(listener, "alg");
2 26 Feb 07 jari 99         //defaultMenu = createPopupMenu(listener, "default");
2 26 Feb 07 jari 100         
2 26 Feb 07 jari 101         
2 26 Feb 07 jari 102     }
2 26 Feb 07 jari 103     
2 26 Feb 07 jari 104     private DataNode findLocalAlgSetRoot(String rootName) {
2 26 Feb 07 jari 105         AlgorithmSet [] sets = scriptTree.getAlgorithmSets();
2 26 Feb 07 jari 106         DataNode dataNode = null;
2 26 Feb 07 jari 107         for(int i = 0; i < sets.length; i++) {
2 26 Feb 07 jari 108             if(sets[i].getDataNode().toString().equals(rootName)) {
2 26 Feb 07 jari 109                 dataNode = sets[i].getDataNode();
2 26 Feb 07 jari 110                 break;
2 26 Feb 07 jari 111             }
2 26 Feb 07 jari 112         }
2 26 Feb 07 jari 113         return dataNode;
2 26 Feb 07 jari 114     }
2 26 Feb 07 jari 115     
2 26 Feb 07 jari 116     
2 26 Feb 07 jari 117     public void onSelected(IFramework framework) {
2 26 Feb 07 jari 118         selected = true;
2 26 Feb 07 jari 119         
2 26 Feb 07 jari 120         //sets it up to highlight an algorithm set
2 26 Feb 07 jari 121         if(isAlgSetViewer)
2 26 Feb 07 jari 122             scriptTree.highlightAlgSet(algSetRoot);
2 26 Feb 07 jari 123         else
2 26 Feb 07 jari 124             scriptTree.clearHighlights();
2 26 Feb 07 jari 125         
2 26 Feb 07 jari 126         scriptTree.validate();
2 26 Feb 07 jari 127     }
2 26 Feb 07 jari 128     
2 26 Feb 07 jari 129     public void onClosed() {
2 26 Feb 07 jari 130         selected = false;
2 26 Feb 07 jari 131     }
2 26 Feb 07 jari 132     
2 26 Feb 07 jari 133     public JComponent getContentComponent() {
2 26 Feb 07 jari 134         return scriptTree;
2 26 Feb 07 jari 135     }
2 26 Feb 07 jari 136     
2 26 Feb 07 jari 137     public JPopupMenu createPopupMenu(ScriptTreeListener listener, String type) {
2 26 Feb 07 jari 138         JPopupMenu menu = new JPopupMenu();
2 26 Feb 07 jari 139         JMenuItem item;
2 26 Feb 07 jari 140         if(type.equals("alg")){
2 26 Feb 07 jari 141             //Select Algorithm
2 26 Feb 07 jari 142             item = new JMenuItem("Change Algorithm");
2 26 Feb 07 jari 143             item.setActionCommand("replace-algorithm-cmd");
2 26 Feb 07 jari 144             item.addActionListener(listener);
2 26 Feb 07 jari 145             //    menu.add(item);
2 26 Feb 07 jari 146             //Delete Algorithm
2 26 Feb 07 jari 147             item = new JMenuItem("Delete Algorithm");
2 26 Feb 07 jari 148             item.setActionCommand("delete-algorithm-cmd");
2 26 Feb 07 jari 149             item.addActionListener(listener);
2 26 Feb 07 jari 150             menu.add(item);
2 26 Feb 07 jari 151             //Modify Parameters
2 26 Feb 07 jari 152             item = new JMenuItem("Modify Paramaters");
2 26 Feb 07 jari 153             item.setActionCommand("modify-algorithm-cmd");
2 26 Feb 07 jari 154             item.addActionListener(listener);
2 26 Feb 07 jari 155             //    menu.add(item);
2 26 Feb 07 jari 156             
2 26 Feb 07 jari 157             menu.addSeparator();
2 26 Feb 07 jari 158             
2 26 Feb 07 jari 159             //view xml
2 26 Feb 07 jari 160             item = new JMenuItem("View XML Section");
2 26 Feb 07 jari 161             item.setActionCommand("view-xml-cmd");
2 26 Feb 07 jari 162             item.addActionListener(listener);
2 26 Feb 07 jari 163             menu.add(item);
2 26 Feb 07 jari 164             menu.addSeparator();
2 26 Feb 07 jari 165         } else {
2 26 Feb 07 jari 166             // Add algorithm
2 26 Feb 07 jari 167             item = new JMenuItem("Add Algorithm Node");
2 26 Feb 07 jari 168             item.setActionCommand("add-new-algorithm-cmd");
2 26 Feb 07 jari 169             item.addActionListener(listener);
2 26 Feb 07 jari 170             menu.add(item);
2 26 Feb 07 jari 171             menu.addSeparator();
2 26 Feb 07 jari 172         }
2 26 Feb 07 jari 173         
2 26 Feb 07 jari 174         item = new JMenuItem("Execute Script");
2 26 Feb 07 jari 175         item.setActionCommand("execute-script-cmd");
2 26 Feb 07 jari 176         item.addActionListener(listener);
2 26 Feb 07 jari 177         menu.add(item);
2 26 Feb 07 jari 178         menu.addSeparator();
2 26 Feb 07 jari 179         
2 26 Feb 07 jari 180         item = new JMenuItem("Save Script");
2 26 Feb 07 jari 181         item.setActionCommand("save-script-cmd");
2 26 Feb 07 jari 182         item.addActionListener(listener);
2 26 Feb 07 jari 183         menu.add(item);
2 26 Feb 07 jari 184         
2 26 Feb 07 jari 185         return menu;
2 26 Feb 07 jari 186     }
2 26 Feb 07 jari 187     
2 26 Feb 07 jari 188     
2 26 Feb 07 jari 189     public class ScriptTreeListener extends MouseAdapter implements ActionListener {
2 26 Feb 07 jari 190         
2 26 Feb 07 jari 191         ScriptNode node;
2 26 Feb 07 jari 192         
2 26 Feb 07 jari 193         public void mouseClicked(MouseEvent me) {
2 26 Feb 07 jari 194             if(isAlgSetViewer)
2 26 Feb 07 jari 195                 return;
2 26 Feb 07 jari 196             if(me.isPopupTrigger()){
2 26 Feb 07 jari 197                 node = scriptTree.getSelectedNode();
2 26 Feb 07 jari 198                 if(node == null) {
2 26 Feb 07 jari 199                     defaultMenu.show(scriptTree, me.getX(), me.getY());
2 26 Feb 07 jari 200                 } else if(node instanceof AlgorithmNode) {
2 26 Feb 07 jari 201                     algPopup.show(scriptTree, me.getX(), me.getY());
2 26 Feb 07 jari 202                 } else {
2 26 Feb 07 jari 203                     ScriptNode parent = (ScriptNode)(node.getParent());
2 26 Feb 07 jari 204                     if(parent != null) {
2 26 Feb 07 jari 205                         if(((AlgorithmNode)parent).getAlgorithmType().equals(ScriptConstants.ALGORITHM_TYPE_VISUALIZATION)) {
2 26 Feb 07 jari 206                             dataPopup.getComponent(0).setEnabled(false);
2 26 Feb 07 jari 207                         } else
2 26 Feb 07 jari 208                             dataPopup.getComponent(0).setEnabled(true);
2 26 Feb 07 jari 209                     }
2 26 Feb 07 jari 210                     dataPopup.show(scriptTree, me.getX(), me.getY());
2 26 Feb 07 jari 211                 }
2 26 Feb 07 jari 212             }
2 26 Feb 07 jari 213         }
2 26 Feb 07 jari 214         
2 26 Feb 07 jari 215         
2 26 Feb 07 jari 216         public void mouseReleased(MouseEvent me) {
2 26 Feb 07 jari 217             if(isAlgSetViewer)
2 26 Feb 07 jari 218                 return;
2 26 Feb 07 jari 219             if(me.isPopupTrigger()){
2 26 Feb 07 jari 220                 node = scriptTree.getSelectedNode();
2 26 Feb 07 jari 221                 if(node == null)
2 26 Feb 07 jari 222                     return;
2 26 Feb 07 jari 223                 if(node instanceof AlgorithmNode) {
2 26 Feb 07 jari 224                     algPopup.show(scriptTree, me.getX(), me.getY());
2 26 Feb 07 jari 225                 }
2 26 Feb 07 jari 226                 else {
2 26 Feb 07 jari 227                     ScriptNode parent = (ScriptNode)(node.getParent());
2 26 Feb 07 jari 228                     if(parent != null) {
2 26 Feb 07 jari 229                         if(((AlgorithmNode)parent).getAlgorithmType().equals(ScriptConstants.ALGORITHM_TYPE_VISUALIZATION)) {
2 26 Feb 07 jari 230                             dataPopup.getComponent(0).setEnabled(false);
2 26 Feb 07 jari 231                         } else
2 26 Feb 07 jari 232                             dataPopup.getComponent(0).setEnabled(true);
2 26 Feb 07 jari 233                     }
2 26 Feb 07 jari 234                     dataPopup.show(scriptTree, me.getX(), me.getY());
2 26 Feb 07 jari 235                 }
2 26 Feb 07 jari 236             }            
2 26 Feb 07 jari 237         }
2 26 Feb 07 jari 238
2 26 Feb 07 jari 239         
2 26 Feb 07 jari 240         public void mousePressed(MouseEvent me) {
2 26 Feb 07 jari 241                         if(isAlgSetViewer)
2 26 Feb 07 jari 242                 return;
2 26 Feb 07 jari 243             if(me.isPopupTrigger()){
2 26 Feb 07 jari 244                 node = scriptTree.getSelectedNode();
2 26 Feb 07 jari 245                 if(node == null)
2 26 Feb 07 jari 246                     return;
2 26 Feb 07 jari 247                 if(node instanceof AlgorithmNode) {
2 26 Feb 07 jari 248                     algPopup.show(scriptTree, me.getX(), me.getY());
2 26 Feb 07 jari 249                 }
2 26 Feb 07 jari 250                 else {
2 26 Feb 07 jari 251                     ScriptNode parent = (ScriptNode)(node.getParent());
2 26 Feb 07 jari 252                     if(parent != null) {
2 26 Feb 07 jari 253                         if(((AlgorithmNode)parent).getAlgorithmType().equals(ScriptConstants.ALGORITHM_TYPE_VISUALIZATION)) {
2 26 Feb 07 jari 254                             dataPopup.getComponent(0).setEnabled(false);
2 26 Feb 07 jari 255                         } else
2 26 Feb 07 jari 256                             dataPopup.getComponent(0).setEnabled(true);
2 26 Feb 07 jari 257                     }
2 26 Feb 07 jari 258                     dataPopup.show(scriptTree, me.getX(), me.getY());
2 26 Feb 07 jari 259                 }
2 26 Feb 07 jari 260             }
2 26 Feb 07 jari 261         }
2 26 Feb 07 jari 262         
2 26 Feb 07 jari 263         
2 26 Feb 07 jari 264         public void actionPerformed(java.awt.event.ActionEvent actionEvent) {
2 26 Feb 07 jari 265             if(isAlgSetViewer)
2 26 Feb 07 jari 266                 return;
2 26 Feb 07 jari 267             
2 26 Feb 07 jari 268             String command = actionEvent.getActionCommand();
2 26 Feb 07 jari 269             if(command.equals("add-new-algorithm-cmd") || command.equals("replace-algorithm-cmd")) {
2 26 Feb 07 jari 270                 node = scriptTree.getSelectedNode();
2 26 Feb 07 jari 271                 if(node == null){
2 26 Feb 07 jari 272                     return;
2 26 Feb 07 jari 273                 }
2 26 Feb 07 jari 274                 if(node instanceof DataNode)
2 26 Feb 07 jari 275                     scriptTree.addNewAlgorithmToDataNode((DataNode)node);
2 26 Feb 07 jari 276             } else if(command.equals("delete-algorithm-cmd")) {
2 26 Feb 07 jari 277                 node = scriptTree.getSelectedNode();
2 26 Feb 07 jari 278                 if(node != null) {
2 26 Feb 07 jari 279                     if(node instanceof AlgorithmNode)
2 26 Feb 07 jari 280                         scriptTree.removeAlgorithm((AlgorithmNode)node);
2 26 Feb 07 jari 281                 }
2 26 Feb 07 jari 282             } else if(command.equals("modify-algorithm-cmd")) {
2 26 Feb 07 jari 283                 
2 26 Feb 07 jari 284             } else if(command.equals("view-xml-cmd")) {
2 26 Feb 07 jari 285                 node = scriptTree.getSelectedNode();
2 26 Feb 07 jari 286                 if(node != null) {
2 26 Feb 07 jari 287                     manager.viewSelectedNodeXML(ScriptTreeViewer.this, node);
2 26 Feb 07 jari 288                 }
2 26 Feb 07 jari 289             } else if(command.equals("save-script-cmd")) {
2 26 Feb 07 jari 290                 manager.saveScript(scriptTree.getDocument());
2 26 Feb 07 jari 291             } else if(command.equals("execute-script-cmd")) {
2 26 Feb 07 jari 292                 manager.runScript(scriptTree.getDocument());
2 26 Feb 07 jari 293             }
2 26 Feb 07 jari 294         }
2 26 Feb 07 jari 295     }
2 26 Feb 07 jari 296     
2 26 Feb 07 jari 297     
2 26 Feb 07 jari 298     public class ScriptListener implements ScriptEventListener {
2 26 Feb 07 jari 299         public void documentChanged(ScriptDocumentEvent event) {
2 26 Feb 07 jari 300             scriptTree.updateTree();
2 26 Feb 07 jari 301         }
2 26 Feb 07 jari 302     }
2 26 Feb 07 jari 303     
2 26 Feb 07 jari 304     
2 26 Feb 07 jari 305     private void writeObject(java.io.ObjectOutputStream oos) throws java.io.IOException {
2 26 Feb 07 jari 306         oos.writeObject(manager);
2 26 Feb 07 jari 307         oos.writeObject(scriptTree.getDocument());
2 26 Feb 07 jari 308         oos.writeBoolean(isAlgSetViewer);
2 26 Feb 07 jari 309         if(isAlgSetViewer)
2 26 Feb 07 jari 310             oos.writeObject(algSetRoot);
2 26 Feb 07 jari 311         oos.writeBoolean(selected);
2 26 Feb 07 jari 312     }
2 26 Feb 07 jari 313     
2 26 Feb 07 jari 314     
2 26 Feb 07 jari 315     
2 26 Feb 07 jari 316     private void readObject(java.io.ObjectInputStream ois) throws java.io.IOException, ClassNotFoundException {
2 26 Feb 07 jari 317         this.manager = (ScriptManager)ois.readObject();
2 26 Feb 07 jari 318         this.scriptTree = new ScriptTree((ScriptDocument)ois.readObject(), manager);
2 26 Feb 07 jari 319         this.isAlgSetViewer = ois.readBoolean();
2 26 Feb 07 jari 320         if(this.isAlgSetViewer) {
2 26 Feb 07 jari 321             this.algSetRoot = (DataNode)ois.readObject();
2 26 Feb 07 jari 322             this.algSetRoot = scriptTree.getDataNodeNamed(algSetRoot.toString());
2 26 Feb 07 jari 323             if(algSetRoot != null)
2 26 Feb 07 jari 324                 this.scriptTree.highlightAlgSet(algSetRoot);
2 26 Feb 07 jari 325         }
2 26 Feb 07 jari 326         this.selected = ois.readBoolean();
2 26 Feb 07 jari 327     }
2 26 Feb 07 jari 328     
2 26 Feb 07 jari 329 }