Author: clopes
Date: 2012-01-06 13:53:35 -0800 (Fri, 06 Jan 2012)
New Revision: 27944

Modified:
   
core3/api/trunk/session-api/src/main/java/org/cytoscape/session/CySession.java
   
core3/api/trunk/session-api/src/test/java/org/cytoscape/session/CySessionTest.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/AbstractSessionReader.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/SessionUtil.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterImpl.java
   
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/XGMMLWriter.java
   
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
Log:
Fixes #553 : [session] Write/read multiple .props files:
  - Had to modify the CySession interface: getCytoscapeProperties() renamed to 
getProperties(); and it now returns Map<String, Properties>--so the CyProperty 
names can be passed to the session writer.
  - Loads Cy2 session_cytoscape.props file as a CyProperty named "session".
  
Cy2 Session Reader: node/edge linkout properties (and other ones) added to the 
reader's ignore list.

Modified: 
core3/api/trunk/session-api/src/main/java/org/cytoscape/session/CySession.java
===================================================================
--- 
core3/api/trunk/session-api/src/main/java/org/cytoscape/session/CySession.java  
    2012-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/api/trunk/session-api/src/main/java/org/cytoscape/session/CySession.java  
    2012-01-06 21:53:35 UTC (rev 27944)
@@ -1,4 +1,3 @@
-
 /*
  Copyright (c) 2006, 2010, The Cytoscape Consortium (www.cytoscape.org)
 
@@ -42,8 +41,6 @@
 import org.cytoscape.property.session.Cysession;
 import org.cytoscape.view.model.CyNetworkView;
 import org.cytoscape.view.vizmap.VisualStyle;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * A session is an immutable snapshot of the data contents of Cytoscape.
@@ -71,14 +68,12 @@
        private final Set<CyNetworkView> netViews;
        private final Set<CyTableMetadata> tables;
        private final Map<CyNetworkView,String> vsMap;
-       private final Properties cyProps;
+       private final Map<String, Properties> properties;
        private final Set<VisualStyle> visualStyles;
        private final Map<String, List<File>> appFiles;
        private final Bookmarks bookmarks; 
        private final Cysession cysession; 
 
-       private static final Logger logger = 
LoggerFactory.getLogger(CySession.class);
-
        private CySession(Builder b) {
                // TODO consider making defensive copies of objects...
 
@@ -102,10 +97,10 @@
                else
                        vsMap = b.vsMap;
 
-               if ( b.cyProps == null )
-                       cyProps = new Properties();
+               if ( b.properties == null )
+                       properties = new HashMap<String, Properties>();
                else
-                       cyProps = b.cyProps;
+                       properties = b.properties;
 
                if ( b.visualStyles == null )
                        visualStyles = new HashSet<VisualStyle>();
@@ -139,7 +134,7 @@
                private Set<CyNetworkView> netViews; 
                private Set<CyTableMetadata> tables;
                private Map<CyNetworkView,String> vsMap; 
-               private Properties cyProps;
+               private Map<String, Properties> properties;
                private Set<VisualStyle> visualStyles; 
                private Map<String, List<File>> appFiles; 
                private Bookmarks bookmarks; 
@@ -208,13 +203,12 @@
                /**
                 * Returns an instance of Builder that has at least been 
configured
                 * with the specified properties.
-                * @param p A Properties object that contains the current 
Cytoscape 
-                * properties.
+                * @param p A map of session related Property objects by 
property name.
                 * @return An instance of Builder that has at least been 
configured
                 * with the specified properties.
                 */
