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.