Author: ruschein
Date: 2011-08-02 12:18:48 -0700 (Tue, 02 Aug 2011)
New Revision: 26354

Added:
   
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesEdit.java
Modified:
   
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesTask.java
   
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesTaskFactory.java
   
core3/core-task-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
Log:
Added undo/redo support for the connecting of selected nodes.

Copied: 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesEdit.java
 (from rev 26353, 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/zoom/ZoomEdit.java)
===================================================================
--- 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesEdit.java
                             (rev 0)
+++ 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesEdit.java
     2011-08-02 19:18:48 UTC (rev 26354)
@@ -0,0 +1,52 @@
+package org.cytoscape.task.internal.edit;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.cytoscape.util.swing.CyAbstractEdit;
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyEdge.Type;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyTableEntry;
+
+
+/** An undoable edit that will undo and redo the connecting of selected nodes. 
*/
+final class ConnectSelectedNodesEdit extends CyAbstractEdit {
+       private final CyNetwork network;
+       private Collection<CyEdge> edges;
+
+       ConnectSelectedNodesEdit(final CyNetwork network, final 
Collection<CyEdge> edges) {
+               super("Connect Selected Nodes");
+
+               this.network = network;
+               this.edges   = edges;
+       }
+
+       public void redo() {
+               super.redo();
+
+               final List<CyEdge> newEdges = new 
ArrayList<CyEdge>(edges.size());
+               for (final CyEdge edge : edges) {
+                       final CyNode source = edge.getSource();
+                       final CyNode target = edge.getTarget();
+                       final CyEdge newEdge = network.addEdge(source, target, 
/* isDirected = */ false);
+                       newEdge.getCyRow().set(CyTableEntry.NAME,
+                                              
source.getCyRow().get(CyTableEntry.NAME, String.class)
+                                              + " (" + 
ConnectSelectedNodesTask.INTERACTION + ") "
+                                              + 
target.getCyRow().get(CyTableEntry.NAME, String.class));
+                       newEdge.getCyRow().set(CyEdge.INTERACTION, 
ConnectSelectedNodesTask.INTERACTION);
+                       newEdges.add(newEdge);
+               }
+
+               edges = newEdges;
+       }
+
+       public void undo() {
+               super.undo();
+
+               network.removeEdges(edges);
+       }
+}

Modified: 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesTask.java
===================================================================
--- 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesTask.java
     2011-08-02 15:38:52 UTC (rev 26353)
+++ 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesTask.java
     2011-08-02 19:18:48 UTC (rev 26354)
@@ -1,5 +1,7 @@
 package org.cytoscape.task.internal.edit;
 
+
+import java.util.ArrayList;
 import java.util.List;
 
 import org.cytoscape.event.CyEventHelper;
@@ -12,16 +14,20 @@
 import org.cytoscape.model.CyTableUtil;
 import org.cytoscape.work.AbstractTask;
 import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.undo.UndoSupport;
 