-       public Builder cytoscapeProperties(final Properties p) { 
-                       cyProps = p; 
+       public Builder properties(final Map<String, Properties> p) { 
+               properties = p; 
                        return this;
                }
 
@@ -299,10 +293,10 @@
        /**
         * Returns a Propeties object containing all Cytoscape properties 
         * defined for this session. 
-        * @return A Propeties object containing all Cytoscape properties 
+        * @return A map of session related Property objects by property name.
         * defined for this session. 
         */
-    public Properties getCytoscapeProperties() { return cyProps; }
+    public Map<String, Properties> getProperties() { return properties; }
 
        /**
         * Returns a set containing all VisualStyles defined for this session.

Modified: 
core3/api/trunk/session-api/src/test/java/org/cytoscape/session/CySessionTest.java
===================================================================
--- 
core3/api/trunk/session-api/src/test/java/org/cytoscape/session/CySessionTest.java
  2012-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/api/trunk/session-api/src/test/java/org/cytoscape/session/CySessionTest.java
  2012-01-06 21:53:35 UTC (rev 27944)
@@ -134,22 +134,22 @@
        public void testDefaultGetCytoscapeProperties() {
                session = new CySession.Builder().build();
                assertNotNull(session);
-               assertNotNull(session.getCytoscapeProperties());
+               assertNotNull(session.getProperties());
        }
 
        @Test
        public void testSetNullCytoscapeProperties() {
-               session = new 
CySession.Builder().cytoscapeProperties(null).build();
+               session = new CySession.Builder().properties(null).build();
                assertNotNull(session);
-               assertNotNull(session.getCytoscapeProperties());
-               assertEquals(0,session.getCytoscapeProperties().size());
+               assertNotNull(session.getProperties());
+               assertEquals(0,session.getProperties().size());
        }
 
        @Test
        public void testSetCytoscapeProperties() {
-               session = new 
CySession.Builder().cytoscapeProperties(getFakeProps()).build();
+               session = new 
CySession.Builder().properties(getFakeProps()).build();
                assertNotNull(session);
-               checkProps(session.getCytoscapeProperties());
+               checkProps(session.getProperties());
        }
 
        @Test
@@ -267,17 +267,23 @@
        }
 
 
-       private void checkProps(Properties p) {
+       private void checkProps(Map<String, Properties> map) {
+               assertNotNull(map);
+               Properties p = map.get("Session");
                assertNotNull(p);
                assertEquals(2,p.size());
                assertEquals("value1",p.getProperty("key1"));
                assertEquals("value2",p.getProperty("key2"));
        }
 
-       private Properties getFakeProps() {
+       private Map<String, Properties> getFakeProps() {
+               Map<String, Properties> map = new HashMap<String, Properties>();
+               
                Properties p = new Properties();
                p.setProperty("key1","value1");
                p.setProperty("key2","value2");
-               return p;
+               map.put("Session", p);
+               
+               return map;
        }
 }

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/AbstractSessionReader.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/AbstractSessionReader.java
       2012-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/AbstractSessionReader.java
       2012-01-06 21:53:35 UTC (rev 27944)
@@ -67,7 +67,7 @@
        
        protected Cysession cysession;
        protected Bookmarks bookmarks;
-       protected Properties cytoscapeProps = new Properties();
+       protected Map<String, Properties> propertiesMap = new HashMap<String, 
Properties>();
        protected final Set<CyNetwork> networks = new 
LinkedHashSet<CyNetwork>();
        protected final Set<CyNetworkView> networkViews = new 
LinkedHashSet<CyNetworkView>();
        protected final Set<VisualStyle> visualStyles = new 
HashSet<VisualStyle>();
@@ -108,7 +108,7 @@
        @Override
        public CySession getSession() {
                CySession ret = new 
CySession.Builder().networks(networks).networkViews(networkViews)
-                               
.viewVisualStyleMap(visualStyleMap).cytoscapeProperties(cytoscapeProps).visualStyles(visualStyles)
+                               
.viewVisualStyleMap(visualStyleMap).properties(propertiesMap).visualStyles(visualStyles)
                                
.bookmarks(bookmarks).cysession(cysession).appFileListMap(appFileListMap).tables(tableMetadata)
                                .build();
        

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
        2012-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy2SessionReaderImpl.java
        2012-01-06 21:53:35 UTC (rev 27944)
@@ -91,13 +91,15 @@
        
        public static final String CY2_PARENT_NETWORK_COLUMN = "Cytoscape2 
Parent Network";
        
-       public static final String CY_PROPS = "session_cytoscape.props";
+       public static final String CY_PROPS_FILE = "session_cytoscape.props";
        public static final Pattern NETWORK_PATTERN = 
Pattern.compile(".*/(([^/]+)[.]xgmml)");
+       public static final Pattern PROPERTIES_PATTERN = 
Pattern.compile(".*/(([^/]+)[.]xgmml)");
        public static final String IGNORED_PROPS =
-                       
"(cytoscape|proxy|logger|render|undo|vizmapper)\\.[^\\.]+.*" +
-                       
"|canonicalizeNames|defaultPluginDownloadUrl|defaultVisualStyle|defaultWebBrowser|exportTextAsShape"
 +
-                       
"|maximizeViewOnCreate|moduleNetworkViewCreationThreshold|secondaryViewThreshold|showQuickStartAtStartup"
 +
-                       "|viewThreshold";
+                       
"(cytoscape|proxy|logger|render|undo|vizmapper|nodelinkouturl|edgelinkouturl)\\.[^\\.]+.*"
 +
+                       
"|canonicalizeNames|defaultPluginDownloadUrl|defaultVisualStyle|defaultWebBrowser"
 +
+                       
"|exportTextAsShape|Linkout\\.externalLinkName|maximizeViewOnCreate|moduleNetworkViewCreationThreshold"
 +
+                       
"|nestedNetwork\\.imageScaleFactor|nestedNetworkSnapshotSize|preferredLayoutAlgorithm"
 +
+                       
"|secondaryViewThreshold|showQuickStartAtStartup|viewThreshold";
        
        private final CyNetworkReaderManager networkReaderMgr;
        private final CyPropertyReaderManager propertyReaderMgr;
@@ -145,8 +147,8 @@
                        extractSessionState(is, entryName);
                } else if (entryName.endsWith(VIZMAP_PROPS_FILE)) {
                        extractVizmap(is, entryName);
-               } else if (entryName.endsWith(CY_PROPS)) {
-                       extractCytoscapeProps(is, entryName);
+               } else if (entryName.endsWith(CY_PROPS_FILE)) {
+                       extractProperties(is, entryName);
                } else if (entryName.endsWith(XGMML_EXT)) {
                        // Don't extract the network now!
                        // Just save the entry path, so it can be extracted
@@ -361,19 +363,24 @@
                visualStyles.addAll(reader.getVisualStyles());
        }
 
