Author: clopes
Date: 2012-02-09 12:59:32 -0800 (Thu, 09 Feb 2012)
New Revision: 28220

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/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/ReadDataManager.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/SessionHandler.java
   
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
   
core3/impl/trunk/swing-application-impl/src/main/resources/xsd/sessionState.xsd
Log:
- Session reader: Fixed caching CyNetworkViews by old IDs.
- CySession: overloaded getObject() methods--String (2.x) and Long (3.0) oldID 
params.
- session_state.xml file: networkFrame tag's attribute "frameID" renamed to 
"networkViewID"--saving CyNetworkView SUIDs (rather than titles) as network 
frame IDs.

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-09 20:14:14 UTC (rev 28219)
+++ 
core3/api/trunk/session-api/src/main/java/org/cytoscape/session/CySession.java  
    2012-02-09 20:59:32 UTC (rev 28220)
@@ -248,18 +248,35 @@
        
        /**
         * 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 SUID.<br/>
+        * Use this method if the version of the loaded session is 3.0 or 
higher.
+        * @param oldSUID The former SUID.
+        * @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
+        *         SUID.
+        */
+       public <T extends CyTableEntry> T getObject(Long oldSUID, Class<T> 
type) {
+               return getObjectInternal(oldSUID, type);
+       }
+       
+       /**
+        * 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.
+        * Use this method if the version of the loaded session is 2.x, because 
older versions of Cytoscape save 
+        * String IDs, such as node names and the network titles.
+        * @param oldId The former ID, from Cytocape versions prior than 3.0.
         * @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.
         */
+       public <T extends CyTableEntry> T getObject(String oldId, Class<T> 
type) {
+               return getObjectInternal(oldId, type);
+       }
+       
        @SuppressWarnings("unchecked")
-       public <T extends CyTableEntry> T getObject(Object oldId, Class<T> 
type) {
+       private <T extends CyTableEntry> T getObjectInternal(Object oldId, 
Class<T> type) {
                T tableEntry = null;
                Map<Object, ? extends CyTableEntry> objByIdMap = 
objectMap.get(type);
                
@@ -268,7 +285,7 @@
                        
                        try {
                                tableEntry = (T) obj;
-                       } catch (ClassCastException cce) { // TODO: should it 
just throw the Exception?
+                       } catch (ClassCastException cce) {
                                logger.error("ClassCastException: Tried to cast 
object " + obj + " to " + type + " (old id = " + oldId
                                                + ")");
                        }

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-09 20:14:14 UTC (rev 28219)
+++ 
core3/api/trunk/session-api/src/test/java/org/cytoscape/session/CySessionTest.java
  2012-02-09 20:59:32 UTC (rev 28220)
@@ -231,11 +231,16 @@
        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));
+               assertNull(session.getObject(1L, CyNode.class));
+               assertNull(session.getObject(1L, CyEdge.class));
+               assertNull(session.getObject(1L, CyNetwork.class));
+               assertNull(session.getObject(1L, CyNetworkView.class));
+               assertNull(session.getObject(1L, View.class));
+               assertNull(session.getObject("a", CyNode.class));
+               assertNull(session.getObject("a", CyEdge.class));
+               assertNull(session.getObject("a", CyNetwork.class));
+               assertNull(session.getObject("a", CyNetworkView.class));
+               assertNull(session.getObject("a", View.class));
        }
        
        @Test

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-09 20:14:14 UTC (rev 28219)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
        2012-02-09 20:59:32 UTC (rev 28220)
@@ -437,7 +437,7 @@
                                                String id = nf.getFrameID();
                                                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");
+                                               sb.append("        
<networkFrame networkViewID=\""+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-09 20:14:14 UTC (rev 28219)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
        2012-02-09 20:59:32 UTC (rev 28220)
@@ -316,7 +316,6 @@
                                
                                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/XGMMLNetworkViewReader.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkViewReader.java
        2012-02-09 20:14:14 UTC (rev 28219)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkViewReader.java
        2012-02-09 20:59:32 UTC (rev 28220)
@@ -69,7 +69,7 @@
                super.init(tm);
                readDataMgr.setViewFormat(true);
        }
-
+       
        @Override
        protected void setNetworkViewProperties(CyNetworkView netView) {
                // Direct visual properties
@@ -81,6 +81,9 @@
                atts = 
readDataMgr.getViewGraphicsAttributes(readDataMgr.getNetworkId(), true);
                this.settingLockedVisualProperties = true;
                setVisualProperties(netView, netView, atts);
+               
+               // Cache the view with its former SUID
+               readDataMgr.getCache().cache(readDataMgr.getNetworkViewId(), 
netView);
        }
 
        @Override

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-09 20:14:14 UTC (rev 28219)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/ReadDataManager.java
       2012-02-09 20:59:32 UTC (rev 28220)
@@ -519,7 +519,7 @@
                }
        }
        
