Author: mkirby
Date: 2012-07-11 15:13:33 -0700 (Wed, 11 Jul 2012)
New Revision: 29845

Modified:
   csplugins/trunk/soc/mkirby/CytoBridge/pom.xml
   
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/CyActivator.java
   
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/NetworkManager.java
   
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/NodeViewListener.java
   
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/rpc/CytoscapeRPCCallHandler.java
Log:
mkirby: Updates.

Modified: csplugins/trunk/soc/mkirby/CytoBridge/pom.xml
===================================================================
--- csplugins/trunk/soc/mkirby/CytoBridge/pom.xml       2012-07-11 22:06:54 UTC 
(rev 29844)
+++ csplugins/trunk/soc/mkirby/CytoBridge/pom.xml       2012-07-11 22:13:33 UTC 
(rev 29845)
@@ -73,6 +73,11 @@
                </dependency>
                <dependency>
                        <groupId>org.cytoscape</groupId>
+                       <artifactId>layout-api</artifactId>
+                       <version>${cytoscape.api.version}</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.cytoscape</groupId>
                        <artifactId>core-task-api</artifactId>
                        <version>${cytoscape.api.version}</version>
                </dependency>

Modified: 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/CyActivator.java
===================================================================
--- 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/CyActivator.java
       2012-07-11 22:06:54 UTC (rev 29844)
+++ 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/CyActivator.java
       2012-07-11 22:13:33 UTC (rev 29845)
@@ -4,11 +4,16 @@
 import org.cytoscape.application.swing.CySwingApplication;
 import org.cytoscape.model.CyNetworkFactory;
 import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.CyTableFactory;
+import org.cytoscape.model.CyTableManager;
+import org.cytoscape.property.CyProperty;
 import org.cytoscape.service.util.AbstractCyActivator;
+import org.cytoscape.view.layout.CyLayoutAlgorithmManager;
 import org.cytoscape.view.model.CyNetworkViewFactory;
 import org.cytoscape.view.model.CyNetworkViewManager;
 import org.cytoscape.view.model.events.AddedNodeViewsListener;
 import org.cytoscape.view.vizmap.VisualMappingManager;
+import org.cytoscape.work.TaskManager;
 import org.osgi.framework.BundleContext;
 
 
@@ -35,16 +40,24 @@
                CyNetworkViewManager netViewMan = 
getService(bc,CyNetworkViewManager.class);
                VisualMappingManager visMan = 
getService(bc,VisualMappingManager.class);
                
+               CyTableFactory tabFact = getService(bc,CyTableFactory.class);
+               CyTableManager tabMan = getService(bc,CyTableManager.class);
+               
+               CyLayoutAlgorithmManager layMan = 
getService(bc,CyLayoutAlgorithmManager.class);
+               
                CySwingApplication cytoscapeDesktopService = 
getService(bc,CySwingApplication.class);
                
                //Create instance of NetworkManager with the factories/managers
-               NetworkManager myManager = new NetworkManager(netFact, 
netViewFact, netMan, netViewMan);
+               NetworkManager myManager = new NetworkManager(netFact, 
netViewFact, netMan, netViewMan, tabFact, tabMan);
                
                //Create and register CytoBridge as a Service
                CytoBridgeAction cytoBridgeAction = new 
CytoBridgeAction(cytoscapeDesktopService, myManager);
                registerService(bc,cytoBridgeAction,CyAction.class, new 
Properties());
                
-               NodeViewListener listen = new NodeViewListener(visMan);
+               TaskManager tm = getService(bc, TaskManager.class);
+               CyProperty cyPropertyServiceRef = 
getService(bc,CyProperty.class,"(cyPropertyName=cytoscape3.props)");
+               
+               NodeViewListener listen = new NodeViewListener(visMan, layMan, 
tm, cyPropertyServiceRef);
                registerService(bc,listen,AddedNodeViewsListener.class, new 
Properties());
        }
 }

Modified: 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/NetworkManager.java
===================================================================
--- 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/NetworkManager.java
    2012-07-11 22:06:54 UTC (rev 29844)
+++ 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/NetworkManager.java
    2012-07-11 22:13:33 UTC (rev 29845)
@@ -1,5 +1,6 @@
 package org.cytoscape.cytobridge;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Vector;
@@ -10,6 +11,8 @@
 import org.cytoscape.model.CyNetworkManager;
 import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyTableFactory;
