Author: scooter
Date: 2012-06-23 16:11:39 -0700 (Sat, 23 Jun 2012)
New Revision: 29679
Added:
core3/impl/trunk/group-session-restore-shim/
core3/impl/trunk/group-session-restore-shim/pom.xml
core3/impl/trunk/group-session-restore-shim/src/
core3/impl/trunk/group-session-restore-shim/src/main/
core3/impl/trunk/group-session-restore-shim/src/main/java/
core3/impl/trunk/group-session-restore-shim/src/main/java/org/
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/internal/
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/internal/CyActivator.java
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/internal/SessionEventsListener.java
Modified:
core3/gui-distribution/trunk/features/src/main/resources/features.xml
core3/impl/trunk/group-impl/src/main/java/org/cytoscape/group/internal/CyGroupImpl.java
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/datatable/CSVCyReader.java
core3/impl/trunk/pom.xml
Log:
Add group-session-restore-shim to link between session-impl and group-impl.
Also
fixed a bug in CSVCyReader.java that occurred when a list table column had no
data in it.
Modified: core3/gui-distribution/trunk/features/src/main/resources/features.xml
===================================================================
--- core3/gui-distribution/trunk/features/src/main/resources/features.xml
2012-06-23 03:03:04 UTC (rev 29678)
+++ core3/gui-distribution/trunk/features/src/main/resources/features.xml
2012-06-23 23:11:39 UTC (rev 29679)
@@ -143,6 +143,7 @@
<bundle
start-level="170">mvn:org.cytoscape/network-merge-impl/${cytoscape.impl.version}</bundle>
<bundle
start-level="170">mvn:org.cytoscape/graphml-impl/${cytoscape.impl.version}</bundle>
<bundle
start-level="170">mvn:org.cytoscape/edge-bundler-impl/${cytoscape.impl.version}</bundle>
+ <bundle
start-level="170">mvn:org.cytoscape/group-session-restore-shim-impl/${cytoscape.impl.version}</bundle>
<bundle
start-level="175">mvn:org.cytoscape/app-impl/${cytoscape.impl.version}</bundle>
Modified:
core3/impl/trunk/group-impl/src/main/java/org/cytoscape/group/internal/CyGroupImpl.java
===================================================================
---
core3/impl/trunk/group-impl/src/main/java/org/cytoscape/group/internal/CyGroupImpl.java
2012-06-23 03:03:04 UTC (rev 29678)
+++
core3/impl/trunk/group-impl/src/main/java/org/cytoscape/group/internal/CyGroupImpl.java
2012-06-23 23:11:39 UTC (rev 29679)
@@ -144,6 +144,12 @@
edges.size() == 0 && nodes.size() == 0 &&
np.getRootNetwork().equals(this.rootNetwork)) {
CySubNetwork groupNet = np;
+
+ // See if we're already collapsed
+ if (getGroupCollapsedAttribute(network)) {
+ // Yes, reflect it...
+ collapseSet.add(network);
+ }
} else {
// Create the subnetwork
CySubNetwork groupNet =
rootNetwork.addSubNetwork(nodes, edges);
Added: core3/impl/trunk/group-session-restore-shim/pom.xml
===================================================================
--- core3/impl/trunk/group-session-restore-shim/pom.xml
(rev 0)
+++ core3/impl/trunk/group-session-restore-shim/pom.xml 2012-06-23 23:11:39 UTC
(rev 29679)
@@ -0,0 +1,95 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.cytoscape</groupId>
+ <artifactId>impl-parent</artifactId>
+ <version>3.0.0-alpha9-SNAPSHOT</version>
+ </parent>
+
+ <properties>
+
<bundle.symbolicName>org.cytoscape.group-session-restore-shim-impl</bundle.symbolicName>
+
<bundle.namespace>org.cytoscape.group.session.restore.shim.internal</bundle.namespace>
+ </properties>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.cytoscape</groupId>
+ <artifactId>group-session-restore-shim-impl</artifactId>
+
+ <name>Cytoscape Group Session Restore Shim Impl
(${project.artifactId})</name>
+
+ <packaging>bundle</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>${maven-bundle-plugin.version}</version>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Bundle-SymbolicName>${bundle.symbolicName}</Bundle-SymbolicName>
+ <Bundle-Version>${project.version}</Bundle-Version>
+ <Export-Package>!${bundle.namespace}.*</Export-Package>
+
<Private-Package>${bundle.namespace}.*</Private-Package>
+
<Bundle-Activator>${bundle.namespace}.CyActivator</Bundle-Activator>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <repositories>
+ <repository>
+ <id>cytoscape_snapshots</id>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ <name>Cytoscape Snapshots</name>
+
<url>http://code.cytoscape.org/nexus/content/repositories/snapshots/</url>
+ </repository>
+ <repository>
+ <id>cytoscape_releases</id>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ <name>Cytoscape Releases</name>
+
<url>http://code.cytoscape.org/nexus/content/repositories/releases/</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.cytoscape</groupId>
+ <artifactId>group-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.cytoscape</groupId>
+ <artifactId>session-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.cytoscape</groupId>
+ <artifactId>service-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-all</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.googlecode.guava-osgi</groupId>
+ <artifactId>guava-osgi</artifactId>
+ <version>9.0.0</version>
+ </dependency>
+ </dependencies>
+</project>
+
Added:
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/internal/CyActivator.java
===================================================================
---
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/internal/CyActivator.java
(rev 0)
+++
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/internal/CyActivator.java
2012-06-23 23:11:39 UTC (rev 29679)
@@ -0,0 +1,37 @@
+package org.cytoscape.group.session.restore.shim.internal;
+
+import java.util.Properties;
+
+import org.cytoscape.event.CyEventHelper;
+
+import org.osgi.framework.BundleContext;
+
+import org.cytoscape.group.CyGroupFactory;
+import org.cytoscape.group.CyGroupManager;
+import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.subnetwork.CyRootNetworkManager;
+import org.cytoscape.session.events.SessionAboutToBeSavedEvent;
+import org.cytoscape.session.events.SessionAboutToBeSavedListener;
+import org.cytoscape.session.events.SessionLoadedEvent;
+import org.cytoscape.session.events.SessionLoadedListener;
+
+import org.cytoscape.service.util.AbstractCyActivator;
+
+public class CyActivator extends AbstractCyActivator {
+ public CyActivator() {
+ super();
+ }
+
+ public void start (BundleContext bc) {
+ CyEventHelper cyEventHelperServiceRef =
getService(bc,CyEventHelper.class);
+ CyGroupManager cyGroupManager =
getService(bc,CyGroupManager.class);
+ CyNetworkManager cyNetworkManagerServiceRef =
getService(bc,CyNetworkManager.class);
+ CyRootNetworkManager cyRootNetworkManagerServiceRef =
getService(bc,CyRootNetworkManager.class);
+ CyGroupFactory cyGroupFactoryRef =
getService(bc,CyGroupFactory.class);
+ SessionEventsListener sessionListener= new
SessionEventsListener(cyGroupFactoryRef, cyGroupManager,
+
cyNetworkManagerServiceRef, cyRootNetworkManagerServiceRef);
+
+ registerService(bc, sessionListener,
SessionLoadedListener.class, new Properties());
+ registerService(bc, sessionListener,
SessionAboutToBeSavedListener.class, new Properties());
+ }
+}
Added:
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/internal/SessionEventsListener.java
===================================================================
---
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/internal/SessionEventsListener.java
(rev 0)
+++
core3/impl/trunk/group-session-restore-shim/src/main/java/org/cytoscape/group/session/restore/shim/internal/SessionEventsListener.java
2012-06-23 23:11:39 UTC (rev 29679)
@@ -0,0 +1,157 @@
+package org.cytoscape.group.session.restore.shim.internal;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.cytoscape.group.CyGroup;
+import org.cytoscape.group.CyGroupFactory;
+import org.cytoscape.group.CyGroupManager;
+import org.cytoscape.model.CyEdge;
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyNetworkManager;
+import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyRow;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.subnetwork.CyRootNetwork;
+import org.cytoscape.model.subnetwork.CyRootNetworkManager;
+import org.cytoscape.model.subnetwork.CySubNetwork;
+import org.cytoscape.session.CySession;
+import org.cytoscape.session.events.SessionAboutToBeSavedEvent;
+import org.cytoscape.session.events.SessionAboutToBeSavedListener;
+import org.cytoscape.session.events.SessionLoadedEvent;
+import org.cytoscape.session.events.SessionLoadedListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SessionEventsListener implements SessionLoadedListener,
SessionAboutToBeSavedListener {
+
+ private final CyGroupFactory groupFactory;
+ private final CyGroupManager groupMgr;
+ private final CyNetworkManager netMgr;
+ private final CyRootNetworkManager rootNetMgr;
+ private final String EXTERNAL_EDGE_ATTRIBUTE="__externalEdges";
+
+ private static final Logger logger =
LoggerFactory.getLogger(SessionEventsListener.class);
+
+ public SessionEventsListener(final CyGroupFactory groupFactory,
+ final
CyGroupManager groupMgr,
+ final
CyNetworkManager netMgr,
+ final
CyRootNetworkManager rootNetMgr) {
+ this.groupFactory = groupFactory;
+ this.groupMgr = groupMgr;
+ this.netMgr = netMgr;
+ this.rootNetMgr = rootNetMgr;
+ }
+
+ @Override
+ public void handleEvent(SessionLoadedEvent e) {
+ final CySession sess = e.getLoadedSession();
+
+ if (sess != null) {
+ final Set<CyNetwork> networks = sess.getNetworks();
+
+ for (final CyNetwork net : networks) {
+ recreateGroups(net, sess);
+ }
+ }
+ }
+
+ private void recreateGroups(final CyNetwork net, final CySession sess) {
+ // Look for possible meta-nodes by inspecting the groups
metadata in the network's hidden table
+ final CyRootNetwork rootNet = rootNetMgr.getRootNetwork(net);
+ final List<CyNode> nodes = net.getNodeList();
+
+ // Iterate each node and check if they have network pointers
+ for (final CyNode n : nodes) {
+ final CyNetwork netPointer = n.getNetworkPointer();
+ if (netPointer == null) continue;
+
+ // Retrieve the internal nodes and edges
+ final CyRow dnRow = net.getRow(n,
CyNetwork.DEFAULT_ATTRS);
+ final CyRow hnRow = net.getRow(n,
CyNetwork.HIDDEN_ATTRS);
+ final CyRow rnRow = rootNet.getRow(n,
CyNetwork.HIDDEN_ATTRS);
+ if (!dnRow.isSet("__groupState") &&
!hnRow.isSet("__groupState")
+ && !rnRow.isSet("__groupCollapsed"))
+ return;
+
+ boolean collapsed = false;
+
+ if (hnRow.isSet("__groupState")) {
+ Integer grState = hnRow.get("__groupState",
Integer.class); // 2.x metadata
+ if (grState.intValue() == 2) collapsed = true;
+ } else if (dnRow.isSet("__groupState")) {
+ Integer grState = dnRow.get("__groupState",
Integer.class); // 2.x metadata
+ if (grState.intValue() == 2) collapsed = true;
+ }
+
+ // Create the group
+ final CyGroup group = groupFactory.createGroup(net, n,
true);
+
+ // Add in the missing external edges if we're collsped
+ // CyRow groupNodeRow = net.getRow(n,
CyNetwork.HIDDEN_ATTRS);
+ if (rnRow.isSet(EXTERNAL_EDGE_ATTRIBUTE)) {
+ List<Long> externalSUIDs =
rnRow.getList(EXTERNAL_EDGE_ATTRIBUTE, Long.class);
+ List<CyEdge> externalEdges = new
ArrayList<CyEdge>();
+ for (Long oldSUID: externalSUIDs) {
+ CyEdge newEdge =
sess.getObject(oldSUID, CyEdge.class);
+ externalEdges.add(newEdge);
+ }
+ group.addEdges(externalEdges);
+ }
+
+ // TODO: restore group's settings
+ // final boolean nestedNetVisible =
dnRow.get("nested_network_is_visible", Boolean.class, Boolean.FALSE);
+// groupSettings.setUseNestedNetworks(nestedNetVisible,
group);
+
+ // So the group node is removed from the network when
it is expanded:
+ // TODO: Shouldn't the group factory automatically
remove the provided group node, since the initial state
+ // should be the same as expanded?
+ /*
+ group.collapse(net);
+
+ if (!collapsed) {
+ // Expanded...
+ group.expand(net);
+ }
+ */
+ }
+ }
+
+ public void handleEvent(SessionAboutToBeSavedEvent e) {
+ // Get all of our networks
+ Set<CyNetwork> networkSet = netMgr.getNetworkSet();
+ for (CyNetwork net: networkSet) {
+ // Get the root network
+ CyRootNetwork rootNetwork =
((CySubNetwork)net).getRootNetwork();
+ // Get all of our groups
+ Set<CyGroup>groupSet = groupMgr.getGroupSet(net);
+
+ // For each group, save the list of external edges
+ for (CyGroup group: groupSet) {
+ // Get the group node
+ CyNode groupNode = group.getGroupNode();
+
+ // Get the list of external edges
+ Set<CyEdge> externalEdges =
group.getExternalEdgeList();
+
+ // Save the SUIDs for each edge
+ List<Long> externalEdgeSUIDs = new
ArrayList<Long>();
+ for (CyEdge edge: externalEdges) {
+ externalEdgeSUIDs.add(edge.getSUID());
+ }
+
+ // We need to use the root network to get the
row because the group might be expanded
+ CyRow groupNodeRow =
rootNetwork.getRow(groupNode, CyNetwork.HIDDEN_ATTRS);
+
+ // Make sure our column exists
+ CyTable hiddenNodeTable =
groupNodeRow.getTable();
+ if
(hiddenNodeTable.getColumn(EXTERNAL_EDGE_ATTRIBUTE) == null) {
+
hiddenNodeTable.createListColumn(EXTERNAL_EDGE_ATTRIBUTE, Long.class, false);
+ }
+
+ groupNodeRow.set(EXTERNAL_EDGE_ATTRIBUTE,
externalEdgeSUIDs);
+ }
+ }
+ }
+}
Modified:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/datatable/CSVCyReader.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/datatable/CSVCyReader.java
2012-06-23 03:03:04 UTC (rev 29678)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/datatable/CSVCyReader.java
2012-06-23 23:11:39 UTC (rev 29679)
@@ -125,6 +125,10 @@
for (String item : values) {
list.add(parseValue(listElementType, null,
item));
}
+
+ if (list.size() == 1 && list.get(0) == null)
+ return null;
+
return list;
} else if (type.equals(String.class))
return value;
Modified: core3/impl/trunk/pom.xml
===================================================================
--- core3/impl/trunk/pom.xml 2012-06-23 03:03:04 UTC (rev 29678)
+++ core3/impl/trunk/pom.xml 2012-06-23 23:11:39 UTC (rev 29679)
@@ -72,6 +72,7 @@
<module>scripting-impl</module>
<module>headless-application-impl</module>
<module>headless-cmdline-parser-impl</module>
+ <module>group-session-restore-shim</module>
</modules>
<properties>
--
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.