Author: clopes
Date: 2012-07-10 12:14:03 -0700 (Tue, 10 Jul 2012)
New Revision: 29823
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/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/SessionXGMMLNetworkViewWriterTest.java
Log:
Fixes #1245 -- [XGMML Export] Node size not exported when set by a NODE_SIZE
visual mapping
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-10 18:48:10 UTC (rev 29822)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriter.java
2012-07-10 19:14:03 UTC (rev 29823)
@@ -36,7 +36,6 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
@@ -62,11 +61,11 @@
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.View;
import org.cytoscape.view.model.VisualLexicon;
+import org.cytoscape.view.model.VisualLexiconNode;
import org.cytoscape.view.model.VisualProperty;
import org.cytoscape.view.presentation.RenderingEngineManager;
import org.cytoscape.view.presentation.property.BasicVisualLexicon;
import org.cytoscape.view.vizmap.VisualMappingManager;
-import org.cytoscape.view.vizmap.VisualPropertyDependency;
import org.cytoscape.view.vizmap.VisualStyle;
import org.cytoscape.work.AbstractTask;
import org.cytoscape.work.TaskMonitor;
@@ -148,8 +147,6 @@
private Writer writer;
private boolean doFullEncoding;
- private final Map<VisualProperty<?>, VisualPropertyDependency<?>>
dependencyMap;
- private Set<VisualProperty<?>> disabledVisualProperties;
public GenericXGMMLWriter(final OutputStream outputStream,
final
RenderingEngineManager renderingEngineMgr,
@@ -176,8 +173,6 @@
this.networkMgr = networkMgr;
this.rootNetworkMgr = rootNetworkMgr;
this.visualLexicon =
renderingEngineMgr.getDefaultVisualLexicon();
- this.dependencyMap = new HashMap<VisualProperty<?>,
VisualPropertyDependency<?>>();
- this.disabledVisualProperties = new
HashSet<VisualProperty<?>>();
if (network instanceof CyRootNetwork) {
this.network = this.rootNetwork = (CyRootNetwork)
network;
@@ -502,26 +497,22 @@
// because they are also returned as NETWORK's descendants
if (root == BasicVisualLexicon.NETWORK &&
vp.getTargetDataType() != CyNetwork.class)
continue;
- // TODO: not exactly the right thing to do here:
- if (disabledVisualProperties.contains(vp))
- continue;
-
- Object value = view.getVisualProperty(vp);
+
+ // It doesn't have to write the property if the value is null
+ Object value = view.getVisualProperty(vp);
if (value == null)
continue;
- final VisualPropertyDependency<?> dep = dependencyMap.get(vp);
-
- if (dep != null && !dep.isDependencyEnabled()) {
- // The property is the parent of a dependency, but the
dependency is not enabled.
- // So ignore this visual property, because the child properties
should be used instead.
- continue;
- }
-
if (groupLockedProperties && view.isValueLocked(vp)) {
lockedProperties.add(vp);
continue;
+ } else {
+ // If not a bypass, write only leaf nodes
+ final VisualLexiconNode node =
visualLexicon.getVisualLexiconNode(vp);
+
+ if (!node.getChildren().isEmpty())
+ continue;
}
// Use XGMML graphics attribute names for some visual properties
@@ -648,6 +639,10 @@
// Edges
if (vp.equals(BasicVisualLexicon.EDGE_WIDTH)) return new
String[]{"width"};
if (vp.equals(BasicVisualLexicon.EDGE_STROKE_UNSELECTED_PAINT)) return
new String[]{"fill"};
+
+ // TODO: also write these attributes to keep compatibility with 2.x an
Cytoscape Web (?):
+ // cy:nodeTransparency cy:nodeLabelFont cy:nodeLabel cy:borderLineType
+ // cy:sourceArrow cy:targetArrow cy:sourceArrowColor
cy:targetArrowColor cy:edgeLabelFont cy:edgeLabel cy:edgeLineType cy:curved
return new String[]{};
}
@@ -884,21 +879,6 @@
*/
private void setVisualStyle(final VisualStyle visualStyle) {
this.visualStyle = visualStyle;
- dependencyMap.clear();
- disabledVisualProperties.clear();
-
- if (visualStyle != null) {
- final Set<VisualPropertyDependency<?>> dependencies =
visualStyle.getAllVisualPropertyDependencies();
-
- for (final VisualPropertyDependency<?> dep :
dependencies) {
-
dependencyMap.put(dep.getParentVisualProperty(), dep);
-
- if (dep.isDependencyEnabled()) {
- final Set<VisualProperty<?>>
descendants = dep.getVisualProperties();
-
disabledVisualProperties.addAll(descendants);
- }
- }
- }
}
/**
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-10 18:48:10 UTC (rev 29822)
+++
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/AbstractXGMMLWriterTest.java
2012-07-10 19:14:03 UTC (rev 29823)
@@ -1,12 +1,10 @@
package org.cytoscape.io.internal.write.xgmml;
-import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;
import java.io.ByteArrayOutputStream;
import java.io.StringReader;
-import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;
@@ -30,7 +28,6 @@
import org.cytoscape.model.CyNode;
import org.cytoscape.model.subnetwork.CyRootNetwork;
import org.cytoscape.model.subnetwork.CyRootNetworkManager;
-import org.cytoscape.model.subnetwork.CySubNetwork;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.presentation.RenderingEngineManager;
import org.cytoscape.view.presentation.property.BasicVisualLexicon;
@@ -39,7 +36,6 @@
import org.cytoscape.view.vizmap.VisualStyle;
import org.cytoscape.work.TaskMonitor;
import org.junit.Before;
-import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
@@ -47,6 +43,7 @@
public abstract class AbstractXGMMLWriterTest {
protected final int NODE_COUNT = 3;
+ protected final int EDGE_COUNT = NODE_COUNT - 1;
protected CyNetworkView view;
protected CyNetwork net;
protected CyRootNetwork rootNet;
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-10 18:48:10 UTC (rev 29822)
+++
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/GenericXGMMLWriterTest.java
2012-07-10 19:14:03 UTC (rev 29823)
@@ -1,13 +1,19 @@
package org.cytoscape.io.internal.write.xgmml;
+import static org.cytoscape.view.presentation.property.BasicVisualLexicon.*;
import static org.junit.Assert.*;
+import java.awt.Color;
import java.io.UnsupportedEncodingException;
+import javax.xml.xpath.XPathConstants;
+
import org.cytoscape.model.CyEdge;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.subnetwork.CySubNetwork;
+import org.cytoscape.view.model.View;
+import org.cytoscape.view.presentation.property.NodeShapeVisualProperty;
import org.junit.Before;
import org.junit.Test;
@@ -36,18 +42,11 @@
@Test
public void testNumberOfEdgeElements() {
write(net);
- assertEquals(2, evalNumber("count(/x:graph/x:edge)"));
- assertEquals(2, evalNumber("count(//x:edge)"));
+ assertEquals(EDGE_COUNT, evalNumber("count(/x:graph/x:edge)"));
+ assertEquals(EDGE_COUNT, evalNumber("count(//x:edge)"));
}
@Test
- public void testNoGraphicsElementWhenNoView() {
- write(net);
- assertEquals(0, evalNumber("count(//x:node/graphics)"));
- assertEquals(0, evalNumber("count(//x:edge/graphics)"));
- }
-
- @Test
public void testNetworkPointerSavedIfSameRootNetwork() throws
UnsupportedEncodingException {
// Create a subnetwork from the same root
CySubNetwork sn1 = rootNet.addSubNetwork();
@@ -131,4 +130,76 @@
for (CyEdge e : net.getEdgeList())
assertEquals("EDGE_"+e.getSUID(),
evalString("//x:edge[@id="+e.getSUID()+"]/@label"));
}
+
+ @Test
+ public void testNoGraphicsElementWhenNoView() {
+ write(net);
+ assertEquals(0, evalNumber("count(//x:node/x:graphics)"));
+ assertEquals(0, evalNumber("count(//x:edge/x:graphics)"));
+ }
+
+ @Test
+ public void testNumberOfGraphicsElementsOfExportedView() {
+ write(view);
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics)"));
+ assertEquals(EDGE_COUNT,
evalNumber("count(//x:edge/x:graphics)"));
+ }
+
+ @Test
+ public void testMandatoryGraphicsAttributes() {
+ write(view);
+
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics/@x)"));
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics/@y)"));
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics/@z)"));
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics/@w)"));
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics/@h)"));
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics/@width)"));
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics/@outline)"));
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics/@type)"));
+ assertEquals(NODE_COUNT,
evalNumber("count(//x:node/x:graphics/@fill)"));
+
+ assertEquals(EDGE_COUNT,
evalNumber("count(//x:edge/x:graphics/@fill)"));
+ assertEquals(EDGE_COUNT,
evalNumber("count(//x:edge/x:graphics/@width)"));
+ }
+
+ @Test
+ public void testGraphicsWithDefaultValues() {
+ view.setViewDefault(NETWORK_BACKGROUND_PAINT, Color.BLACK);
+ view.setVisualProperty(NETWORK_CENTER_X_LOCATION, 200d);
+ view.setVisualProperty(NETWORK_CENTER_Y_LOCATION, 300d);
+ view.setVisualProperty(NETWORK_SCALE_FACTOR, 0.5d);
+
+ view.setViewDefault(NODE_WIDTH, 100d);
+ view.setViewDefault(NODE_HEIGHT, 200d);
+ view.setViewDefault(NODE_BORDER_WIDTH, 8d);
+ view.setViewDefault(NODE_BORDER_PAINT, Color.RED);
+ view.setViewDefault(NODE_SHAPE,
NodeShapeVisualProperty.DIAMOND);
+ view.setViewDefault(NODE_FILL_COLOR, Color.GREEN);
+
+ view.setViewDefault(EDGE_WIDTH, 4d);
+ view.setViewDefault(EDGE_STROKE_UNSELECTED_PAINT, Color.BLUE);
+
+ write(view);
+
+ assertEquals("#000000",
evalString("/x:graph/x:graphics/x:att[@name=\"NETWORK_BACKGROUND_PAINT\"]/@value"));
+ assertEquals(200,
evalNumber("/x:graph/x:graphics/x:att[@name=\"NETWORK_CENTER_X_LOCATION\"]/@value"));
+ assertEquals(300,
evalNumber("/x:graph/x:graphics/x:att[@name=\"NETWORK_CENTER_Y_LOCATION\"]/@value"));
+ assertEquals(0.5, ((Double)
eval("/x:graph/x:graphics/x:att[@name=\"NETWORK_SCALE_FACTOR\"]/@value",
XPathConstants.NUMBER)).doubleValue(), 0.02);
+
+ for (View<CyNode> v : view.getNodeViews()) {
+ Long id = v.getModel().getSUID();
+ assertEquals(100,
evalNumber("//x:node[@id="+id+"]/x:graphics/@w"));
+ assertEquals(200,
evalNumber("//x:node[@id="+id+"]/x:graphics/@h"));
+ assertEquals(8,
evalNumber("//x:node[@id="+id+"]/x:graphics/@width"));
+ assertEquals("#FF0000",
evalString("//x:node[@id="+id+"]/x:graphics/@outline").toUpperCase());
+ assertEquals("DIAMOND",
evalString("//x:node[@id="+id+"]/x:graphics/@type"));
+ assertEquals("#00FF00",
evalString("//x:node[@id="+id+"]/x:graphics/@fill").toUpperCase());
+ }
+ for (View<CyEdge> v : view.getEdgeViews()) {
+ Long id = v.getModel().getSUID();
+ assertEquals(4,
evalNumber("//x:edge[@id="+id+"]/x:graphics/@width"));
+ assertEquals("#0000FF",
evalString("//x:edge[@id="+id+"]/x:graphics/@fill").toUpperCase());
+ }
+ }
}
Modified:
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkViewWriterTest.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkViewWriterTest.java
2012-07-10 18:48:10 UTC (rev 29822)
+++
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/write/xgmml/SessionXGMMLNetworkViewWriterTest.java
2012-07-10 19:14:03 UTC (rev 29823)
@@ -1,3 +1,4 @@
+
package org.cytoscape.io.internal.write.xgmml;
import static org.junit.Assert.*;
@@ -107,13 +108,15 @@
public void testNodeGraphicsAtt() {
View<CyNode> nv = view.getNodeViews().iterator().next();
nv.setLockedValue(NODE_SIZE, 122d);
+ nv.setLockedValue(NODE_BORDER_WIDTH, 6d);
nv.setLockedValue(NODE_SHAPE, NodeShapeVisualProperty.OCTAGON);
write(view);
assertEquals("list",
evalString("//x:node[@id="+nv.getSUID()+"]/x:graphics/x:att[@name=\"lockedVisualProperties\"]/@type"));
- assertEquals(2,
evalNumber("count(//x:node[@id="+nv.getSUID()+"]/x:graphics/x:att[@name=\"lockedVisualProperties\"]/x:att)"));
+ assertEquals(3,
evalNumber("count(//x:node[@id="+nv.getSUID()+"]/x:graphics/x:att[@name=\"lockedVisualProperties\"]/x:att)"));
assertEquals(122,
evalNumber("//x:node[@id="+nv.getSUID()+"]/x:graphics/x:att/x:att[@name=\""+NODE_SIZE.getIdString()+"\"]/@value"));
+ assertEquals(6,
evalNumber("//x:node[@id="+nv.getSUID()+"]/x:graphics/x:att/x:att[@name=\""+NODE_BORDER_WIDTH.getIdString()+"\"]/@value"));
assertEquals("OCTAGON",
evalString("//x:node[@id="+nv.getSUID()+"]/x:graphics/x:att/x:att[@name=\""+NODE_SHAPE.getIdString()+"\"]/@value"));
}
--
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.