Author: ruschein
Date: 2009-11-24 14:27:43 -0800 (Tue, 24 Nov 2009)
New Revision: 18570

Modified:
   cytoscape/trunk/src/cytoscape/util/NestedNetworkImageManager.java
Log:
Greatly improved the documentation of the code.

Modified: cytoscape/trunk/src/cytoscape/util/NestedNetworkImageManager.java
===================================================================
--- cytoscape/trunk/src/cytoscape/util/NestedNetworkImageManager.java   
2009-11-24 22:52:17 UTC (rev 18569)
+++ cytoscape/trunk/src/cytoscape/util/NestedNetworkImageManager.java   
2009-11-24 22:27:43 UTC (rev 18570)
@@ -26,6 +26,9 @@
 import ding.view.DNodeView;
 
 
+/** This class manages images that represent nested networks.  This 
"management" includes creation, updating and destruction of such images as well
+ *  as updating network views when any of their nodes nested networks have 
changed.
+ */
 public class NestedNetworkImageManager implements PropertyChangeListener {
        private final Image DEF_IMAGE;
        
@@ -89,37 +92,55 @@
                                this.networkToImageMap.remove(network);
                        }
                } else if 
(CytoscapeDesktop.NETWORK_VIEW_CREATED.equals(evt.getPropertyName())) {
+                       // Here we have to do 2 things:
+                       // 1) if the newly created view is that of a network 
that is a nested network of any node, we need to recreate an image for
+                       //    this network based on the newly created view and 
then rerender all the views that contain parent nodes of this nested
+                       //    network
+                       // 2) We may have to rerender the newly created view if 
any of its nodes have a nested network and therefore need custom
+                       //    graphics
+                       
                        final CyNetworkView view = 
(CyNetworkView)evt.getNewValue();
                        final CyNetwork viewNetwork = view.getNetwork();
-                       System.out.println("--------- creating : " + 
viewNetwork.getTitle());
                        if (networkToImageMap.containsKey(viewNetwork)) {
+                               // implement 1)
                                updateImage(viewNetwork, view);
                                refreshViews(viewNetwork);
                        }
+
+                       // implement 2)
                        refreshView(viewNetwork, view);
-                       System.out.println("--------- event handling finished 
for: " + viewNetwork.getTitle());
                }
        }
        
