Author: clopes
Date: 2012-09-19 12:11:46 -0700 (Wed, 19 Sep 2012)
New Revision: 30384

Added:
   
core3/impl/trunk/io-impl/impl/src/test/resources/testData/xgmml/nested_groups_283.xgmml
Modified:
   
core3/impl/trunk/group-impl/src/test/java/org/cytoscape/group/GroupTestSupport.java
   
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/util/GroupUtil.java
   
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/read/AbstractNetworkReaderTest.java
   
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/read/xgmml/GenericXGMMLReaderTest.java
Log:
Added tests for and fixed importing XGMML files with nested groups.

Modified: 
core3/impl/trunk/group-impl/src/test/java/org/cytoscape/group/GroupTestSupport.java
===================================================================
--- 
core3/impl/trunk/group-impl/src/test/java/org/cytoscape/group/GroupTestSupport.java
 2012-09-19 18:40:54 UTC (rev 30383)
+++ 
core3/impl/trunk/group-impl/src/test/java/org/cytoscape/group/GroupTestSupport.java
 2012-09-19 19:11:46 UTC (rev 30384)
@@ -10,16 +10,20 @@
 public class GroupTestSupport {
 
        protected CyGroupFactory groupFactory;
+       protected CyGroupManagerImpl groupManager;
        
        public GroupTestSupport() {
                final CyEventHelper help = mock(CyEventHelper.class);
                final CyServiceRegistrar serviceRegistrar = 
mock(CyServiceRegistrar.class);
-               final CyGroupManagerImpl groupMgr = new 
CyGroupManagerImpl(help);
-               
-               this.groupFactory = new CyGroupFactoryImpl(help, groupMgr, 
serviceRegistrar);
+               groupManager = new CyGroupManagerImpl(help);
+               groupFactory = new CyGroupFactoryImpl(help, groupManager, 
serviceRegistrar);
        }
 
        public CyGroupFactory getGroupFactory() {
                return groupFactory;
        }
+
+       public CyGroupManagerImpl getGroupManager() {
+               return groupManager;
+       }
 }

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-09-19 18:40:54 UTC (rev 30383)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/ReadDataManager.java
       2012-09-19 19:11:46 UTC (rev 30384)
@@ -27,6 +27,9 @@
  */
 package org.cytoscape.io.internal.read.xgmml.handler;
 
