Author: jm
Date: 2012-06-26 10:59:00 -0700 (Tue, 26 Jun 2012)
New Revision: 29692

Modified:
   
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkManagerImpl.java
   
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyRootNetworkImpl.java
Log:
Fixes #1167: CyRootNetworkImpl's services are unregistered when all of its 
subnetworks are removed from CyNetworkManagerImpl.

Modified: 
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkManagerImpl.java
===================================================================
--- 
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkManagerImpl.java
       2012-06-26 16:51:29 UTC (rev 29691)
+++ 
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkManagerImpl.java
       2012-06-26 17:59:00 UTC (rev 29692)
@@ -39,10 +39,11 @@
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNetworkManager;
 import org.cytoscape.model.CyNode;
-import org.cytoscape.model.CyTable;
 import org.cytoscape.model.events.NetworkAboutToBeDestroyedEvent;
 import org.cytoscape.model.events.NetworkAddedEvent;
 import org.cytoscape.model.events.NetworkDestroyedEvent;
+import org.cytoscape.model.subnetwork.CyRootNetwork;
+import org.cytoscape.model.subnetwork.CySubNetwork;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -108,16 +109,34 @@
 
            networkMap.remove(networkId);
            
+               if (network instanceof CySubNetwork) {
+                       CySubNetwork subNetwork = (CySubNetwork) network;
+                       CyRootNetwork rootNetwork = subNetwork.getRootNetwork();
+                       CySubNetwork baseNetwork = rootNetwork.getBaseNetwork();
+                       if (subNetwork != baseNetwork)
+                               rootNetwork.removeSubNetwork(subNetwork);
+                       
+                       if (rootNetwork instanceof CyRootNetworkImpl && 
!hasRegisteredNetworks(rootNetwork))
+                               ((CyRootNetworkImpl) rootNetwork).dispose();
+               }
+               
            // TODO: remove tables!!
-
-           network = null;
        }
 
        // let everyone know that some network is gone
        cyEventHelper.fireEvent(new 
NetworkDestroyedEvent(CyNetworkManagerImpl.this));
     }
 
-    @Override
+    private boolean hasRegisteredNetworks(CyRootNetwork rootNetwork) {
+       for (CySubNetwork network : rootNetwork.getSubNetworkList()) {
+               if (networkMap.containsKey(network.getSUID())) {
+                       return true;
+               }
+       }
+       return false;
+       }
+
+       @Override
     public void addNetwork(final CyNetwork network) {
        if (network == null)
            throw new NullPointerException("Network is null");

Modified: 
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyRootNetworkImpl.java
===================================================================
--- 
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyRootNetworkImpl.java
  2012-06-26 16:51:29 UTC (rev 29691)
+++ 
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyRootNetworkImpl.java
  2012-06-26 17:59:00 UTC (rev 29692)
@@ -76,6 +76,7 @@
        private final InteractionSetListener interactionSetListener;
        private final NetworkAddedListenerDelegator 
networkAddedListenerDelegator;
        private final NetworkNameSetListener networkNameSetListener;
+       private final CyServiceRegistrar serviceRegistrar;
 
 
        private int nextNodeIndex;
@@ -93,6 +94,7 @@
                this.tableMgr = tableMgr;
                this.networkTableMgr = networkTableMgr;
                this.tableFactory = tableFactory;
+               this.serviceRegistrar = serviceRegistrar;
                this.publicTables = publicTables;
                suid = super.getSUID(); 
                subNetworks = new ArrayList<CySubNetwork>();
@@ -121,6 +123,14 @@
                registerAllTables(networkTableMgr.getTables(this, 
CyEdge.class).values());
        }
 
+       public void dispose() {
+               serviceRegistrar.unregisterAllServices(columnAdder);
+               serviceRegistrar.unregisterAllServices(nameSetListener);
+               serviceRegistrar.unregisterAllServices(interactionSetListener);
+               
serviceRegistrar.unregisterAllServices(networkAddedListenerDelegator);
+               serviceRegistrar.unregisterAllServices(networkNameSetListener);
+       }
+       
        // Simply register all tables to the table manager
        private void registerAllTables(Collection<CyTable> tables) {
                for (final CyTable table : tables)

-- 
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