+import org.cytoscape.model.CyTableManager;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.CyNetworkViewFactory;
 import org.cytoscape.view.model.CyNetworkViewManager;
@@ -24,9 +27,15 @@
        private CyNetworkManager netMan;
        private CyNetworkViewManager netViewMan;
        
+       private CyTableFactory tabFact;
+       private CyTableManager tabMan;
+       
        /** Maintains a reference to all networks created by the plugin. */
        private Map<String, NetworkSync> currentNets;
        
+       /** Maintains a reference to all tables created by the plugin. */
+       private Map<String, CyTable> currentTabs;
+       
        /** Constructs this Network manager with the needed factories/managers.
         * 
         * @param netFact
@@ -35,14 +44,20 @@
         * @param netViewMan
         */
        public NetworkManager(CyNetworkFactory netFact, CyNetworkViewFactory 
netViewFact,
-                                                       CyNetworkManager 
netMan, CyNetworkViewManager netViewMan) {
+                                                       CyNetworkManager 
netMan, CyNetworkViewManager netViewMan,
+                                                       CyTableFactory tabFact, 
CyTableManager tabMan) {
                
                this.netFact = netFact;
                this.netViewFact = netViewFact;
                this.netMan = netMan;
                this.netViewMan = netViewMan;
                
+               this.tabFact = tabFact;
+               this.tabMan = tabMan;
+               
                currentNets = new HashMap<String, NetworkSync>();
+               
+               currentTabs = new HashMap<String, CyTable>();
        }
        
        /** Handles creation and updating of a network sent through the plugin.
@@ -52,16 +67,58 @@
         * @param edgeFrom A vector of edge sources.
         * @param edgeTo A vector of edge destinations.
         */
-       public void pushNetwork(String netName, Vector<Integer> nodes, 
Vector<Double> edgeFrom, Vector<Double> edgeTo) {
+       public void pushNetwork(String netName, Vector<Integer> nodes, 
Vector<Integer> edges, Vector<Integer> edgeFrom, Vector<Integer> edgeTo) {
                
                if (currentNets.containsKey(netName)) {
                        //Update the appropriate CyNetwork
                        System.out.println("Updating network "+netName);
                        CyNetwork network = 
currentNets.get(netName).getNetwork();
-                       CyNode node = network.addNode();
-                       network.getRow(node).set(CyNetwork.NAME, "55");
-                       currentNets.get(netName).getNodeMap().put(55, node);
                        
+                       //Any nodes to Add?
+                       for (Integer n : nodes) {
+                               if 
(!currentNets.get(netName).getNodeMap().containsKey(n)) {
+                                       System.out.println("Adding node "+n);
+                                       CyNode node = network.addNode();
+                                       
network.getRow(node).set(CyNetwork.NAME, n+"");
+                                       
currentNets.get(netName).getNodeMap().put(n, node);
+                               }
+                       }
+                       //Any nodes to remove?
+                       Vector<CyNode> remove = new Vector<CyNode>();
+                       for (Integer n : 
currentNets.get(netName).getNodeMap().keySet()) {
+                               if (!nodes.contains(n)) {
+                                       System.out.println("Removing node "+n);
+                                       
remove.add(currentNets.get(netName).getNodeMap().get(n));
+                               }
+                       }
+                       network.removeNodes(remove);
+                       
+                       //Any edges to Add?
+                       int i = 0;
+                       for (Integer e : edges) {
+                               if 
(!currentNets.get(netName).getEdgeMap().containsKey(e)) {
+                                       System.out.println("Adding edge "+e);
+                                       CyNode fromNode = 
currentNets.get(netName).getNodeMap().get(edgeFrom.get(i).intValue());
+                                       CyNode toNode = 
currentNets.get(netName).getNodeMap().get(edgeTo.get(i).intValue());
+                                       CyEdge edge = network.addEdge(fromNode, 
toNode, false);
+                                       
network.getRow(edge).set(CyNetwork.NAME, e+"");
+                                       
currentNets.get(netName).getEdgeMap().put(e, edge);
+                               }
+                               i++;
+                       }
+                       //Any edges to remove?
+                       Vector<CyEdge> removee = new Vector<CyEdge>();
+                       for (Integer e : 
currentNets.get(netName).getEdgeMap().keySet()) {
+                               if (!edges.contains(e)) {
+                                       System.out.println("Removing edge "+e);
+                                       
removee.add(currentNets.get(netName).getEdgeMap().get(e));
+                               }
+                       }
+                       network.removeEdges(removee);
+                       currentNets.get(netName).getNetworkView().updateView();
+                       
+                       System.out.println("Done updating!");
+                       
                } else {
                        //Create the CyNetwork
                        System.out.println("Creating network "+netName);
@@ -86,8 +143,8 @@
                                CyNode fromNode = 
nodeMap.get(edgeFrom.get(e).intValue());
                                CyNode toNode = 
nodeMap.get(edgeTo.get(e).intValue());
                                CyEdge edge = network.addEdge(fromNode, toNode, 
false);
-                               network.getRow(edge).set(CyNetwork.NAME, e+"");
-                               edgeMap.put(e, edge);
+                               network.getRow(edge).set(CyNetwork.NAME, 
edges.get(e)+"");
+                               edgeMap.put(edges.get(e), edge);
                        }
                        System.out.println("Got edges...");
                        
@@ -101,44 +158,103 @@
                        netMan.addNetwork(network);
                        netViewMan.addNetworkView(networkView);
                }
-               
-                  //create network, record network id
-                  //create map from r-id to suid or Cynode
-                  //create similar ,map for edges
-                  //create all nodes, update maps
-                  //create all edges, update maps
-                  //create view
-                  //register network
-                  //register view
        }
        
