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.