+
 public class ConnectSelectedNodesTask extends AbstractTask {
-
        // TODO: is it sufficient to create undirected edge only?
-       private static final String INTERACTION = "undirected";
-
+       static final String INTERACTION = "undirected";
+       private final UndoSupport undoSupport;
        private final CyNetwork network;
        private final CyEventHelper eventHelper;
-       
-       public ConnectSelectedNodesTask(final CyNetwork network, final 
CyEventHelper eventHelper) {
+
+       public ConnectSelectedNodesTask(final UndoSupport undoSupport, final 
CyNetwork network,
+                                       final CyEventHelper eventHelper)
+       {
+               this.undoSupport = undoSupport;
                if (network == null)
                        throw new NullPointerException("Network is null.");
                this.network = network;
@@ -30,27 +36,30 @@
 
        @Override
        public void run(TaskMonitor taskMonitor) throws Exception {
-
                final CyTable nodeTable = network.getDefaultNodeTable();
                final CyTable edgeTable = network.getDefaultEdgeTable();
-                       final List<CyNode> selectedNodes = 
CyTableUtil.getNodesInState(network, CyNetwork.SELECTED, true);
-                       for (CyNode source : selectedNodes) {
-                               for (CyNode target : selectedNodes) {
-                                       if (source != target) {
-                                               final List<CyNode> 
sourceNeighborList = network.getNeighborList(source, Type.ANY);
-                                               if 
(sourceNeighborList.contains(target) == false) {
-                                                       // connect it
-                                                       final CyEdge newEdge = 
network.addEdge(source, target, false);
-                                                       newEdge.getCyRow().set(
-                                                                       
CyTableEntry.NAME,
-                                                                       
source.getCyRow().get(CyTableEntry.NAME, String.class) + " (" + INTERACTION + 
") "
-                                                                               
        + target.getCyRow().get(CyTableEntry.NAME, String.class));
-                                                       
newEdge.getCyRow().set(CyEdge.INTERACTION, INTERACTION);
+               final List<CyNode> selectedNodes = 
CyTableUtil.getNodesInState(network, CyNetwork.SELECTED, true);
 
-                                               }
+               final List<CyEdge> newEdges = new ArrayList<CyEdge>();
+               for (final CyNode source : selectedNodes) {
+                       for (final CyNode target : selectedNodes) {
+                               if (source != target) {
+                                       final List<CyNode> sourceNeighborList = 
network.getNeighborList(source, Type.ANY);
+                                       if 
(!sourceNeighborList.contains(target)) {
+                                               // connect it
+                                               final CyEdge newEdge = 
network.addEdge(source, target, false);
+                                               newEdges.add(newEdge);
+                                               newEdge.getCyRow().set(
+                                                       CyTableEntry.NAME,
+                                                       
source.getCyRow().get(CyTableEntry.NAME, String.class) + " (" + INTERACTION + 
") "
+                                                       + 
target.getCyRow().get(CyTableEntry.NAME, String.class));
+                                               
newEdge.getCyRow().set(CyEdge.INTERACTION, INTERACTION);
                                        }
                                }
                        }
+               }
+
+               undoSupport.getUndoableEditSupport().postEdit(
+                       new ConnectSelectedNodesEdit(network, newEdges));
        }
-
 }

Modified: 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesTaskFactory.java
===================================================================
--- 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesTaskFactory.java
      2011-08-02 15:38:52 UTC (rev 26353)
+++ 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/edit/ConnectSelectedNodesTaskFactory.java
      2011-08-02 19:18:48 UTC (rev 26354)
@@ -1,24 +1,32 @@
 package org.cytoscape.task.internal.edit;
 
+
 import org.cytoscape.event.CyEventHelper;
 import org.cytoscape.session.CyApplicationManager;
 import org.cytoscape.work.TaskFactory;
 import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.undo.UndoSupport;
 
+
 public class ConnectSelectedNodesTaskFactory implements TaskFactory {
-
+       private final UndoSupport undoSupport;
        private final CyApplicationManager appManager;
-//     private final CyNetworkViewManager viewManager;
        private final CyEventHelper eventHelper;
 
-       public ConnectSelectedNodesTaskFactory(final CyApplicationManager 
appManager, final CyEventHelper eventHelper) {
-               this.appManager = appManager;
+       public ConnectSelectedNodesTaskFactory(final UndoSupport undoSupport,
+                                              final CyApplicationManager 
appManager,
+                                              final CyEventHelper eventHelper)
+       {
+               this.undoSupport = undoSupport;
+               this.appManager  = appManager;
                this.eventHelper = eventHelper;
        }
 
        @Override
        public TaskIterator getTaskIterator() {
-               return new TaskIterator(new 
ConnectSelectedNodesTask(appManager.getCurrentNetwork(), eventHelper));
+               return new TaskIterator(
+                       new ConnectSelectedNodesTask(undoSupport, 
appManager.getCurrentNetwork(),
+                                                    eventHelper));
        }
 
 }

Modified: 
core3/core-task-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
===================================================================
--- 
core3/core-task-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
    2011-08-02 15:38:52 UTC (rev 26353)
+++ 
core3/core-task-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
    2011-08-02 19:18:48 UTC (rev 26354)
@@ -17,8 +17,8 @@
        default-lazy-init="false">
        <import resource="bundle-context-osgi.xml" />
 
-       <!-- regular spring configuration file defining the beans for this 
bundle. 
-               We've kept the osgi definitions in a separate configuration 
file so that 
+       <!-- regular spring configuration file defining the beans for this 
bundle.
+               We've kept the osgi definitions in a separate configuration 
file so that
                this file can easily be used for integration testing outside of 
an OSGi environment -->
 
        <context:annotation-config />
@@ -361,7 +361,7 @@
                
class="org.cytoscape.task.internal.export.table.ExportCurrentTableTaskFactory">
                <constructor-arg ref="cyTableWriterManagerRef" />
        </bean>
-       
+
        <bean id="applyPreferredLayoutTaskFactory"
                
class="org.cytoscape.task.internal.layout.ApplyPreferredLayoutTaskFactory">
                <constructor-arg ref="undoSupportServiceRef" />
@@ -389,7 +389,7 @@
                
class="org.cytoscape.task.internal.table.DeleteTableTaskFactory">
                <constructor-arg ref="cyTableManagerServiceRef" />
        </bean>
-       
+
        <bean id="exportVizmapTaskFactory"
         
class="org.cytoscape.task.internal.export.vizmap.ExportVizmapTaskFactory">
         <constructor-arg ref="vizmapWriterManagerServiceRef" />
@@ -411,7 +411,7 @@
                <constructor-arg ref="cyPropertyServiceRef" />
                <constructor-arg ref="cyNetworkNamingServiceRef" />
                <constructor-arg ref="streamUtilRef" />
-               <constructor-arg ref="cyTableManagerServiceRef" />              
+               <constructor-arg ref="cyTableManagerServiceRef" />
                <constructor-arg ref="cyDataTableReaderManagerServiceRef" />
                <constructor-arg ref="cyApplicationManagerServiceRef" />
        </bean>
@@ -448,9 +448,10 @@
                <constructor-arg ref="cyLayoutsServiceRef" />
                <constructor-arg ref="undoSupportServiceRef" />
        </bean>
-       
+
        <bean id="connectSelectedNodesTaskFactory"
                
class="org.cytoscape.task.internal.edit.ConnectSelectedNodesTaskFactory">
+               <constructor-arg ref="undoSupportServiceRef" />
                <constructor-arg ref="cyApplicationManagerServiceRef" />
                <constructor-arg ref="cyEventHelperRef" />
        </bean>

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