+       public void pushNetTable(String netName, Vector<String> gheads, 
Vector<String> gdata) {
+               if (!currentNets.containsKey(netName)) {
+                       System.out.println("That network doesn't exist!");
+                       return ;
+               }
+               NetworkSync netSyn = currentNets.get(netName);
+
+               try {
+                       //Network Attributes
+                       CyTable gtable = 
netSyn.getNetwork().getDefaultNetworkTable();
+                       for (int g=0; g<gheads.size(); g++) {
+                               if (gtable.getColumn(gheads.get(g))==null) {
+                                       gtable.createColumn(gheads.get(g), 
String.class, true, "");
+                               }
+                               
gtable.getRow(netSyn.getNetwork().getSUID()).set(gheads.get(g), gdata.get(g));
+                       }
+               } catch(Exception e) {
+                       System.out.println(e.getMessage());
+               }
+               System.out.println("Updating network table for network 
"+netName);
+       }
        
-       public void pushTables(String netName, Vector<String> nheads, 
Vector<String> ndata, Vector<String> eheads, Vector<String> edata) {
+       public void pushNodeTable(String netName, Vector<String> nheads, 
Vector<Integer> nrids, Vector<String> ndata) {
                if (!currentNets.containsKey(netName)) {
                        System.out.println("That network doesn't exist!");
                        return ;
                }
-               
-               CyNetwork network = currentNets.get(netName).getNetwork();
-               CyTable ntable = network.getDefaultNodeTable();
-               
-               for (int n=0; n<nheads.size(); n++) {
-                       ntable.createColumn(nheads.get(n), String.class, true, 
"");
-                       for (int i=0; i<ndata.size()/nheads.size();i++) {
-                               //ntable.getRow(i).set(nheads.get(n), 
ndata.get(i));
+               NetworkSync netSyn = currentNets.get(netName);
+
+               try {
+                       //Node attributes
+                       CyTable ntable = 
netSyn.getNetwork().getDefaultNodeTable();
+                       for (int n=0; n<nheads.size(); n++) {
+                               if (ntable.getColumn(nheads.get(n))==null) {
+                                       ntable.createColumn(nheads.get(n), 
String.class, true, "");
+                               }
+                               for (int i=0; i<ndata.size()/nheads.size();i++) 
{
+                                       
ntable.getRow(netSyn.getNodeMap().get(nrids.get(i)).getSUID()).set(nheads.get(n),
 ndata.get(i+(n*ndata.size()/nheads.size())));
+                               }
                        }
+               } catch(Exception e) {
+                       System.out.println(e.getMessage());
                }
-               
-               CyTable etable = network.getDefaultEdgeTable();
-               
-               for (int e=0; e<eheads.size(); e++) {
-                       etable.createColumn(eheads.get(e), String.class, true, 
"");
-                       for (int i=0; i<edata.size()/eheads.size();i++) {
-                               //etable.getRow(i).set(eheads.get(e), 
edata.get(i));
+               System.out.println("Updating node table for network "+netName);
+       }
+       
+       public void pushEdgeTable(String netName, Vector<String> eheads, 
Vector<Integer> erids, Vector<String> edata) {
+               if (!currentNets.containsKey(netName)) {
+                       System.out.println("That network doesn't exist!");
+                       return ;
+               }
+               NetworkSync netSyn = currentNets.get(netName);
+
+               try {
+                       //Edge Attributes
+                       CyTable etable = 
netSyn.getNetwork().getDefaultEdgeTable();
+                       for (int e=0; e<eheads.size(); e++) {
+                               if (etable.getColumn(eheads.get(e))==null) {
+                                       etable.createColumn(eheads.get(e), 
String.class, true, "");
+                               }
+                               for (int i=0; i<edata.size()/eheads.size();i++) 
{
+                                       
etable.getRow(netSyn.getEdgeMap().get(erids.get(i)).getSUID()).set(eheads.get(e),
 edata.get(i+(e*edata.size()/eheads.size())));
+                               }
                        }
+               } catch(Exception e) {
+                       System.out.println(e.getMessage());
                }
-               
-               System.out.println("Updating tables for network "+netName);
+               System.out.println("Updating edge table for network "+netName);
        }
+       
+       public void pushTable(String tabName, Vector<String> heads, 
Vector<String> data) {
+               if (currentTabs.containsKey(tabName)) {
+                       //Update the appropriate CyTable
+                       System.out.println("Updating table "+tabName);
+                       CyTable table = currentTabs.get(tabName);
+               } else {
+                       CyTable table= tabFact.createTable(tabName, "cytobid", 
Integer.class, true, true);
+                       
+                       try {
+                               for (int e=0; e<heads.size(); e++) {
+                                       table.createColumn(heads.get(e), 
String.class, true, "");
+                                       for (int i=0; 
i<data.size()/heads.size();i++) {
+                                               
//table.getRow().set(heads.get(e), data.get(i+(e*data.size()/heads.size())));
+                                       }
+                               }
+                       } catch(Exception e) {
+                               System.out.println(e.getMessage());
+                       }
+                       
+                       //Store a reference to this network and its associated 
maps
+                       currentTabs.put(tabName, table);
+                       
+                       //Add network and network view to appropriate managers
+                       tabMan.addTable(table);
+               }
+       }
 
 }

Modified: 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/NodeViewListener.java
===================================================================
--- 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/NodeViewListener.java
  2012-07-11 22:06:54 UTC (rev 29844)
+++ 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/NodeViewListener.java
  2012-07-11 22:13:33 UTC (rev 29845)
@@ -1,40 +1,61 @@
 package org.cytoscape.cytobridge;
 
-import java.util.Collection;
+import java.util.HashSet;
+import java.util.Properties;
 
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
 import org.cytoscape.model.CyRow;
+import org.cytoscape.property.CyProperty;
+import org.cytoscape.view.layout.CyLayoutAlgorithm;
+import org.cytoscape.view.layout.CyLayoutAlgorithmManager;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.View;
 import org.cytoscape.view.model.events.AddedNodeViewsEvent;
 import org.cytoscape.view.model.events.AddedNodeViewsListener;
 import org.cytoscape.view.vizmap.VisualMappingManager;
 import org.cytoscape.view.vizmap.VisualStyle;
+import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.TaskManager;
 
 public class NodeViewListener implements AddedNodeViewsListener {
 
+       private static final String DEF_LAYOUT = "force-directed";
+       
        private VisualMappingManager visMan;
+       private CyLayoutAlgorithmManager layMan;
+       private TaskManager tm;
+       private Properties props;
        
-       public NodeViewListener(VisualMappingManager visMan) {
+       public NodeViewListener(VisualMappingManager visMan, 
CyLayoutAlgorithmManager layMan, TaskManager tm,
+                                                       CyProperty<Properties> 
cyPropertyServiceRef) {
                this.visMan = visMan;
+               this.layMan = layMan;
+               this.tm = tm;
+               this.props = cyPropertyServiceRef.getProperties();
        }
        
        public void handleEvent(AddedNodeViewsEvent e) {
                //update layout automatically (of new nodes)
                CyNetworkView networkView = e.getSource();
-               Collection<CyRow> wasSelected = 
networkView.getModel().getDefaultNodeTable().getMatchingRows(CyNetwork.SELECTED,
 true);
-               for (CyRow node : wasSelected) {
-                       node.set(CyNetwork.SELECTED, false);
-               }
                VisualStyle style = visMan.getVisualStyle(networkView);
                for (View<CyNode> v : e.getNodeViews()) {
-                       
networkView.getModel().getRow(v.getModel()).set(CyNetwork.SELECTED, true);
                        
style.apply(networkView.getModel().getRow(v.getModel()), 
networkView.getNodeView(v.getModel()));
                }
-               for (CyRow node : wasSelected) {
-                       node.set(CyNetwork.SELECTED, true);
+               
+               String pref = CyLayoutAlgorithmManager.DEFAULT_LAYOUT_NAME;
+               if (props != null)
+                       pref = props.getProperty("preferredLayoutAlgorithm", 
DEF_LAYOUT);
+               
+               final CyLayoutAlgorithm layout = layMan.getLayout(pref);
+               if (layout != null) {
+                       TaskIterator ti = 
layout.createTaskIterator(networkView, layout.getDefaultLayoutContext(),
+                                       new 
HashSet<View<CyNode>>(e.getNodeViews()), "");
+                       tm.execute(ti);
+               } else {
+                       throw new IllegalArgumentException("Couldn't find 
layout algorithm: " + pref);
                }
+               
                networkView.updateView();
        }
 

Modified: 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/rpc/CytoscapeRPCCallHandler.java
===================================================================
--- 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/rpc/CytoscapeRPCCallHandler.java
       2012-07-11 22:06:54 UTC (rev 29844)
+++ 
csplugins/trunk/soc/mkirby/CytoBridge/src/main/java/org/cytoscape/cytobridge/rpc/CytoscapeRPCCallHandler.java
       2012-07-11 22:13:33 UTC (rev 29845)
@@ -69,22 +69,43 @@
        return "Thanks";
    }
    
-   public String pushNetwork(String name, Vector<Integer> nodes, 
Vector<Double> edgeFrom, Vector<Double> edgeTo) throws XmlRpcException {
+   public String pushNetwork(String name, Vector<Integer> nodes, 
Vector<Integer> edges, Vector<Integer> edgeFrom, Vector<Integer> edgeTo) throws 
XmlRpcException {
           if (edgeFrom.size()!=edgeTo.size()) {
                   throw new XmlRpcException("ERROR: Edge mismatch!");
           }
           System.out.println("Got "+nodes.size()+" nodes.");
           
-          myManager.pushNetwork(name, nodes, edgeFrom, edgeTo);
+          try {
+                  myManager.pushNetwork(name, nodes, edges, edgeFrom, edgeTo);
+          } catch (Exception e) {
+                  e.printStackTrace();
+          }
           
           return "Pushed to Cytoscape.";
    }
    
-   public String pushTables(String name, Vector<String> nheads, Vector<String> 
ndata, Vector<String> eheads, Vector<String> edata) {
-          myManager.pushTables(name, nheads, ndata, eheads, edata);
+   /*
+   public String pushTables(String name, Vector<String> gheads, Vector<String> 
gdata, Vector<String> nheads, Vector<Integer> nrids, Vector<String> ndata, 
Vector<String> eheads, Vector<Integer> erids, Vector<String> edata) {
+          myManager.pushTables(name, gheads, gdata, nheads, nrids, ndata, 
eheads, erids, edata);
           return "Pushed to Cytoscape.";
+   }*/
+   
+   public void pushNetTable(String name, Vector<String> gheads, Vector<String> 
gdata) {
+          myManager.pushNetTable(name, gheads, gdata);
    }
+
+   public void pushNodeTable(String name, Vector<String> nheads, 
Vector<Integer> nrids, Vector<String> ndata) {
+          myManager.pushNodeTable(name, nheads, nrids, ndata);
+   }
    
+   public void pushEdgeTable(String name, Vector<String> eheads, 
Vector<Integer> erids, Vector<String> edata) {
+          myManager.pushEdgeTable(name, eheads, erids, edata);
+   }
+   
+   public void pushTable(String name, Vector<String> heads, Vector<String> 
data) {
+          myManager.pushTable(name, heads, data);
+   }
+   
 
    /**
     * Returns a string representing the version of the plugin.

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