Author: clopes
Date: 2010-11-24 10:23:35 -0800 (Wed, 24 Nov 2010)
New Revision: 23003

Modified:
   cytoscapeweb/trunk/cytoscapeweb/html-template/js/cytoscapeweb.js
   cytoscapeweb/trunk/cytoscapeweb/html-template/js/tests.js
   cytoscapeweb/trunk/cytoscapeweb/html-template/tests.html
   
cytoscapeweb/trunk/cytoscapeweb/src-test/org/cytoscapeweb/model/converters/ExternalObjectConverterTest.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/DeselectCommand.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/FilterCommand.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/HandleClickCommand.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/HandleHoverCommand.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/RemoveFilterCommand.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/SelectCommand.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/converters/ExternalObjectConverter.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/converters/SVGExporter.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/data/FirstNeighborsVO.as
   
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/view/ContextMenuMediator.as
   cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/view/ExternalMediator.as
Log:
Added CSS classes to SVG's node/edge/background elements.
Added network() method to Visualization object (JS API).
Added unit tests for API methods: xgmml, graphml, network, svg.

Modified: cytoscapeweb/trunk/cytoscapeweb/html-template/js/cytoscapeweb.js
===================================================================
--- cytoscapeweb/trunk/cytoscapeweb/html-template/js/cytoscapeweb.js    
2010-11-24 01:43:37 UTC (rev 23002)
+++ cytoscapeweb/trunk/cytoscapeweb/html-template/js/cytoscapeweb.js    
2010-11-24 18:23:35 UTC (rev 23003)
@@ -1161,13 +1161,25 @@
         },
 
         /**
+         * <p>Return the network as an object.</p>
+         * @return {org.cytoscapeweb.Network} The network as a JavaScript 
object.
+         * @see org.cytoscapeweb.Visualization#graphml
+         * @see org.cytoscapeweb.Visualization#xgmml
+         * @see org.cytoscapeweb.Visualization#sif
+         */
+        network: function () {
+            return this.swf().getNetwork();
+        },
+        
+        /**
          * <p>Return the network data as <a 
href="http://graphml.graphdrawing.org/primer/graphml-primer.html"; 
target="_blank">GraphML</a>.</p>
          * @return {String} The XML text.
          * @see org.cytoscapeweb.Visualization#xgmml
          * @see org.cytoscapeweb.Visualization#sif
+         * @see org.cytoscapeweb.Visualization#network
          */
         graphml: function () {
-            return this.swf().getNetworkAsText("graphml");
+               return this.swf().getNetworkAsText("graphml");
         },
 
         /**
@@ -1175,6 +1187,7 @@
          * @return {String} The XML text.
          * @see org.cytoscapeweb.Visualization#graphml
          * @see org.cytoscapeweb.Visualization#sif
+         * @see org.cytoscapeweb.Visualization#network
          */
         xgmml: function () {
             return this.swf().getNetworkAsText("xgmml");
@@ -1219,6 +1232,7 @@
          * @return {String} The SIF text.
          * @see org.cytoscapeweb.Visualization#graphml
          * @see org.cytoscapeweb.Visualization#xgmml
+         * @see org.cytoscapeweb.Visualization#network
          */
         sif: function (interactionAttr) {
             return this.swf().getNetworkAsText("sif", { interactionAttr: 
interactionAttr });

Modified: cytoscapeweb/trunk/cytoscapeweb/html-template/js/tests.js
===================================================================
--- cytoscapeweb/trunk/cytoscapeweb/html-template/js/tests.js   2010-11-24 
01:43:37 UTC (rev 23002)
+++ cytoscapeweb/trunk/cytoscapeweb/html-template/js/tests.js   2010-11-24 
18:23:35 UTC (rev 23003)
@@ -1193,6 +1193,65 @@
        ok(fail === false, "Null 'name' throws exception");
     });
     
