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.

Reply via email to