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/23 11:10:09 UTC

[34/54] [partial] incubator-taverna-engine git commit: Revert "temporarily empty repository"

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-observer/src/main/java/net/sf/taverna/t2/lang/observer/SwingAwareObserver.java
----------------------------------------------------------------------
diff --git a/taverna-observer/src/main/java/net/sf/taverna/t2/lang/observer/SwingAwareObserver.java b/taverna-observer/src/main/java/net/sf/taverna/t2/lang/observer/SwingAwareObserver.java
new file mode 100644
index 0000000..39435d7
--- /dev/null
+++ b/taverna-observer/src/main/java/net/sf/taverna/t2/lang/observer/SwingAwareObserver.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (C) 2012 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.lang.observer;
+
+import javax.swing.SwingUtilities;
+
+/**
+ * Implementation of an {@link Observer} that adds calls to notify to the AWT event dispatching
+ * thread.
+ *
+ * @author David Withers
+ */
+public abstract class SwingAwareObserver<Message> implements Observer<Message> {
+
+	@Override
+	public void notify(final Observable<Message> sender, final Message message) throws Exception {
+	    Runnable runnable = new Runnable() {
+			@Override
+			public void run() {
+				notifySwing(sender, message);
+			}
+	    };
+		if (SwingUtilities.isEventDispatchThread()) {
+			runnable.run();
+		} else {
+			// T2-971
+			SwingUtilities.invokeLater(runnable);
+		}
+	}
+
+	public abstract void notifySwing(Observable<Message> sender, Message message);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-observer/src/main/java/net/sf/taverna/t2/lang/observer/package-info.java
----------------------------------------------------------------------
diff --git a/taverna-observer/src/main/java/net/sf/taverna/t2/lang/observer/package-info.java b/taverna-observer/src/main/java/net/sf/taverna/t2/lang/observer/package-info.java
new file mode 100644
index 0000000..e9d3ff2
--- /dev/null
+++ b/taverna-observer/src/main/java/net/sf/taverna/t2/lang/observer/package-info.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (C) 2007 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
+ ******************************************************************************/
+/**
+ * Implementation of the observer pattern.  {@link Observer}s registers with an 
+ * {@link Observable} using {@link Observable#addObserver(Observer)}, and will receive 
+ * notifications as a call to {@link Observer#notify(Observable, Object)}. 
+ * <p>
+ * Typical implementations of {@link Observable} will be delegating to a 
+ * {@link MultiCaster} to do the boring observer registration and message 
+ * dispatching.
+ * </p>
+ * <p>
+ * Example of Observable:
+ * <pre>
+ * public class MyObservable implements Observable<MyEvent> {
+ * 	 public static class MyEvent {
+ * 		// ..
+ * 	 }
+ * 	 private MultiCaster&lt:MyEvent&gt; multiCaster = new MultiCaster&lt:MyEvent&gt;(this);
+ * 
+ *	 public void doStuff() {
+ *		multiCaster.notify(new MyEvent());
+ *	 }
+ * 
+ * 	 public void addObserver(Observer<MyEvent> observer) {
+ * 		multiCaster.addObserver(observer);
+ * 	 }
+ * 
+ * 	 public List<Observer<MyEvent>> getObservers() {
+ * 		return multiCaster.getObservers();
+ * 	 }
+ * 
+ * 	 public void removeObserver(Observer<MyEvent> observer) {
+ * 		multiCaster.removeObserver(observer);
+ * 	 }
+ * }
+ * </pre>
+ * And an observer that is notified when MyObservable.doStuff() is called:
+ * <pre>
+ * public class MyObserver implements Observer<MyEvent> {
+ *	 public void notify(Observable<MyEvent> sender, MyEvent message) {
+ *		System.out.println("Receieved " + message + " from " + sender);
+ * 	 }
+ * }
+ * </pre>
+ * Example of usage:
+ * <pre>
+ * 		MyObservable observable = new MyObservable();
+ *		MyObserver observer = new MyObserver();
+ *		observable.addObserver(observer);
+ *		observable.doStuff();
+ *	</pre>
+ */
+package net.sf.taverna.t2.lang.observer;
+

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-observer/src/test/java/net/sf/taverna/t2/lang/observer/ObserverTest.java
----------------------------------------------------------------------
diff --git a/taverna-observer/src/test/java/net/sf/taverna/t2/lang/observer/ObserverTest.java b/taverna-observer/src/test/java/net/sf/taverna/t2/lang/observer/ObserverTest.java
new file mode 100644
index 0000000..661cbbc
--- /dev/null
+++ b/taverna-observer/src/test/java/net/sf/taverna/t2/lang/observer/ObserverTest.java
@@ -0,0 +1,133 @@
+/*******************************************************************************
+ * Copyright (C) 2007 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.lang.observer;
+
+import static org.junit.Assert.*;
+
+import java.util.List;
+
+import net.sf.taverna.t2.lang.observer.MultiCaster;
+import net.sf.taverna.t2.lang.observer.Observable;
+import net.sf.taverna.t2.lang.observer.Observer;
+
+import org.junit.Test;
+
+public class ObserverTest {
+
+	@Test
+	public void registerObserver() throws Exception {
+		MyObservable observable = new MyObservable();
+		MyObserver observer1 = new MyObserver();
+		MyObserver observer2 = new MyObserver();
+
+		observable.triggerEvent(); // don't notify, but increase count
+		assertNull(observer1.lastMessage);
+		observable.addObserver(observer1);
+		assertNull(observer1.lastMessage);
+		assertNull(observer2.lastMessage);
+		assertNull(observer1.lastSender);
+		assertNull(observer2.lastSender);
+		observable.triggerEvent();
+		assertEquals("This is message 1", observer1.lastMessage);
+		assertSame(observable, observer1.lastSender);
+		assertNull(observer2.lastSender);
+
+		observable.addObserver(observer2);
+		assertNull(observer2.lastMessage);
+		observable.triggerEvent();
+		assertEquals("This is message 2", observer1.lastMessage);
+		assertEquals("This is message 2", observer2.lastMessage);
+		assertSame(observable, observer1.lastSender);
+		assertSame(observable, observer2.lastSender);
+
+		MyObservable otherObservable = new MyObservable();
+		otherObservable.addObserver(observer2);
+		otherObservable.triggerEvent();
+		// New instance, should start from 0
+		assertEquals("This is message 0", observer2.lastMessage);
+		assertSame(otherObservable, observer2.lastSender);
+
+		// observer1 unchanged
+		assertEquals("This is message 2", observer1.lastMessage);
+		assertSame(observable, observer1.lastSender);
+
+	}
+
+	@Test
+	public void concurrencyTest() {
+		MyObservable observable = new MyObservable();
+		MyObserver dummyObserver = new MyObserver();
+		SelvRemovingObserver selfRemoving = new SelvRemovingObserver();
+		observable.addObserver(dummyObserver);
+		observable.addObserver(selfRemoving);
+		assertEquals(2, observable.getObservers().size());
+		observable.triggerEvent();
+		
+		
+	}
+	
+	public class MyObservable implements Observable<String> {
+
+		private int counter = 0;
+		MultiCaster<String> multiCaster = new MultiCaster<String>(this);
+
+		public void addObserver(Observer<String> observer) {
+			multiCaster.addObserver(observer);
+		}
+
+		public void removeObserver(Observer<String> observer) {
+			multiCaster.removeObserver(observer);
+		}
+
+		public void triggerEvent() {
+			multiCaster.notify("This is message " + counter++);
+		}
+
+		public List<Observer<String>> getObservers() {
+			return multiCaster.getObservers();
+		}
+	}
+
+	public class MyObserver implements Observer<String> {
+		String lastMessage = null;
+		Observable<String> lastSender = null;
+
+		public void notify(Observable<String> sender, String message) {
+			lastSender = sender;
+			lastMessage = message;
+		}
+	}
+	
+	public class SelvRemovingObserver implements Observer<String> {
+
+		public int called=0;
+		
+		public void notify(Observable<String> sender, String message) {
+			called++;
+			if (called > 1) {
+				fail("Did not remove itself");
+			}
+			sender.removeObserver(this);
+		}
+		
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-platform-integration-tests/pom.xml
----------------------------------------------------------------------
diff --git a/taverna-platform-integration-tests/pom.xml b/taverna-platform-integration-tests/pom.xml
new file mode 100644
index 0000000..362fbdc
--- /dev/null
+++ b/taverna-platform-integration-tests/pom.xml
@@ -0,0 +1,635 @@
+<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/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.apache.taverna.engine</groupId>
+		<artifactId>taverna-engine</artifactId>
+		<version>3.1.0-incubating-SNAPSHOT</version>
+	</parent>
+	<artifactId>taverna-integration-tests</artifactId>
+	<name>Apache Taverna Platform integration tests</name>
+	<properties>
+		<spring.dm.version>2.0.0.M1</spring.dm.version>
+		<spring.version>3.0.0.RC1</spring.version>
+	</properties>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<configuration>
+					<forkMode>pertest</forkMode>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>copy</id>
+						<phase>generate-test-resources</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<!-- xerces and xalan are required for the tests but the test framework -->
+								<!-- fails to run if they are put on the test classpath by maven -->
+								<!-- This ensures they are pulled into the local repository -->
+								<artifactItem>
+									<groupId>org.apache.xalan</groupId>
+									<artifactId>com.springsource.org.apache.xalan</artifactId>
+									<version>2.7.1</version>
+								</artifactItem>
+								<artifactItem>
+									<groupId>org.apache.xerces</groupId>
+									<artifactId>com.springsource.org.apache.xerces</artifactId>
+									<version>2.9.1</version>
+								</artifactItem>
+							</artifactItems>
+							<outputDirectory>${project.build.directory}/tmp</outputDirectory>
+							<overWriteReleases>false</overWriteReleases>
+							<overWriteSnapshots>true</overWriteSnapshots>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+	<dependencies>
+		<!-- Spring OSGI testing framework -->
+		<dependency>
+			<groupId>org.springframework.osgi</groupId>
+			<artifactId>spring-osgi-test</artifactId>
+			<version>${spring.dm.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.osgi</groupId>
+			<artifactId>spring-osgi-annotation</artifactId>
+			<version>${spring.dm.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.osgi</groupId>
+			<artifactId>spring-osgi-core</artifactId>
+			<version>${spring.dm.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.osgi</groupId>
+			<artifactId>spring-osgi-extender</artifactId>
+			<version>${spring.dm.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>org.springframework.aop</artifactId>
+			<version>${spring.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>org.springframework.asm</artifactId>
+			<version>${spring.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>org.springframework.beans</artifactId>
+			<version>${spring.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>org.springframework.context</artifactId>
+			<version>${spring.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>org.springframework.core</artifactId>
+			<version>${spring.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>org.springframework.jdbc</artifactId>
+			<version>${spring.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>org.springframework.orm</artifactId>
+			<version>${spring.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>org.springframework.transaction</artifactId>
+			<version>${spring.version}</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.derby</groupId>
+			<artifactId>com.springsource.org.apache.derby</artifactId>
+			<version>10.5.1000001.764942</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.derby</groupId>
+			<artifactId>com.springsource.org.apache.derby.client</artifactId>
+			<version>10.5.1000001.764942</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.derby</groupId>
+			<artifactId>com.springsource.org.apache.derby.drda</artifactId>
+			<version>10.5.1000001.764942</version>
+		</dependency>
+		<dependency>
+			<groupId>org.aopalliance</groupId>
+			<artifactId>com.springsource.org.aopalliance</artifactId>
+			<version>1.0.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.aspectj</groupId>
+			<artifactId>com.springsource.org.aspectj.runtime</artifactId>
+			<version>1.6.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.aspectj</groupId>
+			<artifactId>com.springsource.org.aspectj.weaver</artifactId>
+			<version>1.6.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.objectweb.asm</groupId>
+			<artifactId>com.springsource.org.objectweb.asm</artifactId>
+			<version>2.2.3</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>com.springsource.slf4j.api</artifactId>
+			<version>1.5.6</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>com.springsource.slf4j.log4j</artifactId>
+			<version>1.5.6</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<version>1.2.16</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId>
+			<version>1.5.6</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>3.8.2</version>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- Equinox OSGI Framework -->
+		<dependency>
+			<groupId>org.eclipse.osgi</groupId>
+			<artifactId>org.eclipse.osgi</artifactId>
+			<version>3.6.0.v20100517</version>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- Felix OSGI Framework -->
+		<dependency>
+			<groupId>org.apache.felix</groupId>
+			<artifactId>org.apache.felix.main</artifactId>
+			<version>3.2.2</version>
+			<scope>test</scope>
+		</dependency>
+
+		<!-- OSGI Enterprise Services -->
+		<dependency>
+			<groupId>org.apache.aries.jndi</groupId>
+			<artifactId>org.apache.aries.jndi</artifactId>
+			<version>0.3</version>
+		</dependency>
+
+		<!-- Taverna OSGI Services -->
+		<!-- <dependency> <groupId>org.apache.taverna.osgi</groupId> <artifactId>xml-parser-service</artifactId>
+			<version>${taverna.osgi.version}</version> <exclusions> <exclusion> <groupId>org.apache.xerces</groupId>
+			<artifactId>com.springsource.org.apache.xerces</artifactId> </exclusion>
+			</exclusions> </dependency> -->
+		<dependency>
+			<groupId>org.apache.taverna.osgi</groupId>
+			<artifactId>xml-transformer-service</artifactId>
+			<version>${taverna.osgi.version}</version>
+			<exclusions>
+				<exclusion>
+					<groupId>org.apache.xalan</groupId>
+					<artifactId>com.springsource.org.apache.xalan</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+
+		<!-- Taverna -->
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-workflowmodel-api</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-workflowmodel-core-extensions</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-workflowmodel-impl</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-reference-api</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-reference-types</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>reference-impl</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-observer</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<!-- is this needed here?  (Why?)
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>ui</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+	-->
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-credential-manager</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-credential-manager-impl</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.osgi</groupId>
+			<artifactId>taverna-configuration-api</artifactId>
+			<version>${taverna.osgi.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.osgi</groupId>
+			<artifactId>taverna-configuration-impl</artifactId>
+			<version>${taverna.osgi.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.osgi</groupId>
+			<artifactId>taverna-app-configuration-api</artifactId>
+			<version>${taverna.osgi.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.osgi</groupId>
+			<artifactId>taverna-app-configuration-impl</artifactId>
+			<version>${taverna.osgi.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-database-configuration-api</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-database-configuration-impl</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+
+		<!-- Taverna Platform -->
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-capability-impl</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-execution-impl</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-run-impl</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-execution-local</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>${project.parent.groupId}</groupId>
+			<artifactId>taverna-report-api</artifactId>
+			<version>${project.parent.version}</version>
+		</dependency>
+
+		<!-- Scufl2 -->
+		<dependency>
+			<groupId>org.apache.taverna.language</groupId>
+			<artifactId>taverna-scufl2-api</artifactId>
+			<version>${taverna.language.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.language</groupId>
+			<artifactId>taverna-scufl2-t2flow</artifactId>
+			<version>${taverna.language.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.language</groupId>
+			<artifactId>taverna-scufl2-rdfxml</artifactId>
+			<version>${taverna.language.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.language</groupId>
+			<artifactId>taverna-scufl2-ucfpackage</artifactId>
+			<version>${taverna.language.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.language</groupId>
+			<artifactId>taverna-scufl2-validation</artifactId>
+			<version>${taverna.language.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.language</groupId>
+			<artifactId>taverna-scufl2-validation-correctness</artifactId>
+			<version>${taverna.language.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.taverna.language</groupId>
+			<artifactId>taverna-scufl2-validation-structural</artifactId>
+			<version>${taverna.language.version}</version>
+		</dependency>
+
+		<!-- Taverna CommandLine Tool -->
+		<dependency>
+			<groupId>org.apache.taverna.commandline</groupId>
+			<artifactId>taverna-commandline-common</artifactId>
+			<version>2.0-SNAPSHOT</version>
+		</dependency>
+
+		<!-- Dependencies declared as provided by some poms - specified here to
+			ensure that they are in the local repository for the testing framework -->
+		<dependency>
+			<groupId>commons-dbcp</groupId>
+			<artifactId>commons-dbcp</artifactId>
+			<version>1.4</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-pool</groupId>
+			<artifactId>commons-pool</artifactId>
+			<version>1.5.6</version>
+		</dependency>
+		<dependency>
+			<groupId>com.sun.xml</groupId>
+			<artifactId>com.springsource.com.sun.xml.bind</artifactId>
+			<version>2.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.thoughtworks.xstream</groupId>
+			<artifactId>com.springsource.com.thoughtworks.xstream</artifactId>
+			<version>1.2.2</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.activation</groupId>
+			<artifactId>com.springsource.javax.activation</artifactId>
+			<version>1.1.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.jms</groupId>
+			<artifactId>com.springsource.javax.jms</artifactId>
+			<version>1.1.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.mail</groupId>
+			<artifactId>com.springsource.javax.mail</artifactId>
+			<version>1.4.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>com.springsource.javax.servlet</artifactId>
+			<version>2.5.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.transaction</groupId>
+			<artifactId>com.springsource.javax.transaction</artifactId>
+			<version>1.1.0</version>
+		</dependency>
+		<dependency>
+			<groupId>javax.wsdl</groupId>
+			<artifactId>com.springsource.javax.wsdl</artifactId>
+			<version>1.6.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.xml.soap</groupId>
+			<artifactId>com.springsource.javax.xml.soap</artifactId>
+			<version>1.3.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.xml.rpc</groupId>
+			<artifactId>com.springsource.javax.xml.rpc</artifactId>
+			<version>1.1.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.xml.stream</groupId>
+			<artifactId>com.springsource.javax.xml.stream</artifactId>
+			<version>1.0.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.axis</groupId>
+			<artifactId>com.springsource.org.apache.axis</artifactId>
+			<version>1.4.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.codec</artifactId>
+			<version>1.4.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.csv</artifactId>
+			<version>1.0.0.BUILD-20080106</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.discovery</artifactId>
+			<version>0.4.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.httpclient</artifactId>
+			<version>3.1.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.io</artifactId>
+			<version>1.4.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.lang</artifactId>
+			<version>2.5.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.logging</artifactId>
+			<version>1.1.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.net</artifactId>
+			<version>1.4.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.commons</groupId>
+			<artifactId>com.springsource.org.apache.commons.cli</artifactId>
+			<version>1.2.0</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>com.springsource.org.apache.httpcomponents.httpclient</artifactId>
+			<version>4.1.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcore</groupId>
+			<artifactId>com.springsource.org.apache.httpcomponents.httpcore</artifactId>
+			<version>4.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.ws.security</groupId>
+			<artifactId>wss4j</artifactId>
+			<version>1.5.12</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.xml</groupId>
+			<artifactId>com.springsource.org.apache.xml.resolver</artifactId>
+			<version>1.2.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.xmlbeans</groupId>
+			<artifactId>com.springsource.org.apache.xmlbeans</artifactId>
+			<version>2.4.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.xmlcommons</groupId>
+			<artifactId>com.springsource.org.apache.xmlcommons</artifactId>
+			<version>1.3.4</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.xalan</groupId>
+			<artifactId>com.springsource.org.apache.xml.serializer</artifactId>
+			<version>2.7.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.xml</groupId>
+			<artifactId>com.springsource.org.apache.xml.security</artifactId>
+			<version>1.4.2</version>
+			<scope>test</scope>
+			<exclusions>
+				<exclusion>
+					<groupId>org.apache.xalan</groupId>
+					<artifactId>com.springsource.org.apache.xalan</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<!-- <dependency> <groupId>org.apache.ws</groupId> <artifactId>com.springsource.org.apache.ws.security</artifactId>
+			<version>1.5.8</version> <scope>test</scope> <exclusions> <exclusion> <groupId>org.apache.xalan</groupId>
+			<artifactId>com.springsource.org.apache.xalan</artifactId> </exclusion> </exclusions>
+			</dependency> -->
+			<!--
+		<dependency>
+			<groupId>org.beanshell</groupId>
+			<artifactId>com.springsource.bsh</artifactId>
+			<version>2.0.0.b4</version>
+		</dependency>
+		<dependency>
+			<groupId>org.biomart</groupId>
+			<artifactId>martservice</artifactId>
+			<version>2.0-SNAPSHOT</version>
+		</dependency>
+	-->
+		<dependency>
+			<groupId>org.dom4j</groupId>
+			<artifactId>com.springsource.org.dom4j</artifactId>
+			<version>1.6.1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.jaxen</groupId>
+			<artifactId>com.springsource.org.jaxen</artifactId>
+			<version>1.1.1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.jdom</groupId>
+			<artifactId>com.springsource.org.jdom</artifactId>
+			<version>1.1.0</version>
+		</dependency>
+		<!-- <dependency> <groupId>org.odftoolkit</groupId> <artifactId>odfdom-java.bundle</artifactId>
+			<version>0.7.0</version> <exclusions> <exclusion> <groupId>org.apache.xerces</groupId>
+			<artifactId>com.springsource.org.apache.xerces</artifactId> </exclusion>
+			</exclusions> </dependency> -->
+		<dependency>
+			<groupId>org.opensaml</groupId>
+			<artifactId>com.springsource.org.opensaml</artifactId>
+			<version>1.1.0</version>
+			<scope>test</scope>
+			<exclusions>
+				<exclusion>
+					<groupId>org.apache.xalan</groupId>
+					<artifactId>com.springsource.org.apache.xalan</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>org.xmlpull</groupId>
+			<artifactId>com.springsource.org.xmlpull</artifactId>
+			<version>1.1.3.4-O</version>
+		</dependency>
+	</dependencies>
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/ActivityIT.java
----------------------------------------------------------------------
diff --git a/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/ActivityIT.java b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/ActivityIT.java
new file mode 100644
index 0000000..bb82107
--- /dev/null
+++ b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/ActivityIT.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (C) 2010 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 uk.org.taverna.platform;
+
+import java.net.URI;
+import java.util.List;
+
+import net.sf.taverna.t2.workflowmodel.processor.activity.Activity;
+
+import org.osgi.framework.ServiceReference;
+
+import uk.org.taverna.platform.capability.activity.ActivityConfigurationException;
+import uk.org.taverna.platform.capability.activity.ActivityNotFoundException;
+import uk.org.taverna.platform.capability.activity.ActivityService;
+import uk.org.taverna.scufl2.api.configurations.ConfigurationDefinition;
+
+public class ActivityIT extends PlatformIT {
+
+	public void testGetActivityURIs() {
+		ServiceReference activityServiceReference = bundleContext.getServiceReference("uk.org.taverna.platform.activity.ActivityService");
+		ActivityService activityService = (ActivityService) bundleContext.getService(activityServiceReference);
+		List<URI> activityURIs = activityService.getActivityURIs();
+		System.out.println("================= Available Activities ===================");
+		for (URI uri : activityURIs) {
+			System.out.println(uri);
+		}
+		System.out.println("==========================================================");
+		System.out.println("");
+	}
+
+	public void testCreateActivity() throws ActivityNotFoundException, ActivityConfigurationException {
+		ServiceReference activityServiceReference = bundleContext.getServiceReference("uk.org.taverna.platform.activity.ActivityService");
+		ActivityService activityService = (ActivityService) bundleContext.getService(activityServiceReference);
+		List<URI> activityURIs = activityService.getActivityURIs();
+		for (URI uri : activityURIs) {
+			System.out.println("Creating activity " + uri);
+			Activity<?> activity = activityService.createActivity(uri, null);
+		}
+	}
+
+	public void testGetActivityConfigurationDefinition() throws Exception {
+		ServiceReference activityServiceReference = bundleContext.getServiceReference("uk.org.taverna.platform.activity.ActivityService");
+		ActivityService activityService = (ActivityService) bundleContext.getService(activityServiceReference);
+
+		List<URI> activityURIs = activityService.getActivityURIs();
+		System.out.println("============ Activity Configuration Definitions ==========");
+		for (URI uri : activityURIs) {
+			ConfigurationDefinition configurationDefinition = activityService.getActivityConfigurationDefinition(uri);
+			System.out.println(configurationDefinition);
+		}
+		System.out.println("==========================================================");
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/CommandLineToolIT.java
----------------------------------------------------------------------
diff --git a/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/CommandLineToolIT.java b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/CommandLineToolIT.java
new file mode 100644
index 0000000..f2df658
--- /dev/null
+++ b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/CommandLineToolIT.java
@@ -0,0 +1,91 @@
+/*******************************************************************************
+ * Copyright (C) 2010 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 uk.org.taverna.platform;
+
+import net.sf.taverna.t2.commandline.CommandLineTool;
+
+import org.osgi.framework.ServiceReference;
+
+import uk.org.taverna.commandline.args.CommandLineArguments;
+import uk.org.taverna.platform.run.api.RunService;
+import uk.org.taverna.scufl2.api.io.WorkflowBundleIO;
+import uk.org.taverna.scufl2.api.io.WorkflowBundleReader;
+
+public class CommandLineToolIT extends PlatformIT {
+
+	private RunService runService;
+	private WorkflowBundleIO workflowBundleIO;
+	private WorkflowBundleReader workflowReader;
+
+	protected void setup() throws Exception {
+		super.setup();
+		if (runService == null) {
+			ServiceReference runServiceReference = bundleContext
+					.getServiceReference("uk.org.taverna.platform.run.api.RunService");
+			runService = (RunService) bundleContext.getService(runServiceReference);
+		}
+
+		if (workflowReader == null) {
+			ServiceReference workflowBundleReaderServiceReference = bundleContext
+					.getServiceReferences("uk.org.taverna.scufl2.api.io.WorkflowBundleReader",
+							"(mediaType=application/vnd.taverna.t2flow+xml)")[0];
+			workflowBundleReader = (WorkflowBundleReader) bundleContext
+					.getService(workflowBundleReaderServiceReference);
+		}
+
+		if (workflowBundleIO == null) {
+			ServiceReference workflowBundleIOServiceReference = bundleContext
+					.getServiceReference("uk.org.taverna.scufl2.api.io.WorkflowBundleIO");
+			workflowBundleIO = (WorkflowBundleIO) bundleContext
+					.getService(workflowBundleIOServiceReference);
+		}
+	}
+
+	public void testCommandLineTool() throws Exception {
+
+		setup();
+
+		CommandLineTool cmdTool = new CommandLineTool();
+		cmdTool.setRunService(runService);
+		cmdTool.setCredentialManager(credentialManager);
+		cmdTool.setWorkflowBundleIO(workflowBundleIO);
+		cmdTool.setCommandLineArgumentsService(new CommandLineArguments() {
+			public String[] getCommandLineArguments() {
+				return new String[] { "-outputdoc", "/tmp/taverna3/baclava-output1.xml",
+						"/Users/alex/Desktop/t2flows/simple-wf-no-inputs-one-output.t2flow" };
+			}
+
+		});
+		cmdTool.run();
+
+		cmdTool.setCommandLineArgumentsService(new CommandLineArguments() {
+			public String[] getCommandLineArguments() {
+				return new String[] { "-inputvalue", "in", "Taverna 3 Platform rules",
+						"-outputdoc", "/tmp/taverna3/baclava-output2.xml",
+						"/Users/alex/Desktop/t2flows/simple-wf-one-input-one-output.t2flow" };
+			}
+
+		});
+		cmdTool.run();
+
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/ExecutionIT.java
----------------------------------------------------------------------
diff --git a/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/ExecutionIT.java b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/ExecutionIT.java
new file mode 100644
index 0000000..76a25b3
--- /dev/null
+++ b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/ExecutionIT.java
@@ -0,0 +1,134 @@
+/*******************************************************************************
+ * Copyright (C) 2010 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 uk.org.taverna.platform;
+
+import java.net.URI;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.osgi.framework.ServiceReference;
+
+import uk.org.taverna.platform.capability.activity.ActivityConfigurationException;
+import uk.org.taverna.platform.capability.activity.ActivityNotFoundException;
+import uk.org.taverna.platform.data.api.Data;
+import uk.org.taverna.platform.capability.dispatch.DispatchLayerConfigurationException;
+import uk.org.taverna.platform.capability.dispatch.DispatchLayerNotFoundException;
+import uk.org.taverna.platform.execution.api.AbstractExecutionEnvironment;
+import uk.org.taverna.platform.execution.api.AbstractExecutionService;
+import uk.org.taverna.platform.execution.api.Execution;
+import uk.org.taverna.platform.execution.api.ExecutionEnvironment;
+import uk.org.taverna.platform.execution.api.ExecutionEnvironmentService;
+import uk.org.taverna.platform.execution.api.InvalidWorkflowException;
+import uk.org.taverna.scufl2.api.configurations.ConfigurationDefinition;
+import uk.org.taverna.scufl2.api.container.WorkflowBundle;
+import uk.org.taverna.scufl2.api.core.Workflow;
+import uk.org.taverna.scufl2.api.profiles.Profile;
+
+public class ExecutionIT extends PlatformIT {
+
+	private ExecutionEnvironmentService executionEnvironmentService;
+
+	protected void setup() throws Exception {
+		super.setup();
+		ServiceReference[] executionServiceReferences = bundleContext.getServiceReferences(
+				"uk.org.taverna.platform.execution.api.ExecutionEnvironmentService", null);
+		assertEquals(1, executionServiceReferences.length);
+		executionEnvironmentService = (ExecutionEnvironmentService) bundleContext
+				.getService(executionServiceReferences[0]);
+
+	}
+
+	public void testGetExecutionEnvironments() throws Exception {
+		setup();
+
+		Set<ExecutionEnvironment> executionEnvironments = executionEnvironmentService
+				.getExecutionEnvironments();
+		int size = executionEnvironments.size();
+
+		bundleContext.registerService("uk.org.taverna.platform.execution.api.ExecutionService",
+				new AbstractExecutionService("test id", "test name", "test description") {
+					public Set<ExecutionEnvironment> getExecutionEnvivonments() {
+						return Collections
+								.<ExecutionEnvironment> singleton(new AbstractExecutionEnvironment(
+										"test id", "test name", "test description", this) {
+									public List<URI> getDispatchLayerURIs() {
+										return Collections.singletonList(URI
+												.create("http://ns.taverna.org.uk/2010/dispatchlayer/testDispatchLayer"));
+									}
+
+									public List<URI> getActivityURIs() {
+										return Collections.singletonList(URI
+												.create("http://ns.taverna.org.uk/2010/activity/testActivity"));
+									}
+
+									public boolean dispatchLayerExists(URI uri) {
+										return false;
+									}
+
+									public boolean activityExists(URI uri) {
+										return false;
+									}
+
+									public ConfigurationDefinition getActivityConfigurationDefinition(
+											URI uri) throws ActivityNotFoundException,
+											ActivityConfigurationException {
+										return null;
+									}
+
+									public ConfigurationDefinition getDispatchLayerConfigurationDefinition(
+											URI uri) throws DispatchLayerNotFoundException,
+											DispatchLayerConfigurationException {
+										return null;
+									}
+								});
+					}
+
+					protected Execution createExecutionImpl(WorkflowBundle workflowBundle,
+							Workflow workflow, Profile profile, Map<String, Data> inputs) throws InvalidWorkflowException {
+						return null;
+					}
+				}, null);
+
+
+		executionEnvironments = executionEnvironmentService
+				.getExecutionEnvironments();
+		assertEquals(size + 1, executionEnvironments.size());
+
+		for (ExecutionEnvironment executionEnvironment : executionEnvironments) {
+			System.out.println(executionEnvironment);
+		}
+	}
+
+	public void testGetExecutionEnvironmentsProfile() throws Exception {
+		setup();
+
+		WorkflowBundle workflowBundle = loadWorkflow("/t2flow/beanshell.t2flow");
+
+		Set<ExecutionEnvironment> executionEnvironments = executionEnvironmentService
+				.getExecutionEnvironments(workflowBundle.getMainProfile());
+		assertTrue(executionEnvironments.size() > 0);
+
+		System.out.println(executionEnvironments.iterator().next());
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/LocalExecutionIT.java
----------------------------------------------------------------------
diff --git a/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/LocalExecutionIT.java b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/LocalExecutionIT.java
new file mode 100644
index 0000000..92068d5
--- /dev/null
+++ b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/LocalExecutionIT.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (C) 2010 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 uk.org.taverna.platform;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.osgi.framework.ServiceReference;
+
+import uk.org.taverna.platform.data.api.Data;
+import uk.org.taverna.platform.data.api.DataService;
+import uk.org.taverna.platform.execution.api.ExecutionEnvironment;
+import uk.org.taverna.platform.execution.api.ExecutionService;
+import uk.org.taverna.platform.report.State;
+import uk.org.taverna.platform.report.WorkflowReport;
+import uk.org.taverna.scufl2.api.container.WorkflowBundle;
+import uk.org.taverna.scufl2.api.core.Workflow;
+import uk.org.taverna.scufl2.api.profiles.Profile;
+
+public class LocalExecutionIT extends PlatformIT {
+
+	private ExecutionService executionService;
+	private DataService dataService;
+	private Set<ExecutionEnvironment> executionEnvironments;
+
+	protected void setup() throws Exception {
+		super.setup();
+		if (executionService == null) {
+			ServiceReference[] executionServiceReferences = bundleContext.getServiceReferences(
+					"uk.org.taverna.platform.execution.api.ExecutionService",
+					"(org.springframework.osgi.bean.name=localExecution)");
+			assertEquals(1, executionServiceReferences.length);
+			executionService = (ExecutionService) bundleContext
+					.getService(executionServiceReferences[0]);
+			executionEnvironments = executionService.getExecutionEnvivonments();
+			assertEquals(1, executionEnvironments.size());
+		}
+		if (dataService == null) {
+			ServiceReference dataServiceReference = bundleContext
+					.getServiceReference("uk.org.taverna.platform.data.DataService");
+			dataService = (DataService) bundleContext.getService(dataServiceReference);
+		}
+	}
+
+	public void testLocalExecution() throws Exception {
+		setup();
+
+		WorkflowBundle workflowBundle = loadWorkflow("/t2flow/in-out.t2flow");
+		Workflow workflow = workflowBundle.getMainWorkflow();
+		Profile profile = workflowBundle.getMainProfile();
+		for (ExecutionEnvironment executionEnvironment : executionEnvironments) {
+			Map<String, Data> inputs = Collections.singletonMap("in", dataService.create("test-input"));
+
+			String executionId = executionService.createExecution(executionEnvironment,
+					workflowBundle, workflow, profile, inputs);
+			WorkflowReport report = executionService.getWorkflowReport(executionId);
+			assertEquals(State.CREATED, report.getState());
+			executionService.start(executionId);
+
+			Map<String, Data> results = report.getOutputs();
+			assertNotNull(results);
+			waitForResults(results, report, "out");
+
+			Object result = results.get("out").getValue();
+			assertEquals("test-input", result);
+			assertEquals(State.COMPLETED, report.getState());
+			System.out.println(report);
+		}
+	}
+
+	public void testLocalExecution2() throws Exception {
+		setup();
+
+		WorkflowBundle workflowBundle = loadWorkflow("/t2flow/beanshell.t2flow");
+		Workflow workflow = workflowBundle.getMainWorkflow();
+		Profile profile = workflowBundle.getMainProfile();
+
+		for (ExecutionEnvironment executionEnvironment : executionEnvironments) {
+			Map<String, Data> inputs = Collections.singletonMap("in", dataService.create("test-input"));
+
+			String executionId = executionService.createExecution(executionEnvironment,
+					workflowBundle, workflow, profile, inputs);
+			WorkflowReport report = executionService.getWorkflowReport(executionId);
+			System.out.println(report);
+			assertEquals(State.CREATED, report.getState());
+			executionService.start(executionId);
+			System.out.println(report);
+
+			Map<String, Data> results = report.getOutputs();
+			waitForResults(results, report, "out");
+
+			List<Data> result = results.get("out").getElements();
+			assertEquals(1000, result.size());
+			assertEquals("test-input:0", result.get(0).getValue());
+			assertEquals(State.COMPLETED, report.getState());
+			System.out.println(report);
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/OSGIFrameworkIT.java
----------------------------------------------------------------------
diff --git a/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/OSGIFrameworkIT.java b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/OSGIFrameworkIT.java
new file mode 100644
index 0000000..38f46c7
--- /dev/null
+++ b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/OSGIFrameworkIT.java
@@ -0,0 +1,93 @@
+/*******************************************************************************
+ * Copyright (C) 2010 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 uk.org.taverna.platform;
+
+import java.io.IOException;
+
+import org.osgi.framework.Bundle;
+import org.springframework.core.io.Resource;
+import org.springframework.osgi.util.OsgiStringUtils;
+
+public class OSGIFrameworkIT extends PlatformIT {
+
+	public void testOsgiEnvironment() throws Exception {
+		Bundle[] bundles = bundleContext.getBundles();
+		for (int i = 0; i < bundles.length; i++) {
+			System.out.println(OsgiStringUtils.nullSafeName(bundles[i]));
+		}
+		System.out.println();
+	}
+
+	protected String[] getTestFrameworkBundlesNames() {
+		String[] frameworkBundles = super.getTestFrameworkBundlesNames();
+		System.out.println("Test Framework bundles:");
+		for (String bundle : frameworkBundles) {
+			System.out.println("  " + bundle);
+		}
+		return frameworkBundles;
+	}
+
+	protected String[] getTestBundlesNames() {
+		String[] frameworkBundles = super.getTestBundlesNames();
+		System.out.println("Framework bundles:");
+		for (String bundle : frameworkBundles) {
+			System.out.println("  " + bundle);
+		}
+		return frameworkBundles;
+	}
+
+	public void testPrintConfig() throws IOException {
+		Resource[] bundles = getTestBundles();
+		Resource[] testBundles = getTestFrameworkBundles();
+		StringBuilder sb = new StringBuilder();
+		StringBuilder sb2 = new StringBuilder();
+		System.out.println("mkdir platform");
+		System.out.println("mkdir platform/configuration");
+		sb2.append("cp ");
+		sb.append("osgi.bundles=");
+		boolean printComma = false;
+		for (Resource resource : bundles) {
+			if (printComma) {
+				sb.append(", ");
+				sb2.append(" ");
+			}
+			sb.append(resource.getFilename() + "@start");
+			sb2.append(resource.getFile());
+			printComma = true;
+		}
+		for (Resource resource : testBundles) {
+			if (!resource.getFilename().contains("test")) {
+				if (printComma) {
+					sb.append(", ");
+					sb2.append(" ");
+				}
+				sb.append(resource.getFilename() + "@start");
+				sb2.append(resource.getFile());
+				printComma = true;
+			}
+		}
+		sb2.append(" platform");
+		System.out.println("echo \"" + sb.toString() + "\" > platform/configuration/config.ini");
+		System.out.println(sb2.toString());
+		System.out.println("zip platform.zip platform/*");
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-taverna-engine/blob/246a16e2/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/PlatformIT.java
----------------------------------------------------------------------
diff --git a/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/PlatformIT.java b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/PlatformIT.java
new file mode 100644
index 0000000..40b35e9
--- /dev/null
+++ b/taverna-platform-integration-tests/src/test/java/uk/org/taverna/platform/PlatformIT.java
@@ -0,0 +1,378 @@
+/*******************************************************************************
+ * Copyright (C) 2010 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 uk.org.taverna.platform;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
+
+import net.sf.taverna.t2.reference.ErrorDocument;
+import net.sf.taverna.t2.reference.StackTraceElementBean;
+import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
+import net.sf.taverna.t2.security.credentialmanager.MasterPasswordProvider;
+
+import org.eclipse.osgi.framework.internal.core.Constants;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.jndi.JNDIContextManager;
+import org.springframework.osgi.test.AbstractConfigurableBundleCreatorTests;
+import org.springframework.osgi.test.platform.OsgiPlatform;
+import org.springframework.osgi.test.platform.Platforms;
+
+import uk.org.taverna.configuration.app.ApplicationConfiguration;
+import uk.org.taverna.configuration.database.DatabaseConfiguration;
+import uk.org.taverna.platform.data.api.Data;
+import uk.org.taverna.platform.report.State;
+import uk.org.taverna.platform.report.WorkflowReport;
+import uk.org.taverna.scufl2.api.container.WorkflowBundle;
+import uk.org.taverna.scufl2.api.io.WorkflowBundleReader;
+import uk.org.taverna.scufl2.translator.t2flow.T2FlowReader;
+
+public class PlatformIT extends AbstractConfigurableBundleCreatorTests {
+
+	protected WorkflowBundleReader workflowBundleReader;
+	protected CredentialManager credentialManager;
+	protected MasterPasswordProvider masterPasswordProvider;
+	protected DatabaseConfiguration databaseConfiguration;
+	protected JNDIContextManager jndiContextManager;
+	protected ApplicationConfiguration applicationConfiguration;
+
+	protected String getPlatformName() {
+		// return Platforms.FELIX;
+		return Platforms.EQUINOX;
+	}
+
+	@Override
+	protected OsgiPlatform createPlatform() {
+		OsgiPlatform platform = super.createPlatform();
+		Properties config = platform.getConfigurationProperties();
+		config.setProperty("org.osgi.framework.system.packages.extra",
+				"com.sun.org.apache.xml.internal.utils");
+		return platform;
+	}
+
+	@Override
+	protected String[] getTestBundlesNames() {
+		return new String[] {
+				"com.jcraft.jsch, com.springsource.com.jcraft.jsch, 0.1.41",
+				"com.sun.xml, com.springsource.com.sun.xml.bind, 2.2.0",
+				"com.sun.xml, com.springsource.com.sun.xml.fastinfoset, 1.2.2",
+				"com.thoughtworks.xstream, com.springsource.com.thoughtworks.xstream, 1.2.2",
+				"commons-dbcp, commons-dbcp, 1.4",
+				"commons-pool, commons-pool, 1.5.6",
+				"javax.activation, com.springsource.javax.activation, 1.1.1",
+				"javax.jms, com.springsource.javax.jms, 1.1.0",
+				"javax.mail, com.springsource.javax.mail, 1.4.0",
+				"javax.servlet, com.springsource.javax.servlet, 2.5.0",
+				"javax.transaction, com.springsource.javax.transaction, 1.1.0",// for derby client
+				"javax.wsdl, com.springsource.javax.wsdl, 1.6.1",
+				"javax.xml.bind, com.springsource.javax.xml.bind, 2.2.0",
+				"javax.xml.rpc, com.springsource.javax.xml.rpc, 1.1.0",
+				"javax.xml.soap, com.springsource.javax.xml.soap, 1.3.0",
+				"javax.xml.stream, com.springsource.javax.xml.stream, 1.0.1",
+				"org.antlr, com.springsource.antlr, 2.7.6",
+				"org.apache.aries, org.apache.aries.util, 0.3",
+				"org.apache.aries.proxy, org.apache.aries.proxy.api, 0.3",
+				"org.apache.aries.jndi, org.apache.aries.jndi, 0.3",
+				"org.apache.axis, com.springsource.org.apache.axis, 1.4.0",
+				"org.apache.commons, com.springsource.org.apache.commons.cli, 1.2.0",
+				"org.apache.commons, com.springsource.org.apache.commons.codec, 1.4.0",
+				"org.apache.commons, com.springsource.org.apache.commons.csv, 1.0.0.BUILD-20080106",
+				"org.apache.commons, com.springsource.org.apache.commons.collections, 3.2.0",
+				"org.apache.commons, com.springsource.org.apache.commons.discovery, 0.4.0",
+				"org.apache.commons, com.springsource.org.apache.commons.httpclient, 3.1.0",
+				"org.apache.commons, com.springsource.org.apache.commons.io, 1.4.0",
+				"org.apache.commons, com.springsource.org.apache.commons.lang, 2.5.0",
+				"org.apache.commons, com.springsource.org.apache.commons.logging, 1.1.1",
+				"org.apache.commons, com.springsource.org.apache.commons.net, 1.4.1",
+				// "org.apache.derby, derby, 10.5.3.0_1",
+				"org.apache.derby, com.springsource.org.apache.derby, 10.5.1000001.764942",
+				"org.apache.derby, com.springsource.org.apache.derby.client, 10.5.1000001.764942",
+				"org.apache.derby, com.springsource.org.apache.derby.drda, 10.5.1000001.764942",
+				"org.apache.httpcomponents, com.springsource.org.apache.httpcomponents.httpclient, 4.1.1",
+				"org.apache.httpcore, com.springsource.org.apache.httpcomponents.httpcore, 4.1",
+				"org.apache.log4j, com.springsource.org.apache.log4j, 1.2.16",
+				"org.apache.ws, com.springsource.org.apache.ws.security, 1.5.8",
+				// "org.apache.ws.security, wss4j, 1.5.12",
+				"org.apache.xml, com.springsource.org.apache.xml.resolver, 1.2.0",
+				"org.apache.xmlbeans, com.springsource.org.apache.xmlbeans, 2.4.0",
+				"org.apache.xmlcommons, com.springsource.org.apache.xmlcommons, 1.3.4",
+				"org.apache.xalan, com.springsource.org.apache.xalan, 2.7.1",
+				"org.apache.xalan, com.springsource.org.apache.xml.serializer, 2.7.1",
+				"org.apache.xerces, com.springsource.org.apache.xerces, 2.9.1",
+				"org.apache.xml, com.springsource.org.apache.xml.security, 1.4.2",
+				"org.aspectj, com.springsource.org.aspectj.runtime, 1.6.0",
+				"org.aspectj, com.springsource.org.aspectj.weaver, 1.6.0",
+				"org.beanshell, com.springsource.bsh, 2.0.0.b4",
+				"org.biomart, martservice, 2.0-SNAPSHOT",
+				"org.bouncycastle, bcprov-jdk16, 1.46",
+				"org.dom4j, com.springsource.org.dom4j, 1.6.1",
+				"org.hibernate, com.springsource.org.hibernate, 3.2.6.ga",
+				"org.jaxen, com.springsource.org.jaxen, 1.1.1",
+				"org.jboss.javassist, com.springsource.javassist, 3.3.0.ga",
+				"org.jdom, com.springsource.org.jdom, 1.1.0",
+				"org.jvnet.staxex, com.springsource.org.jvnet.staxex, 1.0.0",
+				"org.objectweb.asm, com.springsource.org.objectweb.asm, 1.5.3",
+				"org.objectweb.asm, com.springsource.org.objectweb.asm.attrs, 1.5.3",
+				"org.opensaml, com.springsource.org.opensaml, 1.1.0",
+				"org.springframework, org.springframework.jdbc, 3.0.0.RC1",
+				"org.springframework, org.springframework.orm, 3.0.0.RC1",
+				"org.springframework, org.springframework.transaction, 3.0.0.RC1",
+				// "org.springframework, org.springframework.beans, 3.0.5.RELEASE",
+				// "org.springframework, org.springframework.core, 3.0.5.RELEASE",
+				// "org.springframework, org.springframework.context, 3.0.5.RELEASE",
+				// "org.springframework, org.springframework.transaction, 3.0.5.RELEASE",
+				"org.xmlpull, com.springsource.org.xmlpull, 1.1.3.4-O",
+				"net.sf.taverna, wsdl-generic, 1.10-SNAPSHOT",
+				"net.sf.taverna.jedit, jedit-syntax, 2.2.4-SNAPSHOT",
+				"net.sf.taverna.t2.activities, apiconsumer-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, beanshell-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, biomart-activity, 2.0-SNAPSHOT",
+				// "net.sf.taverna.t2.activities, biomoby-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, dataflow-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, dependency-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, external-tool-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, localworker-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, rest-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, rshell-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, soaplab-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, spreadsheet-import-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, stringconstant-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, wsdl-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.activities, xpath-activity, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.core, provenance-derby, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.core, provenance-mysql, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.core, provenanceconnector, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.core, reference-api, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.core, reference-core-extensions, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.core, reference-impl, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.core, workflowmodel-api, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.core, workflowmodel-core-extensions, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.core, workflowmodel-impl, 2.0-SNAPSHOT",
+				// "net.sf.taverna.t2.infrastructure, appconfig, 3.0-SNAPSHOT",
+				"net.sf.taverna.t2.lang, ui, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.lang, observer, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.security, credential-manager, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2.security, credential-manager-impl, 2.0-SNAPSHOT",
+				"net.sourceforge.cglib, com.springsource.net.sf.cglib, 2.1.3",
+				"uk.org.taverna.configuration, taverna-app-configuration-api, 0.1.0-SNAPSHOT",
+				"uk.org.taverna.configuration, taverna-app-configuration-impl, 0.1.0-SNAPSHOT",
+				"uk.org.taverna.configuration, taverna-configuration-api, 0.1.0-SNAPSHOT",
+				"uk.org.taverna.configuration, taverna-configuration-impl, 0.1.0-SNAPSHOT",
+				"uk.org.taverna.configuration, taverna-database-configuration-api, 0.1.0-SNAPSHOT",
+				"uk.org.taverna.configuration, taverna-database-configuration-impl, 0.1.0-SNAPSHOT",
+				"uk.org.taverna.platform, report, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.platform, data, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.platform, execution-local, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.platform, execution-remote, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.platform, taverna-capability-api, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.platform, taverna-capability-impl, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.platform, taverna-execution-api, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.platform, taverna-execution-impl, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.platform, taverna-run-api, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.platform, taverna-run-impl, 0.1.2-SNAPSHOT",
+				"uk.org.taverna.osgi.services, xml-parser-service, 0.0.1-SNAPSHOT",
+				"uk.org.taverna.osgi.services, xml-transformer-service, 0.0.1-SNAPSHOT",
+				// FIXME: Add the other scufl2 modules
+				"uk.org.taverna.scufl2, scufl2-api, 0.9.2",
+				"uk.org.taverna.scufl2, scufl2-rdfxml, 0.9.2",
+				"uk.org.taverna.scufl2, scufl2-ucfpackage, 0.9.2",
+				"uk.org.taverna.scufl2, scufl2-t2flow, 0.9.2",
+				"uk.org.taverna.scufl2, scufl2-validation, 0.9.2",
+				"uk.org.taverna.scufl2, scufl2-validation-correctness, 0.9.2",
+				"uk.org.taverna.scufl2, scufl2-validation-structural, 0.9.2",
+				"net.sf.taverna.t2, results, 2.0-SNAPSHOT",
+				"net.sf.taverna.t2, baclava, 0.1-SNAPSHOT",
+		// "net.sf.taverna.t2.taverna-commandline, taverna-commandline-common, 2.0-SNAPSHOT"
+		};
+	}
+
+	protected void setup() throws Exception {
+
+		if (masterPasswordProvider == null) {
+			masterPasswordProvider = new MasterPasswordProvider() {
+				public String getMasterPassword(boolean firstTime) {
+					return "test";
+				}
+
+				public void setMasterPassword(String password) {
+				}
+
+				public int getProviderPriority() {
+					return 0;
+				}
+			};
+			bundleContext.registerService(
+					"net.sf.taverna.t2.security.credentialmanager.MasterPasswordProvider",
+					masterPasswordProvider, null);
+		}
+
+		if (credentialManager == null) {
+			ServiceReference credentialManagerReference = bundleContext
+					.getServiceReference("net.sf.taverna.t2.security.credentialmanager.CredentialManager");
+			credentialManager = (CredentialManager) bundleContext
+					.getService(credentialManagerReference);
+		}
+
+		if (workflowBundleReader == null) {
+			ServiceReference[] workflowBundleReaderReferences = bundleContext.getServiceReferences(
+					"uk.org.taverna.scufl2.api.io.WorkflowBundleReader", null);
+			for (ServiceReference serviceReference : workflowBundleReaderReferences) {
+				workflowBundleReader = (WorkflowBundleReader) bundleContext
+						.getService(serviceReference);
+				if (workflowBundleReader.getMediaTypes().contains(
+						T2FlowReader.APPLICATION_VND_TAVERNA_T2FLOW_XML)) {
+					break;
+				}
+			}
+		}
+
+		if (databaseConfiguration == null) {
+			ServiceReference databaseConfigurationReference = bundleContext
+					.getServiceReference("uk.org.taverna.configuration.database.DatabaseConfiguration");
+			databaseConfiguration = (DatabaseConfiguration) bundleContext
+					.getService(databaseConfigurationReference);
+			ServiceReference jndiContextManagerReference = bundleContext
+					.getServiceReference("org.osgi.service.jndi.JNDIContextManager");
+			jndiContextManager = (JNDIContextManager) bundleContext
+					.getService(jndiContextManagerReference);
+			ServiceReference applicationConfigurationReference = bundleContext
+					.getServiceReference("uk.org.taverna.configuration.app.ApplicationConfiguration");
+			applicationConfiguration = (ApplicationConfiguration) bundleContext
+					.getService(applicationConfigurationReference);
+		}
+
+	}
+
+	public void testOsgiPlatformStarts() throws Exception {
+		System.out.println(Constants.FRAMEWORK_VENDOR + " = "
+				+ bundleContext.getProperty(Constants.FRAMEWORK_VENDOR));
+		System.out.println(Constants.FRAMEWORK_VERSION + " = "
+				+ bundleContext.getProperty(Constants.FRAMEWORK_VERSION));
+		System.out.println(Constants.FRAMEWORK_EXECUTIONENVIRONMENT + " = "
+				+ bundleContext.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT));
+		System.out.println(Constants.OSGI_IMPL_VERSION_KEY + " = "
+				+ bundleContext.getProperty(Constants.OSGI_IMPL_VERSION_KEY));
+	}
+
+	public WorkflowBundle loadWorkflow(String t2FlowFile) throws Exception {
+		URL wfResource = getClass().getResource(t2FlowFile);
+		assertNotNull(wfResource);
+		return workflowBundleReader.readBundle(wfResource.openStream(),
+				T2FlowReader.APPLICATION_VND_TAVERNA_T2FLOW_XML);
+	}
+
+	public File loadFile(String fileName) throws IOException, FileNotFoundException {
+		File file = File.createTempFile("platform-test", null);
+		InputStream inputStream = getClass().getResource(fileName).openStream();
+		OutputStream outputStream = new FileOutputStream(file);
+		byte[] buffer = new byte[64];
+		int length = -1;
+		while ((length = inputStream.read(buffer)) >= 0) {
+			outputStream.write(buffer, 0, length);
+		}
+		outputStream.flush();
+		outputStream.close();
+		return file;
+	}
+
+	public void printErrors(Data data) {
+			ErrorDocument error = (ErrorDocument) data.getValue();
+			String message = error.getMessage();
+			if (message != null) {
+				System.out.println(message);
+			}
+			String exceptionMessage = error.getExceptionMessage();
+			if (exceptionMessage != null) {
+				System.out.println(exceptionMessage);
+			}
+			for (StackTraceElementBean stackTraceElementBean : error.getStackTraceStrings()) {
+				System.out.println(stackTraceElementBean.getClassName());
+				System.out.println(stackTraceElementBean.getMethodName());
+				System.out.println(stackTraceElementBean.getLineNumber());
+			}
+//			Set<T2Reference> errorReferences = error.getErrorReferences();
+//			for (T2Reference t2Reference : errorReferences) {
+//				printErrors(referenceService, t2Reference);
+//			}
+	}
+
+	public boolean checkResult(Data result, String expectedResult) {
+		if (result.isError()) {
+			printErrors(result);
+			return false;
+		} else {
+			Object resultObject = result.getValue();
+			String resultValue = null;
+			if (resultObject instanceof byte[]) {
+				resultValue = new String((byte[]) resultObject);
+			} else {
+				resultValue = (String) resultObject;
+			}
+
+			if (resultValue.startsWith(expectedResult)) {
+				return true;
+			} else {
+				System.out.println("Expected: " + expectedResult + ", Actual: " + resultValue);
+				return false;
+			}
+		}
+	}
+
+	public boolean waitForState(WorkflowReport report, State state) throws InterruptedException {
+		return waitForState(report, state, true);
+	}
+
+	public boolean waitForState(WorkflowReport report, State state, boolean printReport)
+			throws InterruptedException {
+		int wait = 0;
+		while (!report.getState().equals(state) && wait++ < 30) {
+			if (printReport)
+				System.out.println(report);
+			Thread.sleep(500);
+		}
+		return report.getState().equals(state);
+	}
+
+	public void waitForResults(Map<String, Data> results, WorkflowReport report, String... ports)
+			throws InterruptedException {
+		int wait = 0;
+		while (!resultsReady(results, ports) && wait++ < 20) {
+			System.out.println(report);
+			Thread.sleep(500);
+		}
+	}
+
+	private boolean resultsReady(Map<String, Data> results, String... ports) {
+		for (String port : ports) {
+			if (!results.containsKey(port)) {
+				return false;
+			}
+		}
+		return true;
+	}
+
+}