Author: clopes
Date: 2012-07-27 11:33:30 -0700 (Fri, 27 Jul 2012)
New Revision: 30019
Modified:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriter.java
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkWriter.java
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/AbstractXGMMLWriterTest.java
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriterTest.java
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkWriterTest.java
Log:
XGMML Writer: fixed bug that allowed subnetworks with "DO_NOT_SAVE" policy to
be serialized.
Modified:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriter.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriter.java
2012-07-27 18:25:24 UTC (rev 30018)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriter.java
2012-07-27 18:33:30 UTC (rev 30019)
@@ -55,6 +55,7 @@
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTable;
+import org.cytoscape.model.SavePolicy;
import org.cytoscape.model.subnetwork.CyRootNetwork;
import org.cytoscape.model.subnetwork.CyRootNetworkManager;
import org.cytoscape.model.subnetwork.CySubNetwork;
@@ -176,7 +177,7 @@
if (network instanceof CyRootNetwork) {
this.network = this.rootNetwork = (CyRootNetwork)
network;
- this.subNetworks =
getRegisteredSubNetworks(rootNetwork);
+ this.subNetworks =
getSerializableSubNetworks(rootNetwork);
} else {
this.network = network;
this.rootNetwork =
rootNetworkMgr.getRootNetwork(network);
@@ -412,9 +413,13 @@
// Output the node attributes
writeAttributes(net.getRow(node));
+
// Write node's sub-graph
- writeSubGraph(node.getNetworkPointer());
+ final CyNetwork netPointer = node.getNetworkPointer();
+ if (netPointer != null && isSerializable(netPointer))
+ writeSubGraph(netPointer);
+
// Output the node graphics if we have a view
if (networkView != null)
writeGraphics(networkView.getNodeView(node),
false);
@@ -430,9 +435,9 @@
* @param edge the edge to output
* @throws IOException
*/
- protected void writeEdge(CyNetwork net, CyEdge edge) throws IOException
{
+ protected void writeEdge(final CyNetwork net, final CyEdge edge) throws
IOException {
writeElement("<edge");
- boolean written = writtenEdgeMap.containsKey(edge);
+ final boolean written = writtenEdgeMap.containsKey(edge);
if (written) {
// Write as an XLink only
@@ -883,26 +888,30 @@
/**
* @param rootNet
- * @return A set with all the sub-networks that are registered in the
network manager.
+ * @return A set with all the subnetworks that should be serialized.
*/
- private Set<CySubNetwork> getRegisteredSubNetworks(CyRootNetwork rootNet) {
- List<CySubNetwork> subNetList = rootNet.getSubNetworkList();
- Set<CySubNetwork> registeredSubNetSet = new
LinkedHashSet<CySubNetwork>();
+ protected Set<CySubNetwork> getSerializableSubNetworks(final CyRootNetwork
rootNet) {
+ final Set<CySubNetwork> serializableSet = new
LinkedHashSet<CySubNetwork>();
+ final List<CySubNetwork> subNetList =
rootNet.getSubNetworkList();
+ final CySubNetwork baseNetwork = rootNet.getBaseNetwork();
- CySubNetwork baseNetwork = rootNet.getBaseNetwork();
- if (isRegistered(baseNetwork)) {
- registeredSubNetSet.add(baseNetwork); // The base
network must be the first one!
- }
+ // The base network must be the first one!
+ if (isSerializable(baseNetwork))
+ serializableSet.add(baseNetwork);
- for (CySubNetwork sn : subNetList) {
- if (isRegistered(sn))
- registeredSubNetSet.add(sn);
+ for (final CySubNetwork sn : subNetList) {
+ if (isSerializable(sn))
+ serializableSet.add(sn);
}
- return registeredSubNetSet;
+ return serializableSet;
}
- protected boolean isRegistered(CyNetwork net) {
+ protected boolean isSerializable(final CyNetwork net) {
+ return net.getSavePolicy() != SavePolicy.DO_NOT_SAVE;
+ }
+
+ protected boolean isRegistered(final CyNetwork net) {
return networkMgr.networkExists(net.getSUID());
}
}
Modified:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkWriter.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkWriter.java
2012-07-27 18:25:24 UTC (rev 30018)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkWriter.java
2012-07-27 18:33:30 UTC (rev 30019)
@@ -11,6 +11,7 @@
import org.cytoscape.model.CyNetworkManager;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyRow;
+import org.cytoscape.model.SavePolicy;
import org.cytoscape.model.subnetwork.CyRootNetwork;
import org.cytoscape.model.subnetwork.CyRootNetworkManager;
import org.cytoscape.model.subnetwork.CySubNetwork;
@@ -29,6 +30,11 @@
final
CyNetworkManager networkMgr,
final
CyRootNetworkManager rootNetworkMgr) {
super(outputStream, renderingEngineMgr, network,
unrecognizedVisualPropertyMgr, networkMgr, rootNetworkMgr);
+
+ if (rootNetwork.getSavePolicy() != SavePolicy.SESSION_FILE)
+ throw new IllegalArgumentException(
+ "Network cannot be saved because the
root network's save policy is not \"SESSION_FILE\": "
+ + network);
}
@Override
@@ -47,8 +53,8 @@
@Override
protected void writeRootGraphAttributes() throws IOException {
// Write sub-graphs first
- for (CySubNetwork subNet : subNetworks) {
- if (!writtenNetMap.containsKey(subNet)) {
+ for (final CySubNetwork subNet : subNetworks) {
+ if (!writtenNetMap.containsKey(subNet) &&
isSerializable(subNet)) {
writeSubGraph(subNet);
}
}
@@ -56,7 +62,7 @@
@Override
protected void writeNode(final CyNetwork net, final CyNode node) throws
IOException {
- boolean written = writtenNodeMap.containsKey(node);
+ final boolean written = writtenNodeMap.containsKey(node);
// Output the node
writeElement("<node");
@@ -75,14 +81,14 @@
final CyNetwork netPointer = node.getNetworkPointer();
- if (netPointer == null) {
+ if (netPointer == null || !isSerializable(netPointer)) {
write("/>\n");
} else {
write(">\n");
depth++;
// Write node's sub-graph:
- if (subNetworks.contains(netPointer)) {
+ if (isRegistered(netPointer)) {
// Because this network is registered
(is also a child network), just write the reference.
// The content will be saved later,
under the root graph
// (it's important to save the child
network graphs in the correct order).
@@ -98,9 +104,9 @@
}
@Override
- protected void writeEdge(CyNetwork net, CyEdge edge) throws IOException
{
+ protected void writeEdge(final CyNetwork net, final CyEdge edge) throws
IOException {
writeElement("<edge");
- boolean written = writtenEdgeMap.containsKey(edge);
+ final boolean written = writtenEdgeMap.containsKey(edge);
if (written) {
// Write as an XLink only
@@ -146,4 +152,9 @@
protected boolean ignoreGraphicsAttribute(final CyIdentifiable element,
String attName) {
return true;
}
+
+ @Override
+ protected boolean isSerializable(final CyNetwork net) {
+ return net.getSavePolicy() == SavePolicy.SESSION_FILE;
+ }
}
Modified:
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/AbstractXGMMLWriterTest.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/AbstractXGMMLWriterTest.java
2012-07-27 18:25:24 UTC (rev 30018)
+++
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/AbstractXGMMLWriterTest.java
2012-07-27 18:33:30 UTC (rev 30019)
@@ -45,7 +45,9 @@
protected final int NODE_COUNT = 3;
protected final int EDGE_COUNT = NODE_COUNT - 1;
protected CyNetworkView view;
+ /** Registered and serializable base network */
protected CyNetwork net;
+ /** Unregistered root network of net */
protected CyRootNetwork rootNet;
protected CyEdge dirEdge;
protected CyEdge undirEdge;
@@ -158,6 +160,8 @@
throw new UnsupportedOperationException();
}
});
+ } catch (IllegalArgumentException e) {
+ throw e;
} catch (Exception e) {
throw new RuntimeException(e);
}
Modified:
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriterTest.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriterTest.java
2012-07-27 18:25:24 UTC (rev 30018)
+++
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriterTest.java
2012-07-27 18:33:30 UTC (rev 30019)
@@ -11,6 +11,7 @@
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
+import org.cytoscape.model.SavePolicy;
import org.cytoscape.model.subnetwork.CySubNetwork;
import org.cytoscape.view.model.View;
import org.cytoscape.view.presentation.property.NodeShapeVisualProperty;
@@ -47,9 +48,21 @@
}
@Test
+ public void testTopNetworkSavedEvenIfDoNotSavePolicy() throws
UnsupportedEncodingException {
+ // The network that is passed to the writer should always be
saved, even if its save policy is DO_NOT_SAVE,
+ // because it doesn't make sense to prevent an app from
exporting it if the app explicitly wants to do so.
+ CyNetwork newNet =
netFactory.createNetwork(SavePolicy.DO_NOT_SAVE);
+ setRegistered(newNet, false); // It shouldn't make any
difference either
+ write(newNet);
+ // Test:
+ assertEquals(1, evalNumber("count(//x:graph)")); // No nested
graph elements
+ assertEquals(""+newNet.getSUID(), evalString("/x:graph/@id"));
+ }
+
+ @Test
public void testNetworkPointerSavedIfSameRootNetwork() throws
UnsupportedEncodingException {
// Create a subnetwork from the same root
- CySubNetwork sn1 = rootNet.addSubNetwork();
+ CySubNetwork sn1 = rootNet.addSubNetwork(); // Of course the
save policy cannot be DO_NOT_SAVE!
CySubNetwork sn2 = rootNet.addSubNetwork();
setRegistered(sn1, true);
setRegistered(sn2, false);
@@ -71,16 +84,30 @@
@Test
public void testNetworkPointerIgnoredIfAnotherRootNetwork() throws
UnsupportedEncodingException {
// Create a subnetwork from another root network
- CyNetwork subNet = netFactory.createNetwork();
+ CyNetwork net2 = netFactory.createNetwork();
// Set it as network pointer
CyNode n = net.getNodeList().get(0);
- n.setNetworkPointer(subNet);
+ n.setNetworkPointer(net2);
write(net);
// Test
assertEquals(1, evalNumber("count(//x:graph)")); // no nested
graph elements
}
@Test
+ public void testNetworkPointerIgnoredIfDoNotSavePolicy() throws
UnsupportedEncodingException {
+ // Create a subnetwork from another root network
+ CyNetwork sn = rootNet.addSubNetwork(SavePolicy.DO_NOT_SAVE);
+ setRegistered(sn, true); // Ignore even if registered!
+ // Set it as network pointer
+ CyNode n = net.getNodeList().get(0);
+ n.setNetworkPointer(sn);
+ write(net);
+ // Test
+ assertEquals(1, evalNumber("count(//x:graph)")); // no nested
graph elements
+ assertEquals(""+net.getSUID(), evalString("/x:graph/@id"));
+ }
+
+ @Test
public void testSecondNetworkPointerRefenceSavedAsXLink() throws
UnsupportedEncodingException {
CySubNetwork sn = rootNet.addSubNetwork(); // Same root!
setRegistered(sn, true);
Modified:
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkWriterTest.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkWriterTest.java
2012-07-27 18:25:24 UTC (rev 30018)
+++
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkWriterTest.java
2012-07-27 18:33:30 UTC (rev 30019)
@@ -9,6 +9,8 @@
import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
+import org.cytoscape.model.SavePolicy;
+import org.cytoscape.model.subnetwork.CyRootNetwork;
import org.cytoscape.model.subnetwork.CySubNetwork;
import org.junit.Before;
import org.junit.Test;
@@ -70,27 +72,43 @@
assertEquals(0, evalNumber("count(//x:edge/graphics)"));
}
+ @Test(expected=IllegalArgumentException.class)
+ public void testRootNetworkOnlySavedIfSessionSavePolicy() throws
UnsupportedEncodingException {
+ CyRootNetwork newRoot =
((CySubNetwork)netFactory.createNetwork(SavePolicy.DO_NOT_SAVE)).getRootNetwork();
+ setRegistered(newRoot, true); // Registering it doesn't make
any difference
+ write(newRoot);
+ }
+
@Test
- public void testRegisteredSubNetworkSaved() throws
UnsupportedEncodingException {
+ public void testRegisteredSubNetworkSavedIfSessionSavePolicy() throws
UnsupportedEncodingException {
CySubNetwork sn = rootNet.addSubNetwork();
- setRegistered(sn, true);
+ setRegistered(sn, true); // It doesn't matter
write(rootNet);
assertEquals("1",
evalString("/x:graph/x:att/x:graph[@id="+sn.getSUID()+"]/@cy:registered"));
}
@Test
- public void testUnregisteredSubNetworksNotSaved() throws
UnsupportedEncodingException {
+ public void testUnregisteredSubNetworkSavedIfSessionSavePolicy() throws
UnsupportedEncodingException {
CySubNetwork sn = rootNet.addSubNetwork();
- setRegistered(sn, false);
+ setRegistered(sn, false); // It doesn't matter
write(rootNet);
- assertTrue(evalBoolean("count(//x:graph[@id="+sn.getSUID()+"])
= 0"));
+ assertEquals("0",
evalString("/x:graph/x:att/x:graph[@id="+sn.getSUID()+"]/@cy:registered"));
}
@Test
- public void testUnregisteredNetworkSavedIfNetworkPointer() throws
UnsupportedEncodingException {
+ public void testSubNetworkIgnoredIfNotSessionSavePolicy() throws
UnsupportedEncodingException {
+ CySubNetwork sn = rootNet.addSubNetwork(SavePolicy.DO_NOT_SAVE);
+ setRegistered(sn, true); // It doesn't matter
+ write(rootNet);
+ assertEquals(2, evalNumber("count(//x:graph)"));
+ assertEquals(0,
evalNumber("count(//x:graph[@id="+sn.getSUID()+"])"));
+ }
+
+ @Test
+ public void testUnregisteredNetworkPointerSavedIfSessionSavePolicy()
throws UnsupportedEncodingException {
// Create a subnetwork from the same root
CySubNetwork sn = rootNet.addSubNetwork();
- setRegistered(sn, false);
+ setRegistered(sn, false); // It doesn't matter
// Set it as network pointer
CyNode n = net.getNodeList().get(0);
n.setNetworkPointer(sn);
--
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.