Author: ruschein
Date: 2011-07-28 15:58:31 -0700 (Thu, 28 Jul 2011)
New Revision: 26325

Added:
   
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideEdit.java
Modified:
   
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTask.java
   
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskFactory.java
   
core3/core-task-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
   
core3/core-task-impl/trunk/src/test/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskFactoryTest.java
   
core3/core-task-impl/trunk/src/test/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskTest.java
Log:
Added undo/redo support for hiding of selected edges.

Copied: 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideEdit.java
 (from rev 26321, 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/select/SelectionEdit.java)
===================================================================
--- 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideEdit.java
                             (rev 0)
+++ 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideEdit.java
     2011-07-28 22:58:31 UTC (rev 26325)
@@ -0,0 +1,107 @@
+package org.cytoscape.task.internal.hide;
+
+
+import static 
org.cytoscape.view.presentation.property.MinimalVisualLexicon.EDGE_VISIBLE;
+import static 
org.cytoscape.view.presentation.property.MinimalVisualLexicon.NODE_VISIBLE;
+
+
+import java.util.Collection;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.cytoscape.event.CyEventHelper;
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.view.model.CyNetworkView;
+import org.cytoscape.util.swing.CyAbstractEdit;
+
+
+/** An undoable edit that will undo and redo hiding of nodes and edges. */
+final class HideEdit extends CyAbstractEdit {
+       private final CyEventHelper eventHelper;
+       private final CyNetwork network;
+       private final CyNetworkView view;
+       private List<NodeAndHideState> nodeStates;
+       private List<EdgeAndHideState> edgeStates;
+
+       HideEdit(final CyEventHelper eventHelper, final String description,
+                final CyNetwork network, final CyNetworkView view)
+       {
+               super(description);
+
+               this.eventHelper = eventHelper;
+               this.network     = network;
+               this.view        = view;
+
+               saveHideState();
+       }
+
+       public void redo() {
+               super.redo();
+               saveAndRestoreState();
+       }
+
+       public void undo() {
+               super.undo();
+               saveAndRestoreState();
+       }
+
+       private void saveAndRestoreState() {
+               final List<NodeAndHideState> oldNodeStates = nodeStates;
+               final List<EdgeAndHideState> oldEdgeStates = edgeStates;
+
+               saveHideState();
+
+               for (final NodeAndHideState nodeAndState : oldNodeStates)
+                       
view.getNodeView(nodeAndState.getNode()).setVisualProperty(
+                               NODE_VISIBLE, nodeAndState.isHidden());
+
+               for (final EdgeAndHideState edgeAndState : oldEdgeStates)
+                       
view.getEdgeView(edgeAndState.getEdge()).setVisualProperty(
+                               EDGE_VISIBLE, edgeAndState.isHidden());
+
+               eventHelper.flushPayloadEvents();
+               view.updateView();
+       }
+
+       private void saveHideState() {
+               final List<CyNode> nodes = network.getNodeList();
+               nodeStates = new ArrayList<NodeAndHideState>(nodes.size());
+               for (final CyNode node : nodes)
+                       nodeStates.add(new NodeAndHideState(node, 
view.getNodeView(node).getVisualProperty(NODE_VISIBLE)));
+
+               final List<CyEdge> edges = network.getEdgeList();
+               edgeStates = new ArrayList<EdgeAndHideState>(edges.size());
+               for (final CyEdge edge : edges)
+                       edgeStates.add(new EdgeAndHideState(edge, 
view.getEdgeView(edge).getVisualProperty(EDGE_VISIBLE)));
+       }
+}
+
+
+final class NodeAndHideState {
+       private final CyNode node;
+       private final Boolean hidden;
+
+       NodeAndHideState(final CyNode node, final Boolean hidden) {
+               this.node   = node;
+               this.hidden = hidden;
+       }
+
+       CyNode getNode() { return node; }
+       Boolean isHidden() { return hidden; }
+}
+
+
+final class EdgeAndHideState {
+       private final CyEdge edge;
+       private final Boolean hidden;
+
+       EdgeAndHideState(final CyEdge edge, final Boolean hidden) {
+               this.edge   = edge;
+               this.hidden = hidden;
+       }
+
+       CyEdge getEdge() { return edge; }
+       Boolean isHidden() { return hidden; }
+}

