You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by st...@apache.org on 2015/02/17 12:37:11 UTC

[51/70] [abbrv] incubator-taverna-common-activities git commit: taverna-spreadsheet-import-activity/

taverna-spreadsheet-import-activity/


Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/commit/b7e29f54
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/b7e29f54
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/b7e29f54

Branch: refs/heads/master
Commit: b7e29f54e6254c522c5c1ff31b6d4218f2cb2b34
Parents: dbcbadc
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 29 09:32:09 2015 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 29 09:32:09 2015 +0000

----------------------------------------------------------------------
 .gitignore                                      |  24 --
 .travis.yml                                     |   1 -
 README.md                                       |   3 -
 pom.xml                                         | 138 ------
 .../spreadsheet/CSVSpreadsheetReader.java       |  79 ----
 .../spreadsheet/ExcelSpreadsheetReader.java     | 324 ---------------
 .../spreadsheet/ODFSpreadsheetReader.java       | 193 ---------
 .../t2/activities/spreadsheet/Range.java        | 298 -------------
 .../spreadsheet/SpreadsheetEmptyCellPolicy.java |  39 --
 .../spreadsheet/SpreadsheetImportActivity.java  | 358 ----------------
 .../SpreadsheetImportActivityFactory.java       |  95 -----
 .../SpreadsheetImportConfiguration.java         | 416 -------------------
 .../SpreadsheetImportHealthChecker.java         |  61 ---
 .../spreadsheet/SpreadsheetOutputFormat.java    |  37 --
 .../spreadsheet/SpreadsheetReadException.java   |  69 ---
 .../spreadsheet/SpreadsheetReader.java          |  52 ---
 .../spreadsheet/SpreadsheetRowProcessor.java    |  42 --
 .../spreadsheet/SpreadsheetUtils.java           | 128 ------
 .../t2/activities/spreadsheet/package.html      |   3 -
 ...averna.t2.workflowmodel.health.HealthChecker |   1 -
 .../spreadsheetimport-activity-context-osgi.xml |  15 -
 .../spreadsheetimport-activity-context.xml      |  12 -
 src/main/resources/schema.json                  | 126 ------
 .../spreadsheet/CSVSpreadsheetReaderTest.java   | 259 ------------
 .../spreadsheet/ExcelSpreadsheetReaderTest.java | 299 -------------
 .../spreadsheet/ODFSpreadsheetReaderTest.java   | 293 -------------
 .../t2/activities/spreadsheet/RangeTest.java    | 195 ---------
 .../SpreadsheetImportActivityFactoryTest.java   |  75 ----
 .../SpreadsheetImportActivityTest.java          | 186 ---------
 .../SpreadsheetImportConfigurationTest.java     | 265 ------------
 .../SpreadsheetImportHealthCheckerTest.java     |  91 ----
 .../SpreadsheetReadExceptionTest.java           |  38 --
 .../spreadsheet/SpreadsheetUtilsTest.java       |  98 -----
 src/test/resources/test-spreadsheet.csv         |   1 -
 src/test/resources/test-spreadsheet.ods         | Bin 16319 -> 0 bytes
 src/test/resources/test-spreadsheet.xls         | Bin 8192 -> 0 bytes
 src/test/resources/test-spreadsheet.xlsx        | Bin 7300 -> 0 bytes
 taverna-spreadsheet-import-activity/pom.xml     | 138 ++++++
 .../spreadsheet/CSVSpreadsheetReader.java       |  79 ++++
 .../spreadsheet/ExcelSpreadsheetReader.java     | 324 +++++++++++++++
 .../spreadsheet/ODFSpreadsheetReader.java       | 193 +++++++++
 .../t2/activities/spreadsheet/Range.java        | 298 +++++++++++++
 .../spreadsheet/SpreadsheetEmptyCellPolicy.java |  39 ++
 .../spreadsheet/SpreadsheetImportActivity.java  | 358 ++++++++++++++++
 .../SpreadsheetImportActivityFactory.java       |  95 +++++
 .../SpreadsheetImportConfiguration.java         | 416 +++++++++++++++++++
 .../SpreadsheetImportHealthChecker.java         |  61 +++
 .../spreadsheet/SpreadsheetOutputFormat.java    |  37 ++
 .../spreadsheet/SpreadsheetReadException.java   |  69 +++
 .../spreadsheet/SpreadsheetReader.java          |  52 +++
 .../spreadsheet/SpreadsheetRowProcessor.java    |  42 ++
 .../spreadsheet/SpreadsheetUtils.java           | 128 ++++++
 .../t2/activities/spreadsheet/package.html      |   3 +
 ...averna.t2.workflowmodel.health.HealthChecker |   1 +
 .../spreadsheetimport-activity-context-osgi.xml |  15 +
 .../spreadsheetimport-activity-context.xml      |  12 +
 .../src/main/resources/schema.json              | 126 ++++++
 .../spreadsheet/CSVSpreadsheetReaderTest.java   | 259 ++++++++++++
 .../spreadsheet/ExcelSpreadsheetReaderTest.java | 299 +++++++++++++
 .../spreadsheet/ODFSpreadsheetReaderTest.java   | 293 +++++++++++++
 .../t2/activities/spreadsheet/RangeTest.java    | 195 +++++++++
 .../SpreadsheetImportActivityFactoryTest.java   |  75 ++++
 .../SpreadsheetImportActivityTest.java          | 186 +++++++++
 .../SpreadsheetImportConfigurationTest.java     | 265 ++++++++++++
 .../SpreadsheetImportHealthCheckerTest.java     |  91 ++++
 .../SpreadsheetReadExceptionTest.java           |  38 ++
 .../spreadsheet/SpreadsheetUtilsTest.java       |  98 +++++
 .../src/test/resources/test-spreadsheet.csv     |   1 +
 .../src/test/resources/test-spreadsheet.ods     | Bin 0 -> 16319 bytes
 .../src/test/resources/test-spreadsheet.xls     | Bin 0 -> 8192 bytes
 .../src/test/resources/test-spreadsheet.xlsx    | Bin 0 -> 7300 bytes
 71 files changed, 4286 insertions(+), 4314 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index ebe0e5b..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,24 +0,0 @@
