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.