Author: jm
Date: 2011-05-04 09:33:36 -0700 (Wed, 04 May 2011)
New Revision: 24917

Added:
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/AbstractCyTableWriterFactory.java
   
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/csv/
   
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/CSVTableWriterFactory.java
Modified:
   core3/gui-distribution/trunk/startlevel-3/pom.xml
   core3/io-impl/trunk/pom.xml
   
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:
Implemented table serialization to Excel CSV format
List attributes are saved as multiline cells

Modified: core3/gui-distribution/trunk/startlevel-3/pom.xml
===================================================================
--- core3/gui-distribution/trunk/startlevel-3/pom.xml   2011-05-04 14:16:26 UTC 
(rev 24916)
+++ core3/gui-distribution/trunk/startlevel-3/pom.xml   2011-05-04 16:33:36 UTC 
(rev 24917)
@@ -108,6 +108,11 @@
                        <artifactId>l2fprod-common-fontchooser</artifactId>
                        <version>7.3</version>
                </dependency>
+               <dependency>
+                       <groupId>cytoscape-temp</groupId>
+                       <artifactId>opencsv</artifactId>
+                       <version>2.1</version>
+               </dependency>
 
                <!-- Cytoscape API Bundles -->
                <dependency>

Modified: core3/io-impl/trunk/pom.xml
===================================================================
--- core3/io-impl/trunk/pom.xml 2011-05-04 14:16:26 UTC (rev 24916)
+++ core3/io-impl/trunk/pom.xml 2011-05-04 16:33:36 UTC (rev 24917)
@@ -114,11 +114,6 @@
                </dependency>
                <dependency>
                        <groupId>org.cytoscape</groupId>
-                       <artifactId>io-api</artifactId>
-                       <version>3.0.0-alpha3-SNAPSHOT</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.cytoscape</groupId>
                        <artifactId>property-api</artifactId>
                        <version>3.0.0-alpha4-SNAPSHOT</version>
                </dependency>
@@ -155,6 +150,11 @@
                        <artifactId>jaxb-impl</artifactId>
                        <version>2.2.1</version>
                </dependency>
+               <dependency>
+                       <groupId>cytoscape-temp</groupId>
+                       <artifactId>opencsv</artifactId>
+                       <version>2.1</version>
+               </dependency>
 
                <!-- For Testing -->
                <dependency>

Added: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/AbstractCyTableWriterFactory.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/AbstractCyTableWriterFactory.java
                               (rev 0)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/AbstractCyTableWriterFactory.java
       2011-05-04 16:33:36 UTC (rev 24917)
@@ -0,0 +1,34 @@
+package org.cytoscape.io.internal.write.datatable;
+
+import java.io.OutputStream;
+
+import org.cytoscape.io.CyFileFilter;
+import org.cytoscape.io.write.CyTableWriterFactory;
+import org.cytoscape.model.CyTable;
+
+public abstract class AbstractCyTableWriterFactory implements 
CyTableWriterFactory {
+
+       protected OutputStream outputStream;
+       protected CyTable table;
+       private CyFileFilter fileFilter;
+
+       protected AbstractCyTableWriterFactory(CyFileFilter fileFilter) {
+               this.fileFilter = fileFilter;
+       }
+       
+       @Override
+       public void setOutputStream(OutputStream outputStream) {
+               this.outputStream = outputStream;
+       }
+
+       @Override
+       public CyFileFilter getCyFileFilter() {
+               return fileFilter;
+       }
+
+       @Override
+       public void setTable(CyTable table) {
+               this.table = table;
+       }
+
+}


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

Added: 
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
                            (rev 0)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/csv/CSVCyWriter.java
    2011-05-04 16:33:36 UTC (rev 24917)