-# ignore project files #
-.classpath
-.project
-.settings/
-catalog-v001.xml
-
-# ignore target files #
-target/
-bin/
-build/
-dist/
-apidoc/
-*.swp
-
-# ignore svn files if there
-.svn
-
-# ignore log files #
-*.log
-/logs/*
-*/logs/*
-
-
-

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/.travis.yml
----------------------------------------------------------------------
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index dff5f3a..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1 +0,0 @@
-language: java

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
deleted file mode 100644
index e2ad83c..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Taverna Workflow system Spreadsheet Import Activity: data model and execution implementation
-
-This code was previously hosted at http://taverna.googlecode.com/svn/taverna/engine/net.sf.taverna.t2.activities/

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index 7369bf6..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<groupId>net.sf.taverna</groupId>
-		<artifactId>taverna-parent</artifactId>
-		<version>3.0.1-SNAPSHOT</version>
-	</parent>
-	<groupId>net.sf.taverna.t2.activities</groupId>
-	<artifactId>spreadsheet-import-activity</artifactId>
-	<version>2.0.1-SNAPSHOT</version>
-	<packaging>bundle</packaging>
-	<name>Taverna 2 Spreadsheet Import Activity</name>
-	<description>Activity to import data from spreadsheet files</description>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.felix</groupId>
-				<artifactId>maven-bundle-plugin</artifactId>
-				<extensions>true</extensions>
-				<configuration>
-					<instructions>
-						<Private-Package>org.apache.poi.*;-split-package:=merge-first,org.openxmlformats.schemas.*,schemasMicrosoftCom*,schemaorg_apache_xmlbeans.system.*,org.odftoolkit.*,com.csvreader.*</Private-Package>
-						<Import-Package>!org.apache.poi.hdgf.extractor,
-                                                        !org.apache.poi.hslf.extractor,
-                                                        !org.apache.poi.hwpf.extractor,
-                                                        !org.apache.poi.sl.*,
-                                                        org.apache.xmlbeans.impl.schema,
-                                                        !junit.*,
-                                                        !org.openxmlformats.schemas.*,
-                                                        !schemasMicrosoftComOfficePowerpoint,
-                                                        !schemasMicrosoftComOfficeWord,
-                                                        *
-                                                </Import-Package>
-					</instructions>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>net.sf.taverna.t2.core</groupId>
-			<artifactId>reference-api</artifactId>
-			<version>${t2.core.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>net.sf.taverna.t2.core</groupId>
-			<artifactId>workflowmodel-api</artifactId>
-			<version>${t2.core.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi</artifactId>
-			<version>${poi.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.poi</groupId>
-			<artifactId>poi-ooxml</artifactId>
-			<version>${poi.version}</version>
-			<exclusions>
-				<exclusion>
-					<groupId>org.apache.xmlbeans</groupId>
-					<artifactId>xmlbeans</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-		<dependency>
-			<groupId>org.odftoolkit</groupId>
-			<artifactId>odfdom-java</artifactId>
-			<version>${odfdom.version}</version>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>net.sourceforge.javacsv</groupId>
-			<artifactId>javacsv</artifactId>
-			<version>${javacsv.version}</version>
-			<scope>provided</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.xmlbeans</groupId>
-			<artifactId>com.springsource.org.apache.xmlbeans</artifactId>
-			<version>${xmlbeans.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.log4j</groupId>
-			<artifactId>com.springsource.org.apache.log4j</artifactId>
-			<version>${log4j.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>${junit.version}</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>net.sf.taverna.t2.activities</groupId>
-			<artifactId>activity-test-utils</artifactId>
-			<version>${t2.activities.version}</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-	<repositories>
-		<!-- This repository is down (2012-03-19) and as the project has moved 
-			to apache it's unclear if it will return. odfdom-java-0.7 artifact has been 
-			deployed to the mygrid repository. -->
-		<!-- <repository> <id>odftoolkit</id> <name>Odftoolkit Repository</name> 
-			<url>https://svn.odftoolkit.org/svn/odfdom~maven2/release</url> <releases> 
-			<checksumPolicy>fail</checksumPolicy> </releases> <snapshots> <checksumPolicy>fail</checksumPolicy> 
-			</snapshots> </repository> -->
-		<repository>
-			<releases />
-			<snapshots>
-				<enabled>false</enabled>
-			</snapshots>
-			<id>mygrid-repository</id>
-			<name>myGrid Repository</name>
-			<url>http://www.mygrid.org.uk/maven/repository</url>
-		</repository>
-		<repository>
-			<releases>
-				<enabled>false</enabled>
-			</releases>
-			<snapshots />
-			<id>mygrid-snapshot-repository</id>
-			<name>myGrid Snapshot Repository</name>
-			<url>http://www.mygrid.org.uk/maven/snapshot-repository</url>
-		</repository>
-	</repositories>
-	<scm>
-		<connection>scm:git:https://github.com/taverna/taverna-spreadsheet-import-activity.git</connection>
-		<developerConnection>scm:git:ssh://git@github.com/taverna/taverna-spreadsheet-import-activity.git</developerConnection>
-		<url>https://github.com/taverna/taverna-spreadsheet-import-activity/</url>
-		<tag>HEAD</tag>
-	</scm>
-
-</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/CSVSpreadsheetReader.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/CSVSpreadsheetReader.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/CSVSpreadsheetReader.java
deleted file mode 100644
index 154019a..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/CSVSpreadsheetReader.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import com.csvreader.CsvReader;
-
-/**
- * Reads CSV files.
- *
- * @author David Withers
- */
-public class CSVSpreadsheetReader implements SpreadsheetReader {
-
-	public void read(InputStream inputStream, Range rowRange,
-			Range columnRange, boolean ignoreBlankRows,
-			SpreadsheetRowProcessor rowProcessor)
-			throws SpreadsheetReadException {
-		CsvReader csvReader = new CsvReader(new InputStreamReader(inputStream));
-		csvReader.setSkipEmptyRecords(false);
-
-		SortedMap<Integer, String> currentDataRow = new TreeMap<Integer, String>();
-
-		try {
-			while(csvReader.readRecord()) {
-				int rowIndex = (int) csvReader.getCurrentRecord();
-				boolean blankRow = true;
-				if (rowRange.contains(rowIndex)) {
-					for (int columnIndex = columnRange.getStart(); columnIndex <= columnRange.getEnd(); columnIndex++) {
-						if (columnRange.contains(columnIndex)) {
-							String value = csvReader.get(columnIndex);
-							value = "".equals(value) ? null : value;
-							if (value != null) {
-								blankRow = false;
-							}
-							currentDataRow.put(columnIndex, value);
-							if (columnIndex == columnRange.getEnd()) {
-								if (!ignoreBlankRows || !blankRow) {
-									rowProcessor.processRow(rowIndex, currentDataRow);
-								}
-								currentDataRow = new TreeMap<Integer, String>();
-							}
-						}
-					}
-				
-					if (rowIndex == rowRange.getEnd()) {
-						break;
-					}
-				}
-			}
-		} catch (IOException e) {
-			throw new SpreadsheetReadException("Unable to read CSV file", e);
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/ExcelSpreadsheetReader.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/ExcelSpreadsheetReader.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/ExcelSpreadsheetReader.java
deleted file mode 100644
index 8237ec1..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/ExcelSpreadsheetReader.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import org.apache.log4j.Logger;
-import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.DataFormatter;
-import org.apache.poi.ss.usermodel.DateUtil;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.ss.usermodel.WorkbookFactory;
-
-/**
- * Reads Excel '97 (.xls) or Excel '07 (.xlsx) spreadsheet files.
- * 
- * @author David Withers
- */
-public class ExcelSpreadsheetReader implements SpreadsheetReader {
-
-	private static Logger logger = Logger.getLogger(ExcelSpreadsheetReader.class);
-
-	public void read(InputStream inputStream, Range rowRange, Range columnRange, boolean ignoreBlankRows, SpreadsheetRowProcessor rowProcessor)
-			throws SpreadsheetReadException {
-		Workbook workbook;
-		try {
-			workbook = WorkbookFactory.create(inputStream);
-		} catch (InvalidFormatException e) {
-			throw new SpreadsheetReadException(
-					"The file does not have a compatible spreadsheet format", e);
-		} catch (IOException e) {
-			throw new SpreadsheetReadException("The spreadsheet stream could not be read", e);
-		} catch (IllegalArgumentException e) {
-			throw new SpreadsheetReadException("The spreadsheet stream could not be read", e);
-		}
-
-		DataFormatter dataFormatter = new DataFormatter();
-		
-		workbook.setMissingCellPolicy(Row.CREATE_NULL_AS_BLANK);
-		Sheet sheet = workbook.getSheetAt(0);
-
-		if (rowRange.getEnd() < 0) {
-			rowRange.setEnd(sheet.getLastRowNum());
-			logger.debug("No end of row range specified, setting to " + rowRange.getEnd());
-		}
-
-		SortedMap<Integer, String> currentDataRow = new TreeMap<Integer, String>();
-
-		for (int rowIndex = rowRange.getStart(); rowIndex <= rowRange.getEnd(); rowIndex++) {
-			boolean blankRow = true;
-			if (rowRange.contains(rowIndex)) {
-				Row row = sheet.getRow(rowIndex);
-				for (int columnIndex = columnRange.getStart(); columnIndex <= columnRange.getEnd(); columnIndex++) {
-					if (columnRange.contains(columnIndex)) {
-						String value = null;
-						if (row != null) {
-							Cell cell = row.getCell(columnIndex);
-							if (cell != null) {
-								value = getCellValue(cell, dataFormatter);
-							}
-						}
-						if (value != null) {
-							blankRow = false;
-						}
-						currentDataRow.put(columnIndex, value);
-						if (columnIndex == columnRange.getEnd()) {
-							if (!ignoreBlankRows || !blankRow) {
-								rowProcessor.processRow(rowIndex, currentDataRow);
-							}
-							currentDataRow = new TreeMap<Integer, String>();
-						}
-					}
-				}
-			}
-		}
-
-	}
-
-	private String getCellValue(Cell cell, DataFormatter dataFormatter) {
-		String value = null;
-		switch (cell.getCellType()) {
-		case Cell.CELL_TYPE_BOOLEAN:
-			value = Boolean.toString(cell.getBooleanCellValue());
-			break;
-		case Cell.CELL_TYPE_NUMERIC:
-			if (DateUtil.isCellDateFormatted(cell)) {
-//				value = cell.getDateCellValue().toString();
-				value = dataFormatter.formatCellValue(cell);
-			} else {
-				value = Double.toString(cell.getNumericCellValue());
-			}
-			break;
-		case Cell.CELL_TYPE_STRING:
-			value = cell.getStringCellValue();
-			break;
-		case Cell.CELL_TYPE_FORMULA:
-			switch (cell.getCachedFormulaResultType()) {
-			case Cell.CELL_TYPE_BOOLEAN:
-				value = Boolean.toString(cell.getBooleanCellValue());
-				break;
-			case Cell.CELL_TYPE_NUMERIC:
-				if (DateUtil.isCellDateFormatted(cell)) {
-					value = cell.getDateCellValue().toString();
-				} else {
-					value = Double.toString(cell.getNumericCellValue());
-				}
-				break;
-			case Cell.CELL_TYPE_STRING:
-				value = cell.getStringCellValue();
-				break;
-			default:
-				break;
-			}
-		default:
-			break;
-		}
-		// value = dataFormatter.formatCellValue(cell);
-		// if ("".equals(value)) value = null;
-		return value;
-	}
-
-
-//	/**
-//	 * Reads data from an HSSF stream.
-//	 * 
-//	 * @param inputStream
-//	 * @param spreradsheetRowProcessor
-//	 * @throws IOException
-//	 * @deprecated can't generalize for XSSF streams and not much advantage as all the (non
-//	 *             duplicated) data is contained in one event so memory footprint isn't much smaller
-//	 */
-//	public void readHSSF(InputStream inputStream, SpreadsheetRowProcessor spreradsheetRowProcessor)
-//			throws IOException {
-//		POIFSFileSystem poifs = new POIFSFileSystem(inputStream);
-//
-//		// get the workbook part of the stream
-//		InputStream documentInputStream = poifs.createDocumentInputStream("Workbook");
-//
-//		RecordProcessor recordProcessor = new RecordProcessor(spreradsheetRowProcessor);
-//		MissingRecordAwareHSSFListener hssfListener = new MissingRecordAwareHSSFListener(
-//				recordProcessor);
-//
-//		// listen for all records
-//		HSSFRequest request = new HSSFRequest();
-//		request.addListenerForAllRecords(hssfListener);
-//
-//		HSSFEventFactory factory = new HSSFEventFactory();
-//		factory.processEvents(request, documentInputStream);
-//
-//		inputStream.close();
-//		documentInputStream.close();
-//	}
-//
-//	/**
-//	 * Listener for processing events from an HSSF stream.
-//	 * 
-//	 * @author David Withers
-//	 * @deprecated can't generalize for XSSF streams and not much advantage as all the (non
-//	 *             duplicated) data is contained in one event so memory footprint isn't much smaller
-//	 */
-//	class RecordProcessor implements HSSFListener {
-//
-//		private SpreadsheetRowProcessor spreradsheetRowProcessor;
-//
-//		private SSTRecord sstrec;
-//
-//		private boolean worksheetOpen = false;
-//
-//		private int row, column;
-//
-//		private Map<Integer, String> currentDataRow = new HashMap<Integer, String>();
-//
-//		public RecordProcessor(SpreadsheetRowProcessor spreradsheetRowProcessor) {
-//			this.spreradsheetRowProcessor = spreradsheetRowProcessor;
-//		}
-//
-//		public void processRecord(Record record) {
-//			switch (record.getSid()) {
-//			// the BOFRecord can represent either the beginning of a sheet or
-//			// the workbook
-//			case BOFRecord.sid:
-//				BOFRecord bof = (BOFRecord) record;
-//				if (bof.getType() == BOFRecord.TYPE_WORKSHEET) {
-//					worksheetOpen = true;
-//				}
-//				break;
-//			case EOFRecord.sid:
-//				if (worksheetOpen) {
-//					while (row < rowRange.getEnd()) {
-//						row++;
-//						if (rowRange.contains(row)) {
-//							for (column = columnRange.getStart(); column <= columnRange.getEnd(); column++) {
-//								processCell(row, column, null);
-//							}
-//							spreradsheetRowProcessor.processRow(row, currentDataRow);
-//						}
-//						currentDataRow = new HashMap<Integer, String>();
-//					}
-//					worksheetOpen = false;
-//				}
-//				break;
-//			// don't care about sheet name for now
-//			// case BoundSheetRecord.sid:
-//			// BoundSheetRecord bsr = (BoundSheetRecord) record;
-//			// logger.info("New sheet named: " + bsr.getSheetname());
-//			// break;
-//			case RowRecord.sid:
-//				// RowRecord rowRecord = (RowRecord) record;
-//				// if (readAllRows) {
-//				// int rowNumber = row.getRowNumber();
-//				// if (rowNumber < minRow) {
-//				// minRow = rowNumber;
-//				// currentRow = rowNumber;
-//				// }
-//				// if (rowNumber > maxRow) {
-//				// maxRow = rowNumber;
-//				// }
-//				// }
-//				// if (readAllColumns) {
-//				// int firstColumn = row.getFirstCol();
-//				// int lastColumn = row.getLastCol() - 1;
-//				// if (firstColumn < minColumn) {
-//				// minColumn = firstColumn;
-//				// currentColumn = firstColumn;
-//				// }
-//				// if (lastColumn > maxColumn) {
-//				// maxColumn = lastColumn;
-//				// }
-//				// }
-//
-//				break;
-//			case NumberRecord.sid:
-//				NumberRecord number = (NumberRecord) record;
-//				row = number.getRow();
-//				column = number.getColumn();
-//				processCell(row, column, String.valueOf(number.getValue()));
-//				break;
-//			case SSTRecord.sid:
-//				// SSTRecords store a array of unique strings used in Excel.
-//				sstrec = (SSTRecord) record;
-//				break;
-//			case LabelSSTRecord.sid:
-//				LabelSSTRecord label = (LabelSSTRecord) record;
-//				row = label.getRow();
-//				column = label.getColumn();
-//				processCell(row, column, sstrec.getString(label.getSSTIndex()).getString());
-//				break;
-//			case BlankRecord.sid:
-//				BlankRecord blank = (BlankRecord) record;
-//				row = blank.getRow();
-//				column = blank.getColumn();
-//				processCell(row, column, null);
-//				break;
-//			}
-//
-//			// Missing column
-//			if (record instanceof MissingCellDummyRecord) {
-//				MissingCellDummyRecord cell = (MissingCellDummyRecord) record;
-//				row = cell.getRow();
-//				column = cell.getColumn();
-//				processCell(row, column, null);
-//			}
-//
-//			// Missing row
-//			if (record instanceof MissingRowDummyRecord) {
-//				MissingRowDummyRecord missingRow = (MissingRowDummyRecord) record;
-//				row = missingRow.getRowNumber();
-//				if (rowRange.contains(row)) {
-//					for (column = columnRange.getStart(); column <= columnRange.getEnd(); column++) {
-//						processCell(row, column, null);
-//					}
-//					spreradsheetRowProcessor.processRow(row, currentDataRow);
-//				}
-//				currentDataRow = new HashMap<Integer, String>();
-//			}
-//
-//			// End of row
-//			if (record instanceof LastCellOfRowDummyRecord) {
-//				LastCellOfRowDummyRecord lastCell = (LastCellOfRowDummyRecord) record;
-//				row = lastCell.getRow();
-//				if (rowRange.contains(row)) {
-//					int lastColumn = lastCell.getLastColumnNumber();
-//					for (column = lastColumn + 1; column <= columnRange.getEnd(); column++) {
-//						processCell(row, column, null);
-//					}
-//					spreradsheetRowProcessor.processRow(row, currentDataRow);
-//				}
-//				currentDataRow = new HashMap<Integer, String>();
-//			}
-//		}
-//
-//		private void processCell(int row, int column, String value) {
-//			if (rowRange.contains(row) && columnRange.contains(column)) {
-//				currentDataRow.put(column, value);
-//			}
-//		}
-//
-//	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/ODFSpreadsheetReader.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/ODFSpreadsheetReader.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/ODFSpreadsheetReader.java
deleted file mode 100644
index 2b01e00..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/ODFSpreadsheetReader.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-import java.io.InputStream;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-
-import org.apache.log4j.Logger;
-import org.odftoolkit.odfdom.OdfFileDom;
-import org.odftoolkit.odfdom.doc.OdfDocument;
-import org.odftoolkit.odfdom.doc.table.OdfTableCell;
-import org.odftoolkit.odfdom.doc.table.OdfTableRow;
-import org.w3c.dom.NodeList;
-
-/**
- * Reads Open Document Format (ODF) spreadsheet files.
- * 
- * @author David Withers
- */
-public class ODFSpreadsheetReader implements SpreadsheetReader {
-
-	private static Logger logger = Logger.getLogger(ODFSpreadsheetReader.class);
-
-	public void read(InputStream inputStream, Range rowRange, Range columnRange, boolean ignoreBlankRows, SpreadsheetRowProcessor rowProcessor)
-			throws SpreadsheetReadException {
-		NodeList rowList = null;
-		try {
-			// Load the ODF document
-			OdfDocument odfDoc = OdfDocument.loadDocument(inputStream);
-			logger.debug("Reading document of type : " + odfDoc.getMediaType());
-			// Get the content as DOM tree
-			OdfFileDom odfContent = odfDoc.getContentDom();
-			// Initialize XPath
-			XPath xpath = odfDoc.getXPath();
-			// Get the rows of the first table
-			String rowsPath = ("//table:table[1]/table:table-row");
-			rowList = (NodeList) xpath.evaluate(rowsPath, odfContent, XPathConstants.NODESET);
-		} catch (Exception e) {
-			if (e instanceof RuntimeException) {
-				throw (RuntimeException) e;
-			}
-			throw new SpreadsheetReadException("The spreadsheet file could not be read", e);
-		}
-
-		if (rowRange.getEnd() < 0) {
-			rowRange.setEnd(calculateRowCount(rowList) - 1);
-		}
-
-		SortedMap<Integer, String> currentDataRow = new TreeMap<Integer, String>();
-		int rowRep = 0;
-		for (int rowIndex = rowRange.getStart(); rowIndex <= rowRange.getEnd(); rowIndex++) {
-			boolean blankRow = true;
-			OdfTableRow row = (OdfTableRow) rowList.item(rowIndex);
-			int columnRep = 0;
-			for (int columnIndex = columnRange.getStart(); columnIndex <= columnRange.getEnd(); columnIndex++) {
-				String value = null;
-				OdfTableCell cell = null;
-				if (row != null) {
-					cell = (OdfTableCell) row.getCellAt(columnIndex);
-					if (cell != null) {
-						String type = cell.getOfficeValueTypeAttribute();
-						if ("float".equals(type)) {
-							value = cell.getOfficeValueAttribute().toString();
-						} else if ("percentage".equals(type)) {
-							value = cell.getOfficeValueAttribute().toString();
-						} else if ("currency".equals(type)) {
-							value = cell.getOfficeValueAttribute().toString();
-						} else if ("date".equals(type)) {
-							value = cell.getOfficeDateValueAttribute();
-						} else if ("time".equals(type)) {
-							value = cell.getOfficeTimeValueAttribute();
-						} else if ("boolean".equals(type)) {
-							value = cell.getOfficeBooleanValueAttribute().toString();
-						} else if ("string".equals(type)) {
-							value = cell.getOfficeStringValueAttribute();
-							if (value == null) {
-								value = cell.getTextContent();
-							}
-						} else {
-							value = cell.getTextContent();
-						}
-					}
-				}
-				value = "".equals(value) ? null : value;
-				if (value != null) {
-					blankRow = false;
-				}
-				// if the cell is within the column range add it to the row values
-				if (columnRange.contains(columnIndex + columnRep)) {
-					currentDataRow.put(columnIndex + columnRep, value);
-				}
-				// check if this cell is repeated
-				int repeatedCells = cell == null ? 0 : cell
-						.getTableNumberColumnsRepeatedAttribute() - 1;
-				while (repeatedCells > 0 && columnIndex + columnRep < columnRange.getEnd()) {
-					columnRep++;
-					if (columnRange.contains(columnIndex + columnRep)) {
-						currentDataRow
-								.put(columnIndex + columnRep, value);
-					}
-					repeatedCells--;
-				}
-				// if it's the last cell in the range process the row
-				if (columnIndex == columnRange.getEnd()) {
-					if (rowRange.contains(rowIndex + rowRep)) {
-						if (!ignoreBlankRows || !blankRow) {
-							rowProcessor.processRow(rowIndex + rowRep, currentDataRow);
-						}
-					}
-					// check if this row is repeated
-					int repeatedRows = row == null ? 0
-							: row.getTableNumberRowsRepeatedAttribute() - 1;
-					while (repeatedRows > 0 && rowIndex + rowRep < rowRange.getEnd()) {
-						rowRep++;
-						if (rowRange.contains(rowIndex + rowRep)) {
-							if (!ignoreBlankRows || !blankRow) {
-								rowProcessor.processRow(rowIndex + rowRep, currentDataRow);
-							}
-						}
-						repeatedRows--;
-					}
-					currentDataRow = new TreeMap<Integer, String>();
-				}
-
-			}
-		}
-
-	}
-
-	/**
-	 * Calculates the number of rows in a table, ignoring blank rows at the end of the table.
-	 * 
-	 * @param rowList
-	 *            the list of rows in a table
-	 * @return the number of rows in a table
-	 */
-	private int calculateRowCount(NodeList rowList) {
-		int rowCount = 0;
-		int blankRows = 0;
-		for (int i = 0; i < rowList.getLength(); i++) {
-			OdfTableRow row = (OdfTableRow) rowList.item(i);
-			int repeatedRows = row.getTableNumberRowsRepeatedAttribute();
-			if (isBlankRow(row)) {
-				blankRows += repeatedRows;
-			} else {
-				rowCount += repeatedRows + blankRows;
-				blankRows = 0;
-			}
-		}
-		return rowCount;
-	}
-
-	/**
-	 * Returns <code>true</code> if a row is blank (non of the cells contain data).
-	 * 
-	 * @param row
-	 * @return <code>true</code> if a row is blank
-	 */
-	private boolean isBlankRow(OdfTableRow row) {
-		OdfTableCell cell = (OdfTableCell) row.getCellAt(0);
-		for (int i = 1; cell != null; i++) {
-			String cellContent = cell.getTextContent();
-			if (cellContent != null && !cellContent.equals("")) {
-				return false;
-			}
-			cell = (OdfTableCell) row.getCellAt(i);
-		}
-		return true;
-	}
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/Range.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/Range.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/Range.java
deleted file mode 100644
index 29f5e05..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/Range.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.sf.taverna.t2.workflowmodel.processor.config.ConfigurationBean;
-import net.sf.taverna.t2.workflowmodel.processor.config.ConfigurationProperty;
-
-/**
- * A range of integer values.
- *
- * @author David Withers
- */
-@ConfigurationBean(uri = SpreadsheetImportActivity.URI + "/Range")
-public class Range {
-
-	/**
-	 * The (inclusive) start and end of this <code>Range</code>.
-	 */
-	private int start, end;
-
-	/**
-	 * <code>Range</code>s that are excluded from this <code>Range</code>.
-	 */
-	private List<Range> excludes = new ArrayList<Range>();
-
-	/**
-	 * Constructs a <code>Range</code>.
-	 */
-	public Range() {
-	}
-
-	/**
-	 * Constructs a <code>Range</code> with the specified start and end values.
-	 *
-	 * @param start
-	 *            the start of the range
-	 * @param end
-	 *            the end of the range
-	 */
-	public Range(int start, int end) {
-		this.start = start;
-		this.end = end;
-	}
-
-	/**
-	 * Constructs a <code>Range</code> with the specified start and end values and a
-	 * <code>Range</code> of excluded values.
-	 *
-	 * @param start
-	 *            the start of the range
-	 * @param end
-	 *            the end of the range
-	 * @param exclude
-	 *            the range to exclude
-	 */
-	public Range(int start, int end, Range exclude) {
-		this.start = start;
-		this.end = end;
-		if (exclude != null) {
-			excludes.add(exclude);
-		}
-	}
-
-	/**
-	 * Constructs a <code>Range</code> with the specified start and end values and
-	 * <code>Range</code>s of excluded values.
-	 *
-	 * @param start
-	 *            the start of the range
-	 * @param end
-	 *            the end of the range
-	 * @param excludes
-	 *            the ranges to exclude
-	 */
-	public Range(int start, int end, List<Range> excludes) {
-		this.start = start;
-		this.end = end;
-		if (excludes != null) {
-			for (Range range : excludes) {
-				this.excludes.add(range);
-			}
-		}
-	}
-
-	/**
-	 * Constructs a <code>Range</code> that is a deep copy of the specified range.
-	 *
-	 * @param range
-	 *            the <code>Range</code> to copy
-	 */
-	public Range(Range range) {
-		this.start = range.start;
-		this.end = range.end;
-		if (range.excludes != null) {
-			for (Range excludeRange : range.excludes) {
-				excludes.add(new Range(excludeRange));
-			}
-		}
-	}
-
-	/**
-	 * Returns <code>true</code> if <code>value</code> is included in this <code>Range</code>.
-	 *
-	 * @param value
-	 * @return
-	 */
-	public boolean contains(int value) {
-		if (value >= start && (value <= end || end < 0)) {
-			for (Range exclude : excludes) {
-				if (exclude.contains(value)) {
-					return false;
-				}
-			}
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Returns an array of the values contained in this <code>Range</code>.
-	 *
-	 * @return an array of the values contained in this <code>Range</code>
-	 */
-	public int[] getRangeValues() {
-		List<Integer> rangeList = new ArrayList<Integer>();
-		for (int i = start; i <= end; i++) {
-			boolean excluded = false;
-			for (Range range : excludes) {
-				if (range.contains(i)) {
-					excluded = true;
-					break;
-				}
-			}
-			if (!excluded) {
-				rangeList.add(i);
-			}
-		}
-		int[] rangeArray = new int[rangeList.size()];
-		for (int i = 0; i < rangeArray.length; i++) {
-			rangeArray[i] = rangeList.get(i);
-		}
-		return rangeArray;
-	}
-
-	/**
-	 * Returns the start of the <code>Range</code>.
-	 *
-	 * @return the start of the <code>Range</code>
-	 */
-	public int getStart() {
-		return start;
-	}
-
-	/**
-	 * Sets the start of the <code>Range</code>.
-	 *
-	 * @param start
-	 *            the new value for start of the <code>Range</code>
-	 */
-	@ConfigurationProperty(name = "start", label = "Start", description = "The start of the range")
-	public void setStart(int start) {
-		this.start = start;
-	}
-
-	/**
-	 * Returns the end of the <code>Range</code>.
-	 *
-	 * @return the end of the <code>Range</code>
-	 */
-	public int getEnd() {
-		return end;
-	}
-
-	/**
-	 * Sets the end of the range.
-	 *
-	 * @param end
-	 *            the new value for end of the <code>Range</code>
-	 */
-	@ConfigurationProperty(name = "end", label = "End", description = "The end of the range")
-	public void setEnd(int end) {
-		this.end = end;
-	}
-
-	/**
-	 * Adds a <code>Range</code> to be excluded from this <code>Range</code>.
-	 *
-	 * @param exclude
-	 *            a <code>Range</code> to be excluded
-	 */
-	public void addExclude(Range exclude) {
-		excludes.add(exclude);
-	}
-
-	/**
-	 * Removes a <code>Range</code> from the exclusions for this range.
-	 *
-	 * @param exclude
-	 *            a <code>Range</code> to be removed from the exclusions
-	 */
-	public void removeExclude(Range exclude) {
-		excludes.remove(exclude);
-	}
-
-	/**
-	 * Returns the exclusions for this range.
-	 *
-	 * @return the exclusions for this range
-	 */
-	public List<Range> getExcludes() {
-		return excludes;
-	}
-
-	/**
-	 * Sets the exclusions for this range.
-	 *
-	 * @param excludes
-	 *            the exclusions for this range
-	 */
-	@ConfigurationProperty(name = "excludes", label = "Excludes Ranges", description = "The ranges the exclude from this range", required = false)
-	public void setExcludes(List<Range> excludes) {
-		this.excludes = excludes;
-	}
-
-	@Override
-	public String toString() {
-		StringBuilder result = new StringBuilder();
-		result.append('[');
-		result.append(start);
-		result.append("..");
-		result.append(end);
-		result.append(']');
-		return result.toString();
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see java.lang.Object#hashCode()
-	 */
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + end;
-		result = prime * result + ((excludes == null) ? 0 : excludes.hashCode());
-		result = prime * result + start;
-		return result;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see java.lang.Object#equals(java.lang.Object)
-	 */
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (getClass() != obj.getClass())
-			return false;
-		Range other = (Range) obj;
-		if (end != other.end)
-			return false;
-		if (excludes == null) {
-			if (other.excludes != null)
-				return false;
-		} else if (!excludes.equals(other.excludes))
-			return false;
-		if (start != other.start)
-			return false;
-		return true;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetEmptyCellPolicy.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetEmptyCellPolicy.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetEmptyCellPolicy.java
deleted file mode 100644
index ece75e5..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetEmptyCellPolicy.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-/**
- * Enumeration of the policies for handling empty/missing cells in a spreadsheet.
- * <p>
- * <dl>
- * <dt>EMPTY_STRING</dt>
- * <dd>Use an empty string value ("")</dd>
- * <dt>USER_DEFINED</dt>
- * <dd>Use a value defined by the user</dd>
- * <dt>GENERATE_ERROR</dt>
- * <dd>Generate an ErrorDocument</dd>
- * </dl>
- * 
- * @author David Withers
- */
-public enum SpreadsheetEmptyCellPolicy {
-	EMPTY_STRING, USER_DEFINED, GENERATE_ERROR
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportActivity.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportActivity.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportActivity.java
deleted file mode 100644
index 1f48ce8..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportActivity.java
+++ /dev/null
@@ -1,358 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.SortedMap;
-
-import net.sf.taverna.t2.invocation.InvocationContext;
-import net.sf.taverna.t2.reference.ExternalReferenceSPI;
-import net.sf.taverna.t2.reference.Identified;
-import net.sf.taverna.t2.reference.ReferenceService;
-import net.sf.taverna.t2.reference.ReferenceServiceException;
-import net.sf.taverna.t2.reference.ReferenceSet;
-import net.sf.taverna.t2.reference.T2Reference;
-import net.sf.taverna.t2.reference.ValueCarryingExternalReference;
-import net.sf.taverna.t2.workflowmodel.OutputPort;
-import net.sf.taverna.t2.workflowmodel.Port;
-import net.sf.taverna.t2.workflowmodel.processor.activity.AbstractAsynchronousActivity;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityConfigurationException;
-import net.sf.taverna.t2.workflowmodel.processor.activity.AsynchronousActivityCallback;
-
-import org.apache.log4j.Logger;
-
-import com.csvreader.CsvWriter;
-import com.fasterxml.jackson.databind.JsonNode;
-
-
-/**
- * An {@link net.sf.taverna.t2.workflowmodel.processor.activity.Activity} that reads spreadsheet
- * files.
- *
- * @author David Withers
- */
-public class SpreadsheetImportActivity extends AbstractAsynchronousActivity<JsonNode> {
-
-	public static final String URI = "http://ns.taverna.org.uk/2010/activity/spreadsheet-import";
-
-	public static final String INPUT_PORT_NAME = "fileurl";
-
-	public static final String OUTPUT_PORT_NAME = "output";
-
-	private static Logger logger = Logger.getLogger(SpreadsheetImportActivity.class);
-
-	private JsonNode configurationBean;
-
-	private Range rowRange, columnRange;
-
-	private boolean ignoreBlankRows;
-
-	private String missingCellValue;
-
-	private SpreadsheetEmptyCellPolicy emptyCellPolicy;
-
-	private SpreadsheetOutputFormat outputFormat;
-
-	private String csvDelimiter;
-
-	/**
-	 * Constructs a SpreadsheetImport activity.
-	 */
-	public SpreadsheetImportActivity() {
-	}
-
-	@Override
-	public void configure(JsonNode configurationBean)
-			throws ActivityConfigurationException {
-		this.configurationBean = configurationBean;
-		rowRange = SpreadsheetUtils.getRange(configurationBean.get("rowRange"));
-		logger.debug("Setting row range to " + rowRange);
-		columnRange = SpreadsheetUtils.getRange(configurationBean.get("columnRange"));
-		logger.debug("Setting column range to " + columnRange);
-		ignoreBlankRows = configurationBean.get("ignoreBlankRows").booleanValue();
-		missingCellValue = configurationBean.get("emptyCellValue").textValue();
-		logger.debug("Setting empty cell value to '" + missingCellValue + "'");
-		emptyCellPolicy = SpreadsheetEmptyCellPolicy.valueOf(configurationBean.get("emptyCellPolicy").textValue());
-		logger.debug("Setting empty cell policy to " + emptyCellPolicy);
-		outputFormat = SpreadsheetOutputFormat.valueOf(configurationBean.get("outputFormat").textValue());
-		logger.debug("Setting output format to " + outputFormat);
-		csvDelimiter = configurationBean.get("csvDelimiter").textValue();
-		logger.debug("Setting csv delimiter to '" + csvDelimiter + "'");
-//		configurePorts();
-	}
-
-	private void configurePorts() {
-		removeInputs();
-		addInput(INPUT_PORT_NAME, 0, false, null, null);
-
-		removeOutputs();
-		if (outputFormat.equals(SpreadsheetOutputFormat.PORT_PER_COLUMN)) {
-			for (int column = columnRange.getStart(); column <= columnRange.getEnd(); column++) {
-				if (columnRange.contains(column)) {
-					addOutput(SpreadsheetUtils.getPortName(column, configurationBean), 1, 1);
-				}
-			}
-		} else {
-			addOutput(OUTPUT_PORT_NAME, 0, 0);
-		}
-	}
-
-	@Override
-	public JsonNode getConfiguration() {
-		return configurationBean;
-	}
-
-	@Override
-	public void executeAsynch(final Map<String, T2Reference> data,
-			final AsynchronousActivityCallback callback) {
-		callback.requestRun(new Runnable() {
-
-			public void run() {
-
-				Map<String, T2Reference> outputData = new HashMap<String, T2Reference>();
-
-				InvocationContext context = callback.getContext();
-				ReferenceService referenceService = context.getReferenceService();
-
-				try {
-					T2Reference inputRef = data.get(INPUT_PORT_NAME);
-
-					SpreadsheetRowProcessor spreadsheetRowProcessor = null;
-					Map<String, List<T2Reference>> outputLists = null;
-					StringWriter output = null;
-
-					if (outputFormat.equals(SpreadsheetOutputFormat.PORT_PER_COLUMN)) {
-						outputLists = new HashMap<String, List<T2Reference>>();
-						for (Port port : getOutputPorts()) {
-							outputLists.put(port.getName(), new ArrayList<T2Reference>());
-						}
-						spreadsheetRowProcessor = new MultiplePortRowProcessor(referenceService, outputLists, context);
-					} else {
-						output = new StringWriter();
-						char csvDelimiterCharacter = ',';
-						if (csvDelimiter != null && csvDelimiter.length() > 0) {
-							csvDelimiterCharacter = csvDelimiter.charAt(0);
-						}
-						CsvWriter csvWriter = new CsvWriter(output, csvDelimiterCharacter);
-						csvWriter.setEscapeMode(CsvWriter.ESCAPE_MODE_DOUBLED);
-						csvWriter.setTextQualifier('"');
-						csvWriter.setUseTextQualifier(true);
-						spreadsheetRowProcessor = new SingleOutputRowProcessor(csvWriter);
-					}
-
-					InputStream inputStream = getInputStream(context, referenceService, inputRef);
-					if (inputStream == null) {
-						logger.warn("Input is not a file reference or a file name");
-						callback.fail("Input is not a file reference or a file name");
-						return;
-					}
-					try {
-						try {
-							new ExcelSpreadsheetReader().read(inputStream, new Range(rowRange),
-									new Range(columnRange), ignoreBlankRows, spreadsheetRowProcessor);
-						} catch (SpreadsheetReadException e) {
-							inputStream.close();
-							inputStream = getInputStream(context, referenceService, inputRef);
-							try {
-								new ODFSpreadsheetReader().read(inputStream, new Range(rowRange),
-										new Range(columnRange), ignoreBlankRows, spreadsheetRowProcessor);
-							} catch (SpreadsheetReadException e2) {
-								inputStream.close();
-								inputStream = getInputStream(context, referenceService, inputRef);
-								new CSVSpreadsheetReader().read(inputStream, new Range(rowRange),
-										new Range(columnRange), ignoreBlankRows, spreadsheetRowProcessor);
-							}
-						} finally {
-							inputStream.close();
-						}
-					} catch (IOException e1) {
-						logger.warn("Failed to close spereadsheet stream", e1);
-					}
-
-					// get outputs
-					if (outputFormat.equals(SpreadsheetOutputFormat.PORT_PER_COLUMN)) {
-						for (OutputPort outputPort : getOutputPorts()) {
-							String name = outputPort.getName();
-							Object value = outputLists.get(name);
-							T2Reference id = referenceService.register(value, outputPort.getDepth(),
-									true, context);
-							outputData.put(name, id);
-						}
-					} else {
-						T2Reference id = referenceService.register(output.toString(), 0, true, context);
-						outputData.put(OUTPUT_PORT_NAME, id);
-					}
-					callback.receiveResult(outputData, new int[0]);
-				} catch (ReferenceServiceException e) {
-					logger.warn("Error accessing spreadsheet input/output data", e);
-					callback.fail("Error accessing spreadsheet input/output data", e);
-				} catch (SpreadsheetReadException e) {
-					logger.warn("Spreadsheet input cannot be read", e);
-					callback.fail("Spreadsheet input cannot be read", e);
-				} catch (FileNotFoundException e) {
-					logger.warn("Input spreadsheet file does not exist", e);
-					callback.fail("Input spreadsheet file does not exist", e);
-				} catch (IOException e) {
-					logger.warn("Error reading spreadsheet", e);
-					callback.fail("Error reading spreadsheet", e);
-				}
-			}
-
-
-		});
-	}
-
-	private InputStream getInputStream(InvocationContext context,
-			ReferenceService referenceService, T2Reference inputRef)
-			throws IOException {
-		InputStream inputStream = null;
-
-		Identified identified = referenceService.resolveIdentifier(inputRef, null, context);
-		if (identified instanceof ReferenceSet) {
-			ReferenceSet referenceSet = (ReferenceSet) identified;
-			Set<ExternalReferenceSPI> externalReferences = referenceSet
-					.getExternalReferences();
-			for (ExternalReferenceSPI externalReference : externalReferences) {
-				if (externalReference instanceof ValueCarryingExternalReference<?>) {
-					ValueCarryingExternalReference<?> vcer = (ValueCarryingExternalReference<?>) externalReference;
-					if (String.class.isAssignableFrom(vcer.getValueType())) {
-						String input = (String) vcer.getValue();
-						try {
-							URL url = new URL(input);
-							inputStream = url.openStream();
-							logger.debug("Input spreadsheet url is '" + input + "'");
-						} catch (MalformedURLException e) {
-							logger.debug("Input spreadsheet file name is '" + input + "'");
-							inputStream = new FileInputStream(input);
-						}
-					}
-					break;
-				} else {
-					inputStream = externalReference.openStream(context);
-					break;
-				}
-			}
-		}
-		return inputStream;
-	}
-
-	/**
-	 * SpreadsheetRowProcessor for handling a single output formatted as csv.
-	 *
-	 * @author David Withers
-	 */
-	private final class SingleOutputRowProcessor implements SpreadsheetRowProcessor {
-
-		private final CsvWriter csvWriter;
-
-		/**
-		 * Constructs a new SingleOutputRowProcessor.
-		 *
-		 * @param csvWriter
-		 */
-		private SingleOutputRowProcessor(CsvWriter csvWriter) {
-			this.csvWriter = csvWriter;
-		}
-
-		public void processRow(int rowIndex, SortedMap<Integer, String> row) {
-			try {
-				for (String value : row.values()) {
-					if (value == null) {
-						if (emptyCellPolicy.equals(SpreadsheetEmptyCellPolicy.GENERATE_ERROR)) {
-							value = "ERROR";
-						} else if (emptyCellPolicy.equals(SpreadsheetEmptyCellPolicy.EMPTY_STRING)) {
-							value = "";
-						} else {
-							value = missingCellValue;
-						}
-					}
-					csvWriter.write(value, true);
-				}
-				csvWriter.endRecord();
-			} catch (IOException e) {
-				throw new RuntimeException(e);
-			}
-		}
-	}
-
-	/**
-	 * SpreadsheetRowProcessor for handling multiple outputs.
-	 *
-	 * @author David Withers
-	 */
-	private final class MultiplePortRowProcessor implements SpreadsheetRowProcessor {
-
-		private final ReferenceService referenceService;
-		private final Map<String, List<T2Reference>> outputLists;
-		private final InvocationContext context;
-
-		/**
-		 * Constructs a new MultiplePortRowProcessor.
-		 *
-		 * @param referenceService
-		 * @param outputLists
-		 * @param context
-		 */
-		private MultiplePortRowProcessor(ReferenceService referenceService,
-				Map<String, List<T2Reference>> outputLists, InvocationContext context) {
-			this.referenceService = referenceService;
-			this.outputLists = outputLists;
-			this.context = context;
-		}
-
-		public void processRow(int rowIndex, SortedMap<Integer, String> row) {
-			for (Entry<Integer, String> entry : row.entrySet()) {
-				String column = SpreadsheetUtils.getPortName(entry.getKey(),
-						configurationBean);
-				Object value = entry.getValue();
-				if (value == null) {
-					if (emptyCellPolicy
-							.equals(SpreadsheetEmptyCellPolicy.GENERATE_ERROR)) {
-						value = referenceService.getErrorDocumentService()
-								.registerError(
-										"Missing data for spreadsheet cell "
-												+ column + row, 0, context);
-					} else if (emptyCellPolicy
-							.equals(SpreadsheetEmptyCellPolicy.EMPTY_STRING)) {
-						value = "";
-					} else {
-						value = missingCellValue;
-					}
-				}
-				T2Reference id = referenceService.register(value, 0, true, context);
-				outputLists.get(column).add(id);
-			}
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportActivityFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportActivityFactory.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportActivityFactory.java
deleted file mode 100644
index a4b1ab8..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportActivityFactory.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2011 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.HashSet;
-import java.util.Set;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import net.sf.taverna.t2.workflowmodel.Edits;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityConfigurationException;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityInputPort;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityOutputPort;
-
-/**
- * An {@link ActivityFactory} for creating <code>SpreadsheetImportActivity</code>.
- *
- * @author David Withers
- */
-public class SpreadsheetImportActivityFactory implements ActivityFactory {
-
-	private Edits edits;
-
-	@Override
-	public SpreadsheetImportActivity createActivity() {
-		return new SpreadsheetImportActivity();
-	}
-
-	@Override
-	public URI getActivityType() {
-		return URI.create(SpreadsheetImportActivity.URI);
-	}
-
-	@Override
-	public JsonNode getActivityConfigurationSchema() {
-		ObjectMapper objectMapper = new ObjectMapper();
-		try {
- 			return objectMapper.readTree(getClass().getResource("/schema.json"));
-		} catch (IOException e) {
-			return objectMapper.createObjectNode();
-		}
-	}
-
-	@Override
-	public Set<ActivityInputPort> getInputPorts(JsonNode configuration)
-			throws ActivityConfigurationException {
-		Set<ActivityInputPort> inputPorts = new HashSet<>();
-		inputPorts.add(edits.createActivityInputPort(SpreadsheetImportActivity.INPUT_PORT_NAME, 0, false, null, null));
-		return inputPorts;
-	}
-
-	@Override
-	public Set<ActivityOutputPort> getOutputPorts(JsonNode configuration)
-			throws ActivityConfigurationException {
-		Set<ActivityOutputPort> outputPorts = new HashSet<>();
-		if ("PORT_PER_COLUMN".equals(configuration.get("outputFormat").textValue())) {
-			Range columnRange = SpreadsheetUtils.getRange(configuration.get("columnRange"));
-			for (int column = columnRange.getStart(); column <= columnRange.getEnd(); column++) {
-				if (columnRange.contains(column)) {
-					outputPorts.add(edits.createActivityOutputPort(SpreadsheetUtils.getPortName(column, configuration), 1, 1));
-				}
-			}
-		} else {
-			outputPorts.add(edits.createActivityOutputPort(SpreadsheetImportActivity.OUTPUT_PORT_NAME, 0, 0));
-		}
-		return outputPorts;
-	}
-
-	public void setEdits(Edits edits) {
-		this.edits = edits;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportConfiguration.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportConfiguration.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportConfiguration.java
deleted file mode 100644
index 1cf37ae..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportConfiguration.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import net.sf.taverna.t2.workflowmodel.processor.config.ConfigurationBean;
-import net.sf.taverna.t2.workflowmodel.processor.config.ConfigurationProperty;
-
-/**
- * Configuration for the SpreadsheetImport activity.
- *
- * @author David Withers
- */
-@ConfigurationBean(uri = SpreadsheetImportActivity.URI + "#Config")
-public class SpreadsheetImportConfiguration {
-
-	private Range columnRange;
-	private Range rowRange;
-	private String emptyCellValue;
-	private Map<String, String> columnNames;
-	private boolean allRows;
-	private boolean excludeFirstRow;
-	private boolean ignoreBlankRows;
-	private SpreadsheetEmptyCellPolicy emptyCellPolicy;
-	private SpreadsheetOutputFormat outputFormat;
-	private String csvDelimiter;
-
-	/**
-	 * Constructs a new SpreadsheetImportConfiguration.
-	 */
-	public SpreadsheetImportConfiguration() {
-		columnRange = new Range(0, 1);
-		rowRange = new Range(0, -1);
-		emptyCellValue = "";
-		columnNames = new HashMap<String, String>();
-		allRows = true;
-		excludeFirstRow = false;
-		ignoreBlankRows = false;
-		emptyCellPolicy = SpreadsheetEmptyCellPolicy.EMPTY_STRING;
-		outputFormat = SpreadsheetOutputFormat.PORT_PER_COLUMN;
-		csvDelimiter = ",";
-	}
-
-	/**
-	 * Constructs a new SpreadsheetImportConfiguration that copies the values from the given
-	 * configuration.
-	 *
-	 * @param configuration
-	 */
-	public SpreadsheetImportConfiguration(SpreadsheetImportConfiguration configuration) {
-		columnRange = new Range(configuration.columnRange);
-		rowRange = new Range(configuration.rowRange);
-		emptyCellValue = configuration.emptyCellValue;
-		columnNames = new HashMap<String, String>(configuration.columnNames);
-		allRows = configuration.allRows;
-		excludeFirstRow = configuration.excludeFirstRow;
-		emptyCellPolicy = configuration.emptyCellPolicy;
-		ignoreBlankRows = configuration.ignoreBlankRows;
-		outputFormat = configuration.outputFormat;
-		csvDelimiter = configuration.csvDelimiter;
-	}
-
-	/**
-	 * Returns the columnRange.
-	 *
-	 * @return the value of columnRange
-	 */
-	public Range getColumnRange() {
-		return columnRange;
-	}
-
-	/**
-	 * Sets the columnRange.
-	 *
-	 * @param columnRange
-	 *            the new value for columnRange
-	 */
-	@ConfigurationProperty(name = "columnRange", label = "Column Range", description = "The range of columns to be imported (e.g. columns 2 to 7")
-	public void setColumnRange(Range columnRange) {
-		this.columnRange = columnRange;
-	}
-
-	/**
-	 * Returns the rowRange.
-	 *
-	 * @return the value of rowRange
-	 */
-	public Range getRowRange() {
-		return rowRange;
-	}
-
-	/**
-	 * Sets the rowRange.
-	 *
-	 * @param rowRange
-	 *            the new value for rowRange
-	 */
-	@ConfigurationProperty(name = "rowRange", label = "Row Range", description = "The range of rows to be imported (e.g. rows 1 to 15", required = false)
-	public void setRowRange(Range rowRange) {
-		this.rowRange = rowRange;
-	}
-
-	/**
-	 * Returns the emptyCellValue. The default value is "".
-	 *
-	 * @return the value of emptyCellValue
-	 */
-	public String getEmptyCellValue() {
-		return emptyCellValue;
-	}
-
-	/**
-	 * Sets the emptyCellValue.
-	 *
-	 * @param emptyCellValue
-	 *            the new value for emptyCellValue
-	 */
-	@ConfigurationProperty(name = "emptyCellValue", label = "Empty Cell Value", description = "The value to use for empty cells. The default is \"\"", required = false)
-	public void setEmptyCellValue(String emptyCellValue) {
-		this.emptyCellValue = emptyCellValue;
-	}
-
-	/**
-	 * Returns the columnNames. The default value is an empty map.
-	 *
-	 * @return the value of columnNames
-	 */
-	public Map<String, String> getColumnNames() {
-		return columnNames;
-	}
-
-	/**
-	 * Sets the columnNames.
-	 *
-	 * @param columnNames
-	 *            the new value for columnNames
-	 */
-	public void setColumnNames(Map<String, String> columnNames) {
-		this.columnNames = columnNames;
-	}
-
-	/**
-	 * Sets the columnNames.
-	 *
-	 * @param columnNames
-	 *            the new value for columnNames
-	 */
-	@ConfigurationProperty(name = "columnNames", label = "Column Name Mapping", description = "Mapping from column to port names", required = false)
-	public void setColumnNames(Set<Mapping> columnNames) {
-		Map<String, String> columnNamesMap = new HashMap<String, String>();
-		for (Mapping mapping : columnNames) {
-			columnNamesMap.put(mapping.column, mapping.port);
-		}
-		this.columnNames = columnNamesMap;
-	}
-
-	/**
-	 * Returns the allRows property. The default value is <code>true</code>.
-	 *
-	 * @return the value of allRows
-	 */
-	public boolean isAllRows() {
-		return allRows;
-	}
-
-	/**
-	 * Sets the allRows property.
-	 *
-	 * @param allRows
-	 *            the new value for allRows
-	 */
-	@ConfigurationProperty(name = "allRows", label = "Import All Rows", description = "Imports all the rows containing data", required = false)
-	public void setAllRows(boolean allRows) {
-		this.allRows = allRows;
-	}
-
-	/**
-	 * Returns the excludeFirstRow property. The default value is <code>false</code>.
-	 *
-	 * @return the value of excludeFirstRow
-	 */
-	public boolean isExcludeFirstRow() {
-		return excludeFirstRow;
-	}
-
-	/**
-	 * Sets the excludeFirstRow property.
-	 *
-	 * @param excludeFirstRow
-	 *            the new value for excludeFirstRow
-	 */
-	@ConfigurationProperty(name = "excludeFirstRow", label = "Exclude First Row", description = "Excludes the first row from the import", required = false)
-	public void setExcludeFirstRow(boolean excludeFirstRow) {
-		this.excludeFirstRow = excludeFirstRow;
-	}
-
-	/**
-	 * Returns the ignoreBlankRows property. The default value is <code>false</code>.
-	 *
-	 * @return the value of ignoreBlankRows
-	 */
-	public boolean isIgnoreBlankRows() {
-		return ignoreBlankRows;
-	}
-
-	/**
-	 * Sets the ignoreBlankRows property.
-	 *
-	 * @param ignoreBlankRows the new value for ignoreBlankRows
-	 */
-	@ConfigurationProperty(name = "ignoreBlankRows", label = "Ignore Blank Rows", description = "Excludes blank rows from the import", required = false)
-	public void setIgnoreBlankRows(boolean ignoreBlankRows) {
-		this.ignoreBlankRows = ignoreBlankRows;
-	}
-
-	/**
-	 * Returns the emptyCellPolicy. The default value is
-	 * <code>SpreadsheetEmptyCellPolicy.EMPTY_STRING</code>.
-	 *
-	 * @return the value of emptyCellPolicy
-	 */
-	public SpreadsheetEmptyCellPolicy getEmptyCellPolicy() {
-		return emptyCellPolicy;
-	}
-
-	/**
-	 * Sets the emptyCellPolicy.
-	 *
-	 * @param emptyCellPolicy
-	 *            the new value for emptyCellPolicy
-	 */
-	@ConfigurationProperty(name = "emptyCellPolicy", label = "Empty Cell Policy", description = "Policy for handling empty cells", required = false)
-	public void setEmptyCellPolicy(SpreadsheetEmptyCellPolicy emptyCellPolicy) {
-		this.emptyCellPolicy = emptyCellPolicy;
-	}
-
-	/**
-	 * Returns the outputFormat. The default value is
-	 * <code>SpreadsheetOutputFormat.PORT_PER_COLUMN</code>.
-	 *
-	 * @return the value of outputFormat
-	 */
-	public SpreadsheetOutputFormat getOutputFormat() {
-		return outputFormat == null ? SpreadsheetOutputFormat.PORT_PER_COLUMN : outputFormat;
-	}
-
-	/**
-	 * Sets the outputFormat.
-	 *
-	 * @param outputFormat
-	 *            the new value for outputFormat
-	 */
-	@ConfigurationProperty(name = "outputFormat", label = "Output Format", description = "How the activity outputs are to be formatted", required = false)
-	public void setOutputFormat(SpreadsheetOutputFormat outputFormat) {
-		this.outputFormat = outputFormat;
-	}
-
-	/**
-	 * Returns the delimiter for CSV formatted output. The default value is
-	 * <code>","</code>.
-	 *
-	 * @return the delimiter for CSV formatted output
-	 */
-	public String getCsvDelimiter() {
-		return csvDelimiter == null ? "," : csvDelimiter;
-	}
-
-	/**
-	 * Sets the delimiter for CSV formatted output.
-	 *
-	 * @param outputFormat
-	 *            the new delimiter for CSV formatted output
-	 */
-	@ConfigurationProperty(name = "csvDelimiter", label = "CSV Delimiter", description = "The delimiter to use for CSV input files. The default is ','", required = false)
-	public void setCsvDelimiter(String csvDelimiter) {
-		this.csvDelimiter = csvDelimiter;
-	}
-
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result + (allRows ? 1231 : 1237);
-		result = prime * result + ((columnNames == null) ? 0 : columnNames.hashCode());
-		result = prime * result + ((columnRange == null) ? 0 : columnRange.hashCode());
-		result = prime * result + ((csvDelimiter == null) ? 0 : csvDelimiter.hashCode());
-		result = prime * result + ((emptyCellPolicy == null) ? 0 : emptyCellPolicy.hashCode());
-		result = prime * result + ((emptyCellValue == null) ? 0 : emptyCellValue.hashCode());
-		result = prime * result + (excludeFirstRow ? 1231 : 1237);
-		result = prime * result + (ignoreBlankRows ? 1231 : 1237);
-		result = prime * result + ((outputFormat == null) ? 0 : outputFormat.hashCode());
-		result = prime * result + ((rowRange == null) ? 0 : rowRange.hashCode());
-		return result;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj) {
-			return true;
-		}
-		if (obj == null) {
-			return false;
-		}
-		if (getClass() != obj.getClass()) {
-			return false;
-		}
-		SpreadsheetImportConfiguration other = (SpreadsheetImportConfiguration) obj;
-		if (allRows != other.allRows) {
-			return false;
-		}
-		if (columnNames == null) {
-			if (other.columnNames != null) {
-				return false;
-			}
-		} else if (!columnNames.equals(other.columnNames)) {
-			return false;
-		}
-		if (columnRange == null) {
-			if (other.columnRange != null) {
-				return false;
-			}
-		} else if (!columnRange.equals(other.columnRange)) {
-			return false;
-		}
-		if (csvDelimiter == null) {
-			if (other.csvDelimiter != null) {
-				return false;
-			}
-		} else if (!csvDelimiter.equals(other.csvDelimiter)) {
-			return false;
-		}
-		if (emptyCellPolicy == null) {
-			if (other.emptyCellPolicy != null) {
-				return false;
-			}
-		} else if (!emptyCellPolicy.equals(other.emptyCellPolicy)) {
-			return false;
-		}
-		if (emptyCellValue == null) {
-			if (other.emptyCellValue != null) {
-				return false;
-			}
-		} else if (!emptyCellValue.equals(other.emptyCellValue)) {
-			return false;
-		}
-		if (excludeFirstRow != other.excludeFirstRow) {
-			return false;
-		}
-		if (ignoreBlankRows != other.ignoreBlankRows) {
-			return false;
-		}
-		if (outputFormat == null) {
-			if (other.outputFormat != null) {
-				return false;
-			}
-		} else if (!outputFormat.equals(other.outputFormat)) {
-			return false;
-		}
-		if (rowRange == null) {
-			if (other.rowRange != null) {
-				return false;
-			}
-		} else if (!rowRange.equals(other.rowRange)) {
-			return false;
-		}
-		return true;
-	}
-
-	@ConfigurationBean(uri = SpreadsheetImportActivity.URI + "/Mapping")
-	public static class Mapping {
-		private String column, port;
-
-		public Mapping() {
-		}
-
-		public String getColumn() {
-			return column;
-		}
-
-		@ConfigurationProperty(name = "column", label = "Column", description = "The name of the column")
-		public void setColumn(String column) {
-			this.column = column;
-		}
-
-		public String getPort() {
-			return port;
-		}
-
-		@ConfigurationProperty(name = "port", label = "Port", description = "The name of the port")
-		public void setPort(String port) {
-			this.port = port;
-		}
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportHealthChecker.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportHealthChecker.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportHealthChecker.java
deleted file mode 100644
index 35db532..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetImportHealthChecker.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester
- *
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- *
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-import java.util.List;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-import net.sf.taverna.t2.workflowmodel.Processor;
-import net.sf.taverna.t2.workflowmodel.health.HealthCheck;
-import net.sf.taverna.t2.workflowmodel.health.HealthChecker;
-import net.sf.taverna.t2.visit.VisitReport;
-import net.sf.taverna.t2.visit.VisitReport.Status;
-
-
-/**
- * Health checker for SpreadsheetImport activities.
- *
- * @author David Withers
- */
-public class SpreadsheetImportHealthChecker implements HealthChecker<SpreadsheetImportActivity> {
-
-	public boolean canVisit(Object subject) {
-		return (subject != null && subject instanceof SpreadsheetImportActivity);
-	}
-
-	public VisitReport visit(SpreadsheetImportActivity activity, List<Object> ancestors) {
-		Processor p = (Processor) VisitReport.findAncestor(ancestors, Processor.class);
-		if (p == null) {
-			return null;
-		}
-		JsonNode configuration = activity.getConfiguration();
-		if (configuration == null) {
-			return new VisitReport(HealthCheck.getInstance(), p, "Spreadsheet import has not been configured", HealthCheck.NO_CONFIGURATION, Status.SEVERE);
-		}
-		return new VisitReport(HealthCheck.getInstance(), p, "Spreadsheet OK", HealthCheck.NO_PROBLEM, Status.OK);
-	}
-
-	public boolean isTimeConsuming() {
-		return false;
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetOutputFormat.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetOutputFormat.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetOutputFormat.java
deleted file mode 100644
index d1aaca8..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetOutputFormat.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-/**
- * Enumeration of the formats for output of spreadsheet cell values.
- * <p>
- * <dl>
- * <dt>PORT_PER_COLUMN</dt>
- * <dd>One port of depth 1 (a list) per column</dd>
- * <dt>SINGLE_PORT</dt>
- * <dd>A single port of depth 0, formatted as CSV</dd>
- * </dl>
- *
- * @author David Withers
- */
-public enum SpreadsheetOutputFormat {
-	PORT_PER_COLUMN, SINGLE_PORT
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetReadException.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetReadException.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetReadException.java
deleted file mode 100644
index 9cd4ba8..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetReadException.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-/**
- * Exception thrown when a spreadsheet cannot be read due to an IO error or when the file format is
- * not supported.
- * 
- * @author David Withers
- */
-public class SpreadsheetReadException extends Exception {
-
-	private static final long serialVersionUID = -823966225836697180L;
-
-	/**
-	 * Constructs a new SpreadsheetReadException with null as its detail message.
-	 */
-	public SpreadsheetReadException() {
-	}
-
-	/**
-	 * Constructs a new SpreadsheetReadException with the specified detail message.
-	 * 
-	 * @param message
-	 */
-	public SpreadsheetReadException(String message) {
-		super(message);
-	}
-
-	/**
-	 * Constructs a new SpreadsheetReadException with the specified cause and a detail message of
-	 * (cause==null ? null : cause.toString()) (which typically contains the class and detail
-	 * message of cause).
-	 * 
-	 * @param cause
-	 */
-	public SpreadsheetReadException(Throwable cause) {
-		super(cause);
-	}
-
-	/**
-	 * Constructs a new SpreadsheetReadException with the specified detail message and cause.
-	 * 
-	 * @param message
-	 * @param cause
-	 */
-	public SpreadsheetReadException(String message, Throwable cause) {
-		super(message, cause);
-	}
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/b7e29f54/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetReader.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetReader.java b/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetReader.java
deleted file mode 100644
index 79c92d1..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/spreadsheet/SpreadsheetReader.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2009 The University of Manchester   
- * 
- *  Modifications to the initial code base are copyright of their
- *  respective authors, or their employers as appropriate.
- * 
- *  This program is free software; you can redistribute it and/or
- *  modify it under the terms of the GNU Lesser General Public License
- *  as published by the Free Software Foundation; either version 2.1 of
- *  the License, or (at your option) any later version.
- *    
- *  This program is distributed in the hope that it will be useful, but
- *  WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- *  Lesser General Public License for more details.
- *    
- *  You should have received a copy of the GNU Lesser General Public
- *  License along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- ******************************************************************************/
-package net.sf.taverna.t2.activities.spreadsheet;
-
-import java.io.InputStream;
-
-/**
- * Interface for reading a spreadsheet from an input stream.
- * 
- * @author David Withers
- */
-public interface SpreadsheetReader {
-
-	/**
-	 * Reads an InputStream and passes spreadsheet cell data values, row by row, to the
-	 * rowProcessor.
-	 * 
-	 * @param inputStream
-	 *            the stream to read
-	 * @param rowProcessor
-	 *            the rowProcessor to write rows of data values to
-	 * @param rowRange
-	 *            the rows to read
-	 * @param columnRange
-	 *            the columns to read
-	 * @param ignoreBlankRows
-	 *            whether to ignore blank rows
-	 * @throws SpreadsheetReadException
-	 *             if there's an error reading the stream or the stream is not a valid spreadsheet
-	 */
-	public void read(InputStream inputStream, Range rowRange, Range columnRange, boolean ignoreBlankRows,
-			SpreadsheetRowProcessor rowProcessor) throws SpreadsheetReadException;
-
-}
\ No newline at end of file