+import static org.cytoscape.io.internal.util.GroupUtil.EXTERNAL_EDGE_ATTRIBUTE;
+import static org.cytoscape.io.internal.util.GroupUtil.GROUP_STATE_ATTRIBUTE;
+
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -62,9 +65,6 @@
 
 public class ReadDataManager {
 
-       public final static String GROUP_STATE_ATTRIBUTE="__groupState";
-       public final static String 
EXTERNAL_EDGE_ATTRIBUTE="__externalEdges.SUID";
-       
        protected final static String XLINK = "http://www.w3.org/1999/xlink";;
        
        /* RDF Data */

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/GroupUtil.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/GroupUtil.java
   2012-09-19 18:40:54 UTC (rev 30383)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/GroupUtil.java
   2012-09-19 19:11:46 UTC (rev 30384)
@@ -24,20 +24,20 @@
 public class GroupUtil {
 
        // 3.x group attributes
-       private final String EXTERNAL_EDGE_ATTRIBUTE="__externalEdges.SUID";
-       private final String GROUP_COLLAPSED_ATTRIBUTE="__groupCollapsed.SUID";
-       private final String GROUP_NETWORKS_ATTRIBUTE="__groupNetworks.SUID";
-       private final String GROUP_ATTRIBUTE="__isGroup";
-       private final String ISMETA_EDGE_ATTR="__isMetaEdge";
-       private final String X_LOCATION_ATTR="__xLocation";
-       private final String Y_LOCATION_ATTR="__yLocation";
+       public static final String 
EXTERNAL_EDGE_ATTRIBUTE="__externalEdges.SUID";
+       public static final String 
GROUP_COLLAPSED_ATTRIBUTE="__groupCollapsed.SUID";
+       public static final String 
GROUP_NETWORKS_ATTRIBUTE="__groupNetworks.SUID";
+       public static final String GROUP_ATTRIBUTE="__isGroup";
+       public static final String ISMETA_EDGE_ATTR="__isMetaEdge";
+       public static final String X_LOCATION_ATTR="__xLocation";
+       public static final String Y_LOCATION_ATTR="__yLocation";
        // 2.x group attributes
-       private final String GROUP_STATE_ATTRIBUTE="__groupState";
-       private final String GROUP_ISLOCAL_ATTRIBUTE="__groupIsLocal";
-       private final String GROUP_NODEX_ATTRIBUTE="__metanodeHintX";
-       private final String GROUP_NODEY_ATTRIBUTE="__metanodeHintY";
-       private final String X_OFFSET_ATTR="__xOffset";
-       private final String Y_OFFSET_ATTR="__yOffset";
+       public static final String GROUP_STATE_ATTRIBUTE="__groupState";
+       public static final String GROUP_ISLOCAL_ATTRIBUTE="__groupIsLocal";
+       public static final String GROUP_NODEX_ATTRIBUTE="__metanodeHintX";
+       public static final String GROUP_NODEY_ATTRIBUTE="__metanodeHintY";
+       public static final String X_OFFSET_ATTR="__xOffset";
+       public static final String Y_OFFSET_ATTR="__yOffset";
        
        private final CyGroupManager groupMgr;
        private final CyGroupFactory groupFactory;
@@ -148,6 +148,9 @@
                            !hnRow.isSet(GROUP_ATTRIBUTE))
                                continue;
 
+                       // Check for nested groups recursively
+                       createGroups((CySubNetwork) netPointer, null);
+                       
                        boolean collapsed = false;
                        boolean cy2group = false;
 

Modified: 
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/read/AbstractNetworkReaderTest.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/read/AbstractNetworkReaderTest.java
   2012-09-19 18:40:54 UTC (rev 30383)
+++ 
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/read/AbstractNetworkReaderTest.java
   2012-09-19 19:11:46 UTC (rev 30384)
@@ -1,5 +1,7 @@
 package org.cytoscape.io.internal.read;
 
+import static org.cytoscape.model.CyNetwork.NAME;
+import static org.cytoscape.model.subnetwork.CyRootNetwork.SHARED_NAME;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -19,6 +21,7 @@
 import org.cytoscape.model.CyNetworkManager;
 import org.cytoscape.model.CyNode;
 import org.cytoscape.model.NetworkTestSupport;
+import org.cytoscape.model.subnetwork.CyRootNetwork;
 import org.cytoscape.model.subnetwork.CyRootNetworkManager;
 import org.cytoscape.property.CyProperty;
 import org.cytoscape.property.CyProperty.SavePolicy;
@@ -134,4 +137,22 @@
 
                return net;
        }
+       
+       protected CyNode getNodeByName(CyNetwork net, String name) {
+               for (CyNode n : net.getNodeList()) {
+                       if (name.equals(net.getRow(n).get(NAME, String.class)))
+                               return n;
+               }
+               
+               return null;
+       }
+       
+       protected CyEdge getEdgeByName(CyNetwork net, String name) {
+               for (CyEdge e : net.getEdgeList()) {
+                       if (name.equals(net.getRow(e).get(NAME, String.class)))
+                               return e;
+               }
+               
+               return null;
+       }
 }

Modified: 
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/read/xgmml/GenericXGMMLReaderTest.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/read/xgmml/GenericXGMMLReaderTest.java
        2012-09-19 18:40:54 UTC (rev 30383)
+++ 
core3/impl/trunk/io-impl/impl/src/test/java/org/cytoscape/io/internal/read/xgmml/GenericXGMMLReaderTest.java
        2012-09-19 19:11:46 UTC (rev 30384)
@@ -56,6 +56,7 @@
        CyNetworkFactory networkFactory;
        CyRootNetworkManager rootNetworkMgr;
        CyNetworkTableManager netTablMgr;
+       CyGroupManager groupMgr;
        CyTableFactory tableFactory;
        RenderingEngineManager renderingEngineMgr;
        ReadDataManager readDataMgr;
@@ -87,10 +88,10 @@
                
                GroupTestSupport groupTestSupport = new GroupTestSupport();
                CyGroupFactory grFactory = groupTestSupport.getGroupFactory();
-               CyGroupManager grMgr = mock(CyGroupManager.class);
+               groupMgr = groupTestSupport.getGroupManager();
                
                readCache = new ReadCache(netTablMgr);
