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.

Reply via email to