Author: clopes
Date: 2012-02-08 14:02:54 -0800 (Wed, 08 Feb 2012)
New Revision: 28214

Modified:
   
core3/api/trunk/session-api/src/main/java/org/cytoscape/session/CySession.java
   
core3/api/trunk/session-api/src/test/java/org/cytoscape/session/CySessionTest.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/AbstractSessionReader.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleEdgeHandleDone.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/ReadCache.java
Log:
Fixes #350 : CySessions need some way of mapping SUID from old objecs to the 
new restored objects

Modified: 
core3/api/trunk/session-api/src/main/java/org/cytoscape/session/CySession.java
===================================================================
--- 
core3/api/trunk/session-api/src/main/java/org/cytoscape/session/CySession.java  
    2012-02-08 19:51:33 UTC (rev 28213)
+++ 
core3/api/trunk/session-api/src/main/java/org/cytoscape/session/CySession.java  
    2012-02-08 22:02:54 UTC (rev 28214)
@@ -36,10 +36,14 @@
 import java.util.Set;
 
 import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTableEntry;
 import org.cytoscape.model.CyTableMetadata;
 import org.cytoscape.property.CyProperty;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.vizmap.VisualStyle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * A session is an immutable snapshot of the data contents of Cytoscape.
@@ -66,20 +70,28 @@
        private final Set<CyNetwork> networks;
        private final Set<CyNetworkView> netViews;
        private final Set<CyTableMetadata> tables;
-       private final Map<CyNetworkView,String> vsMap;
+       private final Map<CyNetworkView, String> vsMap;
        private final Set<CyProperty<?>> properties;
        private final Set<VisualStyle> visualStyles;
        private final Map<String, List<File>> appFiles;
+       private final Map<Class<? extends CyTableEntry>, Map<Object, ? extends 
CyTableEntry>> objectMap;
 
+       private static final Logger logger = 
LoggerFactory.getLogger(CySession.class);
+
        private CySession(Builder b) {
                // Make defensive copies of objects
                networks = Collections.unmodifiableSet( b.networks == null ? 
new HashSet<CyNetwork>() : b.networks );
                netViews = Collections.unmodifiableSet( b.netViews == null ? 
new HashSet<CyNetworkView>() : b.netViews );
                tables = Collections.unmodifiableSet( b.tables == null ? new 
HashSet<CyTableMetadata>() : b.tables );
-               vsMap = Collections.unmodifiableMap( b.vsMap == null ? new 
HashMap<CyNetworkView,String>() : b.vsMap );
+               vsMap = Collections.unmodifiableMap( b.vsMap == null ? new 
HashMap<CyNetworkView, String>() : b.vsMap );
                properties = Collections.unmodifiableSet( b.properties == null 
? new HashSet<CyProperty<?>>() : b.properties );
                visualStyles = Collections.unmodifiableSet( b.visualStyles == 
null ? new HashSet<VisualStyle>() : b.visualStyles );
                appFiles = Collections.unmodifiableMap( b.appFiles == null ? 
new HashMap<String, List<File>>() : b.appFiles );
+               
+               if (b.objectMap == null)
+                       objectMap = Collections.unmodifiableMap(new 
HashMap<Class<? extends CyTableEntry>, Map<Object, ? extends CyTableEntry>>());
+               else
+                       objectMap = Collections.unmodifiableMap(b.objectMap);
        }
 
        /**
@@ -91,10 +103,11 @@
                private Set<CyNetwork> networks; 
                private Set<CyNetworkView> netViews; 
                private Set<CyTableMetadata> tables;
-               private Map<CyNetworkView,String> vsMap; 
+               private Map<CyNetworkView, String> vsMap; 
                private Set<CyProperty<?>> properties;
                private Set<VisualStyle> visualStyles; 
-               private Map<String, List<File>> appFiles; 
+               private Map<String, List<File>> appFiles;
+               private Map<Class<? extends CyTableEntry>, Map<Object, ? 
extends CyTableEntry>> objectMap;
 
                /**
                 * Returns a complete instance of CySession based upon the 
methods called on this instance of Builder.
@@ -141,7 +154,7 @@
                 * @return An instance of Builder that has at least been 
configured with the specified network view visual style
                 *         name map.
                 */
