Author: kono
Date: 2011-11-17 18:44:26 -0800 (Thu, 17 Nov 2011)
New Revision: 27524

Modified:
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
Log:
GUI deadlock problem completely fixed.  Accesses to managers from cell renderer 
had been removed.

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
 2011-11-18 01:16:21 UTC (rev 27523)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
 2011-11-18 02:44:26 UTC (rev 27524)
@@ -150,7 +150,7 @@
                this.networkViewManager = networkViewManager;
                this.taskManager = taskManager;
 
-               root = new NetworkTreeNode("Network Root", 0L);
+               root = new NetworkTreeNode("Network Root", null);
                treeTableModel = new NetworkTreeTableModel(this, root);
                treeTable = new JTreeTable(treeTableModel);
                initialize();
@@ -186,7 +186,7 @@
 
                ToolTipManager.sharedInstance().registerComponent(treeTable);
 
-               treeTable.getTree().setCellRenderer(new 
TreeCellRenderer(treeTable, netmgr, networkViewManager));
+               treeTable.getTree().setCellRenderer(new 
TreeCellRenderer(treeTable));
                treeTable.setBackground(Color.white);
                treeTable.setSelectionBackground(new Color(200, 200, 200, 150));
 
@@ -327,7 +327,6 @@
                
                treeTable.updateUI();
                treeTable.doLayout();
-               treeTable.updateUI();
                treeTable.repaint();
        }
 
@@ -422,6 +421,7 @@
 
        public void handleEvent(NetworkViewAboutToBeDestroyedEvent nde) {
                logger.debug("Network view about to be destroyed " + 
nde.getNetworkView().getModel().getSUID());
+               
this.treeNodeMap.get(nde.getNetworkView().getModel().getSUID()).setNodeColor(Color.red);
                treeTable.getTree().updateUI();
        }
 
@@ -430,7 +430,7 @@
 
                // Set current network view to the new one.
                
appManager.setCurrentNetworkView(nde.getNetworkView().getModel().getSUID());
-
+               
this.treeNodeMap.get(nde.getNetworkView().getModel().getSUID()).setNodeColor(Color.black);
                treeTable.getTree().updateUI();
        }
 
@@ -454,7 +454,7 @@
 
                        // Actual tree node for this network
                        NetworkTreeNode dmtn = new 
NetworkTreeNode(network.getCyRow().get(CyTableEntry.NAME, String.class),
-                                       network_id);
+                                       network);
 
                        parentTreeNode.add(dmtn);
 
@@ -465,6 +465,11 @@
                        if (parentNetwork != null)
                                this.treeNodeMap.put(parentNetwork.getSUID(), 
parentTreeNode);
 
+                       if(networkViewManager.viewExists(network_id))
+                               dmtn.setNodeColor(Color.black);
+                       
+                       this.treeNodeMap.put(network.getSUID(), dmtn);
+                       
                        // apparently this doesn't fire valueChanged
                        treeTable.getTree().collapsePath(new TreePath(new 
TreeNode[] { root }));
 
@@ -497,11 +502,11 @@
                while (tree_node_enum.hasMoreElements()) {
                        final NetworkTreeNode node = (NetworkTreeNode) 
tree_node_enum.nextElement();
 
-                       Long currentID = node.getNetworkID();
-                       if (currentID == null)
+                       CyNetwork network = node.getNetwork();
+                       if (network == null)
                                continue;
 
-                       if (node.getNetworkID().equals(network_id))
+                       if (network.getSUID() == network_id)
                                return node;
                }
 
@@ -528,10 +533,10 @@
                }
 
                // This is a "network set" node.
-               if (node.getNetworkID() == null)
+               if (node.getNetwork() == null)
                        return;
 
-               appManager.setCurrentNetwork(node.getNetworkID());
+               appManager.setCurrentNetwork(node.getNetwork().getSUID());
 
                // creates a list of all selected networks
                List<Long> networkList = new LinkedList<Long>();
