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.

Reply via email to