-       public Builder viewVisualStyleMap(final  Map<CyNetworkView,String> vs) 
{ 
+       public Builder viewVisualStyleMap(final  Map<CyNetworkView, String> vs) 
{ 
                        vsMap = vs; 
                        return this;
                }
@@ -178,6 +191,17 @@
                        this.appFiles = p; 
                        return this;
                }
+               
+               /**
+                * Returns an instance of Builder that has at least been 
configured with the specified old ID maps.
+                * @param map A map of {@link CyTableEntry} types to maps that 
have former identifiers as keys and {@link CyNode}s,
+                *            {@link CyEdge}s, {@link CyNetwork}s or {@link 
CyNetworkView}s as values.
+                * @return An instance of Builder that has at least been 
configured with the specified map.
+                */
+               public Builder objectMap(final Map<Class<? extends 
CyTableEntry>, Map<Object, ? extends CyTableEntry>> map) { 
+                       this.objectMap = map; 
+                       return this;
+               }
        }
 
        /**
@@ -202,7 +226,7 @@
         * Returns a map of CyNetworkViews to the names of the VisualStyle 
applied to that network view in this session.
         * @return A map of CyNetworkViews to the names of the VisualStyle 
applied to that network view in this session.
         */
-    public Map<CyNetworkView,String> getViewVisualStyleMap() { return vsMap; }
+    public Map<CyNetworkView, String> getViewVisualStyleMap() { return vsMap; }
 
        /**
         * Returns a set of {@link CyProperty} objects defined for this session.
@@ -221,4 +245,35 @@
         * @return A map of app names to lists of File objects that are stored 
as part of the session for the specified app.
         */
        public Map<String, List<File>> getAppFileListMap() { return appFiles; }
+       
+       /**
+        * When a session is restored, Cytoscape automatically generates new 
SUIDs. This method returns an object 
+        * ({@link CyNode}, {@link CyEdge}, {@link CyNetwork} or {@link 
CyNetworkView}) given its former identifier.<br/>
+        * If the original version of the restored session is 3.0 or higher, 
the former ID is an SUID, which is a
+        * {@link java.lang.Long}. However, if the session was recreated from a 
2.x format, the former identifier is a
+        * {@link java.lang.String} (e.g. the network's name).<br/>
+        * @param oldId The former ID.
+        * @param type The Class of the object to be returned ({@link CyNode}, 
{@link CyEdge}, {@link CyNetwork} or
+        *            {@link CyNetworkView}).
+        * @return An object ({@link CyNode}, {@link CyEdge}, {@link CyNetwork} 
or {@link CyNetworkView}) given its former
+        *         identifier.
+        */
+       @SuppressWarnings("unchecked")
+       public <T extends CyTableEntry> T getObject(Object oldId, Class<T> 
type) {
+               T tableEntry = null;
+               Map<Object, ? extends CyTableEntry> objByIdMap = 
objectMap.get(type);
+               
+               if (objByIdMap != null) {
+                       Object obj = objByIdMap.get(oldId);
+                       
+                       try {
+                               tableEntry = (T) obj;
+                       } catch (ClassCastException cce) { // TODO: should it 
just throw the Exception?
+                               logger.error("ClassCastException: Tried to cast 
object " + obj + " to " + type + " (old id = " + oldId
+                                               + ")");
+                       }
+               }
+               
+               return tableEntry;
+       }
 }

Modified: 
core3/api/trunk/session-api/src/test/java/org/cytoscape/session/CySessionTest.java
===================================================================
--- 
core3/api/trunk/session-api/src/test/java/org/cytoscape/session/CySessionTest.java
  2012-02-08 19:51:33 UTC (rev 28213)
+++ 
core3/api/trunk/session-api/src/test/java/org/cytoscape/session/CySessionTest.java
  2012-02-08 22:02:54 UTC (rev 28214)
