Author: clopes
Date: 2012-04-17 12:43:25 -0700 (Tue, 17 Apr 2012)
New Revision: 28854
Modified:
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyActivator.java
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/DefaultTablesNetwork.java
core3/impl/trunk/session-impl/pom.xml
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CyActivator.java
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CySessionManagerImpl.java
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/CyActivator.java
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/SessionHandler.java
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
Log:
Fixes #707: Network selection not restored from session files ("selected"
column added to user NETWORK tables)
Modified:
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyActivator.java
2012-04-17 19:31:13 UTC (rev 28853)
+++
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyActivator.java
2012-04-17 19:43:25 UTC (rev 28854)
@@ -1,41 +1,23 @@
-
-
-
package org.cytoscape.application.internal;
+import java.util.Properties;
+
import org.cytoscape.event.CyEventHelper;
-import org.cytoscape.view.model.CyNetworkViewManager;
import org.cytoscape.model.CyNetworkManager;
-
-import org.cytoscape.application.internal.CyApplicationManagerImpl;
-import org.cytoscape.application.internal.CyApplicationConfigurationImpl;
-import org.cytoscape.application.internal.ShutdownHandler;
-import org.cytoscape.application.internal.CyVersionImpl;
-
-import org.cytoscape.application.CyApplicationManager;
-import org.cytoscape.model.events.NetworkAboutToBeDestroyedListener;
-import org.cytoscape.model.events.NetworkAddedListener;
-import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedListener;
-import org.cytoscape.view.model.events.NetworkViewAddedListener;
import org.cytoscape.property.CyProperty;
-
-
+import org.cytoscape.service.util.AbstractCyActivator;
+import org.cytoscape.view.model.CyNetworkViewManager;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import org.cytoscape.service.util.AbstractCyActivator;
-import java.util.Properties;
-
-
-
public class CyActivator extends AbstractCyActivator {
+
public CyActivator() {
super();
}
-
public void start(BundleContext bc) {
CyEventHelper cyEventHelperServiceRef =
getService(bc,CyEventHelper.class);
@@ -46,18 +28,12 @@
Bundle rootBundle = bc.getBundle(0);
ShutdownHandler cytoscapeShutdown = new
ShutdownHandler(cyEventHelperServiceRef, rootBundle);
CyApplicationConfigurationImpl cyApplicationConfiguration = new
CyApplicationConfigurationImpl();
- CyProperty cyApplicationCoreProperty =
getService(bc,CyProperty.class,"(cyPropertyName=cytoscape3.props)");
+ CyProperty<Properties> cyApplicationCoreProperty =
getService(bc,CyProperty.class,"(cyPropertyName=cytoscape3.props)");
CyVersionImpl cytoscapeVersion = new
CyVersionImpl(cyApplicationCoreProperty);
-
registerService(bc,cyApplicationManager,CyApplicationManager.class, new
Properties());
-
registerService(bc,cyApplicationManager,NetworkAboutToBeDestroyedListener.class,
new Properties());
-
registerService(bc,cyApplicationManager,NetworkViewAboutToBeDestroyedListener.class,
new Properties());
-
registerService(bc,cyApplicationManager,NetworkAddedListener.class, new
Properties());
-
registerService(bc,cyApplicationManager,NetworkViewAddedListener.class, new
Properties());
+ registerAllServices(bc,cyApplicationManager, new Properties());
registerAllServices(bc,cytoscapeShutdown, new Properties());
registerAllServices(bc,cytoscapeVersion, new Properties());
registerAllServices(bc,cyApplicationConfiguration, new
Properties());
-
}
}
-
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-04-17 19:31:13 UTC (rev 28853)
+++
core3/impl/trunk/application-impl/src/main/java/org/cytoscape/application/internal/CyApplicationManagerImpl.java
2012-04-17 19:43:25 UTC (rev 28854)
@@ -29,23 +29,29 @@
*/
package org.cytoscape.application.internal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.events.SetCurrentNetworkEvent;
import org.cytoscape.application.events.SetCurrentNetworkViewEvent;
import org.cytoscape.application.events.SetCurrentRenderingEngineEvent;
import org.cytoscape.application.events.SetSelectedNetworkViewsEvent;
import org.cytoscape.application.events.SetSelectedNetworksEvent;
-
import org.cytoscape.event.CyEventHelper;
-
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTable;
import org.cytoscape.model.events.NetworkAboutToBeDestroyedEvent;
import org.cytoscape.model.events.NetworkAboutToBeDestroyedListener;
import org.cytoscape.model.events.NetworkAddedEvent;
import org.cytoscape.model.events.NetworkAddedListener;
-
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.view.model.CyNetworkViewManager;
import org.cytoscape.view.model.events.NetworkViewAboutToBeDestroyedEvent;
@@ -53,17 +59,10 @@
import org.cytoscape.view.model.events.NetworkViewAddedEvent;
import org.cytoscape.view.model.events.NetworkViewAddedListener;
import org.cytoscape.view.presentation.RenderingEngine;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
/**
* An implementation of CyApplicationManager.
*/
@@ -77,7 +76,6 @@
private final CyNetworkManager networkManager;
private final CyNetworkViewManager networkViewManager;
private final List<CyNetworkView> selectedNetworkViews;
- private final List<CyNetwork> selectedNetworks;
// Trackers for current network object
private CyNetwork currentNetwork;
@@ -93,8 +91,6 @@
this.networkViewManager = networkViewManager;
selectedNetworkViews = new LinkedList<CyNetworkView>();
- selectedNetworks = new LinkedList<CyNetwork>();
-
currentNetwork = null;
currentNetworkView = null;
this.currentRenderer = null;
@@ -102,13 +98,13 @@
@Override
public void handleEvent(final NetworkViewAddedEvent event) {
- if ( !event.getNetworkView().equals( currentNetworkView ) )
+ if (!event.getNetworkView().equals( currentNetworkView ))
setCurrentNetworkView( event.getNetworkView() );
}
@Override
public void handleEvent(final NetworkAddedEvent event) {
- if ( !event.getNetwork().equals( currentNetwork ) )
+ if (!event.getNetwork().equals( currentNetwork ))
setCurrentNetwork( event.getNetwork() );
}
@@ -118,10 +114,6 @@
boolean changed = false;
synchronized (this) {
- List<CyNetwork> removals = new LinkedList<CyNetwork>();
- removals.add(toBeDestroyed);
- selectedNetworks.removeAll(removals);
-
if (toBeDestroyed == currentNetwork) {
changed = true;
currentNetwork = null;
@@ -163,10 +155,6 @@
boolean changed = false;
synchronized (this) {
- List<CyNetworkView> removals = new
LinkedList<CyNetworkView>();
- removals.add(toBeDestroyed);
- selectedNetworkViews.removeAll(removals);
-
if (toBeDestroyed == currentNetworkView) {
changed = true;
currentNetworkView = null;
@@ -221,18 +209,16 @@
logger.info("Set current network called. Current
network ID = " + networkId);
currentNetwork = network;
final Collection<CyNetworkView> views =
networkViewManager.getNetworkViews(network);
- if(views.size() != 0)
+
+ if (views.size() != 0)
currentNetworkView = views.iterator().next();
// reset selected networks
- selectedNetworks.clear();
- selectedNetworks.add(currentNetwork);
+ selectNetworks(Arrays.asList(new CyNetwork[]{
currentNetwork }));
}
- logger.debug("Current network is set. Firing
SetCurrentNetworkEvent: Network ID = "
- + networkId);
-
if (changed) {
+ logger.debug("Current network is set. Firing
SetCurrentNetworkEvent: Network ID = " + networkId);
cyEventHelper.fireEvent(new
SetCurrentNetworkEvent(this, currentNetwork));
}
}
@@ -267,10 +253,8 @@
selectedNetworkViews.add(currentNetworkView);
}
- logger.debug("Current network view is set. Firing
SetCurrentNetworkViewEvent: View ID = "
- + view.getSUID());
-
if (changed) {
+ logger.debug("Current network view is set. Firing
SetCurrentNetworkViewEvent: View ID = " + view.getSUID());
cyEventHelper.fireEvent(new
SetCurrentNetworkViewEvent(this, currentNetworkView));
}
}
@@ -302,26 +286,31 @@
@Override
public synchronized List<CyNetwork> getSelectedNetworks() {
- return new ArrayList<CyNetwork>(selectedNetworks);
+ final Set<CyNetwork> allNetworks =
networkManager.getNetworkSet();
+ final List<CyNetwork> selectedNetworks = new
ArrayList<CyNetwork>();
+
+ for (final CyNetwork n : allNetworks) {
+ final CyRow row = n.getRow(n);
+
+ if (row.get(CyNetwork.SELECTED, Boolean.class, false))
+ selectedNetworks.add(n);
+ }
+
+ return selectedNetworks;
}
@Override
public void setSelectedNetworks(final List<CyNetwork> networks) {
- if (networks == null)
- return;
-
+ final Set<CyNetwork> selectedNetworks;
+
synchronized (this) {
- selectedNetworks.clear();
- selectedNetworks.addAll(networks);
-
- CyNetwork cn = currentNetwork;
-
- if (!selectedNetworks.contains(cn))
- selectedNetworks.add(cn);
+ selectedNetworks = selectNetworks(networks);
+
+ if (currentNetwork != null)
+ selectedNetworks.add(currentNetwork);
}
- cyEventHelper.fireEvent(new SetSelectedNetworksEvent(this,
- new
ArrayList<CyNetwork>(selectedNetworks)));
+ cyEventHelper.fireEvent(new SetSelectedNetworksEvent(this, new
ArrayList<CyNetwork>(selectedNetworks)));
}
@Override
@@ -332,7 +321,6 @@
@Override
public void setCurrentRenderingEngine(RenderingEngine<CyNetwork>
engine) {
this.currentRenderer = engine;
-
cyEventHelper.fireEvent(new
SetCurrentRenderingEngineEvent(this, this.currentRenderer));
}
@@ -345,4 +333,20 @@
public void setCurrentTable(CyTable table) {
currentTable = table;
}
+
+ private Set<CyNetwork> selectNetworks(final Collection<CyNetwork>
networks) {
+ final Set<CyNetwork> selectedNetworks = new
HashSet<CyNetwork>();
+ final Set<CyNetwork> allNetworks =
networkManager.getNetworkSet();
+
+ for (final CyNetwork n : allNetworks) {
+ final boolean selected = networks != null &&
networks.contains(n);
+ final CyRow row = n.getRow(n);
+ row.set(CyNetwork.SELECTED, selected);
+
+ if (selected)
+ selectedNetworks.add(n);
+ }
+
+ return selectedNetworks;
+ }
}
Modified:
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/DefaultTablesNetwork.java
===================================================================
---
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/DefaultTablesNetwork.java
2012-04-17 19:31:13 UTC (rev 28853)
+++
core3/impl/trunk/model-impl/impl/src/main/java/org/cytoscape/model/internal/DefaultTablesNetwork.java
2012-04-17 19:43:25 UTC (rev 28854)
@@ -30,16 +30,14 @@
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
-import java.util.HashMap;
-import java.util.Map;
import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNetworkTableManager;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyRow;
import org.cytoscape.model.CyTable;
-import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.CyTableFactory;
import org.cytoscape.model.CyTableFactory.InitialTableSize;
@@ -128,7 +126,7 @@
networkTableManager.setTable(networkRef.get(), CyNetwork.class,
CyNetwork.HIDDEN_ATTRS, hiddenTable);
// Add default network columns.
defTable.createColumn(CyNetwork.NAME, String.class, true);
-
+ defTable.createColumn(CyNetwork.SELECTED, Boolean.class, true,
Boolean.FALSE);
}
private void createNodeTables(long suidx, CyTableFactory tableFactory,
boolean pubTables, int num) {
Modified: core3/impl/trunk/session-impl/pom.xml
===================================================================
--- core3/impl/trunk/session-impl/pom.xml 2012-04-17 19:31:13 UTC (rev
28853)
+++ core3/impl/trunk/session-impl/pom.xml 2012-04-17 19:43:25 UTC (rev
28854)
@@ -70,6 +70,10 @@
<dependencies>
<dependency>
<groupId>org.cytoscape</groupId>
+ <artifactId>application-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.cytoscape</groupId>
<artifactId>property-api</artifactId>
</dependency>
<dependency>
Modified:
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CyActivator.java
2012-04-17 19:31:13 UTC (rev 28853)
+++
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CyActivator.java
2012-04-17 19:43:25 UTC (rev 28854)
@@ -2,6 +2,7 @@
import java.util.Properties;
+import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.event.CyEventHelper;
import org.cytoscape.model.CyNetworkManager;
import org.cytoscape.model.CyNetworkTableManager;
@@ -25,6 +26,7 @@
@Override
public void start(BundleContext bc) {
CyEventHelper cyEventHelperServiceRef = getService(bc,
CyEventHelper.class);
+ CyApplicationManager cyApplicationManagerServiceRef =
getService(bc, CyApplicationManager.class);
CyNetworkManager cyNetworkManagerServiceRef = getService(bc,
CyNetworkManager.class);
CyTableManager cyTableManagerServiceRef = getService(bc,
CyTableManager.class);
VisualMappingManager visualMappingManagerServiceRef =
getService(bc, VisualMappingManager.class);
@@ -33,16 +35,15 @@
CyRootNetworkManager cyRootNetworkManagerServiceRef =
getService(bc, CyRootNetworkManager.class);
CyServiceRegistrar cyServiceRegistrarServiceRef =
getService(bc, CyServiceRegistrar.class);
UndoSupport undo = getService(bc, UndoSupport.class);
+
CyNetworkNamingImpl cyNetworkNaming = new
CyNetworkNamingImpl(cyNetworkManagerServiceRef);
CySessionManagerImpl cySessionManager = new
CySessionManagerImpl(cyEventHelperServiceRef,
- cyNetworkManagerServiceRef,
cyTableManagerServiceRef, cyNetworkTableManagerServiceRef,
- visualMappingManagerServiceRef,
cyNetworkViewManagerServiceRef, cyRootNetworkManagerServiceRef,
- cyServiceRegistrarServiceRef, undo);
+ cyApplicationManagerServiceRef,
cyNetworkManagerServiceRef, cyTableManagerServiceRef,
+ cyNetworkTableManagerServiceRef,
visualMappingManagerServiceRef, cyNetworkViewManagerServiceRef,
+ cyRootNetworkManagerServiceRef,
cyServiceRegistrarServiceRef, undo);
registerService(bc, cyNetworkNaming, CyNetworkNaming.class, new
Properties());
-
registerAllServices(bc, cySessionManager, new Properties());
-
registerServiceListener(bc, cySessionManager, "addCyProperty",
"removeCyProperty", CyProperty.class);
}
}
Modified:
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CySessionManagerImpl.java
===================================================================
---
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CySessionManagerImpl.java
2012-04-17 19:31:13 UTC (rev 28853)
+++
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CySessionManagerImpl.java
2012-04-17 19:43:25 UTC (rev 28854)
@@ -44,14 +44,15 @@
import java.util.Properties;
import java.util.Set;
+import org.cytoscape.application.CyApplicationManager;
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.CyNetworkTableManager;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyTable;
-import org.cytoscape.model.CyIdentifiable;
import org.cytoscape.model.CyTableManager;
import org.cytoscape.model.CyTableMetadata;
import org.cytoscape.model.subnetwork.CyRootNetwork;
@@ -84,6 +85,7 @@
private CySession currentSession;
private final CyEventHelper cyEventHelper;
+ private final CyApplicationManager appMgr;
private final CyNetworkManager netMgr;
private final CyTableManager tblMgr;
private final CyNetworkTableManager netTblMgr;
@@ -99,6 +101,7 @@
private static final Logger logger =
LoggerFactory.getLogger(CySessionManagerImpl.class);
public CySessionManagerImpl(final CyEventHelper cyEventHelper,
+ final
CyApplicationManager appMgr,
final
CyNetworkManager netMgr,
final
CyTableManager tblMgr,
final
CyNetworkTableManager netTblMgr,
@@ -108,6 +111,7 @@
final
CyServiceRegistrar registrar,
final
UndoSupport undo) {
this.cyEventHelper = cyEventHelper;
+ this.appMgr = appMgr;
this.netMgr = netMgr;
this.tblMgr = tblMgr;
this.netTblMgr = netTblMgr;
@@ -234,7 +238,6 @@
@Override
public void setCurrentSession(CySession sess, final String fileName) {
-
boolean emptySession = sess == null;
// Always remove the current session first
@@ -242,17 +245,31 @@
if (emptySession) {
logger.debug("Creating empty session...");
- Set<VisualStyle> styles = vmMgr.getAllVisualStyles();
- Set<CyProperty<?>> props = getAllProperties();
+ final Set<VisualStyle> styles =
vmMgr.getAllVisualStyles();
+ final Set<CyProperty<?>> props = getAllProperties();
sess = new
CySession.Builder().properties(props).visualStyles(styles).build();
} else {
logger.debug("Restoring the session...");
+
+ // Save the selected networks first, so the selection
state can be restored later.
+ final List<CyNetwork> selectedNetworks = new
ArrayList<CyNetwork>();
+ final Set<CyNetwork> networks = sess.getNetworks();
+
+ for (CyNetwork n : networks) {
+ final Boolean selected =
n.getDefaultNetworkTable().getRow(n.getSUID())
+ .get(CyNetwork.SELECTED,
Boolean.class);
+
+ if (Boolean.TRUE.equals(selected))
+ selectedNetworks.add(n);
+ }
+
restoreProperties(sess);
restoreNetworks(sess);
restoreNetworkViews(sess);
restoreTables(sess);
restoreVisualStyles(sess);
+ restoreNetworkSelection(sess, selectedNetworks);
}
currentSession = sess;
@@ -261,18 +278,21 @@
cyEventHelper.fireEvent(new SessionLoadedEvent(this,
currentSession, getCurrentSessionFileName()));
}
- private void restoreTables(CySession sess) {
- // Register all tables, if not already registered
- for (CyTableMetadata metadata : sess.getTables()) {
- final CyTable tbl = metadata.getTable();
-
- if (tblMgr.getTable(tbl.getSUID()) == null) {
- tblMgr.addTable(tbl);
- }
- }
- }
+ /**
+ * Update current session session object when session is saved.
+ */
@Override
+ public void handleEvent(SessionSavedEvent e) {
+
+ if(currentSession != e.getSavedSession())
+ currentSession = e.getSavedSession();
+
+ if(currentFileName != e.getSavedFileName())
+ currentFileName = e.getSavedFileName();
+ }
+
+ @Override
public String getCurrentSessionFileName() {
return currentFileName;
}
@@ -338,6 +358,17 @@
}
}
+ private void restoreTables(CySession sess) {
+ // Register all tables, if not already registered
+ for (CyTableMetadata metadata : sess.getTables()) {
+ final CyTable tbl = metadata.getTable();
+
+ if (tblMgr.getTable(tbl.getSUID()) == null) {
+ tblMgr.addTable(tbl);
+ }
+ }
+ }
+
private void restoreVisualStyles(final CySession sess) {
logger.debug("Restoring visual styles...");
// Register visual styles
@@ -368,6 +399,23 @@
}
}
}
+
+ private void restoreNetworkSelection(final CySession sess, final
List<CyNetwork> selectedNets) {
+ // If the current view/network was not set, set the first
selected network as current
+ if (!selectedNets.isEmpty()) {
+ appMgr.setCurrentNetwork(selectedNets.get(0));
+ } else {
+ final Set<CyNetwork> allNets = sess.getNetworks();
+
+ if (!allNets.isEmpty())
+
appMgr.setCurrentNetwork(allNets.iterator().next());
+ }
+
+
+ // The selected networks must be set after setting the current
one!
+ if (!selectedNets.isEmpty())
+ appMgr.setSelectedNetworks(selectedNets);
+ }
private void disposeCurrentSession(boolean removeVisualStyles) {
logger.debug("Disposing current session...");
@@ -420,17 +468,4 @@
// Clear undo stack
undo.reset();
}
-
- /**
- * Update current session session object when session is saved.
- */
- @Override
- public void handleEvent(SessionSavedEvent e) {
-
- if(currentSession != e.getSavedSession())
- currentSession = e.getSavedSession();
-
- if(currentFileName != e.getSavedFileName())
- currentFileName = e.getSavedFileName();
- }
}
Modified:
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/CyActivator.java
2012-04-17 19:31:13 UTC (rev 28853)
+++
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/CyActivator.java
2012-04-17 19:43:25 UTC (rev 28854)
@@ -47,10 +47,6 @@
import java.util.Properties;
-import org.cytoscape.internal.actions.CommandListAction;
-import org.cytoscape.internal.commands.ArgRecorder;
-import org.cytoscape.internal.commands.ArgHandlerFactory;
-import org.cytoscape.internal.commands.BasicArgHandlerFactory;
import org.cytoscape.application.CyApplicationConfiguration;
import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.CyShutdown;
@@ -62,11 +58,15 @@
import org.cytoscape.application.swing.ToolBarComponent;
import org.cytoscape.event.CyEventHelper;
import org.cytoscape.internal.actions.BookmarkAction;
+import org.cytoscape.internal.actions.CommandListAction;
import org.cytoscape.internal.actions.CytoPanelAction;
import org.cytoscape.internal.actions.ExitAction;
import org.cytoscape.internal.actions.PreferenceAction;
import org.cytoscape.internal.actions.PrintAction;
import org.cytoscape.internal.actions.RecentSessionManager;
+import org.cytoscape.internal.commands.ArgHandlerFactory;
+import org.cytoscape.internal.commands.ArgRecorder;
+import org.cytoscape.internal.commands.BasicArgHandlerFactory;
import org.cytoscape.internal.dialogs.BookmarkDialogFactoryImpl;
import org.cytoscape.internal.dialogs.PreferencesDialogFactoryImpl;
import org.cytoscape.internal.io.SessionStateIO;
@@ -97,7 +97,6 @@
import org.cytoscape.internal.view.help.HelpReportABugTaskFactory;
import org.cytoscape.io.read.CySessionReaderManager;
import org.cytoscape.io.util.RecentlyOpenedTracker;
-import org.cytoscape.io.write.CyPropertyWriterManager;
import org.cytoscape.model.CyNetworkManager;
import org.cytoscape.model.events.NetworkDestroyedListener;
import org.cytoscape.property.CyProperty;
@@ -217,11 +216,11 @@
SessionStateIO sessStateIO = new SessionStateIO();
SessionHandler sessionHandler = new
SessionHandler(cytoscapeDesktop,
cyNetworkManagerServiceRef,
-
cyApplicationManagerServiceRef,
networkViewManager,
synchronousTaskManagerServiceRef,
saveTaskFactoryServiceRef,
-
sessStateIO, cySessionManagerServiceRef);
+
sessStateIO,
+
cySessionManagerServiceRef);
PrintAction printAction = new
PrintAction(cyApplicationManagerServiceRef, cyNetworkViewManagerServiceRef,
cytoscapePropertiesServiceRef);
ExitAction exitAction = new ExitAction(
cytoscapeShutdownServiceRef);
PreferenceAction preferenceAction = new
PreferenceAction(cytoscapeDesktop,
Modified:
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/SessionHandler.java
===================================================================
---
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/SessionHandler.java
2012-04-17 19:31:13 UTC (rev 28853)
+++
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/SessionHandler.java
2012-04-17 19:43:25 UTC (rev 28854)
@@ -44,7 +44,6 @@
import javax.swing.JInternalFrame;
import javax.swing.JOptionPane;
-import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.events.CyShutdownEvent;
import org.cytoscape.application.events.CyShutdownListener;
import org.cytoscape.application.swing.CytoPanel;
@@ -68,7 +67,6 @@
import org.cytoscape.task.session.SaveSessionAsTaskFactory;
import org.cytoscape.view.model.CyNetworkView;
import org.cytoscape.work.SynchronousTaskManager;
-import org.cytoscape.work.TaskFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -79,7 +77,6 @@
private final CytoscapeDesktop desktop;
private final CyNetworkManager netMgr;
- private final CyApplicationManager appManager;
private final NetworkViewManager netViewMgr;
private final SynchronousTaskManager<?> syncTaskMgr;
private final SaveSessionAsTaskFactory saveTaskFactory;
@@ -92,14 +89,12 @@
public SessionHandler(final CytoscapeDesktop desktop,
final CyNetworkManager netMgr,
- final CyApplicationManager
appManager,
final NetworkViewManager
netViewMgr,
final
SynchronousTaskManager<?> syncTaskMgr,
final
SaveSessionAsTaskFactory saveTaskFactory,
final SessionStateIO
sessionStateIO, final CySessionManager sessionManager) {
this.desktop = desktop;
this.netMgr = netMgr;
- this.appManager = appManager;
this.netViewMgr = netViewMgr;
this.syncTaskMgr = syncTaskMgr;
this.saveTaskFactory = saveTaskFactory;
@@ -235,7 +230,6 @@
private void setNetworkFrameLocations(final NetworkFrames frames, final
CySession sess) {
if (frames != null) {
final List<NetworkFrame> framesList =
frames.getNetworkFrame();
- CyNetworkView currentNetView = null;
for (NetworkFrame nf : framesList) {
final String oldIdStr = nf.getNetworkViewID();
// ID in the original session--it's probably different now
@@ -262,21 +256,11 @@
iframe.setLocation(x,
y);
}
}
-
- // The first frame should be the
current one
- if (currentNetView == null) {
- currentNetView = view;
- }
} else {
logger.warn("Cannot restore network
frame's position: Network View not found for former ID \""
+ oldIdStr + "\".");
}
}
-
- // Restore the current network view
- if (currentNetView != null) {
-
appManager.setCurrentNetworkView(currentNetView);
- }
}
}
Modified:
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
===================================================================
---
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
2012-04-17 19:31:13 UTC (rev 28853)
+++
core3/impl/trunk/swing-application-impl/src/main/java/org/cytoscape/internal/view/NetworkPanel.java
2012-04-17 19:43:25 UTC (rev 28854)
@@ -52,6 +52,7 @@
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.KeyStroke;
+import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.ToolTipManager;
import javax.swing.event.TreeSelectionEvent;
@@ -62,8 +63,8 @@
import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.events.SetCurrentNetworkEvent;
import org.cytoscape.application.events.SetCurrentNetworkListener;
-import org.cytoscape.application.events.SetCurrentNetworkViewEvent;
-import org.cytoscape.application.events.SetCurrentNetworkViewListener;
+import org.cytoscape.application.events.SetSelectedNetworksEvent;
+import org.cytoscape.application.events.SetSelectedNetworksListener;
import org.cytoscape.application.swing.CyAction;
import org.cytoscape.internal.task.DynamicTaskFactoryProvisioner;
import org.cytoscape.internal.task.TaskFactoryTunableAction;
@@ -95,8 +96,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class NetworkPanel extends JPanel implements TreeSelectionListener,
SetCurrentNetworkViewListener,
- SetCurrentNetworkListener, NetworkAddedListener,
NetworkViewAddedListener, NetworkAboutToBeDestroyedListener,
+public class NetworkPanel extends JPanel implements TreeSelectionListener,
SetCurrentNetworkListener,
+ SetSelectedNetworksListener, NetworkAddedListener,
NetworkViewAddedListener, NetworkAboutToBeDestroyedListener,
NetworkViewAboutToBeDestroyedListener, RowsSetListener {
private final static long serialVersionUID = 1213748836763243L;
@@ -132,7 +133,7 @@
private final Map<Object, TaskFactory> provisionerMap;
- private boolean ignoreSetCurrentNetwork = true;
+ private boolean ignoreTreeSelectionEvents;
/**
* Constructor for the Network Panel.
@@ -203,6 +204,7 @@
treeTable.setForeground(FONT_COLOR);
treeTable.setSelectionForeground(FONT_COLOR);
treeTable.setCellSelectionEnabled(true);
+
treeTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
navigatorPanel = new JPanel();
navigatorPanel.setLayout(new BorderLayout());
@@ -309,21 +311,21 @@
/**
* Remove a network from the panel.
*
- * @param network_id
+ * @param networkId
*/
- public void removeNetwork(final Long network_id) {
- final NetworkTreeNode node = getNetworkNode(network_id);
+ public void removeNetwork(final Long networkId) {
+ final NetworkTreeNode node = getNetworkNode(networkId);
if(node == null)
return;
final Enumeration<?> children = node.children();
if (children.hasMoreElements()) {
- final List<NetworkTreeNode> removed_children = new
ArrayList<NetworkTreeNode>();
+ final List<NetworkTreeNode> removedChildren = new
ArrayList<NetworkTreeNode>();
while (children.hasMoreElements())
- removed_children.add((NetworkTreeNode)
children.nextElement());
+ removedChildren.add((NetworkTreeNode)
children.nextElement());
- for (NetworkTreeNode child : removed_children) {
+ for (NetworkTreeNode child : removedChildren) {
child.removeFromParent();
root.add(child);
}
@@ -349,15 +351,8 @@
*/
private void updateTitle(final CyNetwork network, final String name) {
// updates the title in the network panel
- if (treeTable.getTree().getSelectionPath() != null) { // user
has
- // selected
- // something
- treeTableModel.setValueAt(name,
treeTable.getTree().getSelectionPath().getLastPathComponent(), 0);
- } else { // no selection, means the title has been changed
- // programmatically
- NetworkTreeNode node =
getNetworkNode(network.getSUID());
- treeTableModel.setValueAt(name, node, 0);
- }
+ NetworkTreeNode node = getNetworkNode(network.getSUID());
+ treeTableModel.setValueAt(name, node, 0);
treeTable.getTree().updateUI();
treeTable.doLayout();
}
@@ -371,9 +366,9 @@
final CyNetwork net = nde.getNetwork();
logger.debug("Network about to be destroyed " +
net.getSUID());
- ignoreSetCurrentNetwork = true;
+ ignoreTreeSelectionEvents = true;
removeNetwork(net.getSUID());
- ignoreSetCurrentNetwork = false;
+ ignoreTreeSelectionEvents = false;
nameTables.remove(net.getDefaultNetworkTable());
nodeEdgeTables.remove(net.getDefaultNodeTable());
@@ -389,9 +384,9 @@
final CyNetwork net = e.getNetwork();
logger.debug("Got NetworkAddedEvent. Model ID
= " + net.getSUID());
- ignoreSetCurrentNetwork = true;
+ ignoreTreeSelectionEvents = true;
addNetwork(net.getSUID());
- ignoreSetCurrentNetwork = false;
+ ignoreTreeSelectionEvents = false;
nameTables.put(net.getDefaultNetworkTable(),
net);
nodeEdgeTables.put(net.getDefaultNodeTable(),net);
@@ -425,31 +420,6 @@
}
@Override
- public void handleEvent(final SetCurrentNetworkViewEvent e) {
- final CyNetworkView view = e.getNetworkView();
-
- if (view == null) {
- logger.debug("Current network view is set to null.");
- return;
- }
-
- final NetworkTreeNode node = (NetworkTreeNode)
treeTable.getTree().getLastSelectedPathComponent();
- final CyNetwork selectedNet = node != null ? node.getNetwork()
: null;
-
- if (!view.getModel().equals(selectedNet)) {
- SwingUtilities.invokeLater( new Runnable() {
- public void run() {
- logger.debug("Got
SetCurrentNetworkViewEvent. View ID = " + e.getNetworkView().getSUID());
- final long curr =
e.getNetworkView().getModel().getSUID();
- ignoreSetCurrentNetwork = true;
- focusNetworkNode(curr);
- ignoreSetCurrentNetwork = false;
- }
- });
- }
- }
-
- @Override
public void handleEvent(final SetCurrentNetworkEvent e) {
final CyNetwork cnet = e.getNetwork();
@@ -465,15 +435,22 @@
SwingUtilities.invokeLater( new Runnable() {
public void run() {
logger.debug("Set current network " +
cnet.getSUID());
- ignoreSetCurrentNetwork = true;
- focusNetworkNode(cnet.getSUID());
- ignoreSetCurrentNetwork = false;
+ updateNetworkTreeSelection();
}
});
}
}
@Override
+ public void handleEvent(SetSelectedNetworksEvent e) {
+ SwingUtilities.invokeLater( new Runnable() {
+ public void run() {
+ updateNetworkTreeSelection();
+ }
+ });
+ }
+
+ @Override
public void handleEvent(final NetworkViewAboutToBeDestroyedEvent nde) {
SwingUtilities.invokeLater( new Runnable() {
public void run() {
@@ -549,32 +526,43 @@
}
}
- public void focusNetworkNode(final Long networkID) {
- final NetworkTreeNode node = getNetworkNode(networkID);
-
- if (node != null) {
- final CyNetwork net = node.getNetwork();
- final NetworkTreeNode selectedNode = (NetworkTreeNode)
treeTable.getTree().getLastSelectedPathComponent();
+ public void updateNetworkTreeSelection() {
+ final List<CyNetwork> selNets =
appManager.getSelectedNetworks();
+ final List<TreePath> paths = new
ArrayList<TreePath>(selNets.size());
+
+ for (final CyNetwork net : selNets) {
+ final NetworkTreeNode node =
getNetworkNode(net.getSUID());
- if (selectedNode == null ||
!net.equals(selectedNode.getNetwork())) {
- // fires valueChanged only if the network isn't
already selected
-
treeTable.getTree().getSelectionModel().setSelectionPath(new
TreePath(node.getPath()));
- treeTable.getTree().scrollPathToVisible(new
TreePath(node.getPath()));
+ if (node != null) {
+ final TreePath tp = new
TreePath(node.getPath());
+ paths.add(tp);
}
}
+
+ ignoreTreeSelectionEvents = true;
+
treeTable.getTree().getSelectionModel().setSelectionPaths(paths.toArray(new
TreePath[paths.size()]));
+ ignoreTreeSelectionEvents = false;
+
+ int maxRow = 0;
+
+ for (final TreePath tp : paths) {
+ final int row = treeTable.getTree().getRowForPath(tp);
+ maxRow = Math.max(maxRow, row);
+ }
+
+ treeTable.getTree().scrollRowToVisible(maxRow);
}
- NetworkTreeNode getNetworkNode(final Long network_id) {
- final Enumeration<?> tree_node_enum =
root.breadthFirstEnumeration();
+ NetworkTreeNode getNetworkNode(final Long networkId) {
+ final Enumeration<?> treeNodeEnum =
root.breadthFirstEnumeration();
- while (tree_node_enum.hasMoreElements()) {
- final NetworkTreeNode node = (NetworkTreeNode)
tree_node_enum.nextElement();
-
- CyNetwork network = node.getNetwork();
+ while (treeNodeEnum.hasMoreElements()) {
+ final NetworkTreeNode node = (NetworkTreeNode)
treeNodeEnum.nextElement();
+ final CyNetwork network = node.getNetwork();
+
if (network == null)
continue;
-
- if (network.getSUID() == network_id)
+ if (network.getSUID() == networkId)
return node;
}
@@ -586,8 +574,9 @@
*/
@Override
public void valueChanged(TreeSelectionEvent e) {
- // logger.debug("NetworkPanel: valueChanged - " +
- // e.getSource().getClass().getName());
+ if (ignoreTreeSelectionEvents)
+ return;
+
JTree mtree = treeTable.getTree();
// sets the "current" network based on last node in the tree
selected
@@ -605,7 +594,7 @@
// No need to set the same network again. It should prevent
infinite loops.
// Also check if the network still exists (it could have been
removed by another thread).
- if (!ignoreSetCurrentNetwork &&
netmgr.networkExists(net.getSUID()) &&
!net.equals(appManager.getCurrentNetwork())) {
+ if (netmgr.networkExists(net.getSUID()) &&
!net.equals(appManager.getCurrentNetwork())) {
appManager.setCurrentNetwork(net);
}
@@ -667,7 +656,7 @@
if (e.isPopupTrigger()) {
// get the row where the mouse-click originated
int row = treeTable.rowAtPoint(e.getPoint());
-
+
if (row != -1) {
JTree tree = treeTable.getTree();
TreePath treePath =
tree.getPathForRow(row);
@@ -675,12 +664,11 @@
Long networkID = -1L;
try {
networkID = ((NetworkTreeNode)
treePath.getLastPathComponent()).getNetwork().getSUID();
- }
- catch (NullPointerException nullExp){
+ } catch (NullPointerException nullExp){
//The tree root does not
represent a network, ignore it.
return;
}
-
+
CyNetwork cyNetwork =
netmgr.getNetwork(networkID);
if (cyNetwork != null) {
--
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.