@@ -0,0 +1,94 @@
+package org.cytoscape.io.internal.write.datatable.csv;
+
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.cytoscape.io.write.CyWriter;
+import org.cytoscape.model.CyColumn;
+import org.cytoscape.model.CyRow;
+import org.cytoscape.model.CyTable;
+import org.cytoscape.work.TaskMonitor;
+
+import au.com.bytecode.opencsv.CSVWriter;
+
+public class CSVCyWriter implements CyWriter {
+
+       private OutputStream outputStream;
+       private CyTable table;
+
+       public CSVCyWriter(OutputStream outputStream, CyTable table) {
+               this.outputStream = outputStream;
+               this.table = table;
+       }
+
+       @Override
+       public void cancel() {
+       }
+
+       @Override
+       public void run(TaskMonitor taskMonitor) throws Exception {
+               CSVWriter writer = new CSVWriter(new 
OutputStreamWriter(outputStream), ',', '"', "\r\n");
+               try {
+                       List<CyColumn> columns = new 
ArrayList<CyColumn>(table.getColumns());
+                       Collections.sort(columns, new Comparator<CyColumn>() {
+                               @Override
+                               public int compare(CyColumn o1, CyColumn o2) {
+                                       return 
o1.getName().compareToIgnoreCase(o2.getName());
+                               }
+                       });
+                       writeHeader(writer, columns);
+                       writeValues(writer, columns);
+               } finally {
+                       writer.close();
+               }
+       }
+       
+       private void writeValues(CSVWriter writer, Collection<CyColumn> 
columns) {
+               for (CyRow row : table.getAllRows()) {
+                       String[] values = new String[columns.size()];
+                       int index = 0;
+                       for (CyColumn column : columns) {
+                               Class<?> type = column.getType();
+                               if (type.equals(List.class)) {
+                                       StringBuilder builder = new 
StringBuilder();
+                                       boolean first = true;
+                                       List<?> list = 
row.getList(column.getName(), column.getListElementType());
+                                       if (list != null) {
+                                               for (Object value : list) {
+                                                       if (!first) {
+                                                               
builder.append("\r");
+                                                       }
+                                                       if (value != null) {
+                                                               
builder.append(value);
+                                                       }
+                                                       first = false;
+                                               }
+                                               values[index] = 
builder.toString();
+                                       }
+                               } else {
+                                       Object value = 
row.get(column.getName(), type);
+                                       if (value != null) {
+                                               values[index] = 
value.toString();
+                                       } else {
+                                               values[index] = null;
+                                       }
+                               }
+                               index++;
+                       }
+                       writer.writeNext(values);
+               }
+       }
+
+       private void writeHeader(CSVWriter writer, List<CyColumn> columns) {
+               String[] values = new String[columns.size()];
+               for (int i = 0; i < columns.size(); i++) {
+                       values[i] = columns.get(i).getName();
+               }
+               writer.writeNext(values);
+       }
+}


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

Added: 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/csv/CSVTableWriterFactory.java
===================================================================
--- 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/csv/CSVTableWriterFactory.java
                          (rev 0)
+++ 
core3/io-impl/trunk/src/main/java/org/cytoscape/io/internal/write/datatable/csv/CSVTableWriterFactory.java
  2011-05-04 16:33:36 UTC (rev 24917)
@@ -0,0 +1,17 @@
+package org.cytoscape.io.internal.write.datatable.csv;
+
+import org.cytoscape.io.CyFileFilter;
+import org.cytoscape.io.internal.write.datatable.AbstractCyTableWriterFactory;
+import org.cytoscape.io.write.CyWriter;
+
+public class CSVTableWriterFactory extends AbstractCyTableWriterFactory {
+
+       public CSVTableWriterFactory(CyFileFilter fileFilter) {
+               super(fileFilter);
+       }
+       
+       @Override
+       public CyWriter getWriterTask() {
+               return new CSVCyWriter(outputStream, table);
+       }
+}


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

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-05-04 14:16:26 UTC (rev 24916)
+++ 
core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context-osgi.xml  
    2011-05-04 16:33:36 UTC (rev 24917)
@@ -186,6 +186,10 @@
                interface="org.cytoscape.io.write.CyPropertyWriterFactory">
        </osgi:service>
 
+       <osgi:service id="csvTableWriterFactoryService" 
ref="csvTableWriterFactory"
+               interface="org.cytoscape.io.write.CyTableWriterFactory">
+       </osgi:service>
+
        <osgi:service id="streamUtilService" ref="streamUtil"
                interface="org.cytoscape.io.util.StreamUtil">
        </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-05-04 14:16:26 UTC (rev 24916)
+++ core3/io-impl/trunk/src/main/resources/META-INF/spring/bundle-context.xml   
2011-05-04 16:33:36 UTC (rev 24917)
@@ -233,6 +233,24 @@
                </constructor-arg>
        </bean>
        
+       <bean id="csvFilter" class="org.cytoscape.io.BasicCyFileFilter">
+               <constructor-arg index="0">
+                       <set>
+                               <value>csv</value>
+                       </set>
+               </constructor-arg>
+               <constructor-arg index="1">
+                       <set>
+                               <value>text/plain</value>
+                       </set>
+               </constructor-arg>
+               <constructor-arg value="CSV file" />
+               <constructor-arg type="org.cytoscape.io.DataCategory" 
value="TABLE" />
+               <constructor-arg type="org.cytoscape.io.util.StreamUtil">
+                       <ref bean="streamUtil"/>
+               </constructor-arg>
+       </bean>
+
        <!-- Utility for Stream/Proxy management -->
        <bean id="readUtil" class="org.cytoscape.io.internal.util.ReadUtils">
                <constructor-arg ref="streamUtil" />
@@ -292,6 +310,10 @@
                <constructor-arg ref="propertiesFilter"/>
        </bean>
 
+       <bean id="csvTableWriterFactory" 
class="org.cytoscape.io.internal.write.datatable.csv.CSVTableWriterFactory">
+               <constructor-arg ref="csvFilter"/>
+       </bean>
+
        <!-- Utilities for XGMML Reader -->
        
        <bean id="objectTypeMap" 
class="org.cytoscape.io.internal.read.xgmml.ObjectTypeMap" />

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