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.