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.