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.