-               groupUtil = new GroupUtil(grMgr, grFactory);
+               groupUtil = new GroupUtil(groupMgr, grFactory);
                suidUpdater = new SUIDUpdater();
                readDataMgr = new ReadDataManager(readCache, suidUpdater, 
mock(EquationCompiler.class), networkFactory, 
                                rootNetworkMgr, groupUtil);
@@ -237,11 +238,18 @@
                List<CyNetworkView> views = getViews("group_2x_expanded.xgmml");
                // The group network should not be registered, so the network 
list must contain only the base network
                assertEquals(1, reader.getNetworks().length);
+               
                CyNetwork net = checkSingleNetwork(views, 3, 2);
-               CyNode grNode = check2xGroupMetadata(net, true);
+               CyRootNetwork rootNet = rootNetworkMgr.getRootNetwork(net);
+               CyNode grNode = getNodeByName(rootNet, "metanode 1");
+               check2xGroupMetadata(net, grNode, true);
+               
                
assertCustomColumnsAreMutable(rootNetworkMgr.getRootNetwork(net));
                assertCustomColumnsAreMutable(net);
                assertCustomColumnsAreMutable(grNode.getNetworkPointer());
+               
+               assertEquals(1, groupMgr.getGroupSet(net).size());
+               assertTrue(groupMgr.isGroup(grNode, net));
        }
        
        @Test
@@ -250,17 +258,40 @@
                // The group network should not be registered, so the network 
list must contain only the base network
                assertEquals(1, reader.getNetworks().length);
                CyNetwork net = checkSingleNetwork(views, 2, 1);
-               CyNode grNode = check2xGroupMetadata(net, false);
+               CyRootNetwork rootNet = rootNetworkMgr.getRootNetwork(net);
+               CyNode grNode = getNodeByName(rootNet, "metanode 1");
+               check2xGroupMetadata(net, grNode, false);
+               
                // Check group network data
                CyNetwork grNet = grNode.getNetworkPointer();
                for (CyNode n : grNet.getNodeList()) {
                        assertNotNull(grNet.getRow(n, 
HIDDEN_ATTRS).get("__metanodeHintX", Double.class));
                        assertNotNull(grNet.getRow(n, 
HIDDEN_ATTRS).get("__metanodeHintY", Double.class));
                }
-               
assertCustomColumnsAreMutable(rootNetworkMgr.getRootNetwork(net));
+               
+               assertCustomColumnsAreMutable(rootNet);
                assertCustomColumnsAreMutable(net);
                assertCustomColumnsAreMutable(grNet);
+               
+               assertEquals(1, groupMgr.getGroupSet(net).size());
+               assertTrue(groupMgr.isGroup(grNode, net));
        }
+       
+       @Test
+       public void testParseNestedGroupsFrom2x() throws Exception {
+               List<CyNetworkView> views = getViews("nested_groups_283.xgmml");
+               CyNetwork net = checkSingleNetwork(views, 3, 3);
+               // The group network should not be registered, so the network 
list must contain only the base network
+               assertEquals(1, reader.getNetworks().length);
+               
+               CyNode grNode2 = getNodeByName(net, "Meta 2");
+               assertTrue(groupMgr.isGroup(grNode2, net));
+               CyNode grNode1 = getNodeByName(grNode2.getNetworkPointer(), 
"Meta 1"); // Nested group node
+               assertTrue(groupMgr.isGroup(grNode1, 
grNode2.getNetworkPointer()));
+               
+               assertEquals(1, groupMgr.getGroupSet(net).size());
+               assertEquals(1, 
groupMgr.getGroupSet(grNode2.getNetworkPointer()).size());
+       }
 
        @Test
        public void testIsLockedVisualProperty() throws Exception {
@@ -384,34 +415,27 @@
                }
        }
        
