Author: clopes
Date: 2012-10-12 13:02:17 -0700 (Fri, 12 Oct 2012)
New Revision: 30663

Modified:
   
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
   
core3/impl/trunk/application-impl/src/test/java/org/cytoscape/application/internal/CyApplicationManagerImplTest.java
Log:
Fixes #1518
- If setting the current network also changes the network selection, 
SetSelectedNetworksEvent is now fired (before SetCurrentNetworkEvent).
- Similarly, if setting the current network view changes the view selection, 
SetSelectedNetworkViewsEvent is fired before SetCurrentNetworkViewEvent.

Modified: 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
===================================================================
--- 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
    2012-10-12 16:06:49 UTC (rev 30662)
+++ 
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
    2012-10-12 20:02:17 UTC (rev 30663)
@@ -30,8 +30,8 @@
 package org.cytoscape.application.internal;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
@@ -154,15 +154,15 @@
                                currentNetwork = network;
                                
                                if (network != null) {
-                                       // set new current network view?
+                                       // If the new current network is not 
selected, reset the selection and select the current one only
+                                       if 
(!getSelectedNetworks().contains(network))
+                                               
setSelectedNetworks(Collections.singletonList(network));
+                                       
+                                       // Set new current network view, unless 
the current view's model is already the new current network
                                        final Collection<CyNetworkView> views = 
networkViewManager.getNetworkViews(network);
-                                       final CyNetworkView nv = 
views.isEmpty() ? null : views.iterator().next();
                                        
-                                       if (nv != currentNetworkView)
-                                               setCurrentNetworkView(nv);
-                                       
-                                       // reset selected networks
-                                       selectNetworks(Arrays.asList(new 
CyNetwork[]{ network }));
+                                       if (!views.contains(currentNetworkView))
+                                               
setCurrentNetworkView(views.isEmpty() ? null : views.iterator().next());
                                } else {
                                        if (currentNetworkView != null)
                                                setCurrentNetworkView(null);
@@ -195,11 +195,11 @@
 
                        if (changed) {
                                currentNetworkView = view;
-                               // reset selected network views
-                               selectedNetworkViews.clear();
                                
                                if (view != null) {
-                                       selectedNetworkViews.add(view);
+                                       // If the new current view is not 
selected, reset selected views and select the current one only
+                                       if 
(!selectedNetworkViews.contains(view))
+                                               
setSelectedNetworkViews(Collections.singletonList(view));
                                        
                                        if 
(!view.getModel().equals(currentNetwork))
                                                
setCurrentNetwork(view.getModel());
@@ -226,11 +226,8 @@
                        if (networkViews != null)
                                selectedNetworkViews.addAll(networkViews);
 
-                       CyNetworkView cv = getCurrentNetworkView();
-
-                       if (cv != null && !selectedNetworkViews.contains(cv)) {
-                               selectedNetworkViews.add(cv);
-                       }
+                       if (currentNetworkView != null && 
!selectedNetworkViews.contains(currentNetworkView))
+                               selectedNetworkViews.add(currentNetworkView);
                }
 
                cyEventHelper.fireEvent(new SetSelectedNetworkViewsEvent(this,

Modified: 
core3/impl/trunk/application-impl/src/test/java/org/cytoscape/application/internal/CyApplicationManagerImplTest.java
===================================================================
--- 
core3/impl/trunk/application-impl/src/test/java/org/cytoscape/application/internal/CyApplicationManagerImplTest.java
        2012-10-12 16:06:49 UTC (rev 30662)
+++ 
core3/impl/trunk/application-impl/src/test/java/org/cytoscape/application/internal/CyApplicationManagerImplTest.java
        2012-10-12 20:02:17 UTC (rev 30663)
@@ -6,20 +6,16 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
 import org.cytoscape.ding.NetworkViewTestSupport;
 import org.cytoscape.event.CyEventHelper;
-import org.cytoscape.model.CyEdge;
-import org.cytoscape.model.CyIdentifiable;
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNetworkManager;
-import org.cytoscape.model.CyNode;
-import org.cytoscape.model.CyRow;
 import org.cytoscape.model.CyTable;
-import org.cytoscape.model.CyEdge.Type;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.model.CyNetworkViewManager;
 import org.cytoscape.view.presentation.RenderingEngine;
@@ -69,8 +65,9 @@
 
        @Test
        public void testSetNullCurrentNetwork() {
-               appMgr.setCurrentNetwork(newNetwork());
-               appMgr.setCurrentNetworkView(newNetworkView());
+               final CyNetworkView view = newNetworkView();
+               appMgr.setCurrentNetwork(view.getModel());
+               appMgr.setCurrentNetworkView(view);
                appMgr.setCurrentNetwork(null);
                assertNull(appMgr.getCurrentNetwork());
                assertNull(appMgr.getCurrentNetworkView());
@@ -142,6 +139,33 @@
        }
        
        @Test
+       public void testSetUnselectedCurrentNetworkChangesNetworkSelection() {
+               // Setting a current network that is not selected changes the 
network selection
+               CyNetwork n1 = newNetwork();
+               CyNetwork n2 = newNetwork();
+               CyNetwork n3 = newNetwork();
+               appMgr.setSelectedNetworks(Arrays.asList(new CyNetwork[]{ n1, 
n2 }));
+               appMgr.setCurrentNetwork(n3);
+               
+               assertEquals(n3, appMgr.getCurrentNetwork());
+               assertEquals(1, appMgr.getSelectedNetworks().size());
+               assertTrue(appMgr.getSelectedNetworks().contains(n3));
+       }
+       
+       @Test
+       public void 
testSetSelectedCurrentNetworkDoesNotChangeNetworkSelection() {
+               // Setting a current network that is already selected does NOT 
change the network selection state
+               CyNetwork n1 = newNetwork();
+               CyNetwork n2 = newNetwork();
+               CyNetwork n3 = newNetwork();
+               appMgr.setSelectedNetworks(Arrays.asList(new CyNetwork[]{ n1, 
n2, n3 }));
+               appMgr.setCurrentNetwork(n3);
+               
+               assertEquals(n3, appMgr.getCurrentNetwork());
+               assertEquals(3, appMgr.getSelectedNetworks().size());
+       }
+       
+       @Test
        public void testSetCurrentNetworkView() {
                CyNetworkView view = newNetworkView();
                appMgr.setCurrentNetworkView(view);
@@ -158,6 +182,33 @@
        }
        
        @Test
+       public void testSetUnselectedCurrentNetworkViewChangesViewSelection() {
+               // Setting a current view that is not selected changes the 
network view selection
+               CyNetworkView v1 = newNetworkView();
+               CyNetworkView v2 = newNetworkView();
+               CyNetworkView v3 = newNetworkView();
+               appMgr.setSelectedNetworkViews(Arrays.asList(new 
CyNetworkView[]{ v1, v2 }));
+               appMgr.setCurrentNetworkView(v3);
+               
+               assertEquals(v3, appMgr.getCurrentNetworkView());
+               assertEquals(1, appMgr.getSelectedNetworkViews().size());
+               assertTrue(appMgr.getSelectedNetworkViews().contains(v3));
+       }
+       
+       @Test
+       public void 
testSetSelectedCurrentNetworkViewDoesNotChangeViewSelection() {
+               // Setting a current  view that is already selected does NOT 
change the network view selection state
+               CyNetworkView v1 = newNetworkView();
+               CyNetworkView v2 = newNetworkView();
+               CyNetworkView v3 = newNetworkView();
+               appMgr.setSelectedNetworkViews(Arrays.asList(new 
CyNetworkView[]{ v1, v2, v3 }));
+               appMgr.setCurrentNetworkView(v3);
+               
+               assertEquals(v3, appMgr.getCurrentNetworkView());
+               assertEquals(3, appMgr.getSelectedNetworkViews().size());
+       }
+       
+       @Test
        public void testSetSelectedNetworks() {
                final CyNetworkView v1 = newNetworkView();
                final CyNetworkView v2 = newNetworkView();
@@ -196,21 +247,23 @@
        
        @Test
        public void testSetSelectedNetworkViews() {
+               final List<CyNetwork> nets = 
Collections.singletonList(newNetwork());
+               appMgr.setSelectedNetworks(nets);
+               
                final CyNetworkView v1 = newNetworkView();
                final CyNetworkView v2 = newNetworkView();
-               final CyNetworkView v3 = newNetworkView();
-               final List<CyNetworkView> views = Arrays.asList(new 
CyNetworkView[]{v1, v3});
+               final List<CyNetworkView> views = Arrays.asList(new 
CyNetworkView[]{v1, v2});
+               appMgr.setSelectedNetworkViews(views);
                
-               appMgr.setSelectedNetworkViews(views);
+               final List<CyNetworkView> selectedViews = 
appMgr.getSelectedNetworkViews();
                final List<CyNetwork> selectedNets = 
appMgr.getSelectedNetworks();
-               final List<CyNetworkView> selectedViews = 
appMgr.getSelectedNetworkViews();
                
                assertEquals(2, selectedViews.size());
                assertTrue(selectedViews.containsAll(views));
-//             assertEquals(2, selectedNets.size()); // Selecting views also 
selects their models!
-//             assertTrue(selectedNets.containsAll(Arrays.asList(new 
CyNetwork[]{v1.getModel(), v3.getModel()})));
+               assertEquals(1, selectedNets.size()); // Selected networks 
didn't change
+               assertTrue(selectedNets.containsAll(nets));
                assertNull(appMgr.getCurrentNetwork()); // Shouldn't change the 
current network
-               assertNull(appMgr.getCurrentNetworkView());
+               assertNull(appMgr.getCurrentNetworkView()); // Shouldn't change 
the current network view
        }
        
        @Test

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