-       private void refreshView(final CyNetwork viewNetwork, final 
CyNetworkView view) {
+
+       /** Redraws the view "networkView" if any of the nodes in the network 
"viewNetwork" contain a nested network.
+        *
+        * @param viewNetwork  the network that will be scanned for nodes that 
contain a nested network
+        * @param networkView  the view that may be rerendered if any of its 
nodes contain a nested network
+        */
+       private void refreshView(final CyNetwork viewNetwork, final 
CyNetworkView networkView) {
                boolean updateView = false;
-               for (final CyNode node: (List<CyNode>)viewNetwork.nodesList()) {
-                       final CyNetwork nestedNetwork = (CyNetwork) 
node.getNestedNetwork();
+               for (final CyNode node : (List<CyNode>)viewNetwork.nodesList()) 
{
+                       final CyNetwork nestedNetwork = 
(CyNetwork)node.getNestedNetwork();
                        if (nestedNetwork != null) {
                                updateView = true;
-                               addCustomGraphics(nestedNetwork, view, node);
+                               addCustomGraphics(nestedNetwork, networkView, 
node);
                        }
                }
                if (updateView) {
-                       view.updateView();
+                       networkView.updateView();
                }
        }
        
        
+       /** Redraws all views that contain any node which is a parent to 
"nestedNetwork."
+        *
+        * @param nestedNetwork  the network for which we recently generated a 
new image
+        */
        private void refreshViews(final CyNetwork nestedNetwork) {
                final List<CyNode> nodes = Cytoscape.getRootGraph().nodesList();
                final Set<CyNetworkView> updateViews = new 
HashSet<CyNetworkView>();
-               for (final CyNode node: nodes) {
+               for (final CyNode node : nodes) {
                        if (node.getNestedNetwork() == nestedNetwork) {
                                for (final CyNetworkView view: 
Cytoscape.getNetworkViewMap().values()) {
                                        if (view.getNodeView(node) != null) {
@@ -129,17 +150,24 @@
                        }
                }
                
-               for (final CyNetworkView view: updateViews) {
+               for (final CyNetworkView view : updateViews) {
                        refreshView(view.getNetwork(), view);
                }
        }
 
        
-       private void updateImage(CyNetwork network, CyNetworkView view) {
+       /** Generates an image for a nested network and stores it in 
"networkToImageMap."
+        *
+        * @param nestedNetwork  the network for which an image will be created
+        * @param view           either a view displaying the network 
"nestedNetwork", or the null network view as returned by
+        *                       Cytoscape.getNullNetworkView()
+        *
+        * Please note that when "view" is the null network view the image 
mapped to "nestedNetwork" will be a default image.
+        */
+       private void updateImage(final CyNetwork nestedNetwork, final 
CyNetworkView view) {
                if (view == Cytoscape.getNullNetworkView()) {
-                       // View does not exist
-                       System.out.println("*************View does not exist 
for: " + network.getTitle() +" == " + view.getNetwork().getTitle());
-                       networkToImageMap.put(network, new 
ImageAndReferenceCount(DEF_IMAGE));
+                       // View does not exist => use a default graphic
+                       networkToImageMap.put(nestedNetwork, new 
ImageAndReferenceCount(DEF_IMAGE));
                } else {
                        // Create image from this view.
                        view.applyLayout(CyLayouts.getLayout("force-directed"));
@@ -147,23 +175,28 @@
                        dView.fitContent();
                        dView.updateView();
                        final Image image = dView.createImage(DEF_WIDTH, 
DEF_HEIGHT, 1.0);
-                       System.out.println("*************View FOUND for: " + 
network.getTitle() +" == " + view.getNetwork().getNodeCount());
-                       networkToImageMap.put(network, new 
ImageAndReferenceCount(image));
+                       networkToImageMap.put(nestedNetwork, new 
ImageAndReferenceCount(image));
                }
        }
 
        
-       private void addCustomGraphics(final CyNetwork network, final 
CyNetworkView dView, final CyNode parentNode) {
-               System.out.println("*** Adding custom graphics: Count = " + 
dView.getNodeViewCount() + " node = " + parentNode.getIdentifier());
-               Image networkImage = getImage(network);
-               final DNodeView nodeView = 
(DNodeView)dView.getNodeView(parentNode);
+       /** Assigns a custom image representing a nested network to a node.
+        *
+        * @param nestedNetwork  the network whose corresponding image we will 
be assigning to the node "parentNode"
+        * @param networkView    the view that contains the node with the 
nested network
+        * @param parentNode     the node that contains the nested network 
"nestedNetwork" and displayed in the view "networkView"
+        */
+       private void addCustomGraphics(final CyNetwork nestedNetwork, final 
CyNetworkView networkView, final CyNode parentNode) {
+               Image networkImage = getImage(nestedNetwork);
+               final DNodeView nodeView = 
(DNodeView)networkView.getNodeView(parentNode);
                final Rectangle2D rect = new Rectangle2D.Double(0.0, 0.0, 
200.0, 200.0);
-               
-               System.out.println("*** ADD CUSTOM: " + nodeView);
                nodeView.addCustomGraphic(rect, new 
TexturePaint((BufferedImage) networkImage, rect), NodeDetails.ANCHOR_CENTER);
        }
        
-       
+
+       /** Helper class that keeps track of how many references exist to a 
given image.  This allows removal of an image when the reference
+        *  count drops to zero.
+        */
        private static class ImageAndReferenceCount {
                private Image image;
                private int refCount;

--

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