-       private CyNode check2xGroupMetadata(final CyNetwork net, final boolean 
expanded) {
+       private void check2xGroupMetadata(final CyNetwork net, final CyNode gn, 
final boolean expanded) {
+               assertNotNull("The group node is null", gn);
+               
                // Test 2.x group parsed as network pointer
-               CyNode gn = null;
-               
                if (!expanded) {
-                       int npCount = 0;
                        for (CyNode n : net.getNodeList()) {
-                               if (net.getRow(n, 
CyNetwork.HIDDEN_ATTRS).isSet(ReadDataManager.GROUP_STATE_ATTRIBUTE)) {
-                                       gn = n;
-                                       if (++npCount > 1) fail("There should 
be only one group node!");
-                               } else { // The other nodes have no network 
pointer!
+                               if (net.getRow(n, 
CyNetwork.HIDDEN_ATTRS).isSet(GroupUtil.GROUP_STATE_ATTRIBUTE))
+                                       assertNotNull(n.getNetworkPointer());
+                               else // The other nodes have no network pointer!
                                        assertNull(n.getNetworkPointer());
-                               }
                        }
                } else {
-                       int npCount = 0;
                        CyRootNetwork rootNet = 
((CySubNetwork)net).getRootNetwork();
                        for (CyNode n : rootNet.getNodeList()) {
-                               if (rootNet.getRow(n, 
CyNetwork.HIDDEN_ATTRS).isSet(ReadDataManager.GROUP_STATE_ATTRIBUTE)) {
-                                       gn = n;
-                                       if (++npCount > 1) fail("There should 
be only one group node!");
-                               } else { // The other nodes have no network 
pointer!
+                               if (rootNet.getRow(n, 
CyNetwork.HIDDEN_ATTRS).isSet(GroupUtil.GROUP_STATE_ATTRIBUTE))
+                                       assertNotNull(n.getNetworkPointer());
+                               else // The other nodes have no network pointer!
                                        assertNull(n.getNetworkPointer());
-                               }
                        }
                }
                
-               assertNotNull("The group node cannot be found", gn);
                CyNetwork np = gn.getNetworkPointer();
                assertNotNull(np);
                assertEquals(2, np.getNodeCount());
@@ -423,13 +447,11 @@
                
                // Check external edges metadata (must be added by the reader!)
                CyRow nphRow = np.getRow(np, HIDDEN_ATTRS);
-               List<Long> extEdgeIds = 
nphRow.getList(ReadDataManager.EXTERNAL_EDGE_ATTRIBUTE, Long.class);
+               List<Long> extEdgeIds = 
nphRow.getList(GroupUtil.EXTERNAL_EDGE_ATTRIBUTE, Long.class);
                assertEquals(1, extEdgeIds.size());
                
                CyRootNetwork rootNet = rootNetworkMgr.getRootNetwork(np);
                assertNotNull(rootNet.getEdge(extEdgeIds.get(0)));
-               
-               return gn;
        }
        
        private List<CyNetworkView> getViews(String file) throws Exception {

Added: 
core3/impl/trunk/io-impl/impl/src/test/resources/testData/xgmml/nested_groups_283.xgmml
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/test/resources/testData/xgmml/nested_groups_283.xgmml
                             (rev 0)
+++ 
core3/impl/trunk/io-impl/impl/src/test/resources/testData/xgmml/nested_groups_283.xgmml
     2012-09-19 19:11:46 UTC (rev 30384)
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<graph label="Network" xmlns:dc="http://purl.org/dc/elements/1.1/"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"; 
xmlns:cy="http://www.cytoscape.org"; xmlns="http://www.cs.rpi.edu/XGMML";  
directed="1">
+  <att name="documentVersion" value="1.1"/>
+  <att name="networkMetadata">
+    <rdf:RDF>
+      <rdf:Description rdf:about="http://www.cytoscape.org/";>
+        <dc:type>Protein-Protein Interaction</dc:type>
+        <dc:description>N/A</dc:description>
+        <dc:identifier>N/A</dc:identifier>
+        <dc:date>2012-09-19 14:23:33</dc:date>
+        <dc:title>Network</dc:title>
+        <dc:source>http://www.cytoscape.org/</dc:source>
+        <dc:format>Cytoscape-XGMML</dc:format>
+      </rdf:Description>
+    </rdf:RDF>
+  </att>
+  <att type="string" name="backgroundColor" value="#ffffff"/>
+  <att type="real" name="GRAPH_VIEW_ZOOM" value="1.0"/>
+  <att type="real" name="GRAPH_VIEW_CENTER_X" value="0.0"/>
+  <att type="real" name="GRAPH_VIEW_CENTER_Y" value="0.0"/>
+  <att type="boolean" name="NODE_SIZE_LOCKED" value="true"/>
+  <node label="node4" id="-5">
+    <att type="string" name="NODE_TYPE" value="DefaultNode"/>
+    <att type="string" name="canonicalName" value="node4"/>
+    <graphics type="ELLIPSE" h="40.0" w="40.0" x="-111.0" y="118.0" 
fill="#99ff99" width="2" outline="#009900" 
cy:nodeTransparency="0.5882352941176471" cy:nodeLabelFont="SansSerif-0-13" 
cy:nodeLabel="node4" cy:borderLineType="solid"/>
+  </node>
+  <node label="node2" id="-3">
+    <att type="string" name="NODE_TYPE" value="DefaultNode"/>
+    <att type="string" name="canonicalName" value="node2"/>
+    <graphics type="ELLIPSE" h="40.0" w="40.0" x="108.0" y="15.0" 
fill="#99ff99" width="2" outline="#009900" 
cy:nodeTransparency="0.5882352941176471" cy:nodeLabelFont="SansSerif-0-13" 
cy:nodeLabel="node2" cy:borderLineType="solid"/>
+  </node>
+  <node label="Meta 2" id="-7">
+    <att type="integer" name="NumChildren" value="2"/>
+    <att type="integer" name="NumDescendents" value="4"/>
+    <att type="boolean" name="__MetanodeAggregationEnabled" value="false" 
cy:hidden="true"/>
+    <att type="boolean" name="__groupIsLocal" value="true"/>
+    <att type="integer" name="__groupState" value="2" cy:hidden="true"/>
+    <att type="string" name="__groupViewer" value="metaNode" cy:hidden="true"/>
+    <att type="string" name="canonicalName" value="Meta 2"/>
+    <att type="string" name="node.opacity" value="100.0"/>
+    <att>
+      <graph>
+        <node label="node3" id="-4">
+          <att type="string" name="NODE_TYPE" value="DefaultNode"/>
+          <att type="real" name="__metanodeHintX" value="26.0" 
cy:hidden="true"/>
+          <att type="real" name="__metanodeHintY" value="-61.0" 
cy:hidden="true"/>
+          <att type="string" name="canonicalName" value="node3"/>
+        </node>
+        <node label="Meta 1" id="-6">
+          <att type="integer" name="NumChildren" value="2"/>
+          <att type="integer" name="NumDescendents" value="2"/>
+          <att type="boolean" name="__MetanodeAggregationEnabled" 
value="false" cy:hidden="true"/>
+          <att type="boolean" name="__groupIsLocal" value="true"/>
+          <att type="integer" name="__groupState" value="2" cy:hidden="true"/>
+          <att type="string" name="__groupViewer" value="metaNode" 
cy:hidden="true"/>
+          <att type="real" name="__metanodeHintX" value="-25.0" 
cy:hidden="true"/>
+          <att type="real" name="__metanodeHintY" value="62.0" 
cy:hidden="true"/>
+          <att type="string" name="canonicalName" value="Meta 1"/>
+          <att type="string" name="node.opacity" value="100.0"/>
+          <att>
+            <graph>
+              <node label="node0" id="-1">
+                <att type="string" name="NODE_TYPE" value="DefaultNode"/>
+                <att type="real" name="__metanodeHintX" value="50.0" 
cy:hidden="true"/>
+                <att type="real" name="__metanodeHintY" value="0.0" 
cy:hidden="true"/>
+                <att type="string" name="canonicalName" value="node0"/>
+              </node>
+              <node label="node1" id="-2">
+                <att type="string" name="NODE_TYPE" value="DefaultNode"/>
+                <att type="real" name="__metanodeHintX" value="-49.0" 
cy:hidden="true"/>
+                <att type="real" name="__metanodeHintY" value="0.0" 
cy:hidden="true"/>
+                <att type="string" name="canonicalName" value="node1"/>
+              </node>
+              <edge label="node0 (DirectedEdge) node1" source="-1" target="-2">
+                <att type="string" name="canonicalName" value="node0 
(DirectedEdge) node1"/>
+                <att type="string" name="interaction" value="DirectedEdge" 
cy:editable="false"/>
+              </edge>
+              <edge label="node1 (DirectedEdge) node2" source="-2" target="-3">
+                <att type="string" name="canonicalName" value="node1 
(DirectedEdge) node2"/>
+                <att type="string" name="interaction" value="DirectedEdge" 
cy:editable="false"/>
+              </edge>
+              <edge label="node0 (DirectedEdge) node3" source="-1" target="-4">
+                <att type="string" name="canonicalName" value="node0 
(DirectedEdge) node3"/>
+                <att type="string" name="interaction" value="DirectedEdge" 
cy:editable="false"/>
+              </edge>
+            </graph>
+          </att>
+        </node>
+        <edge label="Meta 1 (meta-DirectedEdge) node3" source="-6" target="-4">
+          <att type="boolean" name="__isMetaEdge" value="true" 
cy:hidden="true"/>
+          <att type="string" name="canonicalName" value="Meta 1 
(meta-DirectedEdge) node3"/>
+          <att type="string" name="interaction" value="meta-DirectedEdge" 
cy:editable="false"/>
+        </edge>
+        <edge label="node4 (DirectedEdge) node3" source="-5" target="-4">
+          <att type="string" name="canonicalName" value="node4 (DirectedEdge) 
node3"/>
+          <att type="string" name="interaction" value="DirectedEdge" 
cy:editable="false"/>
+        </edge>
+        <edge label="node3 (DirectedEdge) node4" source="-4" target="-5">
+          <att type="string" name="canonicalName" value="node3 (DirectedEdge) 
node4"/>
+          <att type="string" name="interaction" value="DirectedEdge" 
cy:editable="false"/>
+        </edge>
+        <edge label="Meta 1 (meta-DirectedEdge) node2" source="-6" target="-3">
+          <att type="boolean" name="__isMetaEdge" value="true" 
cy:hidden="true"/>
+          <att type="string" name="canonicalName" value="Meta 1 
(meta-DirectedEdge) node2"/>
+          <att type="string" name="interaction" value="meta-DirectedEdge" 
cy:editable="false"/>
+        </edge>
+      </graph>
+    </att>
+    <graphics type="ELLIPSE" h="40.0" w="40.0" x="-86.0" y="-25.0" 
fill="#99ff99" width="2" outline="#009900" cy:nodeTransparency="1.0" 
cy:nodeLabelFont="SansSerif-0-13" cy:nodeLabel="Meta 2" 
cy:borderLineType="solid"/>
+  </node>
+  <edge label="Meta 2 (meta-meta-DirectedEdge) node2" source="-7" target="-3">
+    <att type="boolean" name="__isMetaEdge" value="true" cy:hidden="true"/>
+    <att type="string" name="canonicalName" value="Meta 2 
(meta-meta-DirectedEdge) node2"/>
+    <att type="string" name="interaction" value="meta-meta-DirectedEdge" 
cy:editable="false"/>
+    <graphics width="2" fill="#333333" cy:sourceArrow="0" cy:targetArrow="0" 
cy:sourceArrowColor="#000000" cy:targetArrowColor="#000000" 
cy:edgeLabelFont="SanSerif-0-10" cy:edgeLabel="" cy:edgeLineType="SOLID" 
cy:curved="STRAIGHT_LINES"/>
+  </edge>
+  <edge label="Meta 2 (meta-DirectedEdge) node4" source="-7" target="-5">
+    <att type="boolean" name="__isMetaEdge" value="true" cy:hidden="true"/>
+    <att type="string" name="canonicalName" value="Meta 2 (meta-DirectedEdge) 
node4"/>
+    <att type="string" name="interaction" value="meta-DirectedEdge" 
cy:editable="false"/>
+    <graphics width="2" fill="#333333" cy:sourceArrow="0" cy:targetArrow="0" 
cy:sourceArrowColor="#000000" cy:targetArrowColor="#000000" 
cy:edgeLabelFont="SanSerif-0-10" cy:edgeLabel="" cy:edgeLineType="SOLID" 
cy:curved="STRAIGHT_LINES"/>
+  </edge>
+  <edge label="node4 (meta-DirectedEdge) Meta 2" source="-5" target="-7">
+    <att type="boolean" name="__isMetaEdge" value="true" cy:hidden="true"/>
+    <att type="string" name="canonicalName" value="node4 (meta-DirectedEdge) 
Meta 2"/>
+    <att type="string" name="interaction" value="meta-DirectedEdge" 
cy:editable="false"/>
+    <graphics width="2" fill="#333333" cy:sourceArrow="0" cy:targetArrow="0" 
cy:sourceArrowColor="#000000" cy:targetArrowColor="#000000" 
cy:edgeLabelFont="SanSerif-0-10" cy:edgeLabel="" cy:edgeLineType="SOLID" 
cy:curved="STRAIGHT_LINES"/>
+  </edge>
+</graph>

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