Author: clopes
Date: 2012-02-07 12:35:51 -0800 (Tue, 07 Feb 2012)
New Revision: 28207

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/Cy3SessionReaderImpl.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkViewReader.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AbstractHandler.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AttributeValueUtil.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleEdge.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleGraph.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleGraphDone.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNode.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNodeAttribute.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNodeGraph.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewEdge.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewEdgeGraphics.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewGraph.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewLockedVisualPropAttribute.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewNode.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewNodeGraphics.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/ReadDataManager.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/ReadCache.java
Log:
Changes how the xgmml parser handles and caches object IDs--it should prevent 
potential collisions when caching node labels, node IDs and network names 
(specially when reading 2.x sessions).

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-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
        2012-02-07 20:35:51 UTC (rev 28207)
@@ -581,25 +581,11 @@
                if (it == null)
                        return;
 
-               // create an id map
-               Map<String, CyNode> nodeMap = new HashMap<String, CyNode>();
-
-               for (CyNode n : net.getNodeList()) {
-                       CyRow row = net.getRow(n);
-                       String name = row.get(CyNetwork.NAME, String.class);
-                       
-                       if (name == null) // try another column...
-                               name = row.get(CyRootNetwork.SHARED_NAME, 
String.class);
-                       
-                       if (name != null)
-                               nodeMap.put(name, n);
-               }
-
                // set attr values based on ids
                while (it.hasNext()) {
                        final Node nodeObject = (Node) it.next();
                        String name = nodeObject.getId();
-                       CyNode n = nodeMap.get(name);
+                       CyNode n = cache.getNodeByName(name); // The XGMML node 
"id" is only used internally, by the XGMML parser.
 
                        if (n != null)
                                net.getRow(n, tableName).set(attrName, true);
@@ -613,25 +599,11 @@
                if (it == null)
                        return;
 
-               // create an id map
-               Map<String, CyEdge> edgeMap = new HashMap<String, CyEdge>();
-               
-               for (CyEdge e : net.getEdgeList()) {
-                       CyRow row = net.getRow(e);
-                       String name = row.get(CyNetwork.NAME, String.class);
-                       
-                       if (name == null) // try another column...
-                               name = row.get(CyRootNetwork.SHARED_NAME, 
String.class);
-                       
-                       if (name != null)
-                               edgeMap.put(name, e);
-               }
-
                // set attr values based on ids
                while (it.hasNext()) {
                        final Edge edgeObject = (Edge) it.next();
                        String name = edgeObject.getId();
-                       CyEdge e = edgeMap.get(name);
+                       CyEdge e = cache.getEdge(name); // In 2.x, XGMML edge 
elements have no "id" attribute--the label is the id.
 
                        if (e != null)
                                net.getRow(e, tableName).set(attrName, true);

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-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
        2012-02-07 20:35:51 UTC (rev 28207)
@@ -97,7 +97,7 @@
        public static final Pattern PROPERTIES_PATTERN = 
Pattern.compile(".*/"+PROPERTIES_FOLDER+"?(([^/]+)[.](props|properties))");
        
        private final Map<Long/*network_suid*/, CyNetwork> networkLookup = new 
HashMap<Long, CyNetwork>();
-       private final Map<String/*old_network_id*/, 
Set<CyTableMetadataBuilder>> networkTableMap = new HashMap<String, 
Set<CyTableMetadataBuilder>>();
+       private final Map<Long/*old_network_id*/, Set<CyTableMetadataBuilder>> 
networkTableMap = new HashMap<Long, Set<CyTableMetadataBuilder>>();
 
        private final CyNetworkReaderManager networkReaderMgr;
        private final CyPropertyReaderManager propertyReaderMgr;
@@ -225,7 +225,12 @@
                
                if (matcher.matches()) {
                        String networkName = 
SessionUtil.unescape(matcher.group(2));
-                       String oldNetId = getOldNetworkId(networkName);
+                       Long oldNetId = getOldNetworkId(networkName);
+                       
+                       if (oldNetId == null) {
+                               throw new NullPointerException("Cannot extract 
table. Network SUID is null for entry: " + entryName);
+                       }
+                       
                        String namespace = 
SessionUtil.unescape(matcher.group(3));
                        Class<?> type = 
Class.forName(SessionUtil.unescape(matcher.group(4)));
                        String title = SessionUtil.unescape(matcher.group(5));
@@ -276,19 +281,23 @@
        private void extractNetworkView(InputStream is, String entryName) 
throws Exception {
                // Get the token which identifies the network
                Matcher matcher = NETWORK_VIEW_PATTERN.matcher(entryName);
-               String oldNetId = null;
+               Long oldNetId = null;
                
                if (matcher.matches()) {
                        String netViewToken = matcher.group(2);
                        matcher = 
NETWORK_VIEW_NAME_PATTERN.matcher(netViewToken);
                        
-                       if (matcher.matches())
-                               oldNetId = matcher.group(1);
+                       if (matcher.matches()) {
+                               try {
+                                       oldNetId = 
Long.valueOf(matcher.group(1));
+                               } catch (NumberFormatException nfe) {
+                                       logger.error("Cannot extract network 
view SUID from: " + netViewToken);
+                               }
+                       }
                }
                
-               if (oldNetId != null && !oldNetId.isEmpty()) {
-                       final Long netId = cache.getNewId(oldNetId);
-                       final CyNetwork network = networkLookup.get(netId);
+               if (oldNetId != null) {
+                       final CyNetwork network = cache.getNetwork(oldNetId);
                        
                        if (network != null) {
                                // Create the view
@@ -307,7 +316,7 @@
                                }
                        }
                } else {
-                       logger.error("The network view entry is invalid: " + 
entryName);
+                       logger.error("The network view will cannot be 
recreated. The network view entry is invalid: " + entryName);
                }
        }
 
@@ -419,7 +428,7 @@
        private void mergeNetworkTables() throws UnsupportedEncodingException {
                for (Entry<Long, CyNetwork> entry : networkLookup.entrySet()) {
                        CyNetwork network = entry.getValue();
-                       String oldId = cache.getOldId(network.getSUID());
+                       Object oldId = cache.getOldId(network.getSUID());
                        Set<CyTableMetadataBuilder> builders = 
networkTableMap.get(oldId);
 
                        if (builders == null)
@@ -450,12 +459,11 @@
                Map<String, CyTable> tableMap = 
networkTableManager.getTables(network, type);
                CyTable targetTable = tableMap.get(namespace);
                CyTable sourceTable = builder.getTable();
-               Map<String, Long> mappings = cache.getIdMap();
-               mergeTables(sourceTable, targetTable, mappings);
+               mergeTables(sourceTable, targetTable, type);
                builder.setCyTable(targetTable);
        }
        
-       private void mergeTables(CyTable source, CyTable target, Map<String, 
Long> mappings) {
+       private void mergeTables(CyTable source, CyTable target, Class<? 
extends CyTableEntry> type) {
                CyColumn sourceKey = source.getPrimaryKey();
                CyColumn targetKey = target.getPrimaryKey();
                String keyName = sourceKey.getName();
@@ -464,10 +472,9 @@
                if (keyName.equals(targetKey.getName())) {
                        for (CyRow sourceRow : source.getAllRows()) {
                                Long key = sourceRow.get(keyName, Long.class);
-                               Long mappedKey = null;
-
-                               if (mappings != null)
-                                       mappedKey = mappings.get(""+key);
+                               CyTableEntry entry = cache.getObjectById(key, 
type);
+                               Long mappedKey = entry != null ? 
entry.getSUID() : null;
+                               
                                if (mappedKey == null)
                                        mappedKey = key;
 
@@ -512,12 +519,18 @@
         * @param networkToken
         * @return
         */
-       private static String getOldNetworkId(final String networkToken) {
-               String id = null;
+       private Long getOldNetworkId(final String networkToken) {
+               Long id = null;
                Matcher matcher = NETWORK_NAME_PATTERN.matcher(networkToken);
                
                if (matcher.matches()) {
-                       id = matcher.group(1);
+                       String s = matcher.group(1);
+                       
+                       try {
+                               id = Long.valueOf(s);
+                       } catch (NumberFormatException nfe) {
+                               logger.error("Cannot extract network SUID from: 
" + networkToken);
+                       }
                }
                
                return id;

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkViewReader.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkViewReader.java
        2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkViewReader.java
        2012-02-07 20:35:51 UTC (rev 28207)
@@ -89,7 +89,7 @@
                
                // When parsing view-format XGMML, the manager does not have 
the network model
                // to create a map by CyNode objects, so the graphics mapping 
is indexed by the old element id.
-               String oldId = readDataMgr.getCache().getOldId(node.getSUID());
+               Object oldId = readDataMgr.getCache().getOldId(node.getSUID());
                
                // Direct visual properties
                Map<String, String> atts = 
readDataMgr.getViewGraphicsAttributes(oldId, false);
@@ -108,7 +108,7 @@
                
                // When parsing view-format XGMML, the manager does not have 
the network model
                // to create a map by CyEdge objects, so the graphics mapping 
is indexed by the old element id.
-               String oldId = readDataMgr.getCache().getOldId(edge.getSUID());
+               Object oldId = readDataMgr.getCache().getOldId(edge.getSUID());
                
                // Direct visual properties
                Map<String, String> atts = 
readDataMgr.getViewGraphicsAttributes(oldId, false);

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AbstractHandler.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AbstractHandler.java
       2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AbstractHandler.java
       2012-02-07 20:35:51 UTC (rev 28207)
@@ -60,4 +60,35 @@
        public void setAttributeValueUtil(AttributeValueUtil 
attributeValueUtil) {
                this.attributeValueUtil = attributeValueUtil;
        }
+       
+       protected String getLabel(Attributes atts) {
+               String label = atts.getValue("label");
+               
+               if (label == null || label.isEmpty())
+                       label = atts.getValue("id");
+
+               return label;
+       }
+       
+       protected Object getId(Attributes atts) {
+               Object id = atts.getValue("id");
+
+               if (id != null) {
+                       final String str = id.toString().trim();
+
+                       if (!str.isEmpty()) {
+                               try {
+                                       id = Long.valueOf(str);
+                               } catch (NumberFormatException nfe) {
+                                       logger.debug("Graph id is not a number: 
" + id);
+                                       id = str;
+                               }
+                       }
+               }
+               
+               if (id == null || id.toString().isEmpty())
+                       id = atts.getValue("label");
+               
+               return id;
+       }
 }

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AttributeValueUtil.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AttributeValueUtil.java
    2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AttributeValueUtil.java
    2012-02-07 20:35:51 UTC (rev 28207)
@@ -251,8 +251,8 @@
        return version;
        }
     
-       public static String getIdFromXLink(String href) {
+       public static Long getIdFromXLink(String href) {
                Matcher matcher = XLINK_PATTERN.matcher(href);
-               return matcher.matches() ? matcher.group(1) : null;
+               return matcher.matches() ? Long.valueOf(matcher.group(1)) : 
null;
        }
 }

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleEdge.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleEdge.java
    2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleEdge.java
    2012-02-07 20:35:51 UTC (rev 28207)
@@ -42,10 +42,10 @@
                
                if (href == null) {
                        // Create the edge:
-                       String id = atts.getValue("id");
-                       String label = atts.getValue("label");
-                       String sourceId = atts.getValue("source");
-                       String targetId = atts.getValue("target");
+                       Object id = getId(atts);
+                       String label = getLabel(atts);
+                       Object sourceId = 
asLongOrString(atts.getValue("source"));
+                       Object targetId = 
asLongOrString(atts.getValue("target"));
                        String isDirected = atts.getValue("cy:directed");
                        String sourceAlias = null;
                        String targetAlias = null;
@@ -92,10 +92,8 @@
                        if (targetNode == null && targetAlias != null)
                                targetNode = 
manager.getCache().getNode(targetAlias);
                        
-                       if (id == null || id.isEmpty())
-                               id = label;
-                       if (id == null || id.isEmpty())
-                               id = String.format("%s (%s) %s", sourceId, 
(directed ? "directed" : "undirected"), targetId);
+                       if (label == null || label.isEmpty())
+                               label = String.format("%s (%s) %s", sourceId, 
(directed ? "directed" : "undirected"), targetId);
                        
                        if (sourceNode != null && targetNode != null) {
                                manager.createEdge(sourceNode, targetNode, id, 
label, interaction, directed);
@@ -111,4 +109,16 @@
 
                return current;
        }
+       
+       private Object asLongOrString(String value) {
+               if (value != null) {
+                       value = value.trim();
+                       
+                       try {
+                               return Long.valueOf(value);
+                       } catch (NumberFormatException nfe) { }
+               }
+               
+               return value;
+       }
 }

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleGraph.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleGraph.java
   2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleGraph.java
   2012-02-07 20:35:51 UTC (rev 28207)
@@ -62,7 +62,6 @@
        }
        
        private ParseState handleCy2ModelAndView(String tag, Attributes atts, 
ParseState current) throws SAXException {
-               final String label = getLabel(atts); // This is the network ID 
in 2.x
                final CyRootNetwork parent = manager.getParentNetwork();
                final CyNetwork currentNet;
                
@@ -82,13 +81,13 @@
                        currentNet = rootNet.addSubNetwork();
                }
                
-               addCurrentNetwork(label, currentNet, atts);
+               final String id = getLabel(atts); // This is the network ID in 
2.x
+               addCurrentNetwork(id, currentNet, atts);
                
                return current;
        }
        
        private ParseState handleCy3Model(String tag, Attributes atts, 
ParseState current) throws SAXException {
-               final String id = getId(atts);
                final CyNetwork currentNet;
                
                if (manager.graphCount == 1) {
@@ -104,6 +103,7 @@
                        currentNet = rootNet.addSubNetwork();
                }
                
+               final Object id = getId(atts);
                addCurrentNetwork(id, currentNet, atts);
                
                return current;
@@ -111,7 +111,6 @@
        
        private ParseState handleGenericXGMMLGraph(String tag, Attributes atts, 
ParseState current) throws SAXException {
                final CyNetwork currentNet;
-               String id = getId(atts);
 
                if (manager.graphCount == 1) {
                        // Root (graph) element...
@@ -123,6 +122,7 @@
                        currentNet = rootNet.addSubNetwork();
                }
 
+               final Object id = getId(atts);
                addCurrentNetwork(id, currentNet, atts);
 
                return current;
@@ -134,16 +134,16 @@
         * @param atts The attributes of the graph tag
         * @return The string identifier of the network
         */
-       protected String addCurrentNetwork(String oldId, CyNetwork net, 
Attributes atts) {
+       protected Object addCurrentNetwork(Object oldId, CyNetwork net, 
Attributes atts) {
                if (oldId == null)
                        oldId = String.format("_graph%s_%s", 
manager.graphCount, net.getSUID());
                
                manager.setCurrentNetwork(net);
-               manager.getNetworkStack().push(oldId);
+               manager.getNetworkIDStack().push(oldId);
                
                if (net != null) {
                        manager.setCurrentRow(net.getRow(net));
-                       manager.getCache().cache(net, oldId);
+                       manager.getCache().cache(oldId, net);
                        
                        if (!(net instanceof CyRootNetwork))
                                manager.addNetwork(net);
@@ -190,22 +190,4 @@
                        netRow.set(CyNetwork.NAME, name);
                }
        }
-       
-       protected String getLabel(Attributes atts) {
-               String label = atts.getValue("label");
-               
-               if (label == null || label.isEmpty())
-                       label = atts.getValue("id");
-
-               return label;
-       }
-       
-       protected String getId(Attributes atts) {
-               String id = atts.getValue("id");
-               
-               if (id == null || id.isEmpty())
-                       id = atts.getValue("label");
-               
-               return id;
-       }
 }

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleGraphDone.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleGraphDone.java
       2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleGraphDone.java
       2012-02-07 20:35:51 UTC (rev 28207)
@@ -53,17 +53,17 @@
                        return current;
                
                // Resolve any unresolved node and edge references
-               Map<CyNetwork, Set<String>> nodeMap = 
manager.getCache().getNodeLinks();
+               Map<CyNetwork, Set<Long>> nodeMap = 
manager.getCache().getNodeLinks();
                
-               for (Map.Entry<CyNetwork, Set<String>> entry : 
nodeMap.entrySet()) {
+               for (Map.Entry<CyNetwork, Set<Long>> entry : 
nodeMap.entrySet()) {
                        CyNetwork net = entry.getKey();
-                       Set<String> ids = entry.getValue();
+                       Set<Long> ids = entry.getValue();
                        
                        if (net != null && ids != null && !ids.isEmpty()) {
                                if (net instanceof CySubNetwork) {
                                        CySubNetwork sn = (CySubNetwork) net;
                                        
-                                       for (String id : ids) {
+                                       for (Long id : ids) {
                                                CyNode n = 
manager.getCache().getNode(id);
                                                
                                                if (n != null)
@@ -79,17 +79,17 @@
                }
                
                // TODO: refactor
-               Map<CyNetwork, Set<String>> edgeMap = 
manager.getCache().getEdgeLinks();
+               Map<CyNetwork, Set<Long>> edgeMap = 
manager.getCache().getEdgeLinks();
                
-               for (Map.Entry<CyNetwork, Set<String>> entry : 
edgeMap.entrySet()) {
+               for (Map.Entry<CyNetwork, Set<Long>> entry : 
edgeMap.entrySet()) {
                        CyNetwork net = entry.getKey();
-                       Set<String> ids = entry.getValue();
+                       Set<Long> ids = entry.getValue();
                        
                        if (net != null && ids != null && !ids.isEmpty()) {
                                if (net instanceof CySubNetwork) {
                                        CySubNetwork sn = (CySubNetwork) net;
                                        
-                                       for (String id : ids) {
+                                       for (Long id : ids) {
                                                CyEdge e = 
manager.getCache().getEdge(id);
                                                
                                                if (e != null)
@@ -122,14 +122,14 @@
                ++manager.graphDoneCount;
                
                // In order to handle sub-graphs correctly
-               if (!manager.getNetworkStack().isEmpty())
-                       manager.getNetworkStack().pop();
+               if (!manager.getNetworkIDStack().isEmpty())
+                       manager.getNetworkIDStack().pop();
                
                CyNetwork currentNet = null;
-               final String oldNetId = manager.getNetworkStack().isEmpty() ? 
null : manager.getNetworkStack().peek();
+               final Object netId = manager.getNetworkIDStack().isEmpty() ? 
null : manager.getNetworkIDStack().peek();
                
-               if (oldNetId != null)
-                       currentNet = manager.getCache().getNetwork(oldNetId);
+               if (netId != null)
+                       currentNet = manager.getCache().getNetwork(netId);
                
                manager.setCurrentNetwork(currentNet);
                manager.setCurrentRow(currentNet != null ? 
currentNet.getRow(currentNet) : null);

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNode.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNode.java
    2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNode.java
    2012-02-07 20:35:51 UTC (rev 28207)
@@ -44,7 +44,7 @@
                
                if (href == null) {
                        // Create the node
-                       final String id = atts.getValue("id");
+                       final Object id = getId(atts);
                        label = atts.getValue("label");
                        
                        if (label == null)
@@ -53,7 +53,7 @@
                        node = manager.createNode(id, label);
                } else {
                        // Try to get the node from the internal cache
-                       String id = AttributeValueUtil.getIdFromXLink(href);
+                       final Long id = AttributeValueUtil.getIdFromXLink(href);
                        node = manager.getCache().getNode(id);
                        
                        if (node != null) {
@@ -74,8 +74,9 @@
                if ( label != null && (!manager.isSessionFormat() || 
manager.getDocumentVersion() < 3.0) ) {
                        
manager.getCurrentNetwork().getRow(node).set(CyNode.NAME, label);
                        
-                       if (manager.getRootNetwork() != null && 
manager.getCurrentNetwork() != manager.getRootNetwork())
+                       if (manager.getRootNetwork() != null && 
manager.getCurrentNetwork() != manager.getRootNetwork()) {
                                
manager.getRootNetwork().getRow(node).set(CyNode.NAME, label);
+                       }
                }
                
                return current;

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNodeAttribute.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNodeAttribute.java
   2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNodeAttribute.java
   2012-02-07 20:35:51 UTC (rev 28207)
@@ -61,7 +61,7 @@
                                        // Handle 2.x nested network as network 
pointer
                                        final String netId = 
atts.getValue("value");
                                        final CyNode node = 
manager.getCurrentNode();
-                                       
manager.getCache().addNetworkPointer(node.getSUID(), netId);
+                                       
manager.getCache().addNetworkPointer(node, netId);
                                }
                        }
 

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNodeGraph.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNodeGraph.java
       2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleNodeGraph.java
       2012-02-07 20:35:51 UTC (rev 28207)
@@ -47,7 +47,7 @@
                manager.getCompoundNodeStack().push(node);
                
                final String href = atts.getValue(ReadDataManager.XLINK, 
"href");
-               String netId = null;
+               Object netId = null;
                CyNetwork network = null;
                
                if (href != null) {
@@ -69,7 +69,7 @@
                }
                
                if (netId != null)
-                       manager.getCache().addNetworkPointer(node.getSUID(), 
netId);
+                       manager.getCache().addNetworkPointer(node, netId);
 
                return current;
     }

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewEdge.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewEdge.java
        2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewEdge.java
        2012-02-07 20:35:51 UTC (rev 28207)
@@ -35,9 +35,16 @@
 
        @Override
        public ParseState handle(String tag, Attributes atts, ParseState 
current) throws SAXException {
-               String id = atts.getValue("cy:edgeId");
-               manager.setCurrentElementId(id);
+               String sId = atts.getValue("cy:edgeId");
                
+               try {
+                       Long id = Long.valueOf(sId);
+                       manager.setCurrentElementId(id);
+               } catch (NumberFormatException nfe) {
+                       logger.error("cy:edgeId is not a number: " + sId);
+                       manager.setCurrentElementId(null);
+               }
+               
                return current;
        }
 }
\ No newline at end of file

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewEdgeGraphics.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewEdgeGraphics.java
        2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewEdgeGraphics.java
        2012-02-07 20:35:51 UTC (rev 28207)
@@ -35,8 +35,13 @@
 
        @Override
     public ParseState handle(String tag, Attributes atts, ParseState current) 
throws SAXException {
-        final String edgeId = manager.getCurrentElementId();
+        final Object edgeId = manager.getCurrentElementId();
                
+        if (edgeId == null) {
+               logger.error("Cannot parse edge view: edge id is null");
+               return current;
+        }
+        
                if (tag.equals("graphics")) {
                manager.addViewGraphicsAttributes(edgeId, atts, false);
         } else if (tag.equals("att")) {

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewGraph.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewGraph.java
       2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewGraph.java
       2012-02-07 20:35:51 UTC (rev 28207)
@@ -36,7 +36,7 @@
        @Override
        public ParseState handle(String tag, Attributes atts, ParseState 
current) throws SAXException {
                manager.graphCount++;
-               String netId = atts.getValue("cy:networkId");
+               Long netId = Long.valueOf(atts.getValue("cy:networkId"));
                
                // There should be only no nested graph tags!
                if (manager.graphCount > 1) {
@@ -49,7 +49,7 @@
                if (docVersion != null)
                        manager.setDocumentVersion(docVersion); // version 3.0+
 
-               manager.setNetworkViewId(atts.getValue("id"));
+               manager.setNetworkViewId(Long.valueOf(atts.getValue("id")));
                manager.setNetworkId(netId);
                manager.setCurrentElementId(netId);
                manager.setVisualStyleName(atts.getValue("cy:visualStyle"));

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewLockedVisualPropAttribute.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewLockedVisualPropAttribute.java
   2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewLockedVisualPropAttribute.java
   2012-02-07 20:35:51 UTC (rev 28207)
@@ -35,7 +35,7 @@
 
        @Override
        public ParseState handle(String tag, Attributes atts, ParseState 
current) throws SAXException {
-               final String modelId = manager.getCurrentElementId();
+               final Object modelId = manager.getCurrentElementId();
                String name = atts.getValue("name");
                String value = atts.getValue("value");
 

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewNode.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewNode.java
        2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewNode.java
        2012-02-07 20:35:51 UTC (rev 28207)
@@ -35,9 +35,16 @@
 
        @Override
        public ParseState handle(String tag, Attributes atts, ParseState 
current) throws SAXException {
-               String id = atts.getValue("cy:nodeId");
-               manager.setCurrentElementId(id);
+               String sId = atts.getValue("cy:nodeId");
                
+               try {
+                       Long id = Long.valueOf(sId);
+                       manager.setCurrentElementId(id);
+               } catch (NumberFormatException nfe) {
+                       logger.error("cy:nodeId is not a number: " + sId);
+                       manager.setCurrentElementId(null);
+               }
+               
                return current;
        }
 }

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewNodeGraphics.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewNodeGraphics.java
        2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/HandleViewNodeGraphics.java
        2012-02-07 20:35:51 UTC (rev 28207)
@@ -37,7 +37,12 @@
 
        @Override
     public ParseState handle(String tag, Attributes atts, ParseState current) 
throws SAXException {
-        final String nodeId = manager.getCurrentElementId();
+        final Object nodeId = manager.getCurrentElementId();
+        
+        if (nodeId == null) {
+               logger.error("Cannot parse node view: node id is null");
+               return current;
+        }
                
                if (tag.equals("graphics")) {
                manager.addViewGraphicsAttributes(nodeId, atts, false);

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/ReadDataManager.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/ReadDataManager.java
       2012-02-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/ReadDataManager.java
       2012-02-07 20:35:51 UTC (rev 28207)
@@ -74,7 +74,7 @@
        private Set<CyNetwork> networks;
        
        /* Stack of original network IDs */
-       private Stack<String> networkStack;
+       private Stack<Object> networkStack;
        /* Stack of nodes that have a nested graph*/
        private Stack<CyNode> compoundNodeStack;
        
@@ -112,13 +112,13 @@
        private CyRow currentRow;
        
        // Network view format properties
-       private String networkViewId;
-       private String networkId;
+       private Object networkViewId;
+       private Object networkId;
        private String visualStyleName;
        private String rendererName;
-       private String currentElementId; // node/edge/network old id
-       private Map<String/*old model id*/, Map<String/*att name*/, String/*att 
value*/>> viewGraphics;
-       private Map<String/*old model id*/, Map<String/*att name*/, String/*att 
value*/>> viewLockedGraphics;
+       private Object currentElementId; // node/edge/network old id
+       private Map<Object/*old model id*/, Map<String/*att name*/, String/*att 
value*/>> viewGraphics;
+       private Map<Object/*old model id*/, Map<String/*att name*/, String/*att 
value*/>> viewLockedGraphics;
        
        private final ReadCache cache;
        private final EquationCompiler equationCompiler;
@@ -172,7 +172,7 @@
                edgeBendX = null;
                edgeBendY = null;
                
-               networkStack = new Stack<String>();
+               networkStack = new Stack<Object>();
                compoundNodeStack = new Stack<CyNode>();
                
                networks = new LinkedHashSet<CyNetwork>();
@@ -186,8 +186,8 @@
                networkId = null;
                visualStyleName = null;
                rendererName = null;
-               viewGraphics = new LinkedHashMap<String, Map<String,String>>();
-               viewLockedGraphics = new LinkedHashMap<String, 
Map<String,String>>();
+               viewGraphics = new LinkedHashMap<Object, Map<String,String>>();
+               viewLockedGraphics = new LinkedHashMap<Object, 
Map<String,String>>();
        }
        
        public void dispose() {
@@ -265,8 +265,8 @@
         * @param attValue
         * @param locked
         */
-       protected void addViewGraphicsAttribute(String oldModelId, String 
attName, String attValue, boolean locked) {
-               Map<String, Map<String, String>> graphics = locked ? 
viewLockedGraphics : viewGraphics;
+       protected void addViewGraphicsAttribute(Object oldModelId, String 
attName, String attValue, boolean locked) {
+               Map<Object, Map<String, String>> graphics = locked ? 
viewLockedGraphics : viewGraphics;
                Map<String, String> attributes = graphics.get(oldModelId);
 
                if (attributes == null) {
@@ -292,7 +292,7 @@
                }
        }
        
-       protected void addViewGraphicsAttributes(String oldModelId, Attributes 
atts, boolean locked) {
+       protected void addViewGraphicsAttributes(Object oldModelId, Attributes 
atts, boolean locked) {
                if (oldModelId != null) {
                        final int attrLength = atts.getLength();
                        
@@ -309,7 +309,7 @@
                return null;
        }
        
-       public <T extends CyTableEntry> Map<String, String> 
getViewGraphicsAttributes(String oldId, boolean locked) {
+       public <T extends CyTableEntry> Map<String, String> 
getViewGraphicsAttributes(Object oldId, boolean locked) {
                return locked ? viewLockedGraphics.get(oldId) : 
viewGraphics.get(oldId);
        }
 
@@ -376,7 +376,10 @@
                return this.currentNetwork;
        }
        
-       protected Stack<String> getNetworkStack() {
+       /**
+        * @return Stack of network IDs (XGMML IDs).
+        */
+       protected Stack<Object> getNetworkIDStack() {
                return networkStack;
        }
 
@@ -392,22 +395,21 @@
        }
        
        protected CyRootNetwork getRootNetwork() {
-               if (currentNetwork != null)
-                       return (currentNetwork instanceof CyRootNetwork) ? 
(CyRootNetwork) currentNetwork : 
-                                                                              
rootNetworkManager.getRootNetwork(currentNetwork);
-               return null;
+               return (currentNetwork != null) ? 
rootNetworkManager.getRootNetwork(currentNetwork) : null;
        }
        
-    protected CyNode createNode(String id, String label) {
-        if (id == null) id = label;
+    protected CyNode createNode(Object oldId, String label) {
+        if (oldId == null)
+               throw new NullPointerException("'oldId' is null.");
+        
         CyNode node = null;
         
         if (this.getCurrentNetwork() instanceof CySubNetwork && 
this.getParentNetwork() != null) {
                // Do not create the element again if the network is a 
sub-network!
-               Integer index = cache.getIndex(id);
+               Integer index = cache.getIndex(oldId);
                
                if (index != null) {
-                       node = this.getParentNetwork().getNode(index);
+                       node = this.getRootNetwork().getNode(index);
                        ((CySubNetwork) this.getCurrentNetwork()).addNode(node);
                        node = this.getCurrentNetwork().getNode(index); // in 
order to return the correct instance!
                }
@@ -421,23 +423,25 @@
         this.currentNode = node;
         this.currentRow = this.getCurrentNetwork().getRow(node);
         
-        // Add to internal cache
-        cache.cache(node, id);
+        // Add to internal cache:
+        cache.cache(oldId, node);
+        cache.cacheNodeByName(label, node);
         
         return node;
     }
 
-       protected CyEdge createEdge(CyNode source, CyNode target, String id, 
String label, String interaction,
+       protected CyEdge createEdge(CyNode source, CyNode target, Object id, 
String label, String interaction,
                        boolean directed) {
+               CyEdge edge = null;
+               
                if (id == null) id = label;
-               CyEdge edge = null;
         
         if (this.getCurrentNetwork() instanceof CySubNetwork && 
this.getParentNetwork() != null) {
                // Do not create the element again if the network is a 
sub-network and the edge already exists!
                Integer index = cache.getIndex(id);
                
                if (index != null) {
-                       edge = this.getParentNetwork().getEdge(index);
+                       edge = this.getRootNetwork().getEdge(index);
                        ((CySubNetwork) this.getCurrentNetwork()).addEdge(edge);
                        edge = this.getCurrentNetwork().getEdge(index); // in 
order to return the correct instance!
                }
@@ -483,8 +487,8 @@
                }
         }
         
-        // Add to internal cache
-        cache.cache(edge, id);
+        // Add to internal cache:
+        cache.cache(id, edge);
 
                return edge;
        }
@@ -495,8 +499,8 @@
        }
        
        protected void addElementLink(String href, Class<? extends 
CyTableEntry> clazz) {
-               Map<CyNetwork, Set<String>> map = null;
-               String id = AttributeValueUtil.getIdFromXLink(href);
+               Map<CyNetwork, Set<Long>> map = null;
+               Long id = AttributeValueUtil.getIdFromXLink(href);
                
                if (clazz == CyNode.class)      map = cache.getNodeLinks();
                else if (clazz == CyEdge.class) map = cache.getEdgeLinks();
@@ -504,10 +508,10 @@
                CyNetwork net = getCurrentNetwork();
                
                if (map != null && net != null) {
-                       Set<String> idSet = map.get(net);
+                       Set<Long> idSet = map.get(net);
                        
                        if (idSet == null) {
-                               idSet = new HashSet<String>();
+                               idSet = new HashSet<Long>();
                                map.put(net, idSet);
                        }
                        
@@ -515,19 +519,19 @@
                }
        }
        
-       protected String getNetworkViewId() {
+       protected Object getNetworkViewId() {
                return networkViewId;
        }
 
-       protected void setNetworkViewId(String networkViewId) {
+       protected void setNetworkViewId(Object networkViewId) {
                this.networkViewId = networkViewId;
        }
 
-       public String getNetworkId() {
+       public Object getNetworkId() {
                return networkId;
        }
 
-       protected void setNetworkId(String networkId) {
+       protected void setNetworkId(Object networkId) {
                this.networkId = networkId;
        }
 
@@ -547,11 +551,11 @@
                this.rendererName = rendererName;
        }
        
-       protected String getCurrentElementId() {
+       protected Object getCurrentElementId() {
                return currentElementId;
        }
 
-       protected void setCurrentElementId(String currentElementId) {
+       protected void setCurrentElementId(Object currentElementId) {
                this.currentElementId = currentElementId;
        }
 

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-07 19:31:23 UTC (rev 28206)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/ReadCache.java
   2012-02-07 20:35:51 UTC (rev 28207)
@@ -40,135 +40,155 @@
 
 public class ReadCache {
        
-       /* Map of old to new element IDs */
-       private Map<String, Long> idMap;
        /* Map of new to old element IDs */
-       private Map<Long, String> oldIdMap;
+       private Map<Long, Object> oldIdMap;
        /* Map of old ID to node/edge indexes */
-       private Map<String, Integer> indexMap;
+       private Map<Object, Integer> indexMap;
        
-       private Map<Long/*node id*/, String/*old network id*/> 
networkPointerMap;
+       private Map<CyNode, Object/*network's id*/> networkPointerMap;
        
-       /* Map of XML ID's to nodes */
-       private Map<String, CyNode> nodeIdMap;
-       /* Map of XML ID's to edges */
-       private Map<String, CyEdge> edgeIdMap;
-       /* Map of XML ID's to networks */
-       private Map<String, CyNetwork> networkIdMap;
+       /* 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<CyNetwork, Set<String>> nodeLinkMap;
-       private Map<CyNetwork, Set<String>> edgeLinkMap;
+       /* 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<CyNetwork, Set<Long>> nodeLinkMap;
+       private Map<CyNetwork, Set<Long>> edgeLinkMap;
+       
        private static final Logger logger = 
LoggerFactory.getLogger(ReadCache.class);
        
        public void init() {
-               idMap = new HashMap<String, Long>();
-               oldIdMap = new HashMap<Long, String>();
-               indexMap = new HashMap<String, Integer>();
-               networkPointerMap = new HashMap<Long, String>();
+               oldIdMap = new HashMap<Long, Object>();
+               indexMap = new HashMap<Object, Integer>();
                
-               nodeIdMap = new HashMap<String, CyNode>();
-               edgeIdMap = new HashMap<String, CyEdge>();
-               networkIdMap = new HashMap<String, CyNetwork>();
+               nodeById = new HashMap<Object, CyNode>();
+               edgeById = new HashMap<Object, CyEdge>();
+               networkById = new HashMap<Object, CyNetwork>();
                
-               nodeLinkMap = new HashMap<CyNetwork, Set<String>>();
-               edgeLinkMap = new HashMap<CyNetwork, Set<String>>();
+               nodeByName = new HashMap<String, CyNode>();
+               
+               nodeLinkMap = new HashMap<CyNetwork, Set<Long>>();
+               edgeLinkMap = new HashMap<CyNetwork, Set<Long>>();
+               networkPointerMap = new HashMap<CyNode, Object>();
        }
        
        public void dispose() {
-               nodeIdMap = null;
-               edgeIdMap = null;
-               networkIdMap = null;
+               nodeById = null;
+               edgeById = null;
+               networkById = null;
                
+               nodeByName = null;
+               
                nodeLinkMap = null;
                edgeLinkMap = null;
+               networkPointerMap = null;
        }
        
-       public <T extends CyTableEntry> void cache(T element, String strId) {
+       /**
+        * Cache the element for future reference.
+        * @param xgmmlId The XGMML id of the element.
+        * @param element A CyNetwork, CyNetworkView, CyNode or CyEdge.
+        */
+       public void cache(Object xgmmlId, CyTableEntry element) {
        int index = -1;
        
        if (element instanceof CyNode) {
-               nodeIdMap.put(strId, (CyNode) element);
+               if (xgmmlId != null)
+                       nodeById.put(xgmmlId, (CyNode) element);
+               
                index = ((CyNode) element).getIndex();
        } else if (element instanceof CyEdge) {
-               edgeIdMap.put(strId, (CyEdge) element);
+               if (xgmmlId != null)
+                       edgeById.put(xgmmlId, (CyEdge) element);
+               
                index = ((CyEdge) element).getIndex();
        } else if (element instanceof CyNetwork) {
-               networkIdMap.put(strId, (CyNetwork) element);
+               if (xgmmlId != null)
+                       networkById.put(xgmmlId, (CyNetwork) element);
            }
-       
-        this.cache(strId, element.getSUID(), index);
+           
+       if (xgmmlId != null) {
+               oldIdMap.put(element.getSUID(), xgmmlId);
+                       indexMap.put(xgmmlId, index);
+       }
     }
-    
-       public void cache(String oldId, long newId, int index) {
-               if (oldId != null && !oldId.isEmpty()) {
-                       idMap.put(oldId, newId);
-                       oldIdMap.put(newId, oldId);
-                       indexMap.put(oldId, index);
-               }
-       }
        
-       public void cache(String oldId, long newId) {
-               cache(oldId, newId, 0);
+       /**
+        * Probably only necessary when parsing 2.x session files.
+        * @param name
+        * @param node
+        */
+       public void cacheNodeByName(String name, CyNode node) {
+               if (name != null && !name.isEmpty() && node != null)
+                       nodeByName.put(name,  node);
        }
        
-       public void addNetworkPointer(Long nodeId, String oldNetworkId) {
-               networkPointerMap.put(nodeId, oldNetworkId);
+       public void addNetworkPointer(CyNode node, Object networkId) {
+               if (node == null)
+                       throw new NullPointerException("Cannot parse network 
pointer: node is null.");
+               if (networkId == null)
+                       throw new NullPointerException("Cannot parse network 
pointer: network id is null.");
+               
+               networkPointerMap.put(node, networkId);
        }
        
-       public String getOldId(Long suid) {
+       public Object getOldId(Long suid) {
                return oldIdMap.get(suid);
        }
-
-       public Long getNewId(String oldId) {
-               return idMap.get(oldId);
+       
+       @SuppressWarnings("unchecked")
+       public <T extends CyTableEntry> T getObjectById(Object oldId, Class<T> 
type) {
+               if (type == CyNetwork.class)
+                       return (T) networkById.get(oldId);
+               if (type == CyNode.class)
+                       return (T) nodeById.get(oldId);
+               if (type == CyEdge.class)
+                       return (T) edgeById.get(oldId);
+               
+               return null;
        }
        
-       public Integer getIndex(String oldId) {
+       public Integer getIndex(Object oldId) {
                return indexMap.get(oldId);
        }
        
-       public CyNetwork getNetwork(String oldId) {
-               return networkIdMap.get(oldId);
+       public CyNetwork getNetwork(Object oldId) {
+               return networkById.get(oldId);
        }
        
-       public CyNode getNode(String oldId) {
-               return nodeIdMap.get(oldId);
+       public CyNode getNode(Object oldId) {
+               return nodeById.get(oldId);
        }
        
-       public CyEdge getEdge(String oldId) {
-               return edgeIdMap.get(oldId);
+       public CyEdge getEdge(Object oldId) {
+               return edgeById.get(oldId);
        }
        
-       public Map<CyNetwork, Set<String>> getNodeLinks() {
+       public CyNode getNodeByName(String nodeName) {
+               return nodeByName.get(nodeName);
+       }
+       
+       public Map<CyNetwork, Set<Long>> getNodeLinks() {
                return nodeLinkMap;
        }
 
-       public Map<CyNetwork, Set<String>> getEdgeLinks() {
+       public Map<CyNetwork, Set<Long>> getEdgeLinks() {
                return edgeLinkMap;
        }
        
-       public Map<String, Long> getIdMap() {
-               return idMap;
-       }
-       
        public void createNetworkPointers() {
                if (networkPointerMap != null) {
                        // Iterate the rows and recreate the network pointers
-                       for (Map.Entry<Long, String> entry : 
networkPointerMap.entrySet()) {
-                               final Long nodeId = entry.getKey();
-                               final String oldNetId = entry.getValue();
+                       for (Map.Entry<CyNode, Object> entry : 
networkPointerMap.entrySet()) {
+                               final CyNode node = entry.getKey();
+                               final Object oldNetId = entry.getValue();
                                CyNetwork network = getNetwork(oldNetId);
                                
                                if (network != null) {
-                                       String oldNodeId = getOldId(nodeId);
-                                       CyNode node = getNode(oldNodeId);
-                                       
-                                       if (node != null)
-                                               node.setNetworkPointer(network);
-                                       else
-                                               logger.error("Cannot recreate 
network pointer for network " + oldNetId + ": Cannot find node "
-                                                               + oldNodeId);
+                                       node.setNetworkPointer(network);
                                } else {
                                        logger.error("Cannot recreate network 
pointer: Cannot find network " + oldNetId);
                                }

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