Author: jm
Date: 2011-06-14 08:21:49 -0700 (Tue, 14 Jun 2011)
New Revision: 25740

Added:
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/CSVCyReaderFactory.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/SessionTableFileFilter.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/CyTableMetadataImpl.java
Modified:
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderFactoryImpl.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderImpl.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkReader.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AttributeValueUtil.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/csv/CSVCyWriter.java
   
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
   core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
Log:
Fixed up read support for session tables (bug in schema serialization)
Added write support for session tables
Merging network tables is currently disabled until we figure out a policy for 
user tables

Added: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/CSVCyReaderFactory.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/CSVCyReaderFactory.java
                          (rev 0)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/CSVCyReaderFactory.java
  2011-06-14 15:21:49 UTC (rev 25740)
@@ -0,0 +1,38 @@
+package org.cytoscape.io.internal.read.datatable;
+
+import java.io.InputStream;
+
+import org.cytoscape.io.CyFileFilter;
+import org.cytoscape.io.read.InputStreamTaskFactory;
+import org.cytoscape.model.CyTableFactory;
+import org.cytoscape.work.TaskIterator;
+
+public class CSVCyReaderFactory implements InputStreamTaskFactory {
+
+       private final CyFileFilter filter;
+       private InputStream stream;
+       private boolean readSchema;
+       private CyTableFactory tableFactory;
+
+       public CSVCyReaderFactory(CyFileFilter filter, boolean readSchema, 
CyTableFactory tableFactory) {
+               this.filter = filter;
+               this.readSchema = readSchema;
+               this.tableFactory = tableFactory;
+       }
+       
+       @Override
+       public TaskIterator getTaskIterator() {
+               return new TaskIterator(new CSVCyReader(stream, readSchema, 
tableFactory));
+       }
+
+       @Override
+       public CyFileFilter getCyFileFilter() {
+               return filter;
+       }
+
+       @Override
+       public void setInputStream(InputStream stream, String inputName) {
+               this.stream = stream;
+       }
+
+}


Property changes on: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/CSVCyReaderFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Added: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/SessionTableFileFilter.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/SessionTableFileFilter.java
                              (rev 0)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/SessionTableFileFilter.java
      2011-06-14 15:21:49 UTC (rev 25740)
@@ -0,0 +1,40 @@
+package org.cytoscape.io.internal.read.datatable;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Set;
+
+import org.cytoscape.io.BasicCyFileFilter;
+import org.cytoscape.io.DataCategory;
+import org.cytoscape.io.util.StreamUtil;
+
+public class SessionTableFileFilter extends BasicCyFileFilter {
+
+       public SessionTableFileFilter(Set<String> extensions, Set<String> 
contentTypes, String description, DataCategory category, StreamUtil streamUtil) 
{
+               super(extensions, contentTypes, description, category, 
streamUtil);
+       }
+       
+       @Override
+       public boolean accepts(InputStream stream, DataCategory category) {
+               if (category != DataCategory.TABLE) {
+                       return false;
+               }
+               
+               BufferedReader reader = new BufferedReader(new 
InputStreamReader(stream));
+               try {
+                       // TODO: This is a really lame way to check for a CSV 
file
+                       String line = reader.readLine().trim();
+                       
+                       // Make sure we don't accept XML
+                       if (line.startsWith("<")) {
+                               return false;
+                       }
+                       return line.contains(",");
+               } catch (IOException e) {
+                       return false;
+               }
+       }
+
+}


Property changes on: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/datatable/SessionTableFileFilter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Added: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/CyTableMetadataImpl.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/CyTableMetadataImpl.java
                           (rev 0)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/CyTableMetadataImpl.java
   2011-06-14 15:21:49 UTC (rev 25740)
