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.