Author: jm
Date: 2012-06-12 12:05:42 -0700 (Tue, 12 Jun 2012)
New Revision: 29534
Added:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/datatable/CyTablesXMLReader.java
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/datatable/CyTablesXMLWriter.java
core3/impl/trunk/io-impl/impl/src/main/resources/xsd/cytables.xsd
Removed:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/CyTableSessionStateSerializer.java
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/VirtualColumnSerializer.java
core3/impl/trunk/io-impl/impl/src/main/protobuf/
Modified:
core3/gui-distribution/trunk/features/src/main/resources/features.xml
core3/impl/trunk/io-impl/impl/pom.xml
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/session-impl/integration-test/src/test/java/org/cytoscape/session/BasicIntegrationTest.java
core3/impl/trunk/session-impl/integration-test/src/test/resources/testData/session3x/smallSession.cys
Log:
Fixes #1057: Re-did CyTable virtual column serialization to use JAXB since
protostuff's XML serialization is messed up.
Added JAXB to BasicIntegrationTest because of runtime ClassDefNotFound errors
(which is weird because Cysession and Vizmap use JAXB too but work fine as-is)
Modified: core3/gui-distribution/trunk/features/src/main/resources/features.xml
===================================================================
--- core3/gui-distribution/trunk/features/src/main/resources/features.xml
2012-06-12 16:56:52 UTC (rev 29533)
+++ core3/gui-distribution/trunk/features/src/main/resources/features.xml
2012-06-12 19:05:42 UTC (rev 29534)
@@ -54,8 +54,6 @@
<bundle start-level="103">mvn:commons-io/commons-io/2.1</bundle>
<bundle start-level="103">wrap:mvn:org.json/org.json/chargebee-1.0</bundle>
<bundle
start-level="103">mvn:org.apache.httpcomponents/httpcore-osgi/4.2</bundle>
- <bundle
start-level="103">mvn:cytoscape-temp/protostuff-core-json-osgi/1.0.7</bundle>
- <bundle
start-level="103">mvn:org.codehaus.jackson/jackson-core-lgpl/1.9.7</bundle>
<bundle start-level="104">mvn:psidev.psi.mi/psi25-xml/1.7.10</bundle>
<bundle
start-level="104">mvn:cytoscape-temp/uk.ac.ebi.enfin.mi.cluster.micluster/1.6</bundle>
Modified: core3/impl/trunk/io-impl/impl/pom.xml
===================================================================
--- core3/impl/trunk/io-impl/impl/pom.xml 2012-06-12 16:56:52 UTC (rev
29533)
+++ core3/impl/trunk/io-impl/impl/pom.xml 2012-06-12 19:05:42 UTC (rev
29534)
@@ -83,88 +83,25 @@
<forceRegenerate>true</forceRegenerate>
</configuration>
</execution>
+ <execution>
+ <id>cytables</id>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ <configuration>
+
<schemaDirectory>src/main/resources/xsd</schemaDirectory>
+ <schemaIncludes>
+
<include>cytables.xsd</include>
+ </schemaIncludes>
+
<generatePackage>org.cytoscape.io.internal.util.cytables.model</generatePackage>
+ <verbose>true</verbose>
+
<encoding>UTF-8</encoding>
+
<removeOldOutput>false</removeOldOutput>
+
<forceRegenerate>true</forceRegenerate>
+ </configuration>
+ </execution>
</executions>
</plugin>
- <plugin>
- <groupId>com.dyuproject.protostuff</groupId>
- <artifactId>protostuff-maven-plugin</artifactId>
- <version>1.0.7</version>
- <configuration>
- <protoModules>
- <protoModule>
-
<source>src/main/protobuf/CyTableSessionState.proto</source>
-
<outputDir>target/generated-sources/proto</outputDir>
- <output>java_bean</output>
- <encoding>UTF-8</encoding>
- <options>
- <property>
- <name>separate_schema</name>
- </property>
- <property>
- <name>generate_field_map</name>
- </property>
- </options>
- </protoModule>
- </protoModules>
- </configuration>
- <executions>
- <execution>
- <id>generate-sources</id>
- <phase>generate-sources</phase>
- <goals>
- <goal>compile</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
</plugins>
- <pluginManagement>
- <plugins>
- <!--This plugin's configuration is used to
store Eclipse m2e settings only. It has no influence on the Maven build
itself.-->
- <plugin>
- <groupId>org.eclipse.m2e</groupId>
-
<artifactId>lifecycle-mapping</artifactId>
- <version>1.0.0</version>
- <configuration>
- <lifecycleMappingMetadata>
- <pluginExecutions>
-
<pluginExecution>
-
<pluginExecutionFilter>
-
<groupId>
-
com.dyuproject.protostuff
-
</groupId>
-
<artifactId>
-
protostuff-maven-plugin
-
</artifactId>
-
<versionRange>
-
[1.0.7,)
-
</versionRange>
-
<goals>
-
<goal>compile</goal>
-
</goals>
-
</pluginExecutionFilter>
- <action>
-
<ignore></ignore>
-
</action>
-
</pluginExecution>
- </pluginExecutions>
- </lifecycleMappingMetadata>
- </configuration>
- </plugin>
- </plugins>
- </pluginManagement>
</build>
-
- <dependencies>
- <dependency>
- <groupId>cytoscape-temp</groupId>
- <artifactId>protostuff-core-json-osgi</artifactId>
- <version>1.0.7</version>
- </dependency>
- <dependency>
- <groupId>org.codehaus.jackson</groupId>
- <artifactId>jackson-core-lgpl</artifactId>
- <version>1.9.7</version>
- </dependency>
- </dependencies>
</project>
Added:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/datatable/CyTablesXMLReader.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/datatable/CyTablesXMLReader.java
(rev 0)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/datatable/CyTablesXMLReader.java
2012-06-12 19:05:42 UTC (rev 29534)
@@ -0,0 +1,36 @@
+package org.cytoscape.io.internal.read.datatable;
+
+import java.io.InputStream;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+
+import org.cytoscape.io.internal.util.cytables.model.CyTables;
+import org.cytoscape.io.internal.util.cytables.model.ObjectFactory;
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskMonitor;
+
+public class CyTablesXMLReader extends AbstractTask {
+ private static String CYTABLES_PACKAGE =
CyTables.class.getPackage().getName();
+
+ private InputStream inputStream;
+ private CyTables cyTables;
+
+ public CyTablesXMLReader(InputStream inputStream) {
+ this.inputStream = inputStream;
+ }
+
+ public CyTables getCyTables() {
+ return cyTables;
+ }
+
+ @Override
+ public void run(TaskMonitor taskMonitor) throws Exception {
+ JAXBContext jaxbContext = JAXBContext.newInstance(CYTABLES_PACKAGE,
getClass().getClassLoader());
+ taskMonitor.setProgress(0.33);
+ Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+ taskMonitor.setProgress(0.67);
+ cyTables = (CyTables) unmarshaller.unmarshal(inputStream);
+ taskMonitor.setProgress(1);
+ }
+}
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-06-12 16:56:52 UTC (rev 29533)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/read/session/Cy3SessionReaderImpl.java
2012-06-12 19:05:42 UTC (rev 29534)
@@ -29,7 +29,6 @@
import static org.cytoscape.io.internal.util.session.SessionUtil.APPS_FOLDER;
-import static
org.cytoscape.io.internal.util.session.SessionUtil.CYTABLE_METADATA_FILE;
import static
org.cytoscape.io.internal.util.session.SessionUtil.CYTABLE_STATE_FILE;
import static
org.cytoscape.io.internal.util.session.SessionUtil.NETWORKS_FOLDER;
import static
org.cytoscape.io.internal.util.session.SessionUtil.NETWORK_VIEWS_FOLDER;
@@ -41,12 +40,10 @@
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -60,15 +57,13 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.cytoscape.io.internal.model.CyTableSessionState;
-import org.cytoscape.io.internal.model.CyTableSessionState.VirtualColumn;
import org.cytoscape.io.internal.read.datatable.CSVCyReaderFactory;
+import org.cytoscape.io.internal.read.datatable.CyTablesXMLReader;
import
org.cytoscape.io.internal.read.session.CyTableMetadataImpl.CyTableMetadataBuilder;
import org.cytoscape.io.internal.read.xgmml.XGMMLNetworkViewReader;
import org.cytoscape.io.internal.util.ReadCache;
-import org.cytoscape.io.internal.util.session.CyTableSessionStateSerializer;
+import org.cytoscape.io.internal.util.cytables.model.VirtualColumn;
import org.cytoscape.io.internal.util.session.SessionUtil;
-import org.cytoscape.io.internal.util.session.VirtualColumnSerializer;
import org.cytoscape.io.read.CyNetworkReader;
import org.cytoscape.io.read.CyNetworkReaderManager;
import org.cytoscape.io.read.CyPropertyReader;
@@ -99,7 +94,6 @@
* @see org.cytoscape.io.internal.read.session.Cy2SessionReaderImpl
* @see org.cytoscape.io.internal.write.session.SessionWriterImpl
*/
-@SuppressWarnings("deprecation")
public class Cy3SessionReaderImpl extends AbstractSessionReader {
private static final String TEMP_DIR = "java.io.tmpdir";
@@ -129,6 +123,7 @@
private boolean networksExtracted;
+
public Cy3SessionReaderImpl(final InputStream sourceInputStream,
final ReadCache
cache,
final
CyNetworkReaderManager networkReaderMgr,
@@ -180,10 +175,6 @@
}
} else if (entryName.endsWith(TABLE_EXT)) {
extractTable(is, entryName);
- } else if (entryName.endsWith(CYTABLE_METADATA_FILE)) {
- // This provides support for sessions made
using M4 and
- // earlier. We should remove it eventually.
- extractLegacyCyTableMetadata(is, entryName);
} else if (entryName.endsWith(CYTABLE_STATE_FILE)) {
extractCyTableSessionState(is, entryName);
} else if (!entryName.endsWith(VERSION_EXT)) {
@@ -233,32 +224,12 @@
}
private void extractCyTableSessionState(InputStream is, String
entryName) throws IOException {
- CyTableSessionStateSerializer serializer = new
CyTableSessionStateSerializer();
- CyTableSessionState state = serializer.parse(is);
- virtualColumns = state.getVirtualColumnsList();
- }
-
- @Deprecated
- private void extractLegacyCyTableMetadata(InputStream tmpIs, String
entryName) throws IOException {
- BufferedReader reader = new BufferedReader(new
InputStreamReader(tmpIs, "UTF-8"));
- virtualColumns = new ArrayList<VirtualColumn>();
-
+ CyTablesXMLReader reader = new CyTablesXMLReader(is);
try {
- String line = reader.readLine();
- while (line != null) {
- VirtualColumnSerializer serializer = new
VirtualColumnSerializer(line);
- virtualColumns.add(new VirtualColumn(
- serializer.getName(),
- serializer.getSourceColumn(),
- serializer.getSourceTable(),
- serializer.getSourceJoinKey(),
- serializer.getTargetTable(),
- serializer.getTargetJoinKey(),
- serializer.isImmutable()));
- line = reader.readLine();
- }
- } finally {
- reader.close();
+ reader.run(taskMonitor);
+ virtualColumns =
reader.getCyTables().getVirtualColumns().getVirtualColumn();
+ } catch (Exception e) {
+ throw new IOException(e);
}
}
@@ -469,7 +440,7 @@
columnData.getSourceColumn(),
sourceTable,
columnData.getTargetJoinKey(),
-
columnData.getIsImmutable());
+
columnData.isImmutable());
}
}
}
Deleted:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/CyTableSessionStateSerializer.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/CyTableSessionStateSerializer.java
2012-06-12 16:56:52 UTC (rev 29533)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/CyTableSessionStateSerializer.java
2012-06-12 19:05:42 UTC (rev 29534)
@@ -1,83 +0,0 @@
-package org.cytoscape.io.internal.util.session;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.codehaus.jackson.JsonGenerator;
-import org.cytoscape.io.internal.model.CyTableSessionState;
-import org.cytoscape.io.internal.model.CyTableSessionState.VirtualColumn;
-import org.cytoscape.model.CyColumn;
-import org.cytoscape.model.CyTable;
-import org.cytoscape.model.CyTableMetadata;
-import org.cytoscape.model.VirtualColumnInfo;
-import org.cytoscape.session.CySession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.dyuproject.protostuff.JsonIOUtil;
-
-public class CyTableSessionStateSerializer {
- private static final Logger logger =
LoggerFactory.getLogger(CyTableSessionStateSerializer.class);
-
- public void serialize(OutputStream stream, Map<Long, String>
tableFilenamesBySUID, CySession session) throws IOException {
- CyTableSessionState model = buildModel(stream,
tableFilenamesBySUID, session);
- JsonGenerator generator = JsonIOUtil.newJsonGenerator(stream,
new byte[1024*100]);
- generator.useDefaultPrettyPrinter();
-
- try {
- JsonIOUtil.writeTo(generator, model,
CyTableSessionState.getSchema(), false);
- } finally {
- generator.flush();
- }
- }
-
- public CyTableSessionState parse(InputStream stream) throws IOException
{
- CyTableSessionState model = new CyTableSessionState();
- JsonIOUtil.mergeFrom(stream, model,
CyTableSessionState.getSchema(), false);
- return model;
- }
-
- CyTableSessionState buildModel(OutputStream stream, Map<Long, String>
tableFilenamesBySUID, CySession session) {
- List<VirtualColumn> virtualColumns = new
ArrayList<VirtualColumn>();
- for (CyTableMetadata metadata : session.getTables()) {
- CyTable table = metadata.getTable();
- String targetTable =
tableFilenamesBySUID.get(table.getSUID());
-
- if (targetTable == null) {
- continue;
- }
-
- for (CyColumn column : table.getColumns()) {
- VirtualColumnInfo info =
column.getVirtualColumnInfo();
-
- if (!info.isVirtual()) {
- continue;
- }
-
- String sourceTable =
tableFilenamesBySUID.get(info.getSourceTable().getSUID());
-
- if (sourceTable == null) {
- logger.warn("Cannot serialize virtual
column \"" + column.getName() + "\" of \"" + targetTable
- + "\" because the
source table is null.");
- continue;
- }
-
- virtualColumns.add(new
VirtualColumn(column.getName(),
-
info.getSourceColumn(),
- sourceTable,
-
info.getSourceJoinKey(),
- targetTable,
-
info.getTargetJoinKey(),
-
info.isImmutable()));
- }
- }
-
- CyTableSessionState state = new CyTableSessionState();
- state.setVirtualColumnsList(virtualColumns);
- return state;
- }
-}
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-06-12 16:56:52 UTC (rev 29533)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/SessionUtil.java
2012-06-12 19:05:42 UTC (rev 29534)
@@ -56,14 +56,8 @@
public static final String CYSESSION_FILE = "cysession.xml";
public static final String VIZMAP_PROPS_FILE = "vizmap.props";
public static final String VIZMAP_XML_FILE = "vizmap.xml";
- public static final String CYTABLE_STATE_FILE = "cytables.json";
+ public static final String CYTABLE_STATE_FILE = "cytables.xml";
- @Deprecated
- /**
- * Replaced by CYTABLE_STATE_FILE.
- */
- public static final String CYTABLE_METADATA_FILE = "cytable.metadata";
-
public static final String PROPERTIES_EXT = ".props";
public static final String TABLE_EXT = ".cytable";
public static final String VERSION_EXT = ".version";
Deleted:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/VirtualColumnSerializer.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/VirtualColumnSerializer.java
2012-06-12 16:56:52 UTC (rev 29533)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/util/session/VirtualColumnSerializer.java
2012-06-12 19:05:42 UTC (rev 29534)
@@ -1,109 +0,0 @@
-package org.cytoscape.io.internal.util.session;
-
-import java.io.PrintWriter;
-
-@Deprecated
-public class VirtualColumnSerializer {
- String name;
- String sourceTable;
- String targetTable;
- String sourceColumn;
- String sourceJoinKey;
- String targetJoinKey;
- boolean isImmutable;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getSourceTable() {
- return sourceTable;
- }
-
- public void setSourceTable(String sourceTable) {
- this.sourceTable = sourceTable;
- }
-
- public String getTargetTable() {
- return targetTable;
- }
-
- public void setTargetTable(String targetTable) {
- this.targetTable = targetTable;
- }
-
- public String getSourceColumn() {
- return sourceColumn;
- }
-
- public void setSourceColumn(String sourceColumn) {
- this.sourceColumn = sourceColumn;
- }
-
- public String getSourceJoinKey() {
- return sourceJoinKey;
- }
-
- public void setSourceJoinKey(String sourceJoinKey) {
- this.sourceJoinKey = sourceJoinKey;
- }
-
- public String getTargetJoinKey() {
- return targetJoinKey;
- }
-
- public void setTargetJoinKey(String targetJoinKey) {
- this.targetJoinKey = targetJoinKey;
- }
-
- public boolean isImmutable() {
- return isImmutable;
- }
-
- public void setImmutable(boolean isImmutable) {
- this.isImmutable = isImmutable;
- }
-
- public VirtualColumnSerializer(String name, String sourceTable, String
targetTable, String sourceColumn, String sourceJoinKey, String targetJoinKey,
boolean isImmutable) {
- this.name = name;
- this.sourceTable = sourceTable;
- this.targetTable = targetTable;
- this.sourceColumn = sourceColumn;
- this.sourceJoinKey = sourceJoinKey;
- this.targetJoinKey = targetJoinKey;
- this.isImmutable = isImmutable;
- }
-
- public VirtualColumnSerializer(String line) {
- String[] data = line.split("\t");
- targetTable = data[0];
- name = SessionUtil.unescape(data[1]);
- sourceTable = data[2];
- sourceColumn = SessionUtil.unescape(data[3]);
- sourceJoinKey = SessionUtil.unescape(data[4]);
- targetJoinKey = SessionUtil.unescape(data[5]);
- isImmutable = data[6].equals("true");
- }
-
- public void serialize(PrintWriter writer) {
- writer.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
- targetTable,
- SessionUtil.escape(name),
- sourceTable,
- SessionUtil.escape(sourceColumn),
- SessionUtil.escape(sourceJoinKey),
- SessionUtil.escape(targetJoinKey),
- String.valueOf(isImmutable));
-
- }
-
- @Override
- public String toString() {
- return "VirtualColumnSerializer [name=" + name + ",
sourceTable=" + sourceTable + ", targetTable="
- + targetTable + ", sourceColumn=" +
sourceColumn + "]";
- }
-}
\ No newline at end of file
Added:
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/datatable/CyTablesXMLWriter.java
===================================================================
---
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/datatable/CyTablesXMLWriter.java
(rev 0)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/datatable/CyTablesXMLWriter.java
2012-06-12 19:05:42 UTC (rev 29534)
@@ -0,0 +1,87 @@
+package org.cytoscape.io.internal.write.datatable;
+
+import java.io.OutputStream;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+
+import org.cytoscape.io.internal.util.cytables.model.CyTables;
+import org.cytoscape.io.internal.util.cytables.model.VirtualColumn;
+import org.cytoscape.io.internal.util.cytables.model.VirtualColumns;
+import org.cytoscape.io.write.CyWriter;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.model.CyTableMetadata;
+import org.cytoscape.model.VirtualColumnInfo;
+import org.cytoscape.work.AbstractTask;
+import org.cytoscape.work.TaskMonitor;
+
+public class CyTablesXMLWriter extends AbstractTask implements CyWriter {
+
+ private final Set<CyTableMetadata> tables;
+ private final OutputStream outputStream;
+ private Map<Long, String> tableFileNamesBySUID;
+
+ public CyTablesXMLWriter(Set<CyTableMetadata> tables, Map<Long, String>
tableFileNamesBySUID, OutputStream outputStream) {
+ this.tables = tables;
+ this.outputStream = outputStream;
+ this.tableFileNamesBySUID = tableFileNamesBySUID;
+ }
+
+ @Override
+ public void run(TaskMonitor taskMonitor) throws Exception {
+ final JAXBContext jc =
JAXBContext.newInstance(CyTables.class.getPackage().getName(),
this.getClass().getClassLoader());
+ Marshaller m = jc.createMarshaller();
+ taskMonitor.setProgress(0.25);
+ m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+ taskMonitor.setProgress(0.5);
+
+ CyTables model = buildModel();
+ taskMonitor.setProgress(0.75);
+
+ m.marshal(model, outputStream);
+ taskMonitor.setProgress(1.0);
+ }
+
+ private CyTables buildModel() {
+ CyTables model = new CyTables();
+ VirtualColumns virtualColumns = new VirtualColumns();
+ model.setVirtualColumns(virtualColumns);
+ List<VirtualColumn> columns = virtualColumns.getVirtualColumn();
+ for (CyTableMetadata metadata : tables) {
+ CyTable table = metadata.getTable();
+
+ String targetTable =
tableFileNamesBySUID.get(table.getSUID());
+ if (targetTable == null) {
+ continue;
+ }
+
+ for (CyColumn cyColumn : table.getColumns()) {
+ VirtualColumnInfo info =
cyColumn.getVirtualColumnInfo();
+ if (!info.isVirtual()) {
+ continue;
+ }
+
+ String sourceTable =
tableFileNamesBySUID.get(info.getSourceTable().getSUID());
+ if (sourceTable == null) {
+ // log this
+ continue;
+ }
+
+ VirtualColumn column = new VirtualColumn();
+ column.setName(cyColumn.getName());
+ column.setSourceColumn(info.getSourceColumn());
+ column.setSourceTable(sourceTable);
+
column.setSourceJoinKey(info.getSourceJoinKey());
+ column.setTargetTable(targetTable);
+
column.setTargetJoinKey(info.getTargetJoinKey());
+ columns.add(column);
+ }
+ }
+ return model;
+ }
+
+}
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-06-12 16:56:52 UTC (rev 29533)
+++
core3/impl/trunk/io-impl/impl/src/main/java/org/cytoscape/io/internal/write/session/SessionWriterImpl.java
2012-06-12 19:05:42 UTC (rev 29534)
@@ -62,7 +62,7 @@
import java.util.zip.ZipOutputStream;
import org.cytoscape.io.CyFileFilter;
-import org.cytoscape.io.internal.util.session.CyTableSessionStateSerializer;
+import org.cytoscape.io.internal.write.datatable.CyTablesXMLWriter;
import org.cytoscape.io.internal.util.session.SessionUtil;
import org.cytoscape.io.internal.write.xgmml.XGMMLWriter;
import org.cytoscape.io.write.CyNetworkViewWriterManager;
@@ -172,7 +172,8 @@
taskMonitor.setStatusMessage("Zip tables...");
zipTables();
taskMonitor.setProgress(0.5);
- zipVirtualColumns();
+ taskMonitor.setStatusMessage("Zip table properties...");
+ zipTableProperties();
taskMonitor.setProgress(0.6);
taskMonitor.setStatusMessage("Zip Vizmap...");
zipVizmap();
@@ -196,17 +197,6 @@
zos.closeEntry();
}
- private void zipVirtualColumns() throws IOException {
- zos.putNextEntry(new ZipEntry(sessionDir + TABLES_FOLDER +
CYTABLE_STATE_FILE));
-
- CyTableSessionStateSerializer serializer = new
CyTableSessionStateSerializer();
- try {
- serializer.serialize(zos, tableFilenamesBySUID,
session);
- } finally {
- zos.closeEntry();
- }
- }
-
/**
* Writes the vizmap.props file to the session zip.
*/
@@ -404,4 +394,14 @@
}
}
}
+
+ private void zipTableProperties() throws Exception {
+ zos.putNextEntry(new ZipEntry(sessionDir + TABLES_FOLDER +
CYTABLE_STATE_FILE));
+ try {
+ CyTablesXMLWriter writer = new
CyTablesXMLWriter(session.getTables(), tableFilenamesBySUID, zos);
+ writer.run(taskMonitor);
+ } finally {
+ zos.closeEntry();
+ }
+ }
}
Added: core3/impl/trunk/io-impl/impl/src/main/resources/xsd/cytables.xsd
===================================================================
--- core3/impl/trunk/io-impl/impl/src/main/resources/xsd/cytables.xsd
(rev 0)
+++ core3/impl/trunk/io-impl/impl/src/main/resources/xsd/cytables.xsd
2012-06-12 19:05:42 UTC (rev 29534)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
+ <xs:element name="cyTables">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" ref="virtualColumns"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="virtualColumns">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="virtualColumn"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="virtualColumn">
+ <xs:complexType>
+ <xs:attribute name="name" use="required" type="xs:string"/>
+ <xs:attribute name="sourceColumn" use="required" type="xs:string"/>
+ <xs:attribute name="sourceTable" use="required" type="xs:string"/>
+ <xs:attribute name="sourceJoinKey" use="required" type="xs:string"/>
+ <xs:attribute name="targetTable" use="required" type="xs:string"/>
+ <xs:attribute name="targetJoinKey" use="required" type="xs:string"/>
+ <xs:attribute name="immutable" use="required" type="xs:boolean"/>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
Modified:
core3/impl/trunk/session-impl/integration-test/src/test/java/org/cytoscape/session/BasicIntegrationTest.java
===================================================================
---
core3/impl/trunk/session-impl/integration-test/src/test/java/org/cytoscape/session/BasicIntegrationTest.java
2012-06-12 16:56:52 UTC (rev 29533)
+++
core3/impl/trunk/session-impl/integration-test/src/test/java/org/cytoscape/session/BasicIntegrationTest.java
2012-06-12 19:05:42 UTC (rev 29534)
@@ -17,6 +17,7 @@
import static org.junit.Assert.*;
import static org.junit.Assert.assertNotNull;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
import static org.ops4j.pax.exam.CoreOptions.felix;
import static org.ops4j.pax.exam.CoreOptions.junitBundles;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
@@ -121,6 +122,7 @@
String implBundleVersion =
System.getProperty("cytoscape.impl.version");
return options(
+
systemProperty("org.osgi.framework.system.packages.extra").value("com.sun.xml.internal.bind"),
junitBundles(),
// Use Felix as runtime
@@ -150,8 +152,10 @@
mavenBundle().groupId("cytoscape-temp").artifactId("org.swinglabs.swingx").version("1.6.1").startLevel(3),
mavenBundle().groupId("cytoscape-temp").artifactId("freehep-export").version("2.1.1").startLevel(3),
mavenBundle().groupId("cytoscape-temp").artifactId("freehep-util").version("2.0.2").startLevel(3),
-
mavenBundle().groupId("cytoscape-temp").artifactId("protostuff-core-json-osgi").version("1.0.7").startLevel(3),
-
mavenBundle().groupId("org.codehaus.jackson").artifactId("jackson-core-lgpl").version("1.9.7").startLevel(3),
+
mavenBundle().groupId("org.apache.servicemix.specs").artifactId("org.apache.servicemix.specs.jaxb-api-2.1").version("1.2.0").startLevel(3),
+
mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.jaxb-impl").version("2.1.6_1").startLevel(3),
+
mavenBundle().groupId("javax.activation").artifactId("com.springsource.javax.activation").version("1.1.1").startLevel(3),
+
mavenBundle().groupId("javax.xml.stream").artifactId("com.springsource.javax.xml.stream").version("1.0.1").startLevel(3),
// API bundles
mavenBundle().groupId("org.cytoscape").artifactId("event-api").version(apiBundleVersion).startLevel(5),
Modified:
core3/impl/trunk/session-impl/integration-test/src/test/resources/testData/session3x/smallSession.cys
===================================================================
(Binary files differ)
--
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.