@@ -0,0 +1,73 @@
+package org.cytoscape.io.internal.read.session;
+
+import java.util.Set;
+
+import org.cytoscape.model.CyNetwork;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyTableMetadata;
+
+public class CyTableMetadataImpl implements CyTableMetadata {
+
+       private final Class<?> type;
+       private final CyTable table;
+       private final Set<CyNetwork> networks;
+       private final String namespace;
+
+       public CyTableMetadataImpl(CyTableMetadataBuilder builder) {
+               this.type = builder.type;
+               this.table = builder.table;
+               this.networks = builder.networks;
+               this.namespace = builder.namespace;
+       }
+       
+       @Override
+       public Class<?> getType() {
+               return type;
+       }
+       
+       @Override
+       public CyTable getCyTable() {
+               return table;
+       }
+
+       @Override
+       public Set<CyNetwork> getCyNetworks() {
+               return networks;
+       }
+
+       @Override
+       public String getNamespace() {
+               return namespace;
+       }
+
+       public static class CyTableMetadataBuilder {
+               private Class<?> type;
+               private CyTable table;
+               private Set<CyNetwork> networks;
+               private String namespace;
+               
+               public CyTableMetadataBuilder setCyTable(CyTable table) {
+                       this.table = table;
+                       return this;
+               }
+               
+               public CyTableMetadataBuilder setNetworks(Set<CyNetwork> 
networks) {
+                       this.networks = networks;
+                       return this;
+               }
+               
+               public CyTableMetadataBuilder setType(Class<?> type) {
+                       this.type = type;
+                       return this;
+               }
+               
+               public CyTableMetadataBuilder setNamespace(String namespace) {
+                       this.namespace = namespace;
+                       return this;
+               }
+                               
+               public CyTableMetadata build() {
+                       return new CyTableMetadataImpl(this);
+               }
+       }
+}


Property changes on: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/CyTableMetadataImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderFactoryImpl.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderFactoryImpl.java
      2011-06-14 02:02:32 UTC (rev 25739)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderFactoryImpl.java
      2011-06-14 15:21:49 UTC (rev 25740)
@@ -31,6 +31,7 @@
 import java.util.Properties;
 
 import org.cytoscape.io.CyFileFilter;
+import org.cytoscape.io.internal.read.datatable.CSVCyReaderFactory;
 import org.cytoscape.io.read.CyNetworkReaderManager;
 import org.cytoscape.io.read.CyPropertyReaderManager;
 import org.cytoscape.io.read.InputStreamTaskFactory;
@@ -44,20 +45,23 @@
        private final CyNetworkReaderManager netviewReaderMgr;
        private final CyPropertyReaderManager propertyReaderMgr;
        private final VizmapReaderManager vizmapReaderMgr;
+       private final CSVCyReaderFactory csvCyReaderFactory;
        private final CyProperty<Properties> properties;
 
        private InputStream inputStream;
        private String inputName;
 
-       public SessionReaderFactoryImpl(final CyFileFilter filter,
-                                                                       final 
CyNetworkReaderManager netviewReaderMgr,
+       public SessionReaderFactoryImpl(final CyFileFilter filter, 
+                                                                       final 
CyNetworkReaderManager netviewReaderMgr, 
                                                                        final 
CyPropertyReaderManager propertyReaderMgr,
                                                                        final 
VizmapReaderManager vizmapReaderMgr,
+                                                                       final 
CSVCyReaderFactory csvCyReaderFactory,
                                                                        final 
CyProperty<Properties> properties) {
                this.filter = filter;
                this.netviewReaderMgr = netviewReaderMgr;
                this.propertyReaderMgr = propertyReaderMgr;
                this.vizmapReaderMgr = vizmapReaderMgr;
+               this.csvCyReaderFactory = csvCyReaderFactory;
                this.properties = properties;
        }
 
@@ -73,6 +77,6 @@
 
        public TaskIterator getTaskIterator() {
                return new TaskIterator(new SessionReaderImpl(inputStream, 
netviewReaderMgr, propertyReaderMgr,
-                                                                               
                          vizmapReaderMgr, properties));
+                                                                               
                          vizmapReaderMgr, csvCyReaderFactory, properties));
        }
 }

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderImpl.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderImpl.java
     2011-06-14 02:02:32 UTC (rev 25739)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/session/SessionReaderImpl.java
     2011-06-14 15:21:49 UTC (rev 25740)
