Author: clopes
Date: 2012-08-10 13:23:20 -0700 (Fri, 10 Aug 2012)
New Revision: 30164

Modified:
   
core3/api/trunk/viewmodel-api/src/test/java/org/cytoscape/view/model/AbstractCyNetworkViewManagerTest.java
   
core3/impl/trunk/viewmodel-impl/impl/src/main/java/org/cytoscape/view/model/internal/CyActivator.java
   
core3/impl/trunk/viewmodel-impl/impl/src/main/java/org/cytoscape/view/model/internal/CyNetworkViewManagerImpl.java
   
core3/impl/trunk/viewmodel-impl/impl/src/test/java/org/cytoscape/view/model/CyNetworkViewManagerTest.java
Log:
Fixes #1360 (It is possible to register a CyNetworkView whose CyNetwork is NOT 
registered):
Now CyNetworkViewManagerImpl throws an exception if the view's network is not 
registered first.

Modified: 
core3/api/trunk/viewmodel-api/src/test/java/org/cytoscape/view/model/AbstractCyNetworkViewManagerTest.java
===================================================================
--- 
core3/api/trunk/viewmodel-api/src/test/java/org/cytoscape/view/model/AbstractCyNetworkViewManagerTest.java
  2012-08-10 19:54:55 UTC (rev 30163)
+++ 
core3/api/trunk/viewmodel-api/src/test/java/org/cytoscape/view/model/AbstractCyNetworkViewManagerTest.java
  2012-08-10 20:23:20 UTC (rev 30164)
@@ -1,21 +1,31 @@
 package org.cytoscape.view.model;
 
 import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.util.Collection;
 
+import org.cytoscape.event.CyEventHelper;
 import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNetworkManager;