@@ -2,6 +2,8 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 
@@ -14,11 +16,16 @@
 import java.util.Properties;
 import java.util.Set;
 
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyTableEntry;
 import org.cytoscape.model.CyTableMetadata;
 import org.cytoscape.property.CyProperty;
 import org.cytoscape.property.SimpleCyProperty;
 import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.view.model.View;
 import org.cytoscape.view.vizmap.VisualStyle;
 import org.junit.Test;
 
@@ -220,6 +227,56 @@
                assertEquals(l2,session.getAppFileListMap().get("app2"));
        }
 
+       @Test
+       public void testSetNullObjectMap() {
+               session = new CySession.Builder().objectMap(null).build();
+               assertNotNull(session);
+               assertNull(session.getObject(1, CyNode.class));
+               assertNull(session.getObject(1, CyEdge.class));
+               assertNull(session.getObject(1, CyNetwork.class));
+               assertNull(session.getObject(1, CyNetworkView.class));
+               assertNull(session.getObject(1, View.class));
+       }
+       
+       @Test
+       public void testSetObjectMap() {
+               Map<Object, CyNetwork> netMap = new HashMap<Object, 
CyNetwork>();
+               CyNetwork net1 = mock(CyNetwork.class);
+               netMap.put("A", net1);
+               CyNetwork net2 = mock(CyNetwork.class);
+               netMap.put("B", net2);
+               
+               Map<Object, CyNetworkView> viewMap = new HashMap<Object, 
CyNetworkView>();
+               CyNetworkView view1 = mock(CyNetworkView.class);
+               viewMap.put("A", view1);
+               
+               Map<Object, CyNode> nodeMap = new HashMap<Object, CyNode>();
+               CyNode n1 = mock(CyNode.class);
+               nodeMap.put(new Long(1), n1);
+               CyNode n2 = mock(CyNode.class);
+               nodeMap.put(new Long(2), n2);
+               
+               Map<Object, CyEdge> edgeMap = new HashMap<Object, CyEdge>();
+               CyEdge e1 = mock(CyEdge.class);
+               edgeMap.put(new Long(3), e1);
+                               
+               Map<Class<? extends CyTableEntry>, Map<Object, ? extends 
CyTableEntry>> objMap = new HashMap<Class<? extends CyTableEntry>, Map<Object, 
? extends CyTableEntry>>();
+               objMap.put(CyNetwork.class, netMap);
+               objMap.put(CyNetworkView.class, viewMap);
+               objMap.put(CyNode.class, nodeMap);
+               objMap.put(CyEdge.class, edgeMap);
+               
+               session = new CySession.Builder().objectMap(objMap).build();
+               assertNotNull(session);
+               assertSame(net1, session.getObject("A", CyNetwork.class));
+               assertSame(net2, session.getObject("B", CyNetwork.class));
+               assertSame(view1, session.getObject("A", CyNetworkView.class));
+               assertSame(n1, session.getObject(new Long(1), CyNode.class));
+               assertSame(n2, session.getObject(new Long(2), CyNode.class));
+               assertSame(e1, session.getObject(new Long(3), CyEdge.class));
+               assertNull(session.getObject("A", View.class));
+               assertNull(session.getObject("B", CyNetworkView.class));
+       }
 
        private void checkProps(Set<CyProperty<?>> set) {
                assertNotNull(set);

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/AbstractSessionReader.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/AbstractSessionReader.java
       2012-02-08 19:51:33 UTC (rev 28213)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/AbstractSessionReader.java
       2012-02-08 22:02:54 UTC (rev 28214)
@@ -44,6 +44,7 @@
 import org.cytoscape.io.internal.util.session.SessionUtil;
 import org.cytoscape.io.read.CySessionReader;
 import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyTableEntry;
 import org.cytoscape.model.CyTableMetadata;
 import org.cytoscape.property.CyProperty;
 import org.cytoscape.session.CySession;
@@ -70,6 +71,7 @@
        protected final Map<CyNetworkView, String> visualStyleMap = new 
HashMap<CyNetworkView, String>();
        protected final Set<CyTableMetadata> tableMetadata = new 
HashSet<CyTableMetadata>();
        protected final Map<String, List<File>> appFileListMap = new 
HashMap<String, List<File>>();
+       protected final Map<Class<? extends CyTableEntry>, Map<Object, ? 
extends CyTableEntry>> objectMap = new HashMap<Class<? extends CyTableEntry>, 
Map<Object, ? extends CyTableEntry>>();
        
        private boolean inputStreamRead;
        
@@ -105,7 +107,7 @@
        public CySession getSession() {
                CySession ret = new 
CySession.Builder().networks(networks).networkViews(networkViews)
                                
.viewVisualStyleMap(visualStyleMap).properties(properties).visualStyles(visualStyles)
-                               
.appFileListMap(appFileListMap).tables(tableMetadata)
+                               
.appFileListMap(appFileListMap).tables(tableMetadata).objectMap(objectMap)
                                .build();
        
                return ret;
@@ -136,6 +138,11 @@
                tm.setStatusMessage("Processing network pointers...");
                processNetworkPointers();
                
+               tm.setProgress(0.98);
+               tm.setTitle("Finalize");
+               tm.setStatusMessage("Finalizing...");
+               createObjectMap();
+               
                tm.setProgress(1.0);
        }
 
@@ -250,6 +257,8 @@
                
                return is;
        }
