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.

Reply via email to