@@ -539,7 +544,7 @@
                        for (int i = mtree.getMinSelectionRow(); i <= 
mtree.getMaxSelectionRow(); i++) {
                                NetworkTreeNode n = (NetworkTreeNode) 
mtree.getPathForRow(i).getLastPathComponent();
                                if (n != null && n.getUserObject() != null && 
mtree.isRowSelected(i))
-                                       networkList.add(n.getNetworkID());
+                                       
networkList.add(n.getNetwork().getSUID());
                        }
                } catch (Exception ex) {
                        ex.printStackTrace();
@@ -587,7 +592,7 @@
                                if (row != -1) {
                                        JTree tree = treeTable.getTree();
                                        TreePath treePath = 
tree.getPathForRow(row);
-                                       Long networkID = ((NetworkTreeNode) 
treePath.getLastPathComponent()).getNetworkID();
+                                       Long networkID = ((NetworkTreeNode) 
treePath.getLastPathComponent()).getNetwork().getSUID();
 
                                        CyNetwork cyNetwork = 
netmgr.getNetwork(networkID);
 

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
      2011-11-18 01:16:21 UTC (rev 27523)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeNode.java
      2011-11-18 02:44:26 UTC (rev 27524)
@@ -1,7 +1,11 @@
 package org.cytoscape.internal.view;
 
+import java.awt.Color;
+
 import javax.swing.tree.DefaultMutableTreeNode;
 
+import org.cytoscape.model.CyNetwork;
+
 /**
  * Custom Tree node in the JTreeTable
  * 
@@ -10,17 +14,30 @@
 
        private final static long serialVersionUID = 1213748836736485L;
 
-       // Immutable network SUID. This can be null if the given tree node is 
not
-       // associated with a network.
-       private final Long networkID;
+       private final CyNetwork network;
+       
+       private Color nodeColor = Color.red;
 
        
-       NetworkTreeNode(final Object userobj, final Long id) {
+       NetworkTreeNode(final Object userobj, final CyNetwork network) {
                super(userobj.toString());
-               networkID = id;
+               this.network = network;
        }
 
-       Long getNetworkID() {
-               return networkID;
+       CyNetwork getNetwork() {
+               return network;
        }
+       
+       /*
+        * These are necessary to avoid deadlock in the renderer.
+        */
+
+       Color getNodeColor() {
+               return nodeColor;
+       }
+       
+       void setNodeColor(final Color newColor) {
+               if(newColor != null)
+                       this.nodeColor = newColor;
+       }
 }
\ No newline at end of file

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
        2011-11-18 01:16:21 UTC (rev 27523)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkTreeTableModel.java
        2011-11-18 02:44:26 UTC (rev 27524)
@@ -73,9 +73,9 @@
                        return null;
                
                final NetworkTreeNode node = (NetworkTreeNode) value;
-               final Long networkID = node.getNetworkID();
+               final CyNetwork network = node.getNetwork();
                
-               if(networkID == null) {
+               if(network == null) {
                        // This is root network node
                        return null;
                }
@@ -83,14 +83,14 @@
                if (column == 0)
                        return node.getUserObject();
                else if (column == 1) {
-                       final CyNetwork cyNetwork = 
this.networkPanel.netmgr.getNetwork(node.getNetworkID());
+                       final CyNetwork cyNetwork = 
this.networkPanel.netmgr.getNetwork(node.getNetwork().getSUID());
                        if(cyNetwork == null)
                                return null;
                        
                        return "" + cyNetwork.getNodeCount() + "("
                                + 
cyNetwork.getDefaultNodeTable().getMatchingRows(CyNetwork.SELECTED, 
true).size() + ")";
                } else if (column == 2) {
-                       final CyNetwork cyNetwork = 
this.networkPanel.netmgr.getNetwork(((NetworkTreeNode) node).getNetworkID());
+                       final CyNetwork cyNetwork = 
this.networkPanel.netmgr.getNetwork(((NetworkTreeNode) 
node).getNetwork().getSUID());
                        if(cyNetwork == null)
                                return null;
                        

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
   2011-11-18 01:16:21 UTC (rev 27523)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
   2011-11-18 02:44:26 UTC (rev 27524)
@@ -311,7 +311,7 @@
                render(nvae.getNetworkView());
        }
 
-       protected void removeView(CyNetworkView view) {
+       protected void removeView(final CyNetworkView view) {
                try {
                        final JInternalFrame frame = 
presentationContainerMap.get(view.getModel().getSUID());
                        if (frame != null) {

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
     2011-11-18 01:16:21 UTC (rev 27523)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/TreeCellRenderer.java
     2011-11-18 02:44:26 UTC (rev 27524)
@@ -6,10 +6,13 @@
 import java.awt.Font;
 import java.awt.Image;
 import java.awt.Toolkit;
+import java.lang.reflect.InvocationTargetException;
 
 import javax.swing.ImageIcon;
 import javax.swing.JTree;
+import javax.swing.SwingUtilities;
 import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.xml.soap.Node;
 
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNetworkManager;
@@ -29,15 +32,9 @@
        
        private static final Dimension CELL_SIZE = new Dimension(1200, 40);
 
-       private final CyNetworkManager networkManager;
-       private final CyNetworkViewManager networkViewManager;
-
        private final JTreeTable treeTable;
 
-       TreeCellRenderer(final JTreeTable treeTable, final CyNetworkManager 
networkManager,
-                       final CyNetworkViewManager networkViewManager) {
-               this.networkManager = networkManager;
-               this.networkViewManager = networkViewManager;
+       TreeCellRenderer(final JTreeTable treeTable) {
                this.treeTable = treeTable;
                
                final Image iconImage = 
Toolkit.getDefaultToolkit().getImage(getClass().getResource(NETWORK_ICON));
@@ -73,36 +70,15 @@
                else
                        this.setFont(TABLE_FONT);
 
-               if(treeNode.getNetworkID() == null) {
+               if(treeNode.getNetwork() == null) {
                        setForeground(treeTable.getForeground());
                        return this;
                }
                
-               if (hasView(treeNode))
-                       setForeground(treeTable.getForeground());
-               else
-                       setForeground(Color.red);
+               setForeground(treeNode.getNodeColor());
+               setForeground(treeNode.getNodeColor());
+               
setToolTipText(treeNode.getNetwork().getCyRow().get(CyTableEntry.NAME, 
String.class));
 
                return this;
        }
-
-       private boolean hasView(final NetworkTreeNode node) {
-               final Long networkID = node.getNetworkID();
-               final CyNetwork network = networkManager.getNetwork(networkID);
-
-               if (network != null)
-                       
setToolTipText(network.getCyRow().get(CyTableEntry.NAME, String.class));
-               else {
-                       if (node.getRoot() == node)
-                               setToolTipText("Network Root");
-               }
-
-               boolean hasView = false;
-               
-               synchronized(this) {
-                       hasView = networkViewManager.viewExists(networkID);
-               }
-               
-               return hasView;
-       }
 }
\ No newline at end of file

-- 
You received this message because you are subscribed to the Google Groups 
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/cytoscape-cvs?hl=en.

Reply via email to