-       private void extractCytoscapeProps(InputStream is, String entryName) 
throws Exception {
+       private void extractProperties(InputStream is, String entryName) throws 
Exception {
                CyPropertyReader reader = propertyReaderMgr.getReader(is, 
entryName);
                reader.run(taskMonitor);
                final Properties props = (Properties) reader.getProperty();
+               final Properties newProps = new Properties();
                
                if (props != null) {
                        // Only add properties that should have the 
SESSION_FILE save policy
                        for (String key : props.stringPropertyNames()) {
                                if (isSessionProperty(key)) {
                                        String value = props.getProperty(key);
-                                       cytoscapeProps.setProperty(key, value);
+                                       newProps.put(key, value);
                                }
                        }
+                       
+                       if (newProps.size() > 0) {
+                               propertiesMap.put("session", newProps); // 
TODO: choose a better name
+                       }
                }
        }
 

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
        2012-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
        2012-01-06 21:53:35 UTC (rev 27944)
@@ -32,9 +32,10 @@
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.BOOKMARKS_FILE;
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.CYSESSION_FILE;
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.CYTABLE_METADATA_FILE;
-import static org.cytoscape.io.internal.util.session.SessionUtil.PROPS_EXT;
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.NETWORKS_FOLDER;
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.NETWORK_VIEWS_FOLDER;
+import static 
org.cytoscape.io.internal.util.session.SessionUtil.PROPERTIES_FOLDER;
+import static 
org.cytoscape.io.internal.util.session.SessionUtil.PROPERTIES_EXT;
 import static org.cytoscape.io.internal.util.session.SessionUtil.TABLE_EXT;
 import static org.cytoscape.io.internal.util.session.SessionUtil.VERSION_EXT;
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.VIZMAP_XML_FILE;
@@ -95,6 +96,7 @@
        public static final Pattern NETWORK_VIEW_NAME_PATTERN = 
Pattern.compile("(\\d+)_(\\d+)(_[^_]+)?"); // netId_viewId_title
        public static final Pattern NETWORK_TABLE_PATTERN = 
Pattern.compile(".*/(([^/]+)/([^/]+)-([^/]+)-([^/]+)[.]cytable)");
        public static final Pattern GLOBAL_TABLE_PATTERN = 
Pattern.compile(".*/(global/(\\d+)-([^/]+)[.]cytable)");
+       public static final Pattern PROPERTIES_PATTERN = 
Pattern.compile(".*/"+PROPERTIES_FOLDER+"?(([^/]+)[.](props|properties))");
        
        private final Map<Long/*network_suid*/, CyNetwork> networkLookup = new 
HashMap<Long, CyNetwork>();
        private final Map<String/*old_network_id*/, 
Set<CyTableMetadataBuilder>> networkTableMap = new HashMap<String, 
Set<CyTableMetadataBuilder>>();
@@ -150,8 +152,8 @@
                                extractSessionState(is, entryName);
                        } else if (entryName.endsWith(VIZMAP_XML_FILE)) {
                                extractVizmap(is, entryName);
-                       } else if (entryName.endsWith(PROPS_EXT)) {
-                               extractCytoscapeProps(is, entryName);
+                       } else if (entryName.endsWith(PROPERTIES_EXT)) {
+                               extractProperties(is, entryName);
                        } else if (entryName.endsWith(XGMML_EXT)) {
                                // Ignore network view files for now...
                                Matcher matcher = 
NETWORK_PATTERN.matcher(entryName);
@@ -365,10 +367,21 @@
                visualStyles.addAll(reader.getVisualStyles());
        }
 