-       protected Object getNetworkViewId() {
+       public Object getNetworkViewId() {
                return networkViewId;
        }
 

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/SessionHandler.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/SessionHandler.java
    2012-02-09 20:14:14 UTC (rev 28219)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/SessionHandler.java
    2012-02-09 20:59:32 UTC (rev 28220)
@@ -63,6 +63,7 @@
 import org.cytoscape.session.events.SessionAboutToBeSavedListener;
 import org.cytoscape.session.events.SessionLoadedEvent;
 import org.cytoscape.session.events.SessionLoadedListener;
+import org.cytoscape.view.model.CyNetworkView;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -132,9 +133,16 @@
                final JInternalFrame[] internalFrames = 
netViewMgr.getDesktopPane().getAllFrames();
        
        for (JInternalFrame iframe : internalFrames) {
+               final CyNetworkView view = netViewMgr.getNetworkView(iframe);
+               
+               if (view == null) {
+                               logger.error("Cannot save position of network 
frame \"" + iframe.getTitle()
+                                               + "\": Network View is null.");
+                       continue;
+               }
+               
                final NetworkFrame nf = new NetworkFrame();
-               
-            nf.setFrameID(iframe.getTitle());
+            nf.setNetworkViewID(view.getSUID().toString());
             nf.setX(BigInteger.valueOf(iframe.getX()));
             nf.setY(BigInteger.valueOf(iframe.getY()));
                
@@ -196,7 +204,7 @@
                                        }
                                        
                                        if (sessState != null) {
-                                               
setNetworkFrameLocations(sessState.getNetworkFrames());
+                                               
setNetworkFrameLocations(sessState.getNetworkFrames(), sess);
                                                
setCytoPanelStates(sessState.getCytopanels());
                                        }
                                }
@@ -208,21 +216,34 @@
         * Restore each network frame's location.
         * @param frames
         */
-       private void setNetworkFrameLocations(final NetworkFrames frames) {
+       private void setNetworkFrameLocations(final NetworkFrames frames, final 
CySession sess) {
                if (frames != null) {
                        final List<NetworkFrame> framesList = 
frames.getNetworkFrame();
 
                        for (NetworkFrame nf : framesList) {
-                               String title = nf.getFrameID();
-                               JInternalFrame[] internalFrames = 
netViewMgr.getDesktopPane().getAllFrames();
-
-                               for (JInternalFrame iframe : internalFrames) {
-                                       if (iframe.getTitle() != null && 
iframe.getTitle().equals(title)
-                                                       && nf.getX() != null && 
nf.getY() != null) {
+                               final String oldIdStr = nf.getNetworkViewID(); 
// ID in the original session--it's probably different now
+                               CyNetworkView view = null;
+                               
+                               // Try to convert the old ID to Long--only 
works if the loaded session is a 3.0 format
+                               try {
+                                       final Long oldSuid = 
Long.valueOf(oldIdStr);
+                                       view = sess.getObject(oldSuid, 
CyNetworkView.class);
+                               } catch (NumberFormatException nfe) {
+                                       logger.debug("The old network view id 
is not a number: " + oldIdStr);
+                                       view = sess.getObject(oldIdStr, 
CyNetworkView.class);
+                               }
+                               
+                               if (view != null) {
+                                       final JInternalFrame iframe = 
netViewMgr.getInternalFrame(view);
+                                       
+                                       if (iframe != null && nf.getX() != null 
&& nf.getY() != null) {
                                                int x = nf.getX().intValue();
                                                int y = nf.getY().intValue();
                                                iframe.setLocation(x, y);
                                        }
+                               } else {
+                                       logger.warn("Cannot restore network 
frame's position: Network View not found for former ID \""
+                                                       + oldIdStr + "\".");
                                }
                        }
                }

Modified: 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
   2012-02-09 20:14:14 UTC (rev 28219)
+++ 
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkViewManager.java
   2012-02-09 20:59:32 UTC (rev 28220)
@@ -194,14 +194,20 @@
         * @throws IllegalArgumentException
         */
        public JInternalFrame getInternalFrame(CyNetworkView view) throws 
IllegalArgumentException {
-               // check args
                if (view == null) {
                        throw new 
IllegalArgumentException("NetworkViewManager.getInternalFrame(), argument is 
null");
                }
 
-               // outta here
                return presentationContainerMap.get(view);
        }
+       
+       public CyNetworkView getNetworkView(JInternalFrame frame) throws 
IllegalArgumentException {
+               if (frame == null) {
+                       throw new 
IllegalArgumentException("NetworkViewManager.getNetworkView(), argument is 
null");
+               }
+               
+               return iFrameMap.get(frame);
+       }
 
        /**
         * View switched

Modified: 
core3/impl/trunk/swing-application-impl/src/main/resources/xsd/sessionState.xsd
===================================================================
--- 
core3/impl/trunk/swing-application-impl/src/main/resources/xsd/sessionState.xsd 
    2012-02-09 20:14:14 UTC (rev 28219)
+++ 
core3/impl/trunk/swing-application-impl/src/main/resources/xsd/sessionState.xsd 
    2012-02-09 20:59:32 UTC (rev 28220)
@@ -20,7 +20,7 @@
   </xs:element>
   <xs:element name="networkFrame">
     <xs:complexType>
-      <xs:attribute name="frameID" use="required" type="xs:NCName"/>
+      <xs:attribute name="networkViewID" use="required" type="xs:NCName"/>
       <xs:attribute name="x" use="required" type="xs:integer"/>
       <xs:attribute name="y" use="required" type="xs:integer"/>
     </xs:complexType>

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