@@ -42,28 +42,42 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.net.URLDecoder;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
 import org.cytoscape.io.internal.read.MarkSupportedInputStream;
+import org.cytoscape.io.internal.read.datatable.CSVCyReaderFactory;
+import 
org.cytoscape.io.internal.read.session.CyTableMetadataImpl.CyTableMetadataBuilder;
+import org.cytoscape.io.internal.read.xgmml.XGMMLNetworkReader;
 import org.cytoscape.io.read.CyNetworkReader;
 import org.cytoscape.io.read.CyNetworkReaderManager;
 import org.cytoscape.io.read.CyPropertyReader;
 import org.cytoscape.io.read.CyPropertyReaderManager;
 import org.cytoscape.io.read.CySessionReader;
+import org.cytoscape.io.read.CyTableReader;
 import org.cytoscape.io.read.VizmapReader;
 import org.cytoscape.io.read.VizmapReaderManager;
+import org.cytoscape.model.CyColumn;
 import org.cytoscape.model.CyEdge;
 import org.cytoscape.model.CyNetwork;
 import org.cytoscape.model.CyNode;
+import org.cytoscape.model.CyRow;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyTableEntry;
+import org.cytoscape.model.CyTableMetadata;
 import org.cytoscape.property.CyProperty;
 import org.cytoscape.property.bookmark.Bookmarks;
 import org.cytoscape.property.session.Cysession;
@@ -89,19 +103,26 @@
        public static final String CY_PROPS = "cytoscape.props";
        public static final String XGMML_EXT = ".xgmml";
        public static final String BOOKMARKS_FILE = "session_bookmarks.xml";
+       private static final String TABLE_EXT = ".table";
        public static final String NETWORK_ROOT = "Network Root";
        public static final int MAJOR_DOC_VERSION = 3;
+       public static final Pattern NETWORK_PATTERN = 
Pattern.compile(".*/([^/]+)[.]xgmml");
+       public static final Pattern NETWORK_TABLE_PATTERN = 
Pattern.compile(".*/([^/]+)/([^/]+)-([^/]+)-([^/]+)[.]table");
+       public static final Pattern GLOBAL_TABLE_PATTERN = 
Pattern.compile(".*/([^/]+)[.]table");
 
        private static final Logger logger = 
LoggerFactory.getLogger(SessionReaderImpl.class);
 
        private final Map<String, List<File>> pluginFileListMap = new 
HashMap<String, List<File>>();
        private final Map<String,CyNetworkView[]> networkViews = new 
HashMap<String,CyNetworkView[]>();
        private final Map<CyNetworkView,String> visualStyleMap = new 
HashMap<CyNetworkView,String>();
+       private final Map<String,Set<CyTableMetadataBuilder>> networkTableMap = 
new HashMap<String,Set<CyTableMetadataBuilder>>();
+       private final Set<CyTableMetadata> tableMetadata = new 
HashSet<CyTableMetadata>();
 
        private final InputStream sourceInputStream;
        private final CyNetworkReaderManager netviewReaderMgr; 
        private final CyPropertyReaderManager propertyReaderMgr;
-       private final VizmapReaderManager vizmapReaderMgr; 
+       private final VizmapReaderManager vizmapReaderMgr;
+       private final CSVCyReaderFactory csvCyReaderFactory;
 
        private Cysession cysession;
        private Bookmarks bookmarks;
@@ -116,6 +137,7 @@
                                 final CyNetworkReaderManager netviewReaderMgr, 
                                 final CyPropertyReaderManager 
propertyReaderMgr,
                                 final VizmapReaderManager vizmapReaderMgr,
