Author: kono
Date: 2012-03-21 19:13:03 -0700 (Wed, 21 Mar 2012)
New Revision: 28612
Modified:
core3/api/trunk/model-api/src/test/java/org/cytoscape/model/AbstractCyNetworkTableManagerTest.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkFactoryImpl.java
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/CyNetworkTableManagerImpl.java
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/CySubNetworkImpl.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableManagerImpl.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/DefaultTablesNetwork.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/SimpleNetwork.java
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/CyNetworkTableManagerTest.java
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/CyNetworkTest.java
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/NetworkTestSupport.java
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/NetworkTestSupportTest.java
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/TestCyNetworkFactory.java
Log:
Internal table map had been removed from DefaultTableNetwork. Instead, it uses
tables in CyNetworkTableManager.
Modified:
core3/api/trunk/model-api/src/test/java/org/cytoscape/model/AbstractCyNetworkTableManagerTest.java
===================================================================
---
core3/api/trunk/model-api/src/test/java/org/cytoscape/model/AbstractCyNetworkTableManagerTest.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/api/trunk/model-api/src/test/java/org/cytoscape/model/AbstractCyNetworkTableManagerTest.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -8,6 +8,10 @@
import org.junit.Before;
import org.junit.Test;
+/**
+ * Test cases for Network Table Manager.
+ *
+ */
public abstract class AbstractCyNetworkTableManagerTest {
/**
* Must be supplied by implementer.
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkFactoryImpl.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkFactoryImpl.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkFactoryImpl.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -31,6 +31,7 @@
import org.cytoscape.event.CyEventHelper;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNetworkFactory;
+import org.cytoscape.model.CyNetworkTableManager;
import org.cytoscape.model.CyTableFactory;
import org.cytoscape.service.util.CyServiceRegistrar;
@@ -43,7 +44,7 @@
private final CyEventHelper help;
private final CyTableManagerImpl mgr;
- private final CyNetworkTableManagerImpl networkTableMgr;
+ private final CyNetworkTableManager networkTableMgr;
private final CyTableFactory tableFactory;
private final CyServiceRegistrar serviceRegistrar;
@@ -53,7 +54,7 @@
* @param help An instance of CyEventHelper.
*/
public CyNetworkFactoryImpl(final CyEventHelper help, final
CyTableManagerImpl mgr,
- final CyNetworkTableManagerImpl
networkTableMgr,
+ final CyNetworkTableManager
networkTableMgr,
final CyTableFactory tableFactory,
final CyServiceRegistrar serviceRegistrar)
{
@@ -81,7 +82,7 @@
*/
@Override
public CyNetwork createNetwork() {
- CyRootNetworkImpl net = new CyRootNetworkImpl(help, mgr,
networkTableMgr, tableFactory, serviceRegistrar, true);
+ final CyRootNetworkImpl net = new CyRootNetworkImpl(help, mgr,
networkTableMgr, tableFactory, serviceRegistrar, true);
logger.info("CyNetwork w/ public tables created: ID = " +
net.getSUID());
logger.info("CyNetwork w/ public tables created: Base Graph ID
= " + net.getBaseNetwork().getSUID());
return net.getBaseNetwork();
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-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkManagerImpl.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -133,8 +133,8 @@
cyEventHelper.fireEvent(new
NetworkAddedEvent(CyNetworkManagerImpl.this, network));
}
- @Override
- public synchronized void reset() {
- networkMap.clear();
- }
+ @Override
+ public synchronized void reset() {
+ networkMap.clear();
+ }
}
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkTableManagerImpl.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkTableManagerImpl.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyNetworkTableManagerImpl.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -1,7 +1,5 @@
package org.cytoscape.model.internal;
-import java.lang.ref.Reference;
-import java.lang.ref.WeakReference;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -17,7 +15,7 @@
public class CyNetworkTableManagerImpl implements CyNetworkTableManager,
NetworkAboutToBeDestroyedListener {
- Map<CyNetwork, Map<Class<? extends CyTableEntry>, Reference<Map<String,
CyTable>>>> tables;
+ private final Map<CyNetwork, Map<Class<? extends CyTableEntry>,
Map<String, CyTable>>> tables;
public CyNetworkTableManagerImpl() {
// Use WeakReferences for CyNetworks because we can't get
notified
@@ -25,70 +23,71 @@
// for the CyTable maps too because CyNetworks may be holding a
// reference to them. This set up allows us to automatically
clean
// up this map whenever CyNetworks get garbage collected.
- tables = new WeakHashMap<CyNetwork, Map<Class<? extends
CyTableEntry>, Reference<Map<String, CyTable>>>>();
+ tables = new WeakHashMap<CyNetwork, Map<Class<? extends
CyTableEntry>, Map<String, CyTable>>>();
}
@Override
- public void setTable(CyNetwork network, Class<? extends CyTableEntry>
type,
- String namespace, CyTable table) {
- if (network == null) {
+ public void setTable(CyNetwork network, Class<? extends CyTableEntry>
type, String namespace, CyTable table) {
+ // Null checks. All parameters should not be null.
+ if (network == null)
throw new IllegalArgumentException("network cannot be
null");
- }
- if (type == null) {
+
+ if (type == null)
throw new IllegalArgumentException("type cannot be
null");
- }
- if (namespace == null) {
+
+ if (namespace == null)
throw new IllegalArgumentException("namespace cannot be
null");
- }
- if (table == null) {
+
+ if (table == null)
throw new IllegalArgumentException("table cannot be
null");
- }
- if (namespace.equals(CyNetwork.DEFAULT_ATTRS)) {
- throw new IllegalArgumentException("cannot overwrite
default tables");
- }
-
- Map<Class<? extends CyTableEntry>, Reference<Map<String,
CyTable>>> byType = tables.get(network);
+ Map<Class<? extends CyTableEntry>, Map<String, CyTable>> byType
= tables.get(network);
if (byType == null) {
- throw new IllegalStateException("network table maps are
missing for network: " + network);
+ byType = new HashMap<Class<? extends CyTableEntry>,
Map<String,CyTable>>();
+ final Map<String, CyTable> type2Tables = new
HashMap<String, CyTable>();
+ type2Tables.put(namespace, table);
+ byType.put(type, type2Tables);
+ tables.put(network, byType);
+ return;
}
- Reference<Map<String, CyTable>> reference = byType.get(type);
+
+ Map<String, CyTable> reference = byType.get(type);
if (reference == null) {
- throw new IllegalStateException("network table maps are
missing for network: " + network);
+ final Map<String, CyTable> type2Tables = new
HashMap<String, CyTable>();
+ type2Tables.put(namespace, table);
+ byType.put(type, type2Tables);
+ tables.put(network, byType);
+ return;
+
}
- Map<String, CyTable> byNamespace = reference.get();
- if (byNamespace == null) {
- throw new IllegalStateException("network table maps are
missing for network: " + network);
- }
- byNamespace.put(namespace, table);
+
+ if (namespace.equals(CyNetwork.DEFAULT_ATTRS) &&
reference.get(CyNetwork.DEFAULT_ATTRS) != null)
+ throw new IllegalArgumentException("cannot overwrite
default tables");
+
+ reference.put(namespace, table);
}
@Override
public CyTable getTable(CyNetwork network,
Class<? extends CyTableEntry> type, String namespace) {
- Map<Class<? extends CyTableEntry>, Reference<Map<String,
CyTable>>> byType = tables.get(network);
+ Map<Class<? extends CyTableEntry>, Map<String, CyTable>> byType
= tables.get(network);
if (network == null) {
throw new IllegalArgumentException("network cannot be
null");
}
if (type == null) {
throw new IllegalArgumentException("type cannot be
null");
}
- if (namespace == null) {
+ if (namespace == null)
throw new IllegalArgumentException("namespace cannot be
null");
- }
-
- if (byType == null) {
+
+ if (byType == null)
return null;
- }
- Reference<Map<String, CyTable>> reference = byType.get(type);
- if (reference == null) {
+
+ final Map<String, CyTable> reference = byType.get(type);
+ if (reference == null)
return null;
- }
- Map<String, CyTable> byNamespace = reference.get();
- if (byNamespace == null) {
- return null;
- }
- return byNamespace.get(namespace);
+
+ return reference.get(namespace);
}
@Override
@@ -108,44 +107,36 @@
throw new IllegalArgumentException("cannot remove
default tables");
}
- Map<Class<? extends CyTableEntry>, Reference<Map<String,
CyTable>>> byType = tables.get(network);
+ Map<Class<? extends CyTableEntry>, Map<String, CyTable>> byType
= tables.get(network);
if (byType == null) {
return;
}
- Reference<Map<String, CyTable>> reference = byType.get(type);
+ Map<String, CyTable> reference = byType.get(type);
if (reference == null) {
return;
}
- Map<String, CyTable> byNamespace = reference.get();
- if (byNamespace == null) {
- return;
- }
- byNamespace.remove(namespace);
+
+ reference.remove(namespace);
}
@Override
- public Map<String, CyTable> getTables(CyNetwork network,
- Class<? extends CyTableEntry> type) {
- if (network == null) {
+ public Map<String, CyTable> getTables(CyNetwork network, Class<?
extends CyTableEntry> type) {
+ if (network == null)
throw new IllegalArgumentException("network cannot be
null");
- }
- if (type == null) {
+
+ if (type == null)
throw new IllegalArgumentException("type cannot be
null");
- }
- Map<Class<? extends CyTableEntry>, Reference<Map<String,
CyTable>>> byType = tables.get(network);
- if (byType == null) {
+ final Map<Class<? extends CyTableEntry>, Map<String, CyTable>>
byType = tables.get(network);
+ if (byType == null)
return Collections.emptyMap();
- }
- Reference<Map<String, CyTable>> reference = byType.get(type);
- if (reference == null) {
+
+ final Map<String, CyTable> namespace2tableMap =
byType.get(type);
+
+ if (namespace2tableMap == null)
return Collections.emptyMap();
- }
- Map<String, CyTable> byNamespace = reference.get();
- if (byNamespace == null) {
- return Collections.emptyMap();
- }
- return Collections.unmodifiableMap(byNamespace);
+
+ return Collections.unmodifiableMap(namespace2tableMap);
}
@Override
@@ -153,25 +144,6 @@
tables.clear();
}
- void setTableMap(Class<? extends CyTableEntry> type, CyNetwork network,
Map<String, CyTable> tableMap) {
- if (network == null) {
- throw new IllegalArgumentException("network cannot be
null");
- }
- if (type == null) {
- throw new IllegalArgumentException("type cannot be
null");
- }
- if (tableMap == null) {
- throw new IllegalArgumentException("table map cannot be
null");
- }
-
- Map<Class<? extends CyTableEntry>, Reference<Map<String,
CyTable>>> byType = tables.get(network);
- if (byType == null) {
- byType = new HashMap<Class<? extends CyTableEntry>,
Reference<Map<String,CyTable>>>();
- tables.put(network, byType);
- }
- byType.put(type, new
WeakReference<Map<String,CyTable>>(tableMap));
- }
-
@Override
public Set<CyNetwork> getNetworkSet() {
return Collections.unmodifiableSet(tables.keySet());
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-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyRootNetworkImpl.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -29,30 +29,28 @@
package org.cytoscape.model.internal;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
-import java.lang.ref.WeakReference;
import org.cytoscape.event.CyEventHelper;
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNetworkTableManager;
import org.cytoscape.model.CyNode;
-import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTable;
import org.cytoscape.model.CyTableEntry;
import org.cytoscape.model.CyTableFactory;
import org.cytoscape.model.CyTableFactory.InitialTableSize;
import org.cytoscape.model.SUIDFactory;
import org.cytoscape.model.events.ColumnCreatedListener;
+import org.cytoscape.model.events.NetworkAddedEvent;
+import org.cytoscape.model.events.NetworkAddedListener;
import org.cytoscape.model.events.RowsSetListener;
-import org.cytoscape.model.events.NetworkAddedListener;
-import org.cytoscape.model.events.NetworkAddedEvent;
import org.cytoscape.model.subnetwork.CyRootNetwork;
import org.cytoscape.model.subnetwork.CySubNetwork;
import org.cytoscape.service.util.CyServiceRegistrar;
@@ -66,13 +64,13 @@
public final class CyRootNetworkImpl extends DefaultTablesNetwork implements
CyRootNetwork {
private final long suid;
+
private final CyEventHelper eventHelper;
private final List<CySubNetwork> subNetworks;
private final CySubNetwork base;
private final CyTableManagerImpl tableMgr;
- private final CyNetworkTableManagerImpl networkTableMgr;
+ private final CyNetworkTableManager networkTableMgr;
private final CyTableFactory tableFactory;
- private final CyServiceRegistrar serviceRegistrar;
private final boolean publicTables;
private final VirtualColumnAdder columnAdder;
private final NameSetListener nameSetListener;
@@ -83,29 +81,25 @@
public CyRootNetworkImpl(final CyEventHelper eh,
final CyTableManagerImpl tableMgr,
- final CyNetworkTableManagerImpl
networkTableMgr,
+ final CyNetworkTableManager networkTableMgr,
final CyTableFactory tableFactory,
final CyServiceRegistrar serviceRegistrar,
final boolean publicTables)
{
- super(SUIDFactory.getNextSUID(),tableFactory,publicTables,0);
+ super(SUIDFactory.getNextSUID(), networkTableMgr,
tableFactory,publicTables,0);
this.eventHelper = eh;
this.tableMgr = tableMgr;
this.networkTableMgr = networkTableMgr;
this.tableFactory = tableFactory;
this.publicTables = publicTables;
- this.serviceRegistrar = serviceRegistrar;
suid = super.getSUID();
subNetworks = new ArrayList<CySubNetwork>();
nextNodeIndex = 0;
nextEdgeIndex = 0;
-
+
+ initTables(this);
updateRootNetworkTables();
- networkTableMgr.setTableMap(CyNetwork.class, this, netTables);
- networkTableMgr.setTableMap(CyNode.class, this, nodeTables);
- networkTableMgr.setTableMap(CyEdge.class, this, edgeTables);
-
columnAdder = new VirtualColumnAdder();
serviceRegistrar.registerService(columnAdder,
ColumnCreatedListener.class, new Properties());
nameSetListener = new NameSetListener();
@@ -115,41 +109,42 @@
base = addSubNetwork();
- registerAllTables(netTables.values());
- registerAllTables(nodeTables.values());
- registerAllTables(edgeTables.values());
+ registerAllTables(networkTableMgr.getTables(this,
CyNetwork.class).values());
+ registerAllTables(networkTableMgr.getTables(this,
CyNode.class).values());
+ registerAllTables(networkTableMgr.getTables(this,
CyEdge.class).values());
}
private void registerAllTables(Collection<CyTable> tables) {
- for (CyTable table : tables) {
+ for (final CyTable table : tables)
tableMgr.addTable(table);
- }
}
private void updateRootNetworkTables() {
+
+ final CyTable edgeSharedTable = tableFactory.createTable(suid +
" shared edge", CyTableEntry.SUID, Long.class,
+ publicTables, false,
getInitialTableSize(subNetworks.size()));
+ networkTableMgr.setTable(this, CyEdge.class,
CyRootNetwork.SHARED_ATTRS, edgeSharedTable);
+
+ edgeSharedTable.createColumn(CyRootNetwork.SHARED_NAME,
String.class, true);
+
+ final CyTable networkSharedTable = tableFactory.createTable(suid
+ + " shared network", CyTableEntry.SUID,
Long.class, publicTables, false, InitialTableSize.SMALL);
+ networkTableMgr.setTable(this, CyNetwork.class,
CyRootNetwork.SHARED_ATTRS, networkSharedTable);
+
+ networkSharedTable.createColumn(CyRootNetwork.SHARED_NAME,
String.class, true);
+
+ final CyTable nodeSharedTable = tableFactory.createTable(suid +
" shared node", CyTableEntry.SUID, Long.class,
+ publicTables, false,
getInitialTableSize(subNetworks.size()));
+ networkTableMgr.setTable(this, CyNode.class,
CyRootNetwork.SHARED_ATTRS, nodeSharedTable);
+
+ nodeSharedTable.createColumn(CyRootNetwork.SHARED_NAME,
String.class, true);
+
getRow(this).set(CyTableEntry.NAME, "");
-
- netTables.put(CyRootNetwork.SHARED_ATTRS,
- tableFactory.createTable(suid + " shared
network", CyTableEntry.SUID,
- Long.class,
publicTables, false, InitialTableSize.SMALL));
-
netTables.get(CyRootNetwork.SHARED_ATTRS).createColumn(CyRootNetwork.SHARED_NAME,
String.class, true);
-
- nodeTables.put(CyRootNetwork.SHARED_ATTRS,
- tableFactory.createTable(suid + " shared node",
CyTableEntry.SUID,
- Long.class,
publicTables, false,
-
getInitialTableSize(subNetworks.size())));
-
nodeTables.get(CyRootNetwork.SHARED_ATTRS).createColumn(CyRootNetwork.SHARED_NAME,
String.class, true);
-
- edgeTables.put(CyRootNetwork.SHARED_ATTRS,
- tableFactory.createTable(suid + " shared edge",
CyTableEntry.SUID,
- Long.class,
publicTables, false,
-
getInitialTableSize(subNetworks.size())));
-
edgeTables.get(CyRootNetwork.SHARED_ATTRS).createColumn(CyRootNetwork.SHARED_NAME,
String.class, true);
}
private void linkDefaultTables(CyTable srcTable, CyTable tgtTable) {
// Add all columns from source table as virtual columns in
target table.
- tgtTable.addVirtualColumns(srcTable,CyTableEntry.SUID,true);
+ tgtTable.addVirtualColumns(srcTable, CyTableEntry.SUID, true);
// Now add a listener for column created events to add
// virtual columns to any subsequent source columns added.
@@ -223,14 +218,21 @@
@Override
public synchronized CySubNetwork addSubNetwork() {
+ // Subnetwork's ID
final long newSUID = SUIDFactory.getNextSUID();
+
final CySubNetworkImpl sub = new
CySubNetworkImpl(this,newSUID,eventHelper,tableMgr,networkTableMgr,
tableFactory,publicTables,subNetworks.size());
networkAddedListenerDelegator.addListener(sub);
+
+ CyTable networkTable = networkTableMgr.getTable(this,
CyNetwork.class, CyRootNetwork.SHARED_ATTRS);
+ CyTable nodeTable = networkTableMgr.getTable(this,
CyNode.class, CyRootNetwork.SHARED_ATTRS);
+ CyTable edgeTable = networkTableMgr.getTable(this,
CyEdge.class, CyRootNetwork.SHARED_ATTRS);
- linkDefaultTables( netTables.get(CyRootNetwork.SHARED_ATTRS),
sub.getDefaultNetworkTable() );
- linkDefaultTables( nodeTables.get(CyRootNetwork.SHARED_ATTRS),
sub.getDefaultNodeTable() );
- linkDefaultTables( edgeTables.get(CyRootNetwork.SHARED_ATTRS),
sub.getDefaultEdgeTable() );
+ linkDefaultTables(networkTable, sub.getDefaultNetworkTable());
+ linkDefaultTables(nodeTable, sub.getDefaultNodeTable());
+ linkDefaultTables(edgeTable, sub.getDefaultEdgeTable());
+
subNetworks.add(sub);
return sub;
}
@@ -279,17 +281,17 @@
@Override
public CyTable getSharedNetworkTable() {
- return netTables.get(CyRootNetwork.SHARED_ATTRS);
+ return networkTableMgr.getTable(this, CyNetwork.class,
CyRootNetwork.SHARED_ATTRS);
}
@Override
public CyTable getSharedNodeTable() {
- return nodeTables.get(CyRootNetwork.SHARED_ATTRS);
+ return networkTableMgr.getTable(this, CyNode.class,
CyRootNetwork.SHARED_ATTRS);
}
@Override
public CyTable getSharedEdgeTable() {
- return edgeTables.get(CyRootNetwork.SHARED_ATTRS);
+ return networkTableMgr.getTable(this, CyEdge.class,
CyRootNetwork.SHARED_ATTRS);
}
@Override
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CySubNetworkImpl.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CySubNetworkImpl.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CySubNetworkImpl.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -28,39 +28,30 @@
package org.cytoscape.model.internal;
+import java.util.Collection;
+
import org.cytoscape.event.CyEventHelper;
-import org.cytoscape.model.CyTableEntry;
-import org.cytoscape.model.CyColumn;
-import org.cytoscape.model.CyNetwork;
-import org.cytoscape.model.CyTable;
import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNetworkTableManager;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyRow;
+import org.cytoscape.model.CyTable;
import org.cytoscape.model.CyTableEntry;
-import org.cytoscape.model.SUIDFactory;
-import org.cytoscape.model.CyTableManager;
import org.cytoscape.model.CyTableFactory;
-import org.cytoscape.model.CyNetworkTableManager;
-import org.cytoscape.model.events.AddedNodesEvent;
-import org.cytoscape.model.events.AddedEdgesEvent;
-import org.cytoscape.model.events.AboutToRemoveNodesEvent;
+import org.cytoscape.model.CyTableManager;
import org.cytoscape.model.events.AboutToRemoveEdgesEvent;
+import org.cytoscape.model.events.AboutToRemoveNodesEvent;
+import org.cytoscape.model.events.AddedEdgesEvent;
+import org.cytoscape.model.events.AddedNodesEvent;
import org.cytoscape.model.events.NetworkAddedEvent;
import org.cytoscape.model.events.NetworkAddedListener;
-import org.cytoscape.model.events.RemovedNodesEvent;
import org.cytoscape.model.events.RemovedEdgesEvent;
-import org.cytoscape.model.subnetwork.CySubNetwork;
+import org.cytoscape.model.events.RemovedNodesEvent;
import org.cytoscape.model.subnetwork.CyRootNetwork;
+import org.cytoscape.model.subnetwork.CySubNetwork;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashSet;
-
/**
* A full implementation of CySubNetwork that adds the addNode/addEdge
* support that is missing from SimpleNetwork. These methods interact
@@ -74,25 +65,30 @@
private final CyRootNetworkImpl parent;
private boolean fireAddedNodesAndEdgesEvents;
private final CyTableManager tableMgr;
+
+ private final CyNetworkTableManager networkTableMgr;
CySubNetworkImpl(final CyRootNetworkImpl par,
final long suid,
final CyEventHelper eventHelper,
final CyTableManager tableMgr,
- final CyNetworkTableManagerImpl netTableMgr,
+ final CyNetworkTableManager netTableMgr,
final CyTableFactory tableFactory,
boolean publicTables,
int tableSizeDeterminer) {
- super(suid,tableFactory,publicTables,tableSizeDeterminer);
+ super(suid, netTableMgr,
tableFactory,publicTables,tableSizeDeterminer);
assert(par != null);
this.parent = par;
this.eventHelper = eventHelper;
this.tableMgr = tableMgr;
+ this.networkTableMgr = netTableMgr;
+
+ initTables(this);
- netTableMgr.setTableMap(CyNetwork.class, this, netTables);
- netTableMgr.setTableMap(CyNode.class, this, nodeTables);
- netTableMgr.setTableMap(CyEdge.class, this, edgeTables);
+// netTableMgr.setTableMap(CyNetwork.class, this, netTables);
+// netTableMgr.setTableMap(CyNode.class, this, nodeTables);
+// netTableMgr.setTableMap(CyEdge.class, this, edgeTables);
fireAddedNodesAndEdgesEvents = false;
}
@@ -244,11 +240,11 @@
// finished creating the network so that we don't fire
// lots of table related events prematurely.
private void registerSubnetworkTables() {
- for (final CyTable table : netTables.values())
+ for (final CyTable table : networkTableMgr.getTables(this,
CyNetwork.class).values())
tableMgr.addTable(table);
- for (final CyTable table : nodeTables.values())
+ for (final CyTable table : networkTableMgr.getTables(this,
CyNode.class).values())
tableMgr.addTable(table);
- for (final CyTable table : edgeTables.values())
+ for (final CyTable table : networkTableMgr.getTables(this,
CyEdge.class).values())
tableMgr.addTable(table);
updateSharedNames( getDefaultNodeTable(),
parent.getSharedNodeTable() );
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableImpl.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -61,6 +61,7 @@
public final class CyTableImpl implements CyTable, TableAddedListener {
+
private static final Logger logger =
LoggerFactory.getLogger(CyTableImpl.class);
private Set<String> currentlyActiveAttributes;
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableManagerImpl.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableManagerImpl.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/CyTableManagerImpl.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -60,6 +60,7 @@
private final CyEventHelper eventHelper;
private final CyNetworkTableManager networkTableManager;
private final CyNetworkManager networkManager;
+
private final Map<Long, CyTable> tables;
/**
@@ -75,55 +76,42 @@
tables = new HashMap<Long, CyTable>();
}
- /**
- * DOCUMENT ME!
- */
+
@Override
public synchronized void reset() {
-// networkTableMap.clear();
tables.clear();
}
/**
- * DOCUMENT ME!
- *
- * @param t DOCUMENT ME!
+ * {@inheritDoc}
*/
+ @Override
public synchronized void addTable(final CyTable t) {
- if (t == null) {
+ if (t == null)
throw new NullPointerException("added table is null");
- }
tables.put(t.getSUID(), t);
eventHelper.fireEvent(new TableAddedEvent(this, t));
}
/**
- * DOCUMENT ME!
- *
- * @param includePrivate DOCUMENT ME!
- *
- * @return DOCUMENT ME!
+ * {@inheritDoc}
*/
@Override
public synchronized Set<CyTable> getAllTables(final boolean
includePrivate) {
- Set<CyTable> res = new HashSet<CyTable>();
+ final Set<CyTable> res = new HashSet<CyTable>();
- for (Long key : tables.keySet()) {
- if (includePrivate || tables.get(key).isPublic()) {
+ for (final Long key : tables.keySet()) {
+ if (includePrivate || tables.get(key).isPublic())
res.add(tables.get(key));
- }
}
return res;
}
+
/**
- * DOCUMENT ME!
- *
- * @param suid DOCUMENT ME!
- *
- * @return DOCUMENT ME!
+ * {@inheritDoc}
*/
@Override
public synchronized CyTable getTable(final long suid) {
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/DefaultTablesNetwork.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/DefaultTablesNetwork.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/DefaultTablesNetwork.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -28,63 +28,69 @@
package org.cytoscape.model.internal;
-import org.cytoscape.model.CyTableEntry;
+import java.lang.ref.Reference;
+import java.lang.ref.WeakReference;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNetworkTableManager;
-import org.cytoscape.model.CyColumn;
-import org.cytoscape.model.CyNetwork;
-import org.cytoscape.model.CyTable;
-import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyRow;
-import org.cytoscape.model.CyTableManager;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyTableEntry;
import org.cytoscape.model.CyTableFactory;
import org.cytoscape.model.CyTableFactory.InitialTableSize;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.Set;
-import java.util.HashSet;
-
/**
* A SimpleNetwork but with default table support added.
*/
-class DefaultTablesNetwork extends SimpleNetwork {
+abstract class DefaultTablesNetwork extends SimpleNetwork {
+
+ private final CyNetworkTableManager networkTableManager;
+
+ private Reference<CyNetwork> networkRef;
+
+ private final CyTableFactory tableFactory;
+ private final boolean publicTables;
+ private final int tableSizeDeterminer;
- protected final Map<String,CyTable> netTables;
- protected final Map<String,CyTable> nodeTables;
- protected final Map<String,CyTable> edgeTables;
-
- DefaultTablesNetwork(final long suid,
- final CyTableFactory tableFactory,
- final boolean publicTables,
- final int tableSizeDeterminer) {
+ DefaultTablesNetwork(final long suid, final CyNetworkTableManager
tableManager, final CyTableFactory tableFactory,
+ final boolean publicTables, final int
tableSizeDeterminer) {
super(suid);
- netTables = createNetworkTables(suid, tableFactory,
publicTables /* table size is always small */);
- nodeTables = createNodeTables(suid, tableFactory, publicTables,
tableSizeDeterminer);
- edgeTables = createEdgeTables(suid, tableFactory, publicTables,
tableSizeDeterminer);
+ this.networkTableManager = tableManager;
+ this.publicTables = publicTables;
+ this.tableFactory = tableFactory;
+ this.tableSizeDeterminer = tableSizeDeterminer;
}
+
+ protected void initTables(final CyNetwork network) {
+ this.networkRef = new WeakReference<CyNetwork>(network);
+
+ createNetworkTables(super.getSUID(), tableFactory, publicTables
/* table size is always small */);
+ createNodeTables(super.getSUID(), tableFactory, publicTables,
tableSizeDeterminer);
+ createEdgeTables(super.getSUID(), tableFactory, publicTables,
tableSizeDeterminer);
+ }
public CyTable getDefaultNetworkTable() {
- return netTables.get(CyNetwork.DEFAULT_ATTRS);
+ return networkTableManager.getTable(networkRef.get(),
CyNetwork.class, CyNetwork.DEFAULT_ATTRS);
}
public CyTable getDefaultNodeTable() {
- return nodeTables.get(CyNetwork.DEFAULT_ATTRS);
+ return networkTableManager.getTable(networkRef.get(),
CyNode.class, CyNetwork.DEFAULT_ATTRS);
}
public CyTable getDefaultEdgeTable() {
- return edgeTables.get(CyNetwork.DEFAULT_ATTRS);
+ return networkTableManager.getTable(networkRef.get(),
CyEdge.class, CyNetwork.DEFAULT_ATTRS);
}
public CyRow getRow(final CyTableEntry entry) {
return getRow(entry, CyNetwork.DEFAULT_ATTRS);
}
- public CyRow getRow(CyTableEntry entry, String tableName) {
+ public CyRow getRow(final CyTableEntry entry, final String tableName) {
if ( entry == null )
throw new NullPointerException("null entry");
@@ -94,78 +100,72 @@
CyTable table;
synchronized (this) {
- if ( entry instanceof CyNode &&
containsNode((CyNode)entry) )
- table = nodeTables.get(tableName);
- else if ( entry instanceof CyEdge &&
containsEdge((CyEdge)entry) )
- table = edgeTables.get(tableName);
- else if ( entry instanceof CyNetwork &&
entry.equals(this) )
- table = netTables.get(tableName);
+ if (entry instanceof CyNode && containsNode((CyNode)
entry))
+ table =
networkTableManager.getTable(networkRef.get(), CyNode.class, tableName);
+ else if (entry instanceof CyEdge &&
containsEdge((CyEdge) entry))
+ table =
networkTableManager.getTable(networkRef.get(), CyEdge.class, tableName);
+ else if (entry instanceof CyNetwork &&
entry.equals(this))
+ table =
networkTableManager.getTable(networkRef.get(), CyNetwork.class, tableName);
else
- throw new
IllegalArgumentException("unrecognized (table entry): " + entry.toString() +
- " (table
name): " + tableName);
+ throw new
IllegalArgumentException("unrecognized (table entry): " + entry.toString()
+ + " (table name): " +
tableName);
}
+ if(table == null)
+ throw new NullPointerException("Table does not exist: "
+ tableName);
+
return table.getRow(entry.getSUID());
}
- private Map<String,CyTable> createNetworkTables(long suidx,
CyTableFactory tableFactory, boolean pubTables) {
- Map<String,CyTable> netT = new HashMap<String, CyTable>();
+ private void createNetworkTables(long suidx, CyTableFactory
tableFactory, boolean pubTables) {
+ final CyTable defTable = tableFactory.createTable(suidx
+ + " default network", CyTableEntry.SUID,
Long.class, pubTables, false, InitialTableSize.SMALL);
+ networkTableManager.setTable(networkRef.get(), CyNetwork.class,
CyNetwork.DEFAULT_ATTRS, defTable);
+
+ final CyTable hiddenTable = tableFactory.createTable(suidx
+ + " hidden network", CyTableEntry.SUID,
Long.class, false, false, InitialTableSize.SMALL);
+ networkTableManager.setTable(networkRef.get(), CyNetwork.class,
CyNetwork.HIDDEN_ATTRS, hiddenTable);
+ // Add default network columns.
+ defTable.createColumn(CyTableEntry.NAME, String.class, true);
+
+ }
- netT.put(CyNetwork.DEFAULT_ATTRS,
- tableFactory.createTable(suidx + " default network",
CyTableEntry.SUID,
- Long.class, pubTables, false,
InitialTableSize.SMALL));
- netT.put(CyNetwork.HIDDEN_ATTRS,
- tableFactory.createTable(suidx + " hidden network",
CyTableEntry.SUID,
- Long.class, false, false,
InitialTableSize.SMALL));
-
- netT.get(CyNetwork.DEFAULT_ATTRS).createColumn(CyTableEntry.NAME,
String.class, true);
-
- return netT;
+ private void createNodeTables(long suidx, CyTableFactory tableFactory,
boolean pubTables, int num) {
+ final CyTable defTable = tableFactory.createTable(suidx
+ + " default node", CyTableEntry.SUID,
Long.class, pubTables, false, InitialTableSize.SMALL);
+ networkTableManager.setTable(networkRef.get(), CyNode.class,
CyNetwork.DEFAULT_ATTRS, defTable);
+
+ final CyTable hiddenTable = tableFactory.createTable(suidx
+ + " hidden node", CyTableEntry.SUID,
Long.class, false, false, InitialTableSize.SMALL);
+ networkTableManager.setTable(networkRef.get(), CyNode.class,
CyNetwork.HIDDEN_ATTRS, hiddenTable);
+
+ defTable.createColumn(CyTableEntry.NAME, String.class, true);
+ defTable.createColumn(CyNetwork.SELECTED, Boolean.class, true,
Boolean.FALSE);
}
- private Map<String,CyTable> createNodeTables(long suidx, CyTableFactory
tableFactory, boolean pubTables, int num) {
- Map<String,CyTable> nodeT = new HashMap<String, CyTable>();
-
- nodeT.put(CyNetwork.DEFAULT_ATTRS,
- tableFactory.createTable(suidx + " default node",
CyTableEntry.SUID,
- Long.class, pubTables,
false, getInitialTableSize(num)));
- nodeT.put(CyNetwork.HIDDEN_ATTRS,
- tableFactory.createTable(suidx + " hidden node",
CyTableEntry.SUID,
- Long.class, false,
false, getInitialTableSize(num)));
-
-
nodeT.get(CyNetwork.DEFAULT_ATTRS).createColumn(CyTableEntry.NAME,
String.class, true);
-
nodeT.get(CyNetwork.DEFAULT_ATTRS).createColumn(CyNetwork.SELECTED,
Boolean.class, true, Boolean.FALSE);
-
- return nodeT;
-
+ private void createEdgeTables(long suidx, CyTableFactory tableFactory,
boolean pubTables, int num) {
+ final CyTable defTable = tableFactory.createTable(suidx + "
default edge", CyTableEntry.SUID, Long.class,
+ pubTables, false, InitialTableSize.SMALL);
+ networkTableManager.setTable(networkRef.get(), CyEdge.class,
CyNetwork.DEFAULT_ATTRS, defTable);
+
+ final CyTable hiddenTable = tableFactory.createTable(suidx
+ + " hidden edge", CyTableEntry.SUID,
Long.class, false, false, InitialTableSize.SMALL);
+ networkTableManager.setTable(networkRef.get(), CyEdge.class,
CyNetwork.HIDDEN_ATTRS, hiddenTable);
+
+ defTable.createColumn(CyTableEntry.NAME, String.class, true);
+ defTable.createColumn(CyNetwork.SELECTED, Boolean.class, true,
Boolean.FALSE);
+ defTable.createColumn(CyEdge.INTERACTION, String.class, true);
}
- private Map<String,CyTable> createEdgeTables(long suidx, CyTableFactory
tableFactory, boolean pubTables, int num) {
- Map<String,CyTable> edgeT = new HashMap<String, CyTable>();
-
- edgeT.put(CyNetwork.DEFAULT_ATTRS,
- tableFactory.createTable(suidx + " default edge",
CyTableEntry.SUID,
- Long.class, pubTables,
false, getInitialTableSize(num)));
- edgeT.put(CyNetwork.HIDDEN_ATTRS,
- tableFactory.createTable(suidx + " hidden edge",
CyTableEntry.SUID,
- Long.class, false,
false, getInitialTableSize(num)));
-
-
edgeT.get(CyNetwork.DEFAULT_ATTRS).createColumn(CyTableEntry.NAME,
String.class, true);
-
edgeT.get(CyNetwork.DEFAULT_ATTRS).createColumn(CyNetwork.SELECTED,
Boolean.class, true, Boolean.FALSE);
-
edgeT.get(CyNetwork.DEFAULT_ATTRS).createColumn(CyEdge.INTERACTION,
String.class, true);
-
- return edgeT;
+ protected static final InitialTableSize getInitialTableSize(final int
num) {
+ if (num < 5)
+ return InitialTableSize.LARGE;
+ else if (num < 15)
+ return InitialTableSize.MEDIUM;
+ else
+ return InitialTableSize.SMALL;
}
- protected static final InitialTableSize getInitialTableSize(int num) {
- if ( num < 5 )
- return InitialTableSize.LARGE;
- else if ( num < 15 )
- return InitialTableSize.MEDIUM;
- else
- return InitialTableSize.SMALL;
- }
-
}
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/SimpleNetwork.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/SimpleNetwork.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/SimpleNetwork.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -31,20 +31,11 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import org.cytoscape.event.CyEventHelper;
import org.cytoscape.model.CyEdge;
-import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
-import org.cytoscape.model.SUIDFactory;
-import org.cytoscape.model.events.ColumnCreatedListener;
-import org.cytoscape.model.events.RowsSetListener;
-import org.cytoscape.service.util.CyServiceRegistrar;
/**
@@ -54,6 +45,8 @@
* add a provided CyNode/CyEdge object to the network topology.
*/
class SimpleNetwork {
+
+ // Unique ID for this
private final Long suid;
// We use IntTHash here because we really don't want to
@@ -66,10 +59,11 @@
private int nodeCount;
private int edgeCount;
+
private NodePointer firstNode;
SimpleNetwork(final long suid) {
- this.suid = Long.valueOf(suid);
+ this.suid = suid;
nodeCount = 0;
edgeCount = 0;
firstNode = null;
@@ -568,16 +562,13 @@
return tentativeEdgeCount;
}
- private EdgePointer getEdgePointer(final CyEdge edge) {
- assert(edge != null);
- return edgePointers.get(edge.getIndex());
- }
-
private NodePointer getNodePointer(final CyNode node) {
assert(node != null);
return nodePointers.get(node.getIndex());
}
+
+ @Override
public boolean equals(final Object o) {
if (!(o instanceof SimpleNetwork))
return false;
@@ -587,11 +578,14 @@
return ag.suid.longValue() == this.suid.longValue();
}
+
+ @Override
public int hashCode() {
return (int) (suid.longValue() ^ (suid.longValue() >>> 32));
}
+ @Override
public String toString() {
return "CyNetwork: " + suid;
}
Modified:
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/CyNetworkTableManagerTest.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/CyNetworkTableManagerTest.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/CyNetworkTableManagerTest.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -29,43 +29,52 @@
import static org.junit.Assert.*;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
+import static org.mockito.Mockito.mock;
+import java.util.Map;
+import java.util.Set;
+import java.util.WeakHashMap;
+
import org.cytoscape.equations.Interpreter;
import org.cytoscape.equations.internal.interpreter.InterpreterImpl;
import org.cytoscape.event.CyEventHelper;
import org.cytoscape.event.DummyCyEventHelper;
-import org.cytoscape.model.CyTableEntry;
-import org.cytoscape.model.CyTable.SavePolicy;
+import org.cytoscape.model.internal.CyNetworkFactoryImpl;
+import org.cytoscape.model.internal.CyNetworkManagerImpl;
import org.cytoscape.model.internal.CyNetworkTableManagerImpl;
+import org.cytoscape.model.internal.CyRootNetworkImpl;
import org.cytoscape.model.internal.CyTableFactoryImpl;
-import org.cytoscape.model.internal.CyTableImpl;
import org.cytoscape.model.internal.CyTableManagerImpl;
-import org.cytoscape.model.internal.CyRootNetworkImpl;
import org.cytoscape.service.util.CyServiceRegistrar;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
-import static org.mockito.Mockito.*;
-
public class CyNetworkTableManagerTest extends
AbstractCyNetworkTableManagerTest {
- CyTableManagerImpl mgrImpl;
- CyNetworkTableManagerImpl networkTableMgr;
+
+ private CyNetworkFactory networkFactory;
+ private CyTableFactory tableFactory;
+ private CyTableManagerImpl tableManager;
+
+ private CyNetworkManager networkManager;
+
+ private CyEventHelper eh = new DummyCyEventHelper();
+ private CyServiceRegistrar serviceRegistrar =
mock(CyServiceRegistrar.class);
@Before
public void setUp() {
super.setUp();
- CyEventHelper eh = new DummyCyEventHelper();
- mgrImpl = new CyTableManagerImpl(eh, networkTableMgr, null);
- networkTableMgr = new CyNetworkTableManagerImpl();
- mgr = networkTableMgr;
+
final Interpreter interpreter = new InterpreterImpl();
- final CyServiceRegistrar serviceRegistrar =
mock(CyServiceRegistrar.class);
- goodNetwork =
- new CyRootNetworkImpl(eh, mgrImpl, networkTableMgr,
- new CyTableFactoryImpl(eh, interpreter,
serviceRegistrar),
- serviceRegistrar, true).getBaseNetwork();
+ this.networkManager = new CyNetworkManagerImpl(eh);
+ this.tableManager = new CyTableManagerImpl(eh, mgr,
networkManager);
+ this.tableFactory = new CyTableFactoryImpl(eh, interpreter,
serviceRegistrar);
+
+ this.mgr = new CyNetworkTableManagerImpl();
+ this.networkFactory = new CyNetworkFactoryImpl(eh,
tableManager, mgr, tableFactory, serviceRegistrar);
+
+ goodNetwork = networkFactory.createNetwork();
}
@After
@@ -73,4 +82,46 @@
mgr = null;
goodNetwork = null;
}
+
+ /*
+ * Once network key has no strong reference, it should be marked for GC.
+ */
+ @Test
+ public void testWeakReferences() throws Exception {
+ mgr = new CyNetworkTableManagerImpl();
+
+ final CyNetwork[] keys = new CyNetwork[2];
+
+ final String tableName1 = "sample1";
+ final String tableName2 = "sample2";
+
+ // Store keys in external array
+ keys[0] = mock(CyNetwork.class);
+ keys[1] = mock(CyNetwork.class);
+
+ CyTable sampleT1 = tableFactory.createTable(tableName1,
CyTableEntry.NAME, String.class, true, true);
+ CyTable sampleT2 = tableFactory.createTable(tableName2,
CyTableEntry.NAME, String.class, true, true);
+
+ mgr.setTable(keys[0], CyNetwork.class, tableName1, sampleT1);
+ mgr.setTable(keys[1], CyNetwork.class, tableName2, sampleT2);
+
+ assertNotNull(mgr.getTable(keys[0], CyNetwork.class,
tableName1));
+ assertNotNull(mgr.getTable(keys[1], CyNetwork.class,
tableName2));
+
+ assertEquals(2, mgr.getNetworkSet().size());
+
+ // remove the key and run GC
+ keys[0] = null;
+ System.gc();
+ Thread.sleep(100);
+
+ assertEquals(1, mgr.getNetworkSet().size());
+
+ // remove the key and run GC again
+ keys[1] = null;
+ System.gc();
+ Thread.sleep(100);
+
+ assertEquals(0, mgr.getNetworkSet().size());
+ }
}
Modified:
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/CyNetworkTest.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/CyNetworkTest.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/CyNetworkTest.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -28,13 +28,12 @@
package org.cytoscape.model;
-import org.cytoscape.model.CyNetwork;
-
import org.junit.After;
import org.junit.Before;
public class CyNetworkTest extends AbstractCyNetworkTest {
+
@Before
public void setUp() {
net = TestCyNetworkFactory.getInstance();
Modified:
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/NetworkTestSupport.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/NetworkTestSupport.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/NetworkTestSupport.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -18,6 +18,9 @@
import static org.mockito.Mockito.*;
+/**
+ * Provides utility methods to create actual network instances for testing.
+ */
public class NetworkTestSupport {
protected CyNetworkFactory networkFactory;
@@ -28,9 +31,14 @@
public NetworkTestSupport() {
eventHelper = new DummyCyEventHelper();
- tableMgr = mock(CyTableManagerImpl.class);
- networkTableMgr = mock(CyNetworkTableManagerImpl.class);
+ networkTableMgr = new CyNetworkTableManagerImpl();
+
+ // Mock objects.
+ final CyNetworkManager networkManager =
mock(CyNetworkManager.class);
final CyServiceRegistrar serviceRegistrar =
mock(CyServiceRegistrar.class);
+
+ tableMgr = new CyTableManagerImpl(eventHelper, networkTableMgr,
networkManager);
+
final CyTableFactoryImpl tableFactory = new
CyTableFactoryImpl(eventHelper, mock(Interpreter.class), serviceRegistrar);
networkFactory = new CyNetworkFactoryImpl(eventHelper,
tableMgr, networkTableMgr, tableFactory, serviceRegistrar);
rootNetworkManager = new CyRootNetworkManagerImpl();
@@ -48,5 +56,3 @@
return rootNetworkManager;
}
}
-
-
Modified:
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/NetworkTestSupportTest.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/NetworkTestSupportTest.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/NetworkTestSupportTest.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -1,6 +1,8 @@
package org.cytoscape.model;
import org.cytoscape.model.AbstractCyNetworkTest;
+import org.junit.After;
+import org.junit.Before;
/**
* This will verify that the network created by NetworkTestSupport
@@ -8,8 +10,17 @@
*/
public class NetworkTestSupportTest extends AbstractCyNetworkTest {
- public NetworkTestSupportTest() {
- NetworkTestSupport support = new NetworkTestSupport();
+ private NetworkTestSupport support;
+
+ @Before
+ public void setUp() {
+ support = new NetworkTestSupport();
net = support.getNetwork();
}
+
+ @After
+ public void tearDown() {
+ net = null;
+ }
+
}
Modified:
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/TestCyNetworkFactory.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/TestCyNetworkFactory.java
2012-03-21 23:15:00 UTC (rev 28611)
+++
core3/impl/trunk/model-impl/impl/src/test/java/org/cytoscape/model/TestCyNetworkFactory.java
2012-03-22 02:13:03 UTC (rev 28612)
@@ -46,6 +46,7 @@
public class TestCyNetworkFactory {
+
public TestCyNetworkFactory() { }
public static CyNetwork getInstance() {
@@ -61,14 +62,14 @@
}
public static CyRootNetwork getPublicRootInstance(DummyCyEventHelper
deh) {
- CyNetworkTableManagerImpl ntm = new CyNetworkTableManagerImpl();
- CyTableManagerImpl tm = new CyTableManagerImpl(deh, ntm, null);
- Interpreter interp = new InterpreterImpl();
+ final CyNetworkTableManagerImpl ntm = new
CyNetworkTableManagerImpl();
+ final CyTableManagerImpl tm = new CyTableManagerImpl(deh, ntm,
null);
+
+ final Interpreter interp = new InterpreterImpl();
final CyServiceRegistrar serviceRegistrar =
mock(CyServiceRegistrar.class);
- CyRootNetworkImpl ar =
- new CyRootNetworkImpl(deh, tm, ntm, new
CyTableFactoryImpl(deh, interp, serviceRegistrar),
- serviceRegistrar, true);
- return ar;
+
+ final CyTableFactoryImpl tableFactory = new
CyTableFactoryImpl(deh, interp, serviceRegistrar);
+ return new CyRootNetworkImpl(deh, tm, ntm, tableFactory,
serviceRegistrar, true);
}
public static CyRootNetwork getPrivateRootInstance() {
--
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.