+    test("Network", function() {
+       var net = vis.network();
+       var nodes = vis.nodes();
+       var edges = vis.edges();
+       var schema = vis.dataSchema();
+       
+       var nodesData = [];
+       var edgesData = [];
+       $.each(nodes, function(i, n) { nodesData.push(n.data); });
+       $.each(edges, function(i, e) { edgesData.push(e.data); });
+
+       same(net.schema, schema, "Schema");
+       same(net.data.nodes, nodesData, "Nodes Data");
+       same(net.data.edges, edgesData, "Edges Data");
+    });
+    
+    test("GraphML", function() {
+       var xml = $(vis.graphml());
+       var nodes = vis.nodes();
+       var edges = vis.edges();
+       var schema = vis.dataSchema();
+       var ignoredFields = 5; // id (nodes), id (edges), source, target, 
directed
+       
+       same(xml[0].tagName.toLowerCase(), "graphml", "<graphml> tag");
+       same(xml.find("graph").length, 1, "<graph> tag");
+       same(xml.find("key").length, (schema.nodes.length + schema.edges.length 
- ignoredFields), "Number <key> tags");
+       same(xml.find("node").length, nodes.length, "Number of nodes");
+       same(xml.find("edge").length, edges.length, "Number of edges");
+    });
+    
+    test("XGMML", function() {
+       var xml = $(vis.xgmml());
+       var nodes = vis.nodes();
+       var edges = vis.edges();
+       
+       same(xml[0].tagName.toLowerCase(), "graph", "<graph> tag");
+       same(xml.find("node").length, nodes.length, "Number of nodes");
+       same(xml.find("node graphics").length, nodes.length, "Number of node 
graphics");
+       same(xml.find("edge").length, edges.length, "Number of edges");
+       same(xml.find("edge graphics").length, edges.length, "Number of edge 
graphics");
+    });
+    
+    test("SIF", function() {
+       var sif = vis.sif();
+       var edges = vis.edges();
+       $.each(edges, function(i, e) {
+               var inter = e.data.interaction ? e.data.interaction : e.data.id;
+               var line = e.data.source + "\t" + inter + "\t" + e.data.target; 
+               ok(sif.indexOf(line) > -1, "SIF text should have the line: 
'"+line+"'");
+       });
+       // Now replace the default interaction field:
+       var sif = vis.sif("type");
+       var edges = vis.edges();
+       $.each(edges, function(i, e) {
+               var line = e.data.source + "\t" + e.data.type + "\t" + 
e.data.target; 
+               ok(sif.indexOf(line) > -1, "SIF text should have the line: 
'"+line+"'");
+       });
+    });
+    
     test("PNG", function() {
        vis.zoom(Math.random()*2);
        vis.panBy(Math.random()*-1000, Math.random()*1000);
@@ -1232,24 +1291,21 @@
        same(base64.indexOf(beginning), 0, "PDF begins with correct chars");
     });
     
-    test("SIF", function() {
-       var sif = vis.sif();
+    test("SVG", function() {
+       var svg = $(vis.svg());
+       var nodes = vis.nodes();
        var edges = vis.edges();
-       $.each(edges, function(i, e) {
-               var inter = e.data.interaction ? e.data.interaction : e.data.id;
-               var line = e.data.source + "\t" + inter + "\t" + e.data.target; 
-               ok(sif.indexOf(line) > -1, "SIF text should have the line: 
'"+line+"'");
-       });
-       // Now replace the default interaction field:
-       var sif = vis.sif("type");
-       var edges = vis.edges();
-       $.each(edges, function(i, e) {
-               var line = e.data.source + "\t" + e.data.type + "\t" + 
e.data.target; 
-               ok(sif.indexOf(line) > -1, "SIF text should have the line: 
'"+line+"'");
-       });
+
+       same(svg.find(".cw-background").length, 1, "Background rectangle");
+       same(svg.find(".cw-node").length, nodes.length, "Number of SVG nodes");
+       same(svg.find(".cw-node .cw-node-shape").length, nodes.length, "Number 
of SVG node shapes");
+       same(svg.find(".cw-edge").length, edges.length, "Number of SVG edges");
+       same(svg.find(".cw-edge .cw-edge-line").length, edges.length, "Number 
of SVG edge lines");
+       
+       // TODO: test node images
+       // TODO: test edge arrows
     });
     
-    // TODO: test graphml(), xgmml()
     // TODO: test selection styles
     // TODO: text context menu methods
 }

Modified: cytoscapeweb/trunk/cytoscapeweb/html-template/tests.html
===================================================================
--- cytoscapeweb/trunk/cytoscapeweb/html-template/tests.html    2010-11-24 
01:43:37 UTC (rev 23002)
+++ cytoscapeweb/trunk/cytoscapeweb/html-template/tests.html    2010-11-24 
18:23:35 UTC (rev 23003)
@@ -34,7 +34,6 @@
 <title>Cytoscape Web API Tests</title>
 
 <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
-<script type="text/javascript" src="js/jquery.base64.min.js"></script>
 <script type="text/javascript" src="js/qunit.js"></script>
 <script type="text/javascript" src="js/json2.js"></script>
 <script type="text/javascript" src="js/AC_OETags.js"></script>

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/DeselectCommand.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/DeselectCommand.as
  2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/DeselectCommand.as
  2010-11-24 18:23:35 UTC (rev 23003)
@@ -69,7 +69,7 @@
                 var objs:Array, body:Object, type:String = "deselect";
                 
                 if (nodes.length > 0 && extMediator.hasListener(type, 
Groups.NODES)) {
-                    objs = ExternalObjectConverter.toExtObjectsArray(nodes);
+                    objs = ExternalObjectConverter.toExtElementsArray(nodes);
                     body = { functionName: ExternalFunctions.INVOKE_LISTENERS, 
                              argument: { type: type, group: Groups.NODES, 
target: objs } };
                     
@@ -77,7 +77,7 @@
                 }
                 
                 if (edges.length > 0 && extMediator.hasListener(type, 
Groups.EDGES)) {
-                    objs = ExternalObjectConverter.toExtObjectsArray(edges);
+                    objs = ExternalObjectConverter.toExtElementsArray(edges);
                     body = { functionName: ExternalFunctions.INVOKE_LISTENERS, 
                              argument: { type: type, group: Groups.EDGES, 
target: objs } };
 
@@ -89,7 +89,7 @@
                     all = all.concat(nodes).concat(edges);
                     
                     if (all.length > 0) {
-                        objs = ExternalObjectConverter.toExtObjectsArray(all);
+                        objs = ExternalObjectConverter.toExtElementsArray(all);
                         body = { functionName: 
ExternalFunctions.INVOKE_LISTENERS, 
                                  argument: { type: type, group: Groups.NONE, 
target: objs } };
     

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/FilterCommand.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/FilterCommand.as
    2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/FilterCommand.as
    2010-11-24 18:23:35 UTC (rev 23003)
@@ -79,7 +79,7 @@
                     var objs:Array, body:Object, type:String = "filter";
                 
                     if (nodes != null && extMediator.hasListener(type, 
Groups.NODES)) {
-                        objs = 
ExternalObjectConverter.toExtObjectsArray(nodes);
+                        objs = 
ExternalObjectConverter.toExtElementsArray(nodes);
                         body = { functionName: 
ExternalFunctions.INVOKE_LISTENERS, 
                                  argument: { type: type, group: Groups.NODES, 
target: objs } };
                         
@@ -87,7 +87,7 @@
                     }
                     
                     if (edges != null && extMediator.hasListener(type, 
Groups.EDGES)) {
-                        objs = 
ExternalObjectConverter.toExtObjectsArray(edges);
+                        objs = 
ExternalObjectConverter.toExtElementsArray(edges);
                         body = { functionName: 
ExternalFunctions.INVOKE_LISTENERS, 
                                  argument: { type: type, group: Groups.EDGES, 
target: objs } };
     
@@ -95,7 +95,7 @@
                     }
                     
                     if ((nodes != null || edges != null) && 
extMediator.hasListener(type, Groups.NONE)) {
-                        objs = ExternalObjectConverter.toExtObjectsArray(arr);
+                        objs = ExternalObjectConverter.toExtElementsArray(arr);
                         body = { functionName: 
ExternalFunctions.INVOKE_LISTENERS, 
                                  argument: { type: type, group: Groups.NONE, 
target: objs } };
     

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/HandleClickCommand.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/HandleClickCommand.as
       2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/HandleClickCommand.as
       2010-11-24 18:23:35 UTC (rev 23003)
@@ -60,7 +60,7 @@
             
             // Call external listener:            
             if (extMediator.hasListener(type, group)) {
-                var target:Object = ExternalObjectConverter.toExtObject(ds);
+                var target:Object = ExternalObjectConverter.toExtElement(ds);
                 
                 body = { functionName: ExternalFunctions.INVOKE_LISTENERS, 
                          argument: { type: type,

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/HandleHoverCommand.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/HandleHoverCommand.as
       2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/HandleHoverCommand.as
       2010-11-24 18:23:35 UTC (rev 23003)
@@ -79,7 +79,7 @@
                 
             // Call external listener:            
             if (extMediator.hasListener(type, group)) {
-                var target:Object = ExternalObjectConverter.toExtObject(ds);
+                var target:Object = ExternalObjectConverter.toExtElement(ds);
 
                 var body:Object = { functionName: 
ExternalFunctions.INVOKE_LISTENERS, 
                                     argument: { type: type, group: group, 
target: target } };

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/RemoveFilterCommand.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/RemoveFilterCommand.as
      2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/RemoveFilterCommand.as
      2010-11-24 18:23:35 UTC (rev 23003)
@@ -95,7 +95,7 @@
                         if (fe != null) all = all.concat(fe);
                     }
     
-                    objs = ExternalObjectConverter.toExtObjectsArray(all);
+                    objs = ExternalObjectConverter.toExtElementsArray(all);
                     body = { functionName: ExternalFunctions.INVOKE_LISTENERS, 
                              argument: { type: type, group: Groups.NONE, 
target: objs } };
     

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/SelectCommand.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/SelectCommand.as
    2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/controller/SelectCommand.as
    2010-11-24 18:23:35 UTC (rev 23003)
@@ -67,7 +67,7 @@
                 var objs:Array, body:Object, type:String = "select";
                 
                 if (nodes.length > 0 && extMediator.hasListener(type, 
Groups.NODES)) {
-                    objs = ExternalObjectConverter.toExtObjectsArray(nodes);
+                    objs = ExternalObjectConverter.toExtElementsArray(nodes);
                     body = { functionName: ExternalFunctions.INVOKE_LISTENERS, 
                              argument: { type: type, group: Groups.NODES, 
target: objs } };
                     
@@ -75,7 +75,7 @@
                 }
                 
                 if (edges.length > 0 && extMediator.hasListener(type, 
Groups.EDGES)) {
-                    objs = ExternalObjectConverter.toExtObjectsArray(edges);
+                    objs = ExternalObjectConverter.toExtElementsArray(edges);
                     body = { functionName: ExternalFunctions.INVOKE_LISTENERS, 
                              argument: { type: type, group: Groups.EDGES, 
target: objs } };
 
@@ -86,7 +86,7 @@
                     var all:Array = [];
                     all = all.concat(nodes).concat(edges);
 
-                    objs = ExternalObjectConverter.toExtObjectsArray(all);
+                    objs = ExternalObjectConverter.toExtElementsArray(all);
                     body = { functionName: ExternalFunctions.INVOKE_LISTENERS, 
                              argument: { type: type, group: Groups.NONE, 
target: objs } };
 

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/converters/ExternalObjectConverter.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/converters/ExternalObjectConverter.as
    2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/converters/ExternalObjectConverter.as
    2010-11-24 18:23:35 UTC (rev 23003)
@@ -92,16 +92,8 @@
         /** @inheritDoc */
         public function write(ds:DataSet, output:IDataOutput=null):IDataOutput 
{
             // Plain object to output
-            var obj:Object = {};
+            var obj:Object = toExtNetwork(ds);
             
-            // Add schema
-            obj[SCHEMA] = convertFromSchema(ds.nodes.schema, ds.edges.schema);
-            
-            // Add graph data
-            var objData:Object = obj[DATA] = {};
-            obj[Groups.NODES] = ds.nodes.data;
-            obj[Groups.EDGES] = ds.edges.data;
-            
             if (output == null) output = new ByteArray();
             output.writeObject(obj);
             
@@ -192,20 +184,34 @@
             );
         }
         
-        public static function toExtObjectsArray(dataSprites:*):Array {
+        public static function toExtNetwork(ds:DataSet):Object {
+            var obj:Object = {};
+            
+            // Add schema
+            obj[SCHEMA] = toExtSchema(ds.nodes.schema, ds.edges.schema);
+            
+            // Add graph data
+            obj[DATA] = {};
+            obj[DATA][Groups.NODES] = ds.nodes.data;
+            obj[DATA][Groups.EDGES] = ds.edges.data;
+            
+            return obj;
+        }
+        
+        public static function toExtElementsArray(dataSprites:*):Array {
             var arr:Array = null;
                      
             if (dataSprites is DataList || dataSprites is Array) {
                 arr = [];
                 for each (var ds:DataSprite in dataSprites) {
-                    arr.push(toExtObject(ds));
+                    arr.push(toExtElement(ds));
                 }
             }
 
             return arr;
         }
         
-        public static function toExtObject(ds:DataSprite):Object {
+        public static function toExtElement(ds:DataSprite):Object {
             var obj:Object = null;
 
             if (ds != null) {
@@ -244,7 +250,7 @@
                     
                     if (e.props.$merged) {
                         var ee:Array = e.props.$edges;
-                        ee = toExtObjectsArray(ee);
+                        ee = toExtElementsArray(ee);
                         obj.edges = ee;
                     }
                 }
@@ -253,7 +259,7 @@
             return obj;
         }
         
-        public static function convertFromSchema(nodesSchema:DataSchema, 
edgesSchema:DataSchema):Object {
+        public static function toExtSchema(nodesSchema:DataSchema, 
edgesSchema:DataSchema):Object {
             var obj:Object = {};
             
             var convertFromDataFields:Function = function(fields:Array):Array {

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/converters/SVGExporter.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/converters/SVGExporter.as
        2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/converters/SVGExporter.as
        2010-11-24 18:23:35 UTC (rev 23003)
@@ -69,6 +69,11 @@
         // ========[ CONSTANTS 
]====================================================================
 
         private static const GLOW_WIDTH:Number = 3;
+        private static const BACKGROUND_CLASS:String = "cw-background";
+        private static const NODE_CLASS:String = "cw-node";
+        private static const NODE_SHAPE_CLASS:String = "cw-node-shape";
+        private static const EDGE_CLASS:String = "cw-edge";
+        private static const EDGE_LINE_CLASS:String = "cw-edge-line";
 
         // ========[ PRIVATE PROPERTIES 
]===========================================================
         
@@ -134,7 +139,7 @@
             
             // Draw the background:
             var bgColor:String = 
Utils.rgbColorAsString(_style.getValue(VisualProperties.BACKGROUND_COLOR));
-            svg += '<rect x="0" y="0" width="100%" height="100%" 
fill="'+bgColor+'"/>';
+            svg += '<rect class="'+BACKGROUND_CLASS+'" x="0" y="0" 
width="100%" height="100%" fill="'+bgColor+'"/>';
             
             // Get the shift, in case one or more nodes were dragged or the 
graph view is not at [0,0]:
             var sp:Point = _graphView.vis.globalToLocal(new Point(bounds.x, 
bounds.y));
@@ -203,6 +208,8 @@
                         if (cap === CapsStyle.ROUND) cap = 'round';
                     }
                     
+                    svg += '<g class="'+EDGE_CLASS+'">';
+                    
                     // First let's draw any glow (e.g. for selected edges):
                     // -----------------------------------------------------
                     var filters:Array = e.filters;
@@ -237,7 +244,7 @@
                     
                     // Draw the edge's line and joints:
                     // -----------------------------------------------------
-                    svg += '<g stroke-linejoin="round" stroke-width="'+w+'" 
stroke-linecap="'+cap+'" fill="none" stroke-opacity="'+a+'" stroke="'+c+'" 
'+dashArr+'>';
+                    svg += '<g class="'+EDGE_LINE_CLASS+'" 
stroke-linejoin="round" stroke-width="'+w+'" stroke-linecap="'+cap+'" 
fill="none" stroke-opacity="'+a+'" stroke="'+c+'" '+dashArr+'>';
                     svg += drawEdgeShaft(start, end, c1, c2, loop);
                     svg += '</g>';
                     
@@ -259,6 +266,9 @@
                     svg += '<g fill="'+c+'" fill-opacity="'+a+'" 
stroke="none">';
                     svg += drawEdgeArrow(taStyle.shape, tArrowPoints, 
taStyle.height*_scale);
                     svg += '</g>';
+                    
+                    // Close edge group:
+                    svg += '</g>';
                 }
             }
             
@@ -282,6 +292,8 @@
                 // Get the Global node point (relative to the stage):
                 var np:Point = toImagePoint(new Point(n.x, n.y), n);
                 
+                svg += '<g class="'+NODE_CLASS+'">';
+                
                 // First let's draw any node glow (e.g. for selected nodes):
                 var filters:Array = n.filters;
                 for each (var f:BitmapFilter in filters) {
@@ -309,7 +321,7 @@
                 w = (n.width - n.lineWidth) * _scale;
                 h = (n.height - n.lineWidth) * _scale;
  
-                svg += '<g fill="'+c+'" fill-opacity="'+a+'" stroke="'+lc+'" 
stroke-linejoin="round" stroke-width="'+lw+'" stroke-linecap="butt" 
stroke-opacity="'+a+'">';
+                svg += '<g class="'+NODE_SHAPE_CLASS+'" fill="'+c+'" 
fill-opacity="'+a+'" stroke="'+lc+'" stroke-linejoin="round" 
stroke-width="'+lw+'" stroke-linecap="butt" stroke-opacity="'+a+'">';
                 
                 // Basic node shape
                 svg += (nodeSvgShape = drawNodeShape(n.shape, np.x, np.y, w, 
h));
@@ -338,7 +350,8 @@
                     svg += '</g>';
                 }
                 
-                svg += '</g>';
+                svg += '</g>'; // Close node shape groupd
+                svg += '</g>'; // Close node group
             }
             
             return svg;

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/data/FirstNeighborsVO.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/data/FirstNeighborsVO.as
 2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/model/data/FirstNeighborsVO.as
 2010-11-24 18:23:35 UTC (rev 23003)
@@ -153,10 +153,10 @@
         public function toObject():Object {
             var obj:Object = {};
             
-            obj.rootNodes = 
ExternalObjectConverter.toExtObjectsArray(rootNodes);
-            obj.neighbors = 
ExternalObjectConverter.toExtObjectsArray(neighbors);
-            obj.edges = ExternalObjectConverter.toExtObjectsArray(edges);
-            obj.mergedEdges = 
ExternalObjectConverter.toExtObjectsArray(mergedEdges);
+            obj.rootNodes = 
ExternalObjectConverter.toExtElementsArray(rootNodes);
+            obj.neighbors = 
ExternalObjectConverter.toExtElementsArray(neighbors);
+            obj.edges = ExternalObjectConverter.toExtElementsArray(edges);
+            obj.mergedEdges = 
ExternalObjectConverter.toExtElementsArray(mergedEdges);
             
             return obj;
         }

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/view/ContextMenuMediator.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/view/ContextMenuMediator.as
    2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/view/ContextMenuMediator.as
    2010-11-24 18:23:35 UTC (rev 23003)
@@ -151,7 +151,7 @@
                 menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,
                     function(evt:ContextMenuEvent):void {
                         var target:* = _rolledOverNode ? _rolledOverNode : 
_rolledOverEdge;
-                        target = ExternalObjectConverter.toExtObject(target);
+                        target = ExternalObjectConverter.toExtElement(target);
                         
                         var body:Object = { functionName: 
ExternalFunctions.INVOKE_CONTEXT_MENU_CALLBACK, 
                                             argument: { type: "contextmenu",

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/view/ExternalMediator.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/view/ExternalMediator.as   
    2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src/org/cytoscapeweb/view/ExternalMediator.as   
    2010-11-24 18:23:35 UTC (rev 23003)
@@ -30,6 +30,8 @@
 package org.cytoscapeweb.view {
     import com.adobe.serialization.json.JSON;
     
+    import flare.data.DataSchema;
+    import flare.data.DataSet;
     import flare.vis.data.EdgeSprite;
     import flare.vis.data.NodeSprite;
     
@@ -42,6 +44,7 @@
     import org.cytoscapeweb.ApplicationFacade;
     import org.cytoscapeweb.model.converters.ExternalObjectConverter;
     import org.cytoscapeweb.model.data.FirstNeighborsVO;
+    import org.cytoscapeweb.model.data.GraphicsDataTable;
     import org.cytoscapeweb.model.data.VisualStyleBypassVO;
     import org.cytoscapeweb.model.data.VisualStyleVO;
     import org.cytoscapeweb.model.methods.error;
@@ -285,39 +288,39 @@
         }
 
         private function getNodeById(id:String):String {
-            var obj:Object = 
ExternalObjectConverter.toExtObject(graphProxy.getNode(id));
+            var obj:Object = 
ExternalObjectConverter.toExtElement(graphProxy.getNode(id));
             return JSON.encode(obj);
         }
         
         private function getEdgeById(id:String):String {
-            var obj:Object = 
ExternalObjectConverter.toExtObject(graphProxy.getEdge(id));
+            var obj:Object = 
ExternalObjectConverter.toExtElement(graphProxy.getEdge(id));
             return JSON.encode(obj);
         }
         
         private function getNodes():String {
-            var arr:Array = 
ExternalObjectConverter.toExtObjectsArray(graphProxy.graphData.nodes);
+            var arr:Array = 
ExternalObjectConverter.toExtElementsArray(graphProxy.graphData.nodes);
             return JSON.encode(arr);
         }
         
         private function getEdges():String {
             var edges:Array = graphProxy.edges;
-            var arr:Array = ExternalObjectConverter.toExtObjectsArray(edges);
+            var arr:Array = ExternalObjectConverter.toExtElementsArray(edges);
             return JSON.encode(arr);
         }
         
         private function getMergedEdges():String {
             var edges:Array = graphProxy.mergedEdges;
-            var arr:Array = ExternalObjectConverter.toExtObjectsArray(edges);
+            var arr:Array = ExternalObjectConverter.toExtElementsArray(edges);
             return JSON.encode(arr);
         }
         
         private function getSelectedNodes():String {
-            var arr:Array = 
ExternalObjectConverter.toExtObjectsArray(graphProxy.selectedNodes);
+            var arr:Array = 
ExternalObjectConverter.toExtElementsArray(graphProxy.selectedNodes);
             return JSON.encode(arr);
         }
         
         private function getSelectedEdges():String {
-            var arr:Array = 
ExternalObjectConverter.toExtObjectsArray(graphProxy.selectedEdges);
+            var arr:Array = 
ExternalObjectConverter.toExtElementsArray(graphProxy.selectedEdges);
             return JSON.encode(arr);
         }
         
@@ -365,7 +368,7 @@
                 graphMediator.initialize(Groups.NODES, [n]);
                 
                 if (updateVisualMappers) 
sendNotification(ApplicationFacade.GRAPH_DATA_CHANGED);
-                o = ExternalObjectConverter.toExtObject(n);
+                o = ExternalObjectConverter.toExtElement(n);
 
             } catch (err:Error) {
                 trace("[ERROR]: addNode: " + err.getStackTrace());
@@ -385,7 +388,7 @@
                 graphMediator.initialize(Groups.EDGES, [e]);
                 
                 if (updateVisualMappers) 
sendNotification(ApplicationFacade.GRAPH_DATA_CHANGED);
-                o = ExternalObjectConverter.toExtObject(e);
+                o = ExternalObjectConverter.toExtElement(e);
                 
             } catch (err:Error) {
                 trace("[ERROR]: addEdge: " + err.getStackTrace());
@@ -403,7 +406,7 @@
         }
         
         private function getDataSchema():Object {
-            var obj:Object = 
ExternalObjectConverter.convertFromSchema(graphProxy.nodesSchema, 
graphProxy.edgesSchema);
+            var obj:Object = 
ExternalObjectConverter.toExtSchema(graphProxy.nodesSchema, 
graphProxy.edgesSchema);
             return obj;
         }
         
@@ -420,6 +423,18 @@
                 sendNotification(ApplicationFacade.UPDATE_DATA, { group: 
group, items: items, data: data });
         }
         
+        private function getNetwork():Object {
+               var data:Object = graphProxy.graphData;
+               var nodesSchema:DataSchema = graphProxy.nodesSchema;
+               var edgesSchema:DataSchema = graphProxy.edgesSchema;
+               
+               var nodesTable:GraphicsDataTable = new 
GraphicsDataTable(data.nodes, nodesSchema);
+            var edgesTable:GraphicsDataTable = new 
GraphicsDataTable(data.group(Groups.REGULAR_EDGES), edgesSchema);
+            var ds:DataSet = new DataSet(nodesTable, edgesTable);
+               
+            return ExternalObjectConverter.toExtNetwork(ds);
+        }
+        
         private function getNetworkAsText(format:String="xgmml", 
options:Object=null):String {
             return graphProxy.getDataAsText(format, options);
         }
@@ -469,7 +484,7 @@
                                         "getVisualStyleBypass", 
"setVisualStyleBypass",
                                         "addNode", "addEdge", "removeElements",
                                         "getDataSchema", "addDataField", 
"removeDataField", "updateData",
-                                        "getNetworkAsText", 
"getNetworkAsImage", 
+                                        "getNetwork", "getNetworkAsText", 
"getNetworkAsImage", 
                                         "exportNetwork" ];
 
                 for each (var f:String in functions) addFunction(f);

Modified: 
cytoscapeweb/trunk/cytoscapeweb/src-test/org/cytoscapeweb/model/converters/ExternalObjectConverterTest.as
===================================================================
--- 
cytoscapeweb/trunk/cytoscapeweb/src-test/org/cytoscapeweb/model/converters/ExternalObjectConverterTest.as
   2010-11-24 01:43:37 UTC (rev 23002)
+++ 
cytoscapeweb/trunk/cytoscapeweb/src-test/org/cytoscapeweb/model/converters/ExternalObjectConverterTest.as
   2010-11-24 18:23:35 UTC (rev 23003)
@@ -127,7 +127,7 @@
             var attrs:Array = ["id"];
             
             for each (var n:NodeSprite in data.nodes) {
-                o = ExternalObjectConverter.toExtObject(n);
+                o = ExternalObjectConverter.toExtElement(n);
                 assertEquals(Groups.NODES, o.group);
                 
                 for each (k in props) assertTrue("Node property: " + k, 
o.hasOwnProperty(k));
@@ -141,7 +141,7 @@
             attrs = ["id","source","target","directed"];
             
             for each (var e:EdgeSprite in data.edges) {
-                o = ExternalObjectConverter.toExtObject(e);
+                o = ExternalObjectConverter.toExtElement(e);
                 assertEquals(Groups.EDGES, o.group);
                 
                 for each (k in props) assertTrue("Edge property: " + k, 
o.hasOwnProperty(k));

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