+                                final CSVCyReaderFactory csvCyReaderFactory,
                                 final CyProperty<Properties> properties) {
 
                if ( sourceInputStream == null )
@@ -134,6 +156,10 @@
                    throw new NullPointerException("vizmap reader manager is 
null!");
                this.vizmapReaderMgr = vizmapReaderMgr;
                
+               if ( csvCyReaderFactory == null )
+                       throw new NullPointerException("table reader manager is 
null!");
+               this.csvCyReaderFactory = csvCyReaderFactory;
+               
                if ( properties == null )
             throw new NullPointerException("properties is null!");
                
@@ -149,6 +175,7 @@
 
                extractEntries();
                processNetworks();
+               mergeNetworkTables();
        }
 
        public CySession getCySession() {
@@ -166,6 +193,7 @@
                        .bookmarks( bookmarks )
                        .cysession( cysession )
                        .pluginFileListMap( pluginFileListMap )
+                       .tables( tableMetadata )
                        .build();
 
                return ret;
@@ -211,6 +239,8 @@
                        } else if (entryName.endsWith(BOOKMARKS_FILE)) {
                                extractBookmarks(tmpIs, entryName);
                                //System.out.println("   extracting bookmarks");
+                       } else if (entryName.endsWith(TABLE_EXT)) {
+                               extractTable(tmpIs, entryName);
                        } else {
                                logger.warn("Unknown entry found in session zip 
file!\n" + entryName);
                        }
@@ -234,6 +264,156 @@
                }
        }
 
+       private void mergeNetworkTables() {
+               for (Entry<String, CyNetworkView[]> entry : 
networkViews.entrySet()) {
+                       String entryName = entry.getKey();
+                       Matcher matcher = NETWORK_PATTERN.matcher(entryName);
+                       if (!matcher.matches()) {
+                               continue;
+                       }
+                       String name = matcher.group(1);
+                       CyNetworkView view = entry.getValue()[0];
+                       CyNetwork network = view.getModel();
+                       Set<CyTableMetadataBuilder> builders = 
networkTableMap.get(name);
+                       if (builders == null) {
+                               continue;
+                       }
+                       for (CyTableMetadataBuilder builder : builders) {
+                               Set<CyNetwork> networks = new 
HashSet<CyNetwork>();
+                               networks.add(network);
+                               CyTableMetadata metadata = builder
+                                       .setNetworks(networks)
+                                       .build();
+                               // TODO: Merging serialized tables with 
respective networks is
+                               // currently disabled due to timing conflicts 
with Ding. 
+                               //mergeNetworkTable(network, metadata);
+                               tableMetadata.add(metadata);
+                       }
+               }
+       }
+
+       private void mergeNetworkTable(CyNetwork network, CyTableMetadata 
metadata) {
+               Class<?> type = metadata.getType();
+               CyTableEntry entry = null;
+               CyTable mapping = null;
+               if (type.equals(CyNetwork.class)) {
+                       CyTable sourceTable = metadata.getCyTable();
+                       String keyName = sourceTable.getPrimaryKey().getName();
+                       // Network tables should only have one row.
+                       CyRow sourceRow = 
sourceTable.getAllRows().iterator().next();
+                       CyRow targetRow = 
network.getCyRow(metadata.getNamespace());
+                       mergeRow(keyName, sourceRow, targetRow);
+                       return;
+               } else if (type.equals(CyNode.class)) {
+                       entry = network.getNodeList().iterator().next();
+                       mapping = network.getDefaultNodeTable();
+               } else if (type.equals(CyEdge.class)) {
+                       entry = network.getEdgeList().iterator().next();
+                       mapping = network.getDefaultEdgeTable();
+               }
+               if (entry == null) {
+                       return;
+               }
+               CyRow row = entry.getCyRow(metadata.getNamespace());
+               Map<Long, Long> mappings = createSUIDMappings(mapping);
+               mergeTables(metadata.getCyTable(), row.getTable(), mappings);
+       }
+
+       private Map<Long, Long> createSUIDMappings(CyTable mapping) {
+               if (mapping == null) {
+                       return Collections.emptyMap();
+               }
+               
+               Map<Long, Long> mappings = new HashMap<Long, Long>();
+               String key = mapping.getPrimaryKey().getName();
+               for (CyRow row : mapping.getAllRows()) {
+                       Long oldSUID = 
row.get(XGMMLNetworkReader.ORIGINAL_ID_COLUMN, Long.class);
+                       Long newSUID = row.get(key, Long.class);
+                       mappings.put(oldSUID, newSUID);
+               }
+               return mappings;
+       }
+
+
+       private void mergeTables(CyTable source, CyTable target, Map<Long, 
Long> mappings) {
+               CyColumn sourceKey = source.getPrimaryKey();
+               CyColumn targetKey = target.getPrimaryKey();
+               String keyName = sourceKey.getName();
+
+               // Make sure keys match
+               if (keyName != targetKey.getName()) {
+                       return;
+               }
+               
+               for (CyRow sourceRow : source.getAllRows()) {
+                       Long key = sourceRow.get(keyName, Long.class);
+                       if (mappings != null) {
+                               key = mappings.get(key);
+                       }
+                       CyRow targetRow = target.getRow(key);
+                       mergeRow(keyName, sourceRow, targetRow);
+               }
+       }
+
+       private void mergeRow(String keyName, CyRow sourceRow, CyRow targetRow) 
{
+               for (CyColumn column : sourceRow.getTable().getColumns()) {
+                       String columnName = column.getName();
+                       if (columnName.equals(keyName)) {
+                               continue;
+                       }
+                       Class<?> type = column.getType();
+                       if (type.equals(List.class)) {
+                               Class<?> elementType = 
column.getListElementType();
+                               List<?> list = sourceRow.getList(columnName, 
elementType);
+                               targetRow.set(columnName, list);
+                       } else {
+                               Object value = sourceRow.get(columnName, type);
+                               targetRow.set(columnName, value);
+                       }
+               }
+       }
+
+
+       private void extractTable(InputStream stream, String entryName) throws 
Exception {
+               csvCyReaderFactory.setInputStream(stream, entryName);
+               CyTableReader reader = (CyTableReader) 
csvCyReaderFactory.getTaskIterator().next();
+               reader.run(taskMonitor);
+               
+               // Assume one table per entry
+               CyTable table = reader.getCyTables()[0];
+               
+               Matcher matcher = NETWORK_TABLE_PATTERN.matcher(entryName);
+               if (matcher.matches()) {
+                       String networkName = matcher.group(1);
+                       String namespace = matcher.group(2);
+                       Class<?> type = Class.forName(matcher.group(3));
+                       String title = URLDecoder.decode(matcher.group(3), 
"UTF-8");
+                       table.setTitle(title);
+                       CyTableMetadataBuilder builder = new 
CyTableMetadataBuilder()
+                               .setCyTable(table)
+                               .setNamespace(namespace)
+                               .setType(type);
+                       Set<CyTableMetadataBuilder> builders = 
networkTableMap.get(networkName);
+                       if (builders == null) {
+                               builders = new 
HashSet<CyTableMetadataBuilder>();
+                               networkTableMap.put(networkName, builders);
+                       }
+                       builders.add(builder);
+                       return;
+               }
+               
+               matcher = GLOBAL_TABLE_PATTERN.matcher(entryName);
+               if (matcher.matches()) {
+                       String title = URLDecoder.decode(matcher.group(1), 
"UTF-8");
+                       table.setTitle(title);
+                       Set<CyNetwork> networks = Collections.emptySet();
+                       CyTableMetadataBuilder builder = new 
CyTableMetadataBuilder()
+                               .setCyTable(table)
+                               .setNetworks(networks);
+                       tableMetadata.add(builder.build());
+               }
+       }
+
        private void extractNetwork(InputStream is, String entryName) throws 
Exception {
            // Get the current state of the style builder switch
            Properties prop = properties.getProperties();

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkReader.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkReader.java
      2011-06-14 02:02:32 UTC (rev 25739)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/xgmml/XGMMLNetworkReader.java
      2011-06-14 15:21:49 UTC (rev 25740)
@@ -109,6 +109,8 @@
 
        private static final Logger logger = 
LoggerFactory.getLogger(XGMMLNetworkReader.class);
 
+       public static final String ORIGINAL_ID_COLUMN = "original_id";
+
        /**
         * Constructor.
         */

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AttributeValueUtil.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AttributeValueUtil.java
      2011-06-14 02:02:32 UTC (rev 25739)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/read/xgmml/handler/AttributeValueUtil.java
      2011-06-14 15:21:49 UTC (rev 25740)
@@ -8,6 +8,7 @@
 import org.cytoscape.io.internal.read.xgmml.ObjectType;
 import org.cytoscape.io.internal.read.xgmml.ObjectTypeMap;
 import org.cytoscape.io.internal.read.xgmml.ParseState;
+import org.cytoscape.io.internal.read.xgmml.XGMMLNetworkReader;
 import org.cytoscape.model.CyColumn;
 import org.cytoscape.model.CyEdge;
 import org.cytoscape.model.CyNetwork;
@@ -358,6 +359,15 @@
         // OK, now actually create it
         CyNode node = manager.network.addNode();
         node.getCyRow().set("name", label);
+        
+        // Add mapping to old id
+        CyRow row = node.getCyRow(CyNetwork.HIDDEN_ATTRS);
+        CyTable table = row.getTable();
+        CyColumn column = 
table.getColumn(XGMMLNetworkReader.ORIGINAL_ID_COLUMN);
+        if (column == null) {
+               table.createColumn(XGMMLNetworkReader.ORIGINAL_ID_COLUMN, 
String.class, true);
+        }
+        row.set(XGMMLNetworkReader.ORIGINAL_ID_COLUMN, id);
         // System.out.println("Created new node("+label+") 
id="+node.getRootGraphIndex());
 
         // Add it our indices

Modified: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/csv/CSVCyWriter.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/csv/CSVCyWriter.java
    2011-06-14 02:02:32 UTC (rev 25739)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/csv/CSVCyWriter.java
    2011-06-14 15:21:49 UTC (rev 25740)
@@ -89,6 +89,7 @@
                        builder.append("mutable");
                }
                values[1] = builder.toString();
+               writer.writeNext(values);
        }
 
        private void writeValues(CSVWriter writer, Collection<CyColumn> 
columns) {

Modified: 
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml
===================================================================
--- 
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml  
    2011-06-14 02:02:32 UTC (rev 25739)
+++ 
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml  
    2011-06-14 15:21:49 UTC (rev 25740)
@@ -196,6 +196,15 @@
         </osgi:service-properties>
     </osgi:service>
 
+       <osgi:service id="sessionTableReaderFactoryService" 
ref="sessionTableReaderFactory"
+        interface="org.cytoscape.io.read.InputStreamTaskFactory">
+        <osgi:service-properties>
+            <entry key="serviceType" value="sessionTableReaderFactory" />
+            <entry key="readerId" value="sessionTableReaderFactory" />
+            <entry key="readerDescription" value="Session Table File Reader" />
+        </osgi:service-properties>
+    </osgi:service>
+
        <osgi:service id="sessionWriterFactoryService" 
ref="sessionWriterFactory"
                interface="org.cytoscape.io.write.CySessionWriterFactory">
        </osgi:service>

Modified: 
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml
===================================================================
--- core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml   
2011-06-14 02:02:32 UTC (rev 25739)
+++ core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml   
2011-06-14 15:21:49 UTC (rev 25740)
@@ -497,6 +497,12 @@
                <constructor-arg ref="readDataManager" />
        </bean>
 
+       <bean id="sessionTableReaderFactory" 
class="org.cytoscape.io.internal.read.datatable.CSVCyReaderFactory">
+               <constructor-arg ref="sessionTableFilter"/>
+               <constructor-arg value="true"/>
+               <constructor-arg ref="cyDataTableFactoryServiceRef"/>
+       </bean>
+       
        <!-- All Reader Managers -->
        
        <bean id="cyNetworkReaderManager"

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