+       
+       abstract void createObjectMap();
 
        /**
         *  We need this class to avoid the progress-bar showing back-forth  
when extract zipEntries.

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
        2012-02-08 19:51:33 UTC (rev 28213)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
        2012-02-08 22:02:54 UTC (rev 28214)
@@ -193,6 +193,14 @@
                super.complete(tm);
        }
        
+       @Override
+       protected void createObjectMap() {
+               objectMap.put(CyNetwork.class, cache.getNetworkByIdMap());
+               objectMap.put(CyNetworkView.class, 
cache.getNetworkViewByIdMap());
+               objectMap.put(CyNode.class, cache.getNodeByNameMap()); // In 
2.x, the node name is the ID (not the XGMML id)
+               objectMap.put(CyEdge.class, cache.getEdgeByIdMap());
+       }
+       
        private void extractNetworks(TaskMonitor tm) throws JAXBException, 
IOException {
                // Extract the XGMML files
                Map<String, Network> netMap = new HashMap<String, Network>();
@@ -312,6 +320,7 @@
                                                CyNetworkView view = 
reader.buildCyNetworkView(net);
                                                networkViewLookup.put(netName, 
view);
                                                networkViews.add(view);
+                                               cache.cache(netName, view);
                                        }
 //                             }
                        }
@@ -426,10 +435,8 @@
                                if (netFrames != null) {
                                        for (NetworkFrame nf : 
netFrames.getNetworkFrame()) {
                                                String id = nf.getFrameID();
-                                               // TODO: convert frame title to 
*old* view's SUID?
                                                String x = nf.getX() != null ? 
nf.getX().toString() : "0";
                                                String y = nf.getY() != null ? 
nf.getY().toString() : "0";
-                                               
                                                sb.append("        
<networkFrame frameID=\""+id+"\" x=\""+x+"\" y=\""+y+"\"/>\n");
                                        }
                                }

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
        2012-02-08 19:51:33 UTC (rev 28213)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
        2012-02-08 22:02:54 UTC (rev 28214)
@@ -71,8 +71,10 @@
 import org.cytoscape.io.read.VizmapReader;
 import org.cytoscape.io.read.VizmapReaderManager;
 import org.cytoscape.model.CyColumn;
+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;
@@ -199,6 +201,14 @@
                super.complete(tm);
        }
 
+       @Override
+       protected void createObjectMap() {
+               objectMap.put(CyNetwork.class, cache.getNetworkByIdMap());
+               objectMap.put(CyNetworkView.class, 
cache.getNetworkViewByIdMap());
+               objectMap.put(CyNode.class, cache.getNodeByIdMap());
+               objectMap.put(CyEdge.class, cache.getEdgeByIdMap());
+       }
+       
        private void extractCyTableMetadata(InputStream tmpIs, String 
entryName) throws IOException {
                BufferedReader reader = new BufferedReader(new 
InputStreamReader(tmpIs, "UTF-8"));
                virtualColumns = new ArrayList<VirtualColumnSerializer>();
@@ -306,6 +316,7 @@
                                
                                final CyNetworkView view = 
reader.buildCyNetworkView(network);
                                networkViews.add(view);
+                               cache.cache(view.getSUID(), view);
                                
                                // Get its visual style name
                                if (reader instanceof XGMMLNetworkViewReader) {

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleEdgeHandleDone.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleEdgeHandleDone.java
  2012-02-08 19:51:33 UTC (rev 28213)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleEdgeHandleDone.java
  2012-02-08 22:02:54 UTC (rev 28214)
@@ -34,14 +34,13 @@
 public class HandleEdgeHandleDone extends AbstractHandler {
 
        @Override
-       public ParseState handle(String tag, Attributes atts, ParseState 
current)
-                       throws SAXException {
-               if (manager.edgeBendX != null && manager.edgeBendY != null
-                               && manager.handleList != null) {
+       public ParseState handle(String tag, Attributes atts, ParseState 
current) throws SAXException {
+               if (manager.edgeBendX != null && manager.edgeBendY != null && 
manager.handleList != null) {
                        manager.handleList.add(manager.edgeBendX + "," + 
manager.edgeBendY);
                        manager.edgeBendX = null;
                        manager.edgeBendY = null;
                }
+               
                return current;
        }
 }
\ No newline at end of file

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/ReadCache.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/ReadCache.java
   2012-02-08 19:51:33 UTC (rev 28213)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/ReadCache.java
   2012-02-08 22:02:54 UTC (rev 28214)
@@ -35,6 +35,7 @@
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyTableEntry;
+import org.cytoscape.view.model.CyNetworkView;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,12 +49,13 @@
        private Map<CyNode, Object/*network's id*/> networkPointerMap;
        
        /* Maps of XML ID's to elements (the keys should be a Long if reading a 
Cy3 session file) */
-       private Map<Object, CyNetwork> networkById;
-       private Map<Object, CyNode> nodeById;
-       private Map<Object, CyEdge> edgeById;
+       private Map<Object, CyNetwork> networkByIdMap;
+       private Map<Object, CyNetworkView> networkViewByIdMap;
+       private Map<Object, CyNode> nodeByIdMap;
+       private Map<Object, CyEdge> edgeByIdMap;
        
        /* Maps of node labels to nodes (necessary because of 2.x sessions, 
which uses the node label as its session ID) */
-       private Map<String, CyNode> nodeByName;
+       private Map<Object, CyNode> nodeByNameMap;
        
        private Map<CyNetwork, Set<Long>> nodeLinkMap;
        private Map<CyNetwork, Set<Long>> edgeLinkMap;