Modified: 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTask.java
===================================================================
--- 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTask.java
        2011-07-28 22:05:05 UTC (rev 26324)
+++ 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTask.java
        2011-07-28 22:58:31 UTC (rev 26325)
@@ -1,15 +1,8 @@
 /*
   File: HideSelectedEdgesTask.java
 
-  Copyright (c) 2006, The Cytoscape Consortium (www.cytoscape.org)
+  Copyright (c) 2006, 2011, The Cytoscape Consortium (www.cytoscape.org)
 
-  The Cytoscape Consortium is:
-  - Institute for Systems Biology
-  - University of California San Diego
-  - Memorial Sloan-Kettering Cancer Center
-  - Institut Pasteur
-  - Agilent Technologies
-
   This library is free software; you can redistribute it and/or modify it
   under the terms of the GNU Lesser General Public License as published
   by the Free Software Foundation; either version 2.1 of the License, or
@@ -34,31 +27,42 @@
   along with this library; if not, write to the Free Software Foundation,
   Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 */
-
 package org.cytoscape.task.internal.hide;
 
+
 import java.util.List;
 
+import org.cytoscape.event.CyEventHelper;
 import org.cytoscape.model.CyEdge;
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyTableUtil;
 import org.cytoscape.task.AbstractNetworkViewTask;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.undo.UndoSupport;
 
 
 public class HideSelectedEdgesTask extends AbstractNetworkViewTask {
+       private final UndoSupport undoSupport;
+       private final CyEventHelper eventHelper;
 
-       public HideSelectedEdgesTask(CyNetworkView v) {
+       public HideSelectedEdgesTask(final UndoSupport undoSupport,
+                                    final CyEventHelper eventHelper, final 
CyNetworkView v)
+       {
                super(v);
+               this.undoSupport = undoSupport;
+               this.eventHelper = eventHelper;
        }
 
        public void run(TaskMonitor e) {
-               
-               final CyNetwork curr = view.getModel(); 
-               final List<CyEdge> selectedEdges = 
CyTableUtil.getEdgesInState(curr,CyNetwork.SELECTED, true); 
+               final CyNetwork network = view.getModel(); 
+               undoSupport.getUndoableEditSupport().postEdit(
+                       new HideEdit(eventHelper, "Hide Selected Edges", 
network, view));
 
-               HideUtils.setVisibleEdges( selectedEdges, false, view );
+               final List<CyEdge> selectedEdges =
+                       CyTableUtil.getEdgesInState(network, 
CyNetwork.SELECTED, true); 
+
+               HideUtils.setVisibleEdges(selectedEdges, false, view);
                
                view.updateView();
        } 

Modified: 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskFactory.java
===================================================================
--- 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskFactory.java
 2011-07-28 22:05:05 UTC (rev 26324)
+++ 
core3/core-task-impl/trunk/src/main/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskFactory.java
 2011-07-28 22:58:31 UTC (rev 26325)
@@ -1,7 +1,7 @@
 /*
   File: HideSelectedEdgesTaskFactory.java
 
-  Copyright (c) 2006, 2010, The Cytoscape Consortium (www.cytoscape.org)
+  Copyright (c) 2006, 2010-2011, The Cytoscape Consortium (www.cytoscape.org)
 
   This library is free software; you can redistribute it and/or modify it
   under the terms of the GNU Lesser General Public License as published
@@ -26,15 +26,28 @@
   You should have received a copy of the GNU Lesser General Public License
   along with this library; if not, write to the Free Software Foundation,
   Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- */
+*/
 package org.cytoscape.task.internal.hide;
 
+
+import org.cytoscape.event.CyEventHelper;
 import org.cytoscape.task.AbstractNetworkViewTaskFactory;
 import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.undo.UndoSupport;
 
+
 public class HideSelectedEdgesTaskFactory extends 
AbstractNetworkViewTaskFactory {
+       private final UndoSupport undoSupport;
+       private final CyEventHelper eventHelper;
 
+       public HideSelectedEdgesTaskFactory(final UndoSupport undoSupport,
+                                           final CyEventHelper eventHelper)
+       {
+               this.undoSupport = undoSupport;
+               this.eventHelper = eventHelper;
+       }
+
        public TaskIterator getTaskIterator() {
-               return new TaskIterator(new HideSelectedEdgesTask(view));
+               return new TaskIterator(new HideSelectedEdgesTask(undoSupport, 
eventHelper, view));
        }
 }

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-07-28 22:05:05 UTC (rev 26324)
+++ 
core3/core-task-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
    2011-07-28 22:58:31 UTC (rev 26325)
@@ -187,6 +187,8 @@
 
        <bean id="hideSelectedEdgesTaskFactory"
                
class="org.cytoscape.task.internal.hide.HideSelectedEdgesTaskFactory">
+               <constructor-arg ref="undoSupportServiceRef" />
+               <constructor-arg ref="cyEventHelperRef" />
        </bean>
 
        <bean id="unHideAllTaskFactory" 
class="org.cytoscape.task.internal.hide.UnHideAllTaskFactory">

Modified: 
core3/core-task-impl/trunk/src/test/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskFactoryTest.java
===================================================================
--- 
core3/core-task-impl/trunk/src/test/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskFactoryTest.java
     2011-07-28 22:05:05 UTC (rev 26324)
+++ 
core3/core-task-impl/trunk/src/test/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskFactoryTest.java
     2011-07-28 22:58:31 UTC (rev 26325)
@@ -1,20 +1,30 @@
 package org.cytoscape.task.internal.hide;
 
+
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
+
+import javax.swing.undo.UndoableEditSupport;
+
+import org.cytoscape.event.CyEventHelper;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.work.Task;
 import org.cytoscape.work.TaskIterator;
+import org.cytoscape.work.undo.UndoSupport;
+
 import org.junit.Test;
 
+
 public class HideSelectedEdgesTaskFactoryTest {
        @Test
        public void testRun() throws Exception {
+               UndoSupport undoSupport = mock(UndoSupport.class);
+               CyEventHelper eventHelper = mock(CyEventHelper.class);
+               HideSelectedEdgesTaskFactory factory =
+                       new HideSelectedEdgesTaskFactory(undoSupport, 
eventHelper);
 
                CyNetworkView view = mock(CyNetworkView.class);
-
-               HideSelectedEdgesTaskFactory factory = new 
HideSelectedEdgesTaskFactory();
                factory.setNetworkView(view);
                
                TaskIterator ti = factory.getTaskIterator();

Modified: 
core3/core-task-impl/trunk/src/test/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskTest.java
===================================================================
--- 
core3/core-task-impl/trunk/src/test/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskTest.java
    2011-07-28 22:05:05 UTC (rev 26324)
+++ 
core3/core-task-impl/trunk/src/test/java/org/cytoscape/task/internal/hide/HideSelectedEdgesTaskTest.java
    2011-07-28 22:58:31 UTC (rev 26325)
@@ -1,5 +1,9 @@
 package org.cytoscape.task.internal.hide;
 
+
+import javax.swing.undo.UndoableEditSupport;
+
+import org.cytoscape.event.CyEventHelper;
 import org.cytoscape.model.CyEdge;
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
@@ -7,17 +11,21 @@
 import org.cytoscape.test.support.NetworkViewTestSupport;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.work.TaskMonitor;
+import org.cytoscape.work.undo.UndoSupport;
+
 import org.junit.Before;
 import org.junit.Test;
+
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
 
 public class HideSelectedEdgesTaskTest extends AbstractNetworkViewTaskTest {
-       
        private final NetworkViewTestSupport viewSupport = new 
NetworkViewTestSupport();
        private CyNetworkView view = viewSupport.getNetworkView();
        @Mock TaskMonitor tm;
+       @Mock CyEventHelper eventHelper;
+       @Mock UndoSupport undoSupport;
        
        CyEdge edge1;
        CyEdge edge2;
@@ -42,9 +50,9 @@
        
        @Test(expected=NullPointerException.class)
        public void testHideSelectedEdgesTask() throws Exception {
+               final HideSelectedEdgesTask task =
+                       new HideSelectedEdgesTask(undoSupport, eventHelper, 
view);
                
-               final HideSelectedEdgesTask task = new 
HideSelectedEdgesTask(view);
-               
                task.run(tm);
        }
 

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