-       private void extractCytoscapeProps(InputStream is, String entryName) 
throws Exception {
+       private void extractProperties(InputStream is, String entryName) throws 
Exception {
                CyPropertyReader reader = propertyReaderMgr.getReader(is, 
entryName);
                reader.run(taskMonitor);
-               cytoscapeProps = (Properties) reader.getProperty();
+               Properties props = (Properties) reader.getProperty();
+               
+               if (props != null && props.size() > 0) {
+                       Matcher matcher = PROPERTIES_PATTERN.matcher(entryName);
+                       
+                       if (matcher.matches()) {
+                               String propsName = matcher.group(2);
+                               
+                               if (propsName != null)
+                                       propertiesMap.put(propsName, props);
+                       }
+               }
        }
 
        private void extractBookmarks(InputStream is, String entryName) throws 
Exception {

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/SessionUtil.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/SessionUtil.java
 2012-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/SessionUtil.java
 2012-01-06 21:53:35 UTC (rev 27944)
@@ -57,7 +57,7 @@
        public static final String VIZMAP_PROPS_FILE = "vizmap.props";
        public static final String VIZMAP_XML_FILE = "vizmap.xml";
        
-       public static final String PROPS_EXT = ".props";
+       public static final String PROPERTIES_EXT = ".props";
        public static final String TABLE_EXT = ".cytable";
        public static final String VERSION_EXT = ".version";
        public static final String XGMML_EXT = ".xgmml";

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterImpl.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterImpl.java
  2012-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterImpl.java
  2012-01-06 21:53:35 UTC (rev 27944)
@@ -42,6 +42,7 @@
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.CYTABLE_METADATA_FILE;
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.NETWORKS_FOLDER;
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.NETWORK_VIEWS_FOLDER;
+import static 
org.cytoscape.io.internal.util.session.SessionUtil.PROPERTIES_EXT;
 import static 
org.cytoscape.io.internal.util.session.SessionUtil.PROPERTIES_FOLDER;
 import static org.cytoscape.io.internal.util.session.SessionUtil.TABLES_FOLDER;
 import static org.cytoscape.io.internal.util.session.SessionUtil.VERSION_EXT;
@@ -59,6 +60,8 @@
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
 import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
@@ -198,7 +201,7 @@
                zipVizmap();
                taskMonitor.setProgress(0.5);
                taskMonitor.setStatusMessage("Zip Cytoscape properties...");
-               zipCytoscapeProps();
+               zipProperties();
                taskMonitor.setProgress(0.6);
                taskMonitor.setStatusMessage("Zip bookmarks...");
                zipBookmarks();
@@ -282,14 +285,19 @@
        /**
         * Writes the cytoscape.props file to the session zip.
         */
-       private void zipCytoscapeProps() throws Exception {
-               zos.putNextEntry(new ZipEntry(sessionDir + PROPERTIES_FOLDER + 
CYPROP_FILE) );
-
-               CyWriter propertiesWriter = 
propertyWriterMgr.getWriter(session.getCytoscapeProperties(), propertiesFilter, 
zos);
-               propertiesWriter.run(taskMonitor);
-
-               zos.closeEntry();
-               propertiesWriter = null;
+       private void zipProperties() throws Exception {
+               for (Entry<String, Properties> entry : 
session.getProperties().entrySet()) {
+                       String fileName = entry.getKey() + PROPERTIES_EXT;
+                       Properties props = entry.getValue(); 
+                       
+                       zos.putNextEntry(new ZipEntry(sessionDir + 
PROPERTIES_FOLDER + fileName) );
+       
+                       CyWriter propertiesWriter = 
propertyWriterMgr.getWriter(props, propertiesFilter, zos);
+                       propertiesWriter.run(taskMonitor);
+       
+                       zos.closeEntry();
+                       propertiesWriter = null;
+               }
        }
 
        /**

Modified: 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/XGMMLWriter.java
===================================================================
--- 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/XGMMLWriter.java
  2012-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/xgmml/XGMMLWriter.java
  2012-01-06 21:53:35 UTC (rev 27944)
@@ -685,31 +685,6 @@
             depth--;
             writeElement("</graphics>\n");
         }
-
-        // TODO: Handle bends
-        if (element instanceof CyEdge) {
-                       //   final CyEdge edge = (CyEdge) element;
-                       //   final Bend bendData = edge.getBend();
-            //   final List<Point2D> handles = new ArrayList<Point2D>(); 
//final List<Point2D> handles = bendData.getHandles();
-            //
-            //   if (handles.size() == 0) {
-            //       write("/>\n");
-            //   } else {
-            //       write(">\n");
-            //       depth++;
-            //       writeElement("<att name=\"edgeBend\">\n");
-            //       depth++;
-            //       for (Point2D handle: handles) {
-            //           String x = Double.toString(handle.getX());
-            //           String y = Double.toString(handle.getY());
-            //           writeElement("<att name=\"handle\" x=\""+x+"\" 
y=\""+y+"\" />\n");
-            //       }
-            //       depth--;
-            //       writeElement("</att>\n");
-            //       depth--;
-            //       writeElement("</graphics>\n");
-            //   }
-        }
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })

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-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CyActivator.java
 2012-01-06 21:53:35 UTC (rev 27944)
@@ -9,6 +9,7 @@
 import org.cytoscape.model.subnetwork.CyRootNetworkManager;
 import org.cytoscape.property.CyProperty;
 import org.cytoscape.service.util.AbstractCyActivator;
+import org.cytoscape.service.util.CyServiceRegistrar;
 import org.cytoscape.session.CyNetworkNaming;
 import org.cytoscape.session.CySessionManager;
 import org.cytoscape.view.model.CyNetworkViewManager;
@@ -16,14 +17,14 @@
 import org.osgi.framework.BundleContext;
 
 
-
 public class CyActivator extends AbstractCyActivator {
+       
        public CyActivator() {
                super();
        }
 
+       @Override
        public void start(BundleContext bc) {
-
                CyEventHelper cyEventHelperServiceRef = 
getService(bc,CyEventHelper.class);
                CyNetworkManager cyNetworkManagerServiceRef = 
getService(bc,CyNetworkManager.class);
                CyTableManager cyTableManagerServiceRef = 
getService(bc,CyTableManager.class);
@@ -31,9 +32,10 @@
                CyNetworkViewManager cyNetworkViewManagerServiceRef = 
getService(bc,CyNetworkViewManager.class);
                CyNetworkTableManager cyNetworkTableManagerServiceRef = 
getService(bc,CyNetworkTableManager.class);
                CyRootNetworkManager cyRootNetworkManagerServiceRef = 
getService(bc,CyRootNetworkManager.class);
+               CyServiceRegistrar cyServiceRegistrarServiceRef = 
getService(bc,CyServiceRegistrar.class);
                
                CyNetworkNamingImpl cyNetworkNaming = new 
CyNetworkNamingImpl(cyNetworkManagerServiceRef);
-               CySessionManagerImpl cySessionManager = new 
CySessionManagerImpl(cyEventHelperServiceRef,cyNetworkManagerServiceRef,cyTableManagerServiceRef,cyNetworkTableManagerServiceRef,visualMappingManagerServiceRef,cyNetworkViewManagerServiceRef,cyRootNetworkManagerServiceRef);
+               CySessionManagerImpl cySessionManager = new 
CySessionManagerImpl(cyEventHelperServiceRef,cyNetworkManagerServiceRef,cyTableManagerServiceRef,cyNetworkTableManagerServiceRef,visualMappingManagerServiceRef,cyNetworkViewManagerServiceRef,cyRootNetworkManagerServiceRef,cyServiceRegistrarServiceRef);
                
                registerService(bc,cyNetworkNaming,CyNetworkNaming.class, new 
Properties());
                registerService(bc,cySessionManager,CySessionManager.class, new 
Properties());

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-01-06 21:50:31 UTC (rev 27943)
+++ 
core3/impl/trunk/session-impl/src/main/java/org/cytoscape/session/internal/CySessionManagerImpl.java
        2012-01-06 21:53:35 UTC (rev 27944)
@@ -57,11 +57,13 @@
 import org.cytoscape.model.subnetwork.CyRootNetwork;
 import org.cytoscape.model.subnetwork.CyRootNetworkManager;
 import org.cytoscape.property.CyProperty;
+import org.cytoscape.property.SimpleCyProperty;
 import org.cytoscape.property.bookmark.Bookmarks;
 import org.cytoscape.property.session.Cysession;
 import org.cytoscape.property.session.Desktop;
 import org.cytoscape.property.session.NetworkFrame;
 import org.cytoscape.property.session.SessionState;
+import org.cytoscape.service.util.CyServiceRegistrar;
 import org.cytoscape.session.CySession;
 import org.cytoscape.session.CySessionManager;
 import org.cytoscape.session.events.SessionAboutToBeSavedEvent;
@@ -90,6 +92,7 @@
        private final VisualMappingManager vmMgr;
        private final CyNetworkViewManager nvMgr;
        private final CyRootNetworkManager rootNetMgr;
+       private final CyServiceRegistrar registrar;
 
        private final Map<CyProperty<?>, Map<String, String>> sessionProperties;
 
@@ -101,7 +104,8 @@
                                                                final 
CyNetworkTableManager netTblMgr,
                                                                final 
VisualMappingManager vmMgr,
                                                                final 
CyNetworkViewManager nvMgr,
-                                                               final 
CyRootNetworkManager rootNetMgr) {
+                                                               final 
CyRootNetworkManager rootNetMgr,
+                                                               final 
CyServiceRegistrar registrar) {
                this.cyEventHelper = cyEventHelper;
                this.netMgr = netMgr;
                this.tblMgr = tblMgr;
@@ -109,6 +113,7 @@
                this.vmMgr = vmMgr;
                this.nvMgr = nvMgr;
                this.rootNetMgr = rootNetMgr;
+               this.registrar = registrar;
                sessionProperties = new HashMap<CyProperty<?>, Map<String, 
String>>();
        }
 
@@ -142,12 +147,12 @@
                Map<String, List<File>> appMap = 
savingEvent.getAppFileListMap();
                Set<CyTable> tables = tblMgr.getAllTables(true);
                Set<VisualStyle> styles = vmMgr.getAllVisualStyles();
-               Properties props = getProperties();
+               Map<String, Properties> props = getProperties();
                Bookmarks bkmarks = getBookmarks();
-
                Set<CyTableMetadata> metadata = buildMetadata(tables, networks);
+               
                // Build the session
-               CySession sess = new 
CySession.Builder().cytoscapeProperties(props).bookmarks(bkmarks).cysession(cysess)
+               CySession sess = new 
CySession.Builder().properties(props).bookmarks(bkmarks).cysession(cysess)
                                
.appFileListMap(appMap).tables(metadata).networks(networks).networkViews(netViews)
                                
.visualStyles(styles).viewVisualStyleMap(stylesMap).build();
 
@@ -171,7 +176,7 @@
                                
                                if (!allNetworks.contains(rootNet)) {
                                        allNetworks.add(rootNet);
-                               
+                                       
                                        // TODO: remove it once manager is 
fixed to return all tables
                                        for (Class<? extends CyTableEntry> type 
: TYPES) {
                                                Map<String, CyTable> tableMap = 
netTblMgr.getTables(rootNet, type);
@@ -244,13 +249,14 @@
                        // Cysession info
                        Cysession cysess = new CysessionFactory(netMgr, nvMgr, 
vmMgr).createDefaultCysession();
 
-                       Properties props = getProperties();
+                       Map<String, Properties> props = getProperties();
                        Bookmarks bkmarks = getBookmarks();
 
-                       sess = new 
CySession.Builder().cytoscapeProperties(props).bookmarks(bkmarks).cysession(cysess)
-                                       .visualStyles(styles).build();
+                       sess = new 
CySession.Builder().properties(props).bookmarks(bkmarks).cysession(cysess).visualStyles(styles)
+                                       .build();
                } else {
                        logger.debug("Restoring the session...");
+                       restoreProperties(sess);
                        restoreNetworks(sess);
                        restoreNetworkViews(sess);
                        restoreTables(sess);
@@ -306,19 +312,39 @@
                return bookmarks;
        }
 
-       private Properties getProperties() {
-               Properties props = new Properties();
+       /**
+        * @return Map of session Properties by property name.
+        */
+       private Map<String/*property name*/, Properties> getProperties() {
+               Map<String, Properties> map = new HashMap<String, Properties>();
 
-               for (CyProperty<?> cyProps : sessionProperties.keySet()) {
+               for (Entry<CyProperty<?>, Map<String, String>> entry : 
sessionProperties.entrySet()) {
+                       CyProperty<?> cyProps = entry.getKey();
+                       Map<String, String> metadata = entry.getValue();
+                       
                        if (cyProps.getProperties() instanceof Properties) {
-                               Properties p = (Properties) 
cyProps.getProperties();
-                               props.putAll(p);
+                               map.put(metadata.get("cyPropertyName"), 
(Properties) cyProps.getProperties());
                        }
                }
 
-               return props;
+               return map;
        }
 
+       private void restoreProperties(CySession sess) {
+               final Map<String, Properties> sessionPropsMap = 
sess.getProperties();
+               
+               for (Entry<String, Properties> entry : 
sessionPropsMap.entrySet()) {
+                       final Properties props = entry.getValue();
+                       CyProperty<Properties> cyProps = new 
SimpleCyProperty(props, CyProperty.SavePolicy.SESSION_FILE);
+                       
+                       final Properties serviceProps = new Properties();
+                       serviceProps.setProperty("cyPropertyName", 
entry.getKey());
+                       serviceProps.setProperty("serviceType", "property");
+               
+                       registrar.registerAllServices(cyProps, serviceProps);
+               }
+       }
+       
        private void restoreNetworks(CySession sess) {
                logger.debug("Restoring networks...");
                Set<CyNetwork> networks = sess.getNetworks();
@@ -386,15 +412,9 @@
 
        private void disposeCurrentSession(boolean removeVisualStyles) {
                logger.debug("Disposing current session...");
-
-               // Destroy network views
-               Set<CyNetworkView> netViews = nvMgr.getNetworkViewSet();
-
-               for (CyNetworkView nv : netViews)
-                       nvMgr.destroyNetworkView(nv);
                
                // Destroy networks
-               Set<CyNetwork> networks = netMgr.getNetworkSet();
+               final Set<CyNetwork> networks = netMgr.getNetworkSet();
                
                for (CyNetwork n : networks)
                        netMgr.destroyNetwork(n);
@@ -416,5 +436,14 @@
 
                // Destroy tables
                tblMgr.reset();
+               
+               // Unregister session properties
+               final Set<CyProperty<?>> cyPropsSet = new 
HashSet<CyProperty<?>>(sessionProperties.keySet());
+               
+               for (CyProperty<?> cyProps : cyPropsSet) {
+                       if 
(cyProps.getSavePolicy().equals(CyProperty.SavePolicy.SESSION_FILE)) {
+                               registrar.unregisterAllServices(cyProps);
+                       }
+               }
        }
 }

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