@@ -64,11 +66,12 @@
                oldIdMap = new HashMap<Long, Object>();
                indexMap = new HashMap<Object, Integer>();
                
-               nodeById = new HashMap<Object, CyNode>();
-               edgeById = new HashMap<Object, CyEdge>();
-               networkById = new HashMap<Object, CyNetwork>();
+               nodeByIdMap = new HashMap<Object, CyNode>();
+               edgeByIdMap = new HashMap<Object, CyEdge>();
+               networkByIdMap = new HashMap<Object, CyNetwork>();
+               networkViewByIdMap = new HashMap<Object, CyNetworkView>();
                
-               nodeByName = new HashMap<String, CyNode>();
+               nodeByNameMap = new HashMap<Object, CyNode>();
                
                nodeLinkMap = new HashMap<CyNetwork, Set<Long>>();
                edgeLinkMap = new HashMap<CyNetwork, Set<Long>>();
@@ -76,11 +79,12 @@
        }
        
        public void dispose() {
-               nodeById = null;
-               edgeById = null;
-               networkById = null;
+               nodeByIdMap = null;
+               edgeByIdMap = null;
+               networkByIdMap = null;
+               networkViewByIdMap = null;
                
-               nodeByName = null;
+               nodeByNameMap = null;
                
                nodeLinkMap = null;
                edgeLinkMap = null;
@@ -95,25 +99,22 @@
        public void cache(Object xgmmlId, CyTableEntry element) {
        int index = -1;
        
-       if (element instanceof CyNode) {
-               if (xgmmlId != null)
-                       nodeById.put(xgmmlId, (CyNode) element);
-               
-               index = ((CyNode) element).getIndex();
-       } else if (element instanceof CyEdge) {
-               if (xgmmlId != null)
-                       edgeById.put(xgmmlId, (CyEdge) element);
-               
-               index = ((CyEdge) element).getIndex();
-       } else if (element instanceof CyNetwork) {
-               if (xgmmlId != null)
-                       networkById.put(xgmmlId, (CyNetwork) element);
-           }
-           
-       if (xgmmlId != null) {
-               oldIdMap.put(element.getSUID(), xgmmlId);
+               if (xgmmlId != null) {
+                       if (element instanceof CyNode) {
+                               nodeByIdMap.put(xgmmlId, (CyNode) element);
+                               index = ((CyNode) element).getIndex();
+                       } else if (element instanceof CyEdge) {
+                               edgeByIdMap.put(xgmmlId, (CyEdge) element);
+                               index = ((CyEdge) element).getIndex();
+                       } else if (element instanceof CyNetwork) {
+                               networkByIdMap.put(xgmmlId, (CyNetwork) 
element);
+                       } else if (element instanceof CyNetworkView) {
+                               networkViewByIdMap.put(xgmmlId, (CyNetworkView) 
element);
+                       }
+
+                       oldIdMap.put(element.getSUID(), xgmmlId);
                        indexMap.put(xgmmlId, index);
-       }
+               }
     }
        
        /**
@@ -123,7 +124,7 @@
         */
        public void cacheNodeByName(String name, CyNode node) {
                if (name != null && !name.isEmpty() && node != null)
-                       nodeByName.put(name,  node);
+                       nodeByNameMap.put(name,  node);
        }
        
        public void addNetworkPointer(CyNode node, Object networkId) {
@@ -142,11 +143,13 @@
        @SuppressWarnings("unchecked")
        public <T extends CyTableEntry> T getObjectById(Object oldId, Class<T> 
type) {
                if (type == CyNetwork.class)
-                       return (T) networkById.get(oldId);
+                       return (T) networkByIdMap.get(oldId);
+               if (type == CyNetworkView.class)
+                       return (T) networkViewByIdMap.get(oldId);
                if (type == CyNode.class)
-                       return (T) nodeById.get(oldId);
+                       return (T) nodeByIdMap.get(oldId);
                if (type == CyEdge.class)
-                       return (T) edgeById.get(oldId);
+                       return (T) edgeByIdMap.get(oldId);
                
                return null;
        }
@@ -156,19 +159,23 @@
        }
        
        public CyNetwork getNetwork(Object oldId) {
-               return networkById.get(oldId);
+               return networkByIdMap.get(oldId);
        }
        
+       public CyNetworkView getNetworkView(Object oldId) {
+               return networkViewByIdMap.get(oldId);
+       }
+       
        public CyNode getNode(Object oldId) {
-               return nodeById.get(oldId);
+               return nodeByIdMap.get(oldId);
        }
        
        public CyEdge getEdge(Object oldId) {
-               return edgeById.get(oldId);
+               return edgeByIdMap.get(oldId);
        }
        
        public CyNode getNodeByName(String nodeName) {
-               return nodeByName.get(nodeName);
+               return nodeByNameMap.get(nodeName);
        }
        
        public Map<CyNetwork, Set<Long>> getNodeLinks() {
@@ -179,6 +186,26 @@
                return edgeLinkMap;
        }
        
+       public Map<Object, CyNetwork> getNetworkByIdMap() {
+               return networkByIdMap;
+       }
+       
+       public Map<Object, CyNetworkView> getNetworkViewByIdMap() {
+               return networkViewByIdMap;
+       }
+
+       public Map<Object, CyNode> getNodeByIdMap() {
+               return nodeByIdMap;
+       }
+
+       public Map<Object, CyEdge> getEdgeByIdMap() {
+               return edgeByIdMap;
+       }
+
+       public Map<Object, CyNode> getNodeByNameMap() {
+               return nodeByNameMap;
+       }
+
        public void createNetworkPointers() {
                if (networkPointerMap != null) {
                        // Iterate the rows and recreate the network pointers

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