+import org.junit.Before;
 import org.junit.Test;
 
 public abstract class AbstractCyNetworkViewManagerTest {
        
-       protected CyNetworkViewManager viewManager;
+       protected CyEventHelper eventHelper;
+       protected CyNetworkManager netManager;
+       
        protected CyNetwork network1;
        protected CyNetwork network2;
        
-       // Netwok without view
+       // Network without view
        protected CyNetwork network3;
        
+       // Unregistered network
+       protected CyNetwork unregisteredNetwork;
+       
        // Views associated with network 1
        protected CyNetworkView networkViewA;
        protected CyNetworkView networkViewB;
@@ -26,15 +36,34 @@
        protected CyNetworkView networkViewE;
        
        
+       @Before
+       public void setUp() throws Exception {
+               eventHelper = mock(CyEventHelper.class);
+               netManager = mock(CyNetworkManager.class);
+               
+               this.network1 = newNetwork(true);
+               this.network2 = newNetwork(true);
+               this.unregisteredNetwork = newNetwork(false);
+               resgisterNetwork(network2);
+               
+               this.networkViewA = newNetworkView(network1, true);
+               this.networkViewB = newNetworkView(network1, true);
+               this.networkViewC = newNetworkView(network1, true);
+               this.networkViewD = newNetworkView(network2, true);
+               this.networkViewE = newNetworkView(network2, true);
+       }
+       
        @Test
        public void testGetNetworkViews() throws Exception {
-               final Collection<CyNetworkView> network1Views = 
viewManager.getNetworkViews(network1);
+               final CyNetworkViewManager viewMgr = getViewManager();
+               
+               final Collection<CyNetworkView> network1Views = 
viewMgr.getNetworkViews(network1);
                assertEquals(3, network1Views.size());
                assertTrue(network1Views.contains(networkViewA));
                assertTrue(network1Views.contains(networkViewB));
                assertTrue(network1Views.contains(networkViewC));
                
-               final Collection<CyNetworkView> network2Views = 
viewManager.getNetworkViews(network2);
+               final Collection<CyNetworkView> network2Views = 
viewMgr.getNetworkViews(network2);
                assertEquals(2, network2Views.size());
                assertTrue(network2Views.contains(networkViewD));
                assertTrue(network2Views.contains(networkViewE));
@@ -42,16 +71,18 @@
        
        @Test
        public void testRemove() throws Exception {
-               viewManager.destroyNetworkView(networkViewA);
-               viewManager.destroyNetworkView(networkViewE);
+               final CyNetworkViewManager viewMgr = getViewManager();
                
-               final Collection<CyNetworkView> network1Views = 
viewManager.getNetworkViews(network1);
+               viewMgr.destroyNetworkView(networkViewA);
+               viewMgr.destroyNetworkView(networkViewE);
+               
+               final Collection<CyNetworkView> network1Views = 
viewMgr.getNetworkViews(network1);
                assertEquals(2, network1Views.size());
                assertFalse(network1Views.contains(networkViewA));
                assertTrue(network1Views.contains(networkViewB));
                assertTrue(network1Views.contains(networkViewC));
                
-               final Collection<CyNetworkView> network2Views = 
viewManager.getNetworkViews(network2);
+               final Collection<CyNetworkView> network2Views = 
viewMgr.getNetworkViews(network2);
                assertEquals(1, network2Views.size());
                assertTrue(network2Views.contains(networkViewD));
                assertFalse(network2Views.contains(networkViewE));
@@ -59,21 +90,54 @@
        
        @Test
        public void testViewExists() throws Exception {
-               assertTrue(viewManager.viewExists(network1));
-               assertTrue(viewManager.viewExists(network2));
-               assertFalse(viewManager.viewExists(network3));
+               CyNetworkViewManager viewMgr = getViewManager();
                
-               viewManager.destroyNetworkView(networkViewD);
-               viewManager.destroyNetworkView(networkViewE);
+               assertTrue(viewMgr.viewExists(network1));
+               assertTrue(viewMgr.viewExists(network2));
+               assertFalse(viewMgr.viewExists(network3));
                
-               assertFalse(viewManager.viewExists(network2));
+               viewMgr.destroyNetworkView(networkViewD);
+               viewMgr.destroyNetworkView(networkViewE);
+               
+               assertFalse(viewMgr.viewExists(network2));
        }
        
        @Test
        public void testReset() throws Exception {
-               viewManager.reset();
+               CyNetworkViewManager viewMgr = getViewManager();
+               viewMgr.reset();
+               assertNotNull(viewMgr.getNetworkViewSet());
+               assertEquals(0, viewMgr.getNetworkViewSet().size());
+       }
+       
+       @Test(expected=IllegalArgumentException.class)
+       public void testCannotRegisterViewIfModelIsNotRegistered() {
+               newNetworkView(unregisteredNetwork, true);
+       }
+       
+       protected void resgisterNetwork(CyNetwork net) {
+               when(netManager.getNetwork(net.getSUID())).thenReturn(net);
+               when(netManager.networkExists(net.getSUID())).thenReturn(true);
+       }
+       
+       protected CyNetworkView newNetworkView(final CyNetwork net, boolean 
registered) {
+               CyNetworkView view = mock(CyNetworkView.class);
+               when(view.getModel()).thenReturn(net);
                
-               assertNotNull(viewManager.getNetworkViewSet());
-               assertEquals(0, viewManager.getNetworkViewSet().size());
+               if (registered)
+                       getViewManager().addNetworkView(view);
+               
+               return view;
        }
+       
+       /**
+        * @return The CyNetworkViewManager implementation to be tested.
+        */
+       protected abstract CyNetworkViewManager getViewManager();
+       
+       /**
+        * @param registered If true, the new network must be added to the 
CyNetworkManager
+        * @return a new CyNetwork
+        */
+       protected abstract CyNetwork newNetwork(boolean registered);
 }

Modified: 
core3/impl/trunk/viewmodel-impl/impl/src/main/java/org/cytoscape/view/model/internal/CyActivator.java
===================================================================
--- 
core3/impl/trunk/viewmodel-impl/impl/src/main/java/org/cytoscape/view/model/internal/CyActivator.java
       2012-08-10 19:54:55 UTC (rev 30163)
+++ 
core3/impl/trunk/viewmodel-impl/impl/src/main/java/org/cytoscape/view/model/internal/CyActivator.java
       2012-08-10 20:23:20 UTC (rev 30164)
@@ -1,24 +1,24 @@
-
 package org.cytoscape.view.model.internal;
 
 import java.util.Properties;
 
 import org.cytoscape.event.CyEventHelper;
+import org.cytoscape.model.CyNetworkManager;
 import org.cytoscape.service.util.AbstractCyActivator;
 import org.osgi.framework.BundleContext;
 
 
-
 public class CyActivator extends AbstractCyActivator {
        public CyActivator() {
                super();
        }
 
-
        public void start(BundleContext bc) {
                CyEventHelper cyEventHelperServiceRef = 
getService(bc,CyEventHelper.class);             
-               CyNetworkViewManagerImpl cyNetworkViewManager = new 
CyNetworkViewManagerImpl(cyEventHelperServiceRef);
+               CyNetworkManager cyNetworkManagerServiceRef = 
getService(bc,CyNetworkManager.class);            
+               
+               CyNetworkViewManagerImpl cyNetworkViewManager = new 
CyNetworkViewManagerImpl(cyEventHelperServiceRef,cyNetworkManagerServiceRef);
+               
                registerAllServices(bc,cyNetworkViewManager, new Properties());
        }
 }
-

Modified: 
core3/impl/trunk/viewmodel-impl/impl/src/main/java/org/cytoscape/view/model/internal/CyNetworkViewManagerImpl.java
===================================================================
--- 
core3/impl/trunk/viewmodel-impl/impl/src/main/java/org/cytoscape/view/model/internal/CyNetworkViewManagerImpl.java
  2012-08-10 19:54:55 UTC (rev 30163)
+++ 
core3/impl/trunk/viewmodel-impl/impl/src/main/java/org/cytoscape/view/model/internal/CyNetworkViewManagerImpl.java
  2012-08-10 20:23:20 UTC (rev 30164)
@@ -37,6 +37,7 @@
 
 import org.cytoscape.event.CyEventHelper;
 import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNetworkManager;
 import org.cytoscape.model.events.NetworkAboutToBeDestroyedEvent;
 import org.cytoscape.model.events.NetworkAboutToBeDestroyedListener;
 import org.cytoscape.view.model.CyNetworkView;
@@ -56,14 +57,16 @@
 
        private final Map<CyNetwork, Collection<CyNetworkView>> networkViewMap;
        private final CyEventHelper cyEventHelper;
+       private final CyNetworkManager netMgr;
 
        /**
         * 
         * @param cyEventHelper
         */
-       public CyNetworkViewManagerImpl(final CyEventHelper cyEventHelper) {
+       public CyNetworkViewManagerImpl(final CyEventHelper cyEventHelper, 
final CyNetworkManager netMgr) {
                networkViewMap = new WeakHashMap<CyNetwork, 
Collection<CyNetworkView>>();
                this.cyEventHelper = cyEventHelper;
+               this.netMgr = netMgr;
        }
 
        @Override
@@ -156,7 +159,13 @@
                }
                
                final CyNetwork network = view.getModel();
+               
                synchronized (this) {
+                       if (!netMgr.networkExists(network.getSUID()))
+                               throw new IllegalArgumentException(
+                                               "Network view cannot be added, 
because its network ("
+                                                               + network + ") 
is not registered");
+                       
                        Collection<CyNetworkView> existingSet = 
networkViewMap.get(network);
 
                        if (existingSet == null)

Modified: 
core3/impl/trunk/viewmodel-impl/impl/src/test/java/org/cytoscape/view/model/CyNetworkViewManagerTest.java
===================================================================
--- 
core3/impl/trunk/viewmodel-impl/impl/src/test/java/org/cytoscape/view/model/CyNetworkViewManagerTest.java
   2012-08-10 19:54:55 UTC (rev 30163)
+++ 
core3/impl/trunk/viewmodel-impl/impl/src/test/java/org/cytoscape/view/model/CyNetworkViewManagerTest.java
   2012-08-10 20:23:20 UTC (rev 30164)
@@ -1,50 +1,41 @@
 package org.cytoscape.view.model;
 
-import static org.mockito.Mockito.*;
-
-import org.cytoscape.event.CyEventHelper;
+import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.NetworkTestSupport;
 import org.cytoscape.view.model.internal.CyNetworkViewManagerImpl;
 import org.junit.After;
-import org.junit.Before;
 
 
 public class CyNetworkViewManagerTest extends AbstractCyNetworkViewManagerTest 
{
        
-       private NetworkTestSupport testSupport;
+       protected NetworkTestSupport netTestSupport;
+       protected CyNetworkViewManager viewManager;
        
+       
        public CyNetworkViewManagerTest() {
-               testSupport = new NetworkTestSupport();
-               this.network1 = testSupport.getNetwork();
-               this.network2 = testSupport.getNetwork();
+               netTestSupport = new NetworkTestSupport();
        }
-       
-       @Before
-       public void setUp() throws Exception {
-               
-               final CyEventHelper cyEventHelper = mock(CyEventHelper.class);
-               viewManager = new CyNetworkViewManagerImpl(cyEventHelper);
-               this.networkViewA = mock(CyNetworkView.class);
-               this.networkViewB = mock(CyNetworkView.class);
-               this.networkViewC = mock(CyNetworkView.class);
-               this.networkViewD = mock(CyNetworkView.class);
-               this.networkViewE = mock(CyNetworkView.class);
-               
-               when(networkViewA.getModel()).thenReturn(network1);
-               when(networkViewB.getModel()).thenReturn(network1);
-               when(networkViewC.getModel()).thenReturn(network1);
-               when(networkViewD.getModel()).thenReturn(network2);
-               when(networkViewE.getModel()).thenReturn(network2);
-               
-               viewManager.addNetworkView(networkViewA);
-               viewManager.addNetworkView(networkViewB);
-               viewManager.addNetworkView(networkViewC);
-               viewManager.addNetworkView(networkViewD);
-               viewManager.addNetworkView(networkViewE);
-       }
 
        @After
        public void tearDown() throws Exception {
+               viewManager = null;
        }
 
+       @Override
+       protected CyNetwork newNetwork(boolean registered) {
+               CyNetwork net = netTestSupport.getNetwork();
+               
+               if (registered)
+                       resgisterNetwork(net);
+               
+               return net;
+       }
+
+       @Override
+       protected CyNetworkViewManager getViewManager() {
+               if (viewManager == null)
+                       viewManager = new CyNetworkViewManagerImpl(eventHelper, 
netManager);
+               
+               return viewManager;
+       }
 }

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