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:27 UTC
[67/70] [abbrv] incubator-taverna-common-activities git commit:
taverna-interaction-activity/
taverna-interaction-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/95509a51
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/95509a51
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/95509a51
Branch: refs/heads/master
Commit: 95509a51d6dd2c384e2e727b56041f89b2917fd5
Parents: 2231a5f
Author: Stian Soiland-Reyes <st...@apache.org>
Authored: Thu Jan 29 10:13:52 2015 +0000
Committer: Stian Soiland-Reyes <st...@apache.org>
Committed: Thu Jan 29 10:13:52 2015 +0000
----------------------------------------------------------------------
.gitignore | 24 -
.travis.yml | 1 -
README.md | 3 -
pom.xml | 191 ------
.../t2/activities/interaction/FeedReader.java | 87 ---
.../interaction/InteractionActivity.java | 156 -----
.../interaction/InteractionActivityFactory.java | 135 ----
.../InteractionActivityHealthChecker.java | 39 --
.../InteractionActivityRunnable.java | 329 ---------
.../interaction/InteractionActivityType.java | 15 -
.../InteractionCallbackRequestor.java | 193 ------
.../interaction/InteractionRecorder.java | 163 -----
.../interaction/InteractionRequestor.java | 38 -
.../InteractionRunDeletionListener.java | 31 -
.../activities/interaction/InteractionType.java | 14 -
.../interaction/InteractionUtils.java | 127 ----
.../interaction/ResponseFeedListener.java | 159 -----
.../activities/interaction/atom/AtomUtils.java | 83 ---
.../feed/ShowRequestFeedListener.java | 65 --
.../jetty/HackedFilesystemAdapter.java | 263 -------
.../interaction/jetty/InteractionJetty.java | 203 ------
.../preference/InteractionPreference.java | 268 --------
.../velocity/InteractionVelocity.java | 130 ----
.../interaction/velocity/NotifyChecker.java | 26 -
.../interaction/velocity/NotifyDirective.java | 58 --
.../interaction/velocity/ProduceChecker.java | 35 -
.../interaction/velocity/ProduceDirective.java | 58 --
.../interaction/velocity/RequireChecker.java | 35 -
.../interaction/velocity/RequireDirective.java | 58 --
src/main/resources/Authorize.vm | 73 --
...taverna.t2.activities.interaction.FeedReader | 2 -
...taverna.t2.workflowmodel.RunDeletionListener | 1 -
...averna.t2.workflowmodel.health.HealthChecker | 1 -
.../interaction-activity-context-osgi.xml | 21 -
.../spring/interaction-activity-context.xml | 61 --
src/main/resources/MasterPassword.vm | 47 --
src/main/resources/TrustedCertificate.vm | 57 --
src/main/resources/TruststorePassword.vm | 48 --
src/main/resources/UsernamePassword.vm | 57 --
.../resources/abdera/adapter/feed.properties | 5 -
src/main/resources/ask.vm | 51 --
src/main/resources/choose.vm | 74 --
src/main/resources/index | 15 -
src/main/resources/interaction.css | 5 -
src/main/resources/interaction.vm | 168 -----
src/main/resources/json2.js | 487 -------------
src/main/resources/notify.vm | 39 --
src/main/resources/pmrpc.js | 686 -------------------
src/main/resources/schema.json | 31 -
src/main/resources/select.vm | 61 --
src/main/resources/tell.vm | 54 --
src/main/resources/warn.vm | 54 --
taverna-interaction-activity/pom.xml | 191 ++++++
.../t2/activities/interaction/FeedReader.java | 87 +++
.../interaction/InteractionActivity.java | 156 +++++
.../interaction/InteractionActivityFactory.java | 135 ++++
.../InteractionActivityHealthChecker.java | 39 ++
.../InteractionActivityRunnable.java | 329 +++++++++
.../interaction/InteractionActivityType.java | 15 +
.../InteractionCallbackRequestor.java | 193 ++++++
.../interaction/InteractionRecorder.java | 163 +++++
.../interaction/InteractionRequestor.java | 38 +
.../InteractionRunDeletionListener.java | 31 +
.../activities/interaction/InteractionType.java | 14 +
.../interaction/InteractionUtils.java | 127 ++++
.../interaction/ResponseFeedListener.java | 159 +++++
.../activities/interaction/atom/AtomUtils.java | 83 +++
.../feed/ShowRequestFeedListener.java | 65 ++
.../jetty/HackedFilesystemAdapter.java | 263 +++++++
.../interaction/jetty/InteractionJetty.java | 203 ++++++
.../preference/InteractionPreference.java | 268 ++++++++
.../velocity/InteractionVelocity.java | 130 ++++
.../interaction/velocity/NotifyChecker.java | 26 +
.../interaction/velocity/NotifyDirective.java | 58 ++
.../interaction/velocity/ProduceChecker.java | 35 +
.../interaction/velocity/ProduceDirective.java | 58 ++
.../interaction/velocity/RequireChecker.java | 35 +
.../interaction/velocity/RequireDirective.java | 58 ++
.../src/main/resources/Authorize.vm | 73 ++
...taverna.t2.activities.interaction.FeedReader | 2 +
...taverna.t2.workflowmodel.RunDeletionListener | 1 +
...averna.t2.workflowmodel.health.HealthChecker | 1 +
.../interaction-activity-context-osgi.xml | 21 +
.../spring/interaction-activity-context.xml | 61 ++
.../src/main/resources/MasterPassword.vm | 47 ++
.../src/main/resources/TrustedCertificate.vm | 57 ++
.../src/main/resources/TruststorePassword.vm | 48 ++
.../src/main/resources/UsernamePassword.vm | 57 ++
.../resources/abdera/adapter/feed.properties | 5 +
.../src/main/resources/ask.vm | 51 ++
.../src/main/resources/choose.vm | 74 ++
.../src/main/resources/index | 15 +
.../src/main/resources/interaction.css | 5 +
.../src/main/resources/interaction.vm | 168 +++++
.../src/main/resources/json2.js | 487 +++++++++++++
.../src/main/resources/notify.vm | 39 ++
.../src/main/resources/pmrpc.js | 686 +++++++++++++++++++
.../src/main/resources/schema.json | 31 +
.../src/main/resources/select.vm | 61 ++
.../src/main/resources/tell.vm | 54 ++
.../src/main/resources/warn.vm | 54 ++
101 files changed, 5057 insertions(+), 5085 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/.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/95509a51/.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/95509a51/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
deleted file mode 100644
index 72becd8..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Taverna Workflow system Interaction 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/95509a51/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index de9cbbd..0000000
--- a/pom.xml
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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>interaction-activity</artifactId>
- <version>2.0.l-SNAPSHOT</version>
- <packaging>bundle</packaging>
- <name>Taverna Interaction activity</name>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <configuration>
- <instructions>
- <!-- Export nothing -->
- <Export-Package></Export-Package>
- <Embed-Transitive>true</Embed-Transitive>
- <Embed-Dependency>webdav-servlet</Embed-Dependency>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
-
- <properties>
- <jetty.version>6.1.24</jetty.version>
- <abdera.version>1.1.3</abdera.version>
- <jackson.version>1.9.13</jackson.version>
- <velocity.version>1.7</velocity.version>
- </properties>
-
- <dependencies>
-
- <dependency>
- <groupId>net.sf.taverna.t2.core</groupId>
- <artifactId>workflowmodel-api</artifactId>
- <version>${t2.core.version}</version>
- </dependency>
-
- <dependency>
- <groupId>net.sf.taverna.t2.security</groupId>
- <artifactId>credential-manager</artifactId>
- <version>${t2.core.version}</version>
- </dependency>
-
- <dependency>
- <groupId>net.sf.taverna.t2.activities</groupId>
- <artifactId>activity-test-utils</artifactId>
- <version>${t2.activities.version}</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- <version>${commons.io.version}</version>
- </dependency>
-
- <dependency>
- <groupId>commons-codec</groupId>
- <artifactId>commons-codec</artifactId>
- <version>${commons.codec.version}</version>
- </dependency>
-
-
-
- <!-- Mortbay jetty artifacts are bundles -->
- <dependency>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>jetty</artifactId>
- <version>${jetty.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.mortbay.jetty</groupId>
- <artifactId>jetty-util</artifactId>
- <version>${jetty.version}</version>
- </dependency>
-
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <version>2.5</version>
- </dependency>
-
- <dependency>
- <groupId>net.sf.webdav-servlet</groupId>
- <artifactId>webdav-servlet</artifactId>
- <version>2.0</version>
- </dependency>
-
-<!-- The abdera artifacts are bundles -->
- <dependency>
- <groupId>org.apache.abdera</groupId>
- <artifactId>abdera-core</artifactId>
- <version>${abdera.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.abdera</groupId>
- <artifactId>abdera-client</artifactId>
- <version>${abdera.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.abdera</groupId>
- <artifactId>abdera-server</artifactId>
- <version>${abdera.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.abdera</groupId>
- <artifactId>abdera-extensions-main</artifactId>
- <version>${abdera.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.abdera</groupId>
- <artifactId>abdera-extensions-html</artifactId>
- <version>${abdera.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.abdera</groupId>
- <artifactId>abdera-extensions-json</artifactId>
- <version>${abdera.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.abdera</groupId>
- <artifactId>abdera-i18n</artifactId>
- <version>${abdera.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.abdera</groupId>
- <artifactId>abdera-parser</artifactId>
- <version>${abdera.version}</version>
- </dependency>
-
-<!-- The velocity artifact is a bundle -->
- <dependency>
- <groupId>org.apache.velocity</groupId>
- <artifactId>velocity</artifactId>
- <version>${velocity.version}</version>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>${junit.version}</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
- <repositories>
- <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-interaction-activity.git</connection>
- <developerConnection>scm:git:ssh://git@github.com/taverna/taverna-interaction-activity.git</developerConnection>
- <url>https://github.com/taverna/taverna-interaction-activity/</url>
- <tag>HEAD</tag>
- </scm>
-
-
-</project>
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java b/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java
deleted file mode 100644
index 7be03df..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package net.sf.taverna.t2.activities.interaction;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Date;
-
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-
-import org.apache.abdera.model.Document;
-import org.apache.abdera.model.Entry;
-import org.apache.abdera.model.Feed;
-import org.apache.abdera.parser.ParseException;
-import org.apache.abdera.parser.Parser;
-import org.apache.abdera.parser.stax.FOMParser;
-import org.apache.log4j.Logger;
-
-public abstract class FeedReader extends Thread {
-
- static final Logger logger = Logger.getLogger(FeedReader.class);
-
- public FeedReader(final String name) {
- super(name);
- this.setDaemon(true);
- }
-
- protected abstract void considerEntry(Entry entry);
-
- @Override
- public void run() {
- try {
- final Parser parser = new FOMParser();
- Date lastCheckedDate = new Date();
- while (true) {
- try {
- sleep(5000);
- } catch (final InterruptedException e1) {
- logger.error(e1);
- }
- InputStream openStream = null;
- try {
- final Date newLastCheckedDate = new Date();
- final URL url = getInteractionPreference().getFeedUrl();
- openStream = url.openStream();
- final Document<Feed> doc = parser.parse(openStream,
- url.toString());
- final Feed feed = doc.getRoot().sortEntriesByEdited(true);
-
- for (final Entry entry : feed.getEntries()) {
-
- Date d = entry.getEdited();
- if (d == null) {
- d = entry.getUpdated();
- }
- if (d == null) {
- d = entry.getPublished();
- }
- if (d.before(lastCheckedDate)) {
- break;
- }
- this.considerEntry(entry);
- }
- lastCheckedDate = newLastCheckedDate;
- } catch (final MalformedURLException e) {
- logger.error(e);
- } catch (final ParseException e) {
- logger.error(e);
- } catch (final IOException e) {
- logger.error(e);
- } finally {
- try {
- if (openStream != null) {
- openStream.close();
- }
- } catch (final IOException e) {
- logger.error(e);
- }
- }
- }
- } catch (final Exception e) {
- logger.error(e);
- }
- }
-
- protected abstract InteractionPreference getInteractionPreference();
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java
deleted file mode 100644
index cfc2182..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package net.sf.taverna.t2.activities.interaction;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import net.sf.taverna.t2.activities.interaction.jetty.InteractionJetty;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-import net.sf.taverna.t2.activities.interaction.velocity.InteractionVelocity;
-import net.sf.taverna.t2.activities.interaction.velocity.NotifyChecker;
-import net.sf.taverna.t2.activities.interaction.velocity.ProduceChecker;
-import net.sf.taverna.t2.activities.interaction.velocity.RequireChecker;
-import net.sf.taverna.t2.reference.T2Reference;
-import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
-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.ActivityInputPort;
-import net.sf.taverna.t2.workflowmodel.processor.activity.AsynchronousActivity;
-import net.sf.taverna.t2.workflowmodel.processor.activity.AsynchronousActivityCallback;
-import net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityInputPortDefinitionBean;
-import net.sf.taverna.t2.workflowmodel.processor.activity.config.ActivityOutputPortDefinitionBean;
-
-import org.apache.log4j.Logger;
-import org.apache.velocity.Template;
-import org.apache.velocity.app.Velocity;
-import org.apache.velocity.exception.ParseErrorException;
-import org.apache.velocity.exception.ResourceNotFoundException;
-import org.apache.velocity.runtime.parser.node.ASTprocess;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-public final class InteractionActivity extends
- AbstractAsynchronousActivity<JsonNode>
- implements AsynchronousActivity<JsonNode> {
-
- public static final String URI = "http://ns.taverna.org.uk/2010/activity/interaction";
-
- @SuppressWarnings("unused")
- private static final Logger logger = Logger
- .getLogger(InteractionActivity.class);
-
- private Template presentationTemplate;
-
- private final Map<String, Integer> inputDepths = new HashMap<String, Integer>();
- private final Map<String, Integer> outputDepths = new HashMap<String, Integer>();
-
- private CredentialManager credentialManager;
-
- private InteractionRecorder interactionRecorder;
-
- private InteractionUtils interactionUtils;
-
- private InteractionJetty interactionJetty;
-
- private InteractionPreference interactionPreference;
-
- private ResponseFeedListener responseFeedListener;
-
- private JsonNode json;
-
- private InteractionVelocity interactionVelocity;
-
- public InteractionActivity(final CredentialManager credentialManager,
- final InteractionRecorder interactionRecorder,
- final InteractionUtils interactionUtils,
- final InteractionJetty interactionJetty,
- final InteractionPreference interactionPreference,
- final ResponseFeedListener responseFeedListener,
- final InteractionVelocity interactionVelocity) {
- this.credentialManager = credentialManager;
- this.interactionRecorder = interactionRecorder;
- this.interactionUtils = interactionUtils;
- this.interactionJetty = interactionJetty;
- this.interactionPreference = interactionPreference;
- this.responseFeedListener = responseFeedListener;
- this.interactionVelocity = interactionVelocity;
- this.json = null;
- }
-
- @Override
- public void configure(final JsonNode json)
- throws ActivityConfigurationException {
-
- this.json = json;
- }
-
- @Override
- public void executeAsynch(final Map<String, T2Reference> inputs,
- final AsynchronousActivityCallback callback) {
- // Don't execute service directly now, request to be run ask to be run
- // from thread pool and return asynchronously
- final InteractionRequestor requestor = new InteractionCallbackRequestor(
- this, callback, inputs);
- callback.requestRun(new InteractionActivityRunnable(requestor,
- this.presentationTemplate,
- this.credentialManager,
- this.interactionRecorder,
- this.interactionUtils,
- this.interactionJetty,
- this.interactionPreference,
- this.responseFeedListener,
- this.interactionVelocity));
- }
-
- @Override
- public JsonNode getConfiguration() {
- return this.json;
- }
-
- public ActivityInputPort getInputPort(final String name) {
- for (final ActivityInputPort port : this.getInputPorts()) {
- if (port.getName().equals(name)) {
- return port;
- }
- }
- return null;
- }
-
- InteractionActivityType getInteractionActivityType() {
- JsonNode subNode = json.get("interactivityActivityType");
- if (subNode == null) {
- return InteractionActivityType.LocallyPresentedHtml;
- }
- String textValue = subNode.textValue();
- if (textValue == null) {
- return InteractionActivityType.LocallyPresentedHtml;
- }
- if ("VelocityTemplate".equals(textValue)) {
- return InteractionActivityType.VelocityTemplate;
- }
- return InteractionActivityType.LocallyPresentedHtml;
- }
-
-
- String getPresentationOrigin() {
- JsonNode subNode = json.get("presentationOrigin");
- if (subNode == null) {
- return null;
- }
- String textValue = subNode.textValue();
- if (textValue == null) {
- return null;
- }
- return textValue;
- }
-
- public boolean isProgressNotification() {
- JsonNode subNode = json.get("progressNotification");
- if (subNode == null) {
- return false;
- }
- return subNode.booleanValue();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java
deleted file mode 100644
index 911d860..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Set;
-
-import net.sf.taverna.t2.activities.interaction.jetty.InteractionJetty;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-import net.sf.taverna.t2.activities.interaction.velocity.InteractionVelocity;
-import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
-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;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/**
- * @author alanrw
- *
- */
-public class InteractionActivityFactory implements ActivityFactory {
-
- private CredentialManager credentialManager;
-
- private InteractionRecorder interactionRecorder;
-
- private InteractionUtils interactionUtils;
-
- private InteractionJetty interactionJetty;
-
- private InteractionPreference interactionPreference;
-
- private ResponseFeedListener responseFeedListener;
-
- private InteractionVelocity interactionVelocity;
-
- /* (non-Javadoc)
- * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#createActivity()
- */
- @Override
- public InteractionActivity createActivity() {
- return new InteractionActivity(this.credentialManager,
- this.interactionRecorder,
- this.interactionUtils,
- this.interactionJetty,
- this.interactionPreference,
- this.responseFeedListener,
- this.interactionVelocity);
- }
-
- /* (non-Javadoc)
- * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#getActivityType()
- */
- @Override
- public URI getActivityType() {
- return URI.create(InteractionActivity.URI);
- }
-
- /* (non-Javadoc)
- * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#getActivityConfigurationSchema()
- */
- @Override
- public JsonNode getActivityConfigurationSchema() {
- ObjectMapper objectMapper = new ObjectMapper();
- try {
- return objectMapper.readTree(getClass().getResource("/schema.json"));
- } catch (IOException e) {
- return objectMapper.createObjectNode();
- }
- }
-
- /* (non-Javadoc)
- * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#getInputPorts(com.fasterxml.jackson.databind.JsonNode)
- */
- @Override
- public Set<ActivityInputPort> getInputPorts(JsonNode configuration)
- throws ActivityConfigurationException {
- // TODO Auto-generated method stub
- return null;
- }
-
- /* (non-Javadoc)
- * @see net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory#getOutputPorts(com.fasterxml.jackson.databind.JsonNode)
- */
- @Override
- public Set<ActivityOutputPort> getOutputPorts(JsonNode configuration)
- throws ActivityConfigurationException {
- // TODO Auto-generated method stub
- return null;
- }
-
- /**
- * @return the credentialManager
- */
- public CredentialManager getCredentialManager() {
- return credentialManager;
- }
-
- /**
- * @param credentialManager the credentialManager to set
- */
- public void setCredentialManager(CredentialManager credentialManager) {
- this.credentialManager = credentialManager;
- }
-
- public void setInteractionRecorder(InteractionRecorder interactionRecorder) {
- this.interactionRecorder = interactionRecorder;
- }
-
- public void setInteractionUtils(InteractionUtils interactionUtils) {
- this.interactionUtils = interactionUtils;
- }
-
- public void setInteractionJetty(InteractionJetty interactionJetty) {
- this.interactionJetty = interactionJetty;
- }
-
- public void setInteractionPreference(InteractionPreference interactionPreference) {
- this.interactionPreference = interactionPreference;
- }
-
- public void setResponseFeedListener(ResponseFeedListener responseFeedListener) {
- this.responseFeedListener = responseFeedListener;
- }
-
- public void setInteractionVelocity(InteractionVelocity interactionVelocity) {
- this.interactionVelocity = interactionVelocity;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java
deleted file mode 100644
index 555fe6a..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package net.sf.taverna.t2.activities.interaction;
-
-import java.util.List;
-
-import net.sf.taverna.t2.visit.VisitReport;
-import net.sf.taverna.t2.workflowmodel.health.HealthChecker;
-import net.sf.taverna.t2.workflowmodel.health.RemoteHealthChecker;
-
-/**
- * Example health checker
- *
- */
-public class InteractionActivityHealthChecker implements
- HealthChecker<InteractionActivity> {
-
- @Override
- public boolean canVisit(final Object o) {
- return o instanceof InteractionActivity;
- }
-
- @Override
- public boolean isTimeConsuming() {
- return true;
- }
-
- @Override
- public VisitReport visit(final InteractionActivity activity,
- final List<Object> ancestry) {
-
- if (activity.getInteractionActivityType().equals(
- InteractionActivityType.LocallyPresentedHtml)) {
- return RemoteHealthChecker.contactEndpoint(activity,
- activity.getPresentationOrigin());
- }
-
- return null;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java
deleted file mode 100644
index 342eeda..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java
+++ /dev/null
@@ -1,329 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Date;
-import java.util.Map;
-import java.util.UUID;
-
-import net.sf.taverna.t2.activities.interaction.atom.AtomUtils;
-import net.sf.taverna.t2.activities.interaction.jetty.InteractionJetty;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-import net.sf.taverna.t2.activities.interaction.velocity.InteractionVelocity;
-import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
-
-import org.apache.abdera.Abdera;
-import org.apache.abdera.i18n.text.Normalizer;
-import org.apache.abdera.i18n.text.Sanitizer;
-import org.apache.abdera.model.Element;
-import org.apache.abdera.model.Entry;
-import org.apache.abdera.parser.stax.FOMElement;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.log4j.Logger;
-import org.apache.velocity.Template;
-import org.apache.velocity.VelocityContext;
-
-public final class InteractionActivityRunnable implements Runnable {
-
- private static final Logger logger = Logger
- .getLogger(InteractionActivityRunnable.class);
-
- private static final Abdera ABDERA = Abdera.getInstance();
-
- private final Template presentationTemplate;
-
- private final InteractionRequestor requestor;
-
- private CredentialManager credentialManager;
-
- private InteractionRecorder interactionRecorder;
-
- private InteractionUtils interactionUtils;
-
- private InteractionJetty interactionJetty;
-
- private InteractionPreference interactionPreference;
-
- private ResponseFeedListener responseFeedListener;
-
- private InteractionVelocity interactionVelocity;
-
- public InteractionActivityRunnable(final InteractionRequestor requestor,
- final Template presentationTemplate,
- final CredentialManager credentialManager,
- final InteractionRecorder interactionRecorder,
- final InteractionUtils interactionUtils,
- final InteractionJetty interactionJetty,
- final InteractionPreference interactionPreference,
- final ResponseFeedListener responseFeedListener,
- final InteractionVelocity interactionVelocity) {
- this.requestor = requestor;
- this.presentationTemplate = presentationTemplate;
- this.credentialManager = credentialManager;
- this.interactionRecorder = interactionRecorder;
- this.interactionUtils = interactionUtils;
- this.interactionJetty = interactionJetty;
- this.interactionPreference = interactionPreference;
- this.responseFeedListener = responseFeedListener;
- this.interactionVelocity = interactionVelocity;
- }
-
- @Override
- public void run() {
- /*
- * InvocationContext context = callback.getContext();
- */
- final String runId = InteractionUtils.getUsedRunId(this.requestor
- .getRunId());
-
- final String id = Sanitizer.sanitize(UUID.randomUUID().toString(), "",
- true, Normalizer.Form.D);
-
- final Map<String, Object> inputData = this.requestor.getInputData();
-
- if (interactionPreference.getUseJetty()) {
- interactionJetty.startJettyIfNecessary(credentialManager);
- }
- interactionJetty.startListenersIfNecessary();
- try {
- interactionUtils.copyFixedFile("pmrpc.js");
- interactionUtils.copyFixedFile("interaction.css");
- } catch (final IOException e1) {
- logger.error(e1);
- this.requestor.fail("Unable to copy necessary fixed file");
- return;
- }
- synchronized (ABDERA) {
- final Entry interactionNotificationMessage = this
- .createBasicInteractionMessage(id, runId);
-
- for (final String key : inputData.keySet()) {
- final Object value = inputData.get(key);
- if (value instanceof byte[]) {
- final String replacementUrl = interactionPreference
- .getPublicationUrlString(id, key);
- final ByteArrayInputStream bais = new ByteArrayInputStream(
- (byte[]) value);
- try {
- interactionUtils.publishFile(replacementUrl, bais,
- runId, id);
- bais.close();
- inputData.put(key, replacementUrl);
- } catch (final IOException e) {
- logger.error(e);
- this.requestor.fail("Unable to publish to " + replacementUrl);
- return;
- }
- }
- }
-
- final String inputDataString = this.createInputDataJson(inputData);
- if (inputDataString == null) {
- return;
- }
- final String inputDataUrl = interactionPreference
- .getInputDataUrlString(id);
- try {
- interactionUtils.publishFile(inputDataUrl, inputDataString,
- runId, id);
- } catch (final IOException e) {
- logger.error(e);
- this.requestor.fail("Unable to publish to " + inputDataUrl);
- return;
- }
-
- String outputDataUrl = null;
-
- if (!this.requestor.getInteractionType().equals(
- InteractionType.Notification)) {
- outputDataUrl = interactionPreference
- .getOutputDataUrlString(id);
- }
- final String interactionUrlString = this.generateHtml(inputDataUrl,
- outputDataUrl, inputData, runId, id);
-
- try {
- this.postInteractionMessage(id, interactionNotificationMessage,
- interactionUrlString, runId);
- } catch (IOException e) {
- logger.error(e);
- this.requestor.fail("Unable to post message");
- return;
- }
- if (!this.requestor.getInteractionType().equals(
- InteractionType.Notification)) {
- responseFeedListener.registerInteraction(
- interactionNotificationMessage, this.requestor);
- } else {
- this.requestor.carryOn();
-
- }
- }
- }
-
- private String createInputDataJson(final Map<String, Object> inputData) {
- try {
- return InteractionUtils.objectToJson(inputData);
- } catch (final IOException e) {
- logger.error(e);
- this.requestor.fail("Unable to generate JSON");
- }
- return null;
- }
-
- private Entry createBasicInteractionMessage(final String id,
- final String runId) {
- final Entry interactionNotificationMessage = ABDERA.newEntry();
-
- interactionNotificationMessage.setId(id);
- final Date timestamp = new Date();
- interactionNotificationMessage.setPublished(timestamp);
- interactionNotificationMessage.setUpdated(timestamp);
-
- interactionNotificationMessage.addAuthor("Taverna");
- interactionNotificationMessage.setTitle("Interaction from Taverna for "
- + this.requestor.generateId());
-
- final Element runIdElement = interactionNotificationMessage
- .addExtension(AtomUtils.getRunIdQName());
- runIdElement.setText(StringEscapeUtils.escapeJavaScript(runId));
-
- final Element pathIdElement = interactionNotificationMessage.addExtension(AtomUtils.getPathIdQName());
- pathIdElement.setText(StringEscapeUtils.escapeJavaScript(this.requestor.getPath()));
-
- final Element countElement = interactionNotificationMessage.addExtension(AtomUtils.getCountQName());
- countElement.setText(StringEscapeUtils.escapeJavaScript(this.requestor.getInvocationCount().toString()));
-
- if (this.requestor.getInteractionType().equals(
- InteractionType.Notification)) {
- interactionNotificationMessage.addExtension(AtomUtils
- .getProgressQName());
- }
- final Element idElement = interactionNotificationMessage
- .addExtension(AtomUtils.getIdQName());
- idElement.setText(id);
-
- return interactionNotificationMessage;
- }
-
- private void postInteractionMessage(final String id, final Entry entry,
- final String interactionUrlString, final String runId) throws IOException {
-
- entry.addLink(StringEscapeUtils.escapeXml(interactionUrlString),
- "presentation");
- entry.setContentAsXhtml("<p><a href=\""
- + StringEscapeUtils.escapeXml(interactionUrlString)
- + "\">Open: "
- + StringEscapeUtils.escapeXml(interactionUrlString)
- + "</a></p>");
-
- URL feedUrl;
-
- feedUrl = new URL(interactionPreference
- .getFeedUrlString());
- final String entryContent = ((FOMElement) entry)
- .toFormattedString();
- final HttpURLConnection httpCon = (HttpURLConnection) feedUrl
- .openConnection();
- httpCon.setDoOutput(true);
- httpCon.setRequestProperty("Content-Type",
- "application/atom+xml;type=entry;charset=UTF-8");
- httpCon.setRequestProperty("Content-Length",
- "" + entryContent.length());
- httpCon.setRequestProperty("Slug", id);
- httpCon.setRequestMethod("POST");
- httpCon.setConnectTimeout(5000);
- final OutputStream outputStream = httpCon.getOutputStream();
- IOUtils.write(entryContent, outputStream, "UTF-8");
- outputStream.close();
- final int response = httpCon.getResponseCode();
- if ((response < 0) || (response >= 400)) {
- logger.error("Received response code" + response);
- throw (new IOException ("Received response code " + response));
- }
- if (response == HttpURLConnection.HTTP_CREATED) {
- interactionRecorder.addResource(runId, id,
- httpCon.getHeaderField("Location"));
- }
- }
-
- String generateHtml(final String inputDataUrl, final String outputDataUrl,
- final Map<String, Object> inputData, final String runId,
- final String id) {
-
- final VelocityContext velocityContext = new VelocityContext();
-
- for (final String inputName : inputData.keySet()) {
- final Object input = inputData.get(inputName);
- velocityContext.put(inputName, input);
- }
-
- velocityContext.put("feed", interactionPreference
- .getFeedUrlString());
- velocityContext.put("runId", runId);
- velocityContext.put("entryId", id);
- final String pmrpcUrl = interactionPreference
- .getLocationUrl() + "/pmrpc.js";
- velocityContext.put("pmrpcUrl", pmrpcUrl);
- velocityContext.put("inputDataUrl", inputDataUrl);
- velocityContext.put("outputDataUrl", outputDataUrl);
- final String interactionUrl = interactionPreference
- .getInteractionUrlString(id);
-
- velocityContext.put("interactionUrl", interactionUrl);
-
- String presentationUrl = "";
- final String authorizeUrl = "";
- try {
- if (this.requestor.getPresentationType().equals(
- InteractionActivityType.VelocityTemplate)) {
-
- presentationUrl = interactionPreference
- .getPresentationUrlString(id);
-
- final String presentationString = this.processTemplate(
- this.presentationTemplate, velocityContext);
- interactionUtils.publishFile(presentationUrl,
- presentationString, runId, id);
-
- } else if (this.requestor.getPresentationType().equals(
- InteractionActivityType.LocallyPresentedHtml)) {
- presentationUrl = this.requestor.getPresentationOrigin();
- }
-
- velocityContext.put("presentationUrl", presentationUrl);
-
- final String interactionString = this.processTemplate(
- interactionVelocity.getInteractionTemplate(),
- velocityContext);
- interactionUtils.publishFile(interactionUrl, interactionString,
- runId, id);
-
- if (!authorizeUrl.isEmpty()) {
- return authorizeUrl;
- }
- return interactionUrl;
- } catch (final IOException e) {
- logger.error(e);
- this.requestor.fail("Unable to generate HTML");
- return null;
- }
- }
-
- private String processTemplate(final Template template,
- final VelocityContext context) throws IOException {
- final StringWriter resultWriter = new StringWriter();
- template.merge(context, resultWriter);
- resultWriter.close();
- return resultWriter.toString();
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java
deleted file mode 100644
index 63bc001..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java
+++ /dev/null
@@ -1,15 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-/**
- * @author alanrw
- *
- * Should be renamed something like presentation type
- */
-public enum InteractionActivityType {
-
- VelocityTemplate, LocallyPresentedHtml
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java
deleted file mode 100644
index f7445a8..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import net.sf.taverna.t2.invocation.InvocationContext;
-import net.sf.taverna.t2.reference.ReferenceService;
-import net.sf.taverna.t2.reference.T2Reference;
-import net.sf.taverna.t2.reference.WorkflowRunIdEntity;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityInputPort;
-import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityOutputPort;
-import net.sf.taverna.t2.workflowmodel.processor.activity.AsynchronousActivityCallback;
-
-/**
- * @author alanrw
- *
- */
-public class InteractionCallbackRequestor implements InteractionRequestor {
-
- private final AsynchronousActivityCallback callback;
-
- private final Map<String, T2Reference> inputs;
-
- private final InteractionActivity activity;
-
- private boolean answered = false;
-
- private String path;
-
- private Integer count;
-
- private static Map<String, Integer> invocationCount = new HashMap<String, Integer> ();
-
- public InteractionCallbackRequestor(final InteractionActivity activity,
- final AsynchronousActivityCallback callback,
- final Map<String, T2Reference> inputs) {
- this.activity = activity;
- this.callback = callback;
- this.inputs = inputs;
- this.path = calculatePath();
- this.count = calculateInvocationCount(path);
- }
-
- @Override
- public String getRunId() {
- return this.callback.getContext()
- .getEntities(WorkflowRunIdEntity.class).get(0)
- .getWorkflowRunId();
- }
-
- @Override
- public Map<String, Object> getInputData() {
- final Map<String, Object> inputData = new HashMap<String, Object>();
-
- final InvocationContext context = this.callback.getContext();
- final ReferenceService referenceService = context.getReferenceService();
- for (final String inputName : this.inputs.keySet()) {
- final Object input = referenceService.renderIdentifier(this.inputs
- .get(inputName), this.getInputPort(inputName)
- .getTranslatedElementClass(), this.callback.getContext());
- inputData.put(inputName, input);
- }
- return inputData;
- }
-
- public ActivityInputPort getInputPort(final String name) {
- for (final ActivityInputPort port : this.activity.getInputPorts()) {
- if (port.getName().equals(name)) {
- return port;
- }
- }
- return null;
- }
-
- @Override
- public void fail(final String string) {
- if (this.answered) {
- return;
- }
- this.callback.fail(string);
- this.answered = true;
- }
-
- @Override
- public void carryOn() {
- if (this.answered) {
- return;
- }
- this.callback.receiveResult(new HashMap<String, T2Reference>(),
- new int[0]);
- this.answered = true;
- }
-
- @Override
- public String generateId() {
- final String workflowRunId = getRunId();
- final String parentProcessIdentifier = this.callback
- .getParentProcessIdentifier();
- return (workflowRunId + ":" + parentProcessIdentifier);
- }
-
- @Override
- public InteractionType getInteractionType() {
- if (this.activity.isProgressNotification()) {
- return InteractionType.Notification;
- }
- return InteractionType.DataRequest;
- }
-
- @Override
- public InteractionActivityType getPresentationType() {
- return this.activity.getInteractionActivityType();
- }
-
- @Override
- public String getPresentationOrigin() {
- return this.activity.getPresentationOrigin();
- }
-
- @Override
- public void receiveResult(final Map<String, Object> resultMap) {
- if (this.answered) {
- return;
- }
- final Map<String, T2Reference> outputs = new HashMap<String, T2Reference>();
-
- final InvocationContext context = this.callback.getContext();
- final ReferenceService referenceService = context.getReferenceService();
-
- for (final Object key : resultMap.keySet()) {
- final String keyString = (String) key;
- final Object value = resultMap.get(key);
- final Integer depth = this.findPortDepth(keyString);
- if (depth == null) {
- this.callback.fail("Data sent for unknown port : " + keyString);
- }
- outputs.put(keyString,
- referenceService.register(value, depth, true, context));
- }
- this.callback.receiveResult(outputs, new int[0]);
- this.answered = true;
- }
-
- private Integer findPortDepth(final String portName) {
- final Set<ActivityOutputPort> ports = this.activity.getOutputPorts();
- for (final ActivityOutputPort op : ports) {
- if (op.getName().equals(portName)) {
- return op.getDepth();
- }
- }
- return null;
- }
-
- private String calculatePath() {
- final String parentProcessIdentifier = this.callback
- .getParentProcessIdentifier();
- String result = "";
- String parts[] = parentProcessIdentifier.split(":");
-
- for (int i = 2; i < parts.length; i += 4) {
- if (!result.isEmpty()) {
- result += ":";
- }
- result += parts[i];
- }
- return result;
- }
-
- @Override
- public String getPath() {
- return this.path;
- }
-
- private synchronized static Integer calculateInvocationCount(String path) {
- Integer currentCount = invocationCount.get(path);
- if (currentCount == null) {
- currentCount = Integer.valueOf(0);
- } else {
- currentCount = currentCount + 1;
- }
- invocationCount.put(path, currentCount);
- return currentCount;
- }
-
- @Override
- public Integer getInvocationCount() {
- return count;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRecorder.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRecorder.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRecorder.java
deleted file mode 100644
index 66b2d38..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRecorder.java
+++ /dev/null
@@ -1,163 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.log4j.Logger;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/**
- *
- * This class is used to remember and forget interactions and their associated
- * ATOM entries and files
- *
- * @author alanrw
- *
- */
-public class InteractionRecorder {
-
- private static final Logger logger = Logger
- .getLogger(InteractionRecorder.class);
-
- static Map<String, Map<String, Set<String>>> runToInteractionMap = Collections
- .synchronizedMap(new HashMap<String, Map<String, Set<String>>>());
-
- private InteractionUtils interactionUtils;
-
- private InteractionRecorder() {
- super();
- }
-
- public void deleteRun(final String runToDelete) {
- final Set<String> interactionIds = new HashSet<String>(
- getInteractionMap(runToDelete).keySet());
- for (final String interactionId : interactionIds) {
- deleteInteraction(runToDelete, interactionId);
- }
- runToInteractionMap.remove(runToDelete);
- }
-
- public void deleteInteraction(final String runId,
- final String interactionId) {
- for (final String urlString : getResourceSet(runId, interactionId)) {
- try {
- deleteUrl(urlString);
- } catch (final IOException e) {
- logger.info("Unable to delete " + urlString, e);
- }
-
- }
- getInteractionMap(runId).remove(interactionId);
- }
-
- private void deleteUrl(final String urlString) throws IOException {
- logger.info("Deleting resource " + urlString);
- final URL url = new URL(urlString);
- final HttpURLConnection httpCon = (HttpURLConnection) url
- .openConnection();
- httpCon.setRequestMethod("DELETE");
- final int response = httpCon.getResponseCode();
- if (response >= 400) {
- logger.info("Received response code" + response);
- }
- }
-
- public void addResource(final String runId,
- final String interactionId, final String resourceId) {
- if (resourceId == null) {
- logger.error("Attempt to add null resource",
- new NullPointerException(""));
- return;
- }
- logger.info("Adding resource " + resourceId);
- final Set<String> resourceSet = getResourceSet(runId, interactionId);
-
- resourceSet.add(resourceId);
- }
-
- private Set<String> getResourceSet(final String runId,
- final String interactionId) {
- final Map<String, Set<String>> interactionMap = getInteractionMap(runId);
- Set<String> resourceSet = interactionMap.get(interactionId);
- if (resourceSet == null) {
- resourceSet = Collections.synchronizedSet(new HashSet<String>());
- interactionMap.put(interactionId, resourceSet);
- }
- return resourceSet;
- }
-
- private Map<String, Set<String>> getInteractionMap(final String runId) {
- Map<String, Set<String>> interactionMap = InteractionRecorder.runToInteractionMap
- .get(runId);
- if (interactionMap == null) {
- interactionMap = Collections.synchronizedMap(Collections
- .synchronizedMap(new HashMap<String, Set<String>>()));
- InteractionRecorder.runToInteractionMap.put(runId, interactionMap);
- }
- return interactionMap;
- }
-
- public void persist() {
- final File outputFile = getUsageFile();
- try {
- FileUtils.writeStringToFile(outputFile, InteractionUtils
- .objectToJson(InteractionRecorder.runToInteractionMap));
- } catch (final IOException e) {
- logger.error(e);
- }
- }
-
- private File getUsageFile() {
- return new File(getInteractionUtils().getInteractionServiceDirectory(),
- "usage");
- }
-
- public void load() {
- final File inputFile = getUsageFile();
- try {
- final String usageString = FileUtils.readFileToString(inputFile);
- final ObjectMapper mapper = new ObjectMapper();
- @SuppressWarnings("unchecked")
- final Map<String, Object> rootAsMap = mapper.readValue(usageString,
- Map.class);
- InteractionRecorder.runToInteractionMap.clear();
- for (final String runId : rootAsMap.keySet()) {
- @SuppressWarnings("unchecked")
- final Map<String, Object> runMap = (Map<String, Object>) rootAsMap
- .get(runId);
- for (final String interactionId : runMap.keySet()) {
- @SuppressWarnings("unchecked")
- final List<String> urlList = (List<String>) runMap
- .get(interactionId);
- for (final String url : urlList) {
- addResource(runId, interactionId, url);
- }
- }
- }
- } catch (final IOException e) {
- logger.info(e);
- }
- }
-
- public InteractionUtils getInteractionUtils() {
- return interactionUtils;
- }
-
- public void setInteractionUtils(InteractionUtils interactionUtils) {
- this.interactionUtils = interactionUtils;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRequestor.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRequestor.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRequestor.java
deleted file mode 100644
index 7eff950..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRequestor.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.util.Map;
-
-/**
- * @author alanrw
- *
- */
-public interface InteractionRequestor {
-
- String getRunId();
-
- Map<String, Object> getInputData();
-
- void fail(String string);
-
- void carryOn();
-
- String generateId();
-
- // The path to whatever requested the interaction
- String getPath();
-
- // The number of times whatever requested the interaction has requested one
- Integer getInvocationCount();
-
- InteractionActivityType getPresentationType();
-
- InteractionType getInteractionType();
-
- String getPresentationOrigin();
-
- void receiveResult(Map<String, Object> resultMap);
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRunDeletionListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRunDeletionListener.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRunDeletionListener.java
deleted file mode 100644
index 880ff82..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRunDeletionListener.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import net.sf.taverna.t2.workflowmodel.RunDeletionListener;
-
-import org.apache.log4j.Logger;
-
-/**
- * @author alanrw
- *
- */
-public class InteractionRunDeletionListener implements RunDeletionListener {
-
- private InteractionRecorder interactionRecorder;
-
- @SuppressWarnings("unused")
- private static final Logger logger = Logger
- .getLogger(InteractionRunDeletionListener.class);
-
- @Override
- public void deleteRun(final String runToDelete) {
- interactionRecorder.deleteRun(runToDelete);
- }
-
- public void setInteractionRecorder(InteractionRecorder interactionRecorder) {
- this.interactionRecorder = interactionRecorder;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionType.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionType.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionType.java
deleted file mode 100644
index 1e42b4a..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionType.java
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-/**
- * @author alanrw
- *
- */
-public enum InteractionType {
-
- DataRequest, Notification, SecurityRequest, AuthenticationRequest
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionUtils.java b/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionUtils.java
deleted file mode 100644
index 149f842..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionUtils.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-// import net.sf.taverna.raven.appconfig.ApplicationRuntime;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-
-import org.apache.commons.io.IOUtils;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import uk.org.taverna.configuration.app.ApplicationConfiguration;
-
-/**
- * @author alanrw
- *
- */
-public class InteractionUtils {
-
- static final Set<String> publishedUrls = Collections
- .synchronizedSet(new HashSet<String>());
-
- private ApplicationConfiguration appConfig;
-
- private InteractionRecorder interactionRecorder;
-
- private InteractionPreference interactionPreference;
-
- private InteractionUtils() {
- super();
- }
-
- protected void copyFixedFile(final String fixedFileName)
- throws IOException {
- final String targetUrl = interactionPreference
- .getLocationUrl() + "/" + fixedFileName;
- this.publishFile(
- targetUrl,
- InteractionActivity.class.getResourceAsStream("/"
- + fixedFileName), null, null);
- }
-
- public void publishFile(final String urlString,
- final String contents, final String runId,
- final String interactionId) throws IOException {
- final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
- contents.getBytes("UTF-8"));
- this.publishFile(urlString, byteArrayInputStream, runId,
- interactionId);
- }
-
- void publishFile(final String urlString, final InputStream is,
- final String runId, final String interactionId) throws IOException {
- if (InteractionUtils.publishedUrls.contains(urlString)) {
- return;
- }
- InteractionUtils.publishedUrls.add(urlString);
- if (runId != null) {
- interactionRecorder.addResource(runId, interactionId, urlString);
- }
-
- final URL url = new URL(urlString);
- final HttpURLConnection httpCon = (HttpURLConnection) url
- .openConnection();
- httpCon.setDoOutput(true);
- httpCon.setRequestMethod("PUT");
- final OutputStream outputStream = httpCon.getOutputStream();
- IOUtils.copy(is, outputStream);
- is.close();
- outputStream.close();
- int code = httpCon.getResponseCode();
- if ((code >= 400) || (code < 0)){
- throw new IOException ("Received code " + code);
- }
- }
-
- public static String getUsedRunId(final String engineRunId) {
- String runId = engineRunId;
- final String specifiedId = System.getProperty("taverna.runid");
- if (specifiedId != null) {
- runId = specifiedId;
- }
- return runId;
- }
-
- public File getInteractionServiceDirectory() {
- final File workingDir = appConfig
- .getApplicationHomeDir();
- final File interactionServiceDirectory = new File(workingDir,
- "interactionService");
- interactionServiceDirectory.mkdirs();
- return interactionServiceDirectory;
- }
-
- public static String objectToJson(final Object o) throws IOException {
- final ObjectMapper mapper = new ObjectMapper();
- final StringWriter sw = new StringWriter();
- mapper.writeValue(sw, o);
- final String theString = sw.toString();
- return theString;
- }
-
- public void setAppConfig(ApplicationConfiguration appConfig) {
- this.appConfig = appConfig;
- }
-
- public void setInteractionRecorder(InteractionRecorder interactionRecorder) {
- this.interactionRecorder = interactionRecorder;
- }
-
- public void setInteractionPreference(InteractionPreference interactionPreference) {
- this.interactionPreference = interactionPreference;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/ResponseFeedListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/ResponseFeedListener.java b/src/main/java/net/sf/taverna/t2/activities/interaction/ResponseFeedListener.java
deleted file mode 100644
index 78fdd6d..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/ResponseFeedListener.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-
-import net.sf.taverna.t2.activities.interaction.atom.AtomUtils;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-
-import org.apache.abdera.model.Element;
-import org.apache.abdera.model.Entry;
-import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
-
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-/**
- * @author alanrw
- *
- */
-public final class ResponseFeedListener extends FeedReader {
-
- private InteractionRecorder interactionRecorder;
-
- private InteractionPreference interactionPreference;
-
- private static final String STATUS_OK = "OK";
-
- private static final String DATA_READ_FAILED = "Data read failed";
-
- private static ResponseFeedListener instance;
-
- private static final Logger logger = Logger.getLogger(ResponseFeedListener.class);
-
- private static final Map<String, InteractionRequestor> requestorMap = new HashMap<String, InteractionRequestor>();
-
- private ResponseFeedListener() {
- super("ResponseFeedListener");
- }
-
- @Override
- protected void considerEntry(final Entry entry) {
- synchronized (requestorMap) {
- final String refString = getReplyTo(entry);
- if (refString == null) {
- return;
- }
- final String runId = getRunId(entry);
-
- final String entryUrl = interactionPreference
- .getFeedUrlString() + "/" + entry.getId().toASCIIString();
- interactionRecorder.addResource(runId, refString, entryUrl);
-
- if (requestorMap.containsKey(refString)) {
-
- final InteractionRequestor requestor = requestorMap
- .get(refString);
-
- final Element statusElement = entry.getExtension(AtomUtils
- .getResultStatusQName());
- final String statusContent = statusElement.getText().trim();
- if (!statusContent.equals(STATUS_OK)) {
- cleanup(refString);
- requestor.fail(statusContent);
- return;
- }
- final String outputDataUrl = interactionPreference
- .getOutputDataUrlString(refString);
- // Note that this may not really exist
- interactionRecorder
- .addResource(runId, refString, outputDataUrl);
- String content = null;
- InputStream iStream;
- try {
- iStream = new URL(outputDataUrl).openStream();
- content = IOUtils.toString(iStream);
- iStream.close();
- } catch (final MalformedURLException e1) {
- logger.error(e1);
- requestor.fail(DATA_READ_FAILED);
- return;
- } catch (final IOException e1) {
- logger.error(e1);
- requestor.fail(DATA_READ_FAILED);
- return;
- }
-
- try {
- final ObjectMapper mapper = new ObjectMapper();
- @SuppressWarnings("unchecked")
- final Map<String, Object> rootAsMap = mapper.readValue(
- content, Map.class);
- requestor.receiveResult(rootAsMap);
- cleanup(refString);
- interactionRecorder.deleteInteraction(runId, refString);
-
- } catch (final JsonParseException e) {
- logger.error(e);
- } catch (final IOException e) {
- logger.error(e);
- } catch (final Exception e) {
- logger.error(e);
- }
-
- }
- }
- }
-
- private static void cleanup(final String refString) {
- requestorMap.remove(refString);
- }
-
- private static String getReplyTo(final Entry entry) {
- final Element replyTo = entry.getFirstChild(AtomUtils
- .getInReplyToQName());
- if (replyTo == null) {
- return null;
- }
- return replyTo.getText();
- }
-
- private static String getRunId(final Entry entry) {
- final Element runIdElement = entry.getFirstChild(AtomUtils
- .getRunIdQName());
- if (runIdElement == null) {
- return null;
- }
- return runIdElement.getText();
- }
-
- public void registerInteraction(final Entry entry,
- final InteractionRequestor requestor) {
- synchronized (requestorMap) {
- final String refString = entry.getId().toString();
- requestorMap.put(refString, requestor);
- }
- }
-
- public void setInteractionRecorder(InteractionRecorder interactionRecorder) {
- this.interactionRecorder = interactionRecorder;
- }
-
- public void setInteractionPreference(InteractionPreference interactionPreference) {
- this.interactionPreference = interactionPreference;
- }
-
- @Override
- protected InteractionPreference getInteractionPreference() {
- return this.interactionPreference;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/atom/AtomUtils.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/atom/AtomUtils.java b/src/main/java/net/sf/taverna/t2/activities/interaction/atom/AtomUtils.java
deleted file mode 100644
index 350e986..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/atom/AtomUtils.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction.atom;
-
-import javax.xml.namespace.QName;
-
-/**
- * @author alanrw
- *
- */
-public class AtomUtils {
-
- private static QName inputDataQName = new QName(
- "http://ns.taverna.org.uk/2012/interaction", "input-data",
- "interaction");
- private static QName resultDataQName = new QName(
- "http://ns.taverna.org.uk/2012/interaction", "result-data",
- "interaction");
- private static QName resultStatusQName = new QName(
- "http://ns.taverna.org.uk/2012/interaction", "result-status",
- "interaction");
- private static QName idQName = new QName(
- "http://ns.taverna.org.uk/2012/interaction", "id", "interaction");
- private static QName pathIdQName = new QName(
- "http://ns.taverna.org.uk/2012/interaction", "path",
- "interaction");
- private static QName countQName = new QName(
- "http://ns.taverna.org.uk/2012/interaction", "count",
- "interaction");
- private static QName runIdQName = new QName(
- "http://ns.taverna.org.uk/2012/interaction", "run-id",
- "interaction");
- private static QName inReplyToQName = new QName(
- "http://ns.taverna.org.uk/2012/interaction", "in-reply-to",
- "interaction");
- private static QName progressQName = new QName(
- "http://ns.taverna.org.uk/2012/interaction", "progress",
- "interaction");
-
- public static QName getInputDataQName() {
- return inputDataQName;
- }
-
- public static QName getIdQName() {
- return idQName;
- }
-
- public static QName getInReplyToQName() {
- return inReplyToQName;
- }
-
- public static QName getResultDataQName() {
- return resultDataQName;
- }
-
- public static QName getResultStatusQName() {
- return resultStatusQName;
- }
-
- /**
- * @return the runIdQName
- */
- public static QName getRunIdQName() {
- return runIdQName;
- }
-
- /**
- * @return the progressQName
- */
- public static QName getProgressQName() {
- return progressQName;
- }
-
- public static QName getPathIdQName() {
- return pathIdQName;
- }
-
- public static QName getCountQName() {
- return countQName;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/feed/ShowRequestFeedListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/feed/ShowRequestFeedListener.java b/src/main/java/net/sf/taverna/t2/activities/interaction/feed/ShowRequestFeedListener.java
deleted file mode 100644
index b8996b2..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/feed/ShowRequestFeedListener.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction.feed;
-
-import java.awt.Desktop;
-import java.io.IOException;
-import java.net.URISyntaxException;
-
-import net.sf.taverna.t2.activities.interaction.FeedReader;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-
-import org.apache.abdera.model.Entry;
-import org.apache.abdera.model.Link;
-import org.apache.log4j.Logger;
-
-/**
- * @author alanrw
- *
- */
-public class ShowRequestFeedListener extends FeedReader {
-
- private static ShowRequestFeedListener instance;
-
- private static Logger logger = Logger
- .getLogger(ShowRequestFeedListener.class);
-
- private static final String ignore_requests_property = System.getProperty("taverna.interaction.ignore_requests");
-
- private static boolean operational = (ignore_requests_property == null) || !Boolean.valueOf(ignore_requests_property);
-
- private InteractionPreference interactionPreference;
-
- private ShowRequestFeedListener() {
- super("ShowRequestFeedListener");
- }
-
- @Override
- protected void considerEntry(final Entry entry) {
- if (!operational) {
- return;
- }
- final Link presentationLink = entry.getLink("presentation");
- if (presentationLink != null) {
- try {
- Desktop.getDesktop().browse(
- presentationLink.getHref().toURI());
- } catch (final IOException e) {
- logger.error("Cannot open presentation");
- } catch (final URISyntaxException e) {
- logger.error("Cannot open presentation");
- }
- }
- }
-
- @Override
- protected InteractionPreference getInteractionPreference() {
- return this.interactionPreference;
- }
-
- public void setInteractionPreference(InteractionPreference interactionPreference) {
- this.interactionPreference = interactionPreference;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/HackedFilesystemAdapter.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/HackedFilesystemAdapter.java b/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/HackedFilesystemAdapter.java
deleted file mode 100644
index 24ad5a5..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/HackedFilesystemAdapter.java
+++ /dev/null
@@ -1,263 +0,0 @@
-package net.sf.taverna.t2.activities.interaction.jetty;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. The ASF licenses this file to You
- * under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License. For additional information regarding
- * copyright in this work, please see the NOTICE file in the top level
- * directory of this distribution.
- */
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.abdera.Abdera;
-import org.apache.abdera.i18n.templates.Template;
-import org.apache.abdera.i18n.text.Normalizer;
-import org.apache.abdera.i18n.text.Sanitizer;
-import org.apache.abdera.model.Document;
-import org.apache.abdera.model.Entry;
-import org.apache.abdera.model.Feed;
-import org.apache.abdera.model.Link;
-import org.apache.abdera.protocol.server.ProviderHelper;
-import org.apache.abdera.protocol.server.RequestContext;
-import org.apache.abdera.protocol.server.ResponseContext;
-import org.apache.abdera.protocol.server.Target;
-import org.apache.abdera.protocol.server.provider.managed.FeedConfiguration;
-import org.apache.abdera.protocol.server.provider.managed.ManagedCollectionAdapter;
-
-/**
- * Simple Filesystem Adapter that uses a local directory to store Atompub
- * collection entries. As an extension of the ManagedCollectionAdapter class,
- * the Adapter is intended to be used with implementations of the
- * ManagedProvider and are configured using /abdera/adapter/*.properties files.
- * The *.properties file MUST specify the fs.root property to specify the root
- * directory used by the Adapter.
- */
-public class HackedFilesystemAdapter extends ManagedCollectionAdapter {
-
- private InteractionJetty interactionJetty;
-
- private final File root;
- private final static FileSorter sorter = new FileSorter();
- private final static Template paging_template = new Template(
- "?{-join|&|count,page}");
-
- public HackedFilesystemAdapter(final Abdera abdera,
- final FeedConfiguration config) {
- super(abdera, config);
- this.root = this.getRoot();
- }
-
- private File getRoot() {
- return interactionJetty.getFeedDirectory();
- }
-
- private Entry getEntry(final File entryFile) {
- if (!entryFile.exists() || !entryFile.isFile()) {
- throw new RuntimeException();
- }
- try {
- final FileInputStream fis = new FileInputStream(entryFile);
- final Document<Entry> doc = this.abdera.getParser().parse(fis);
- final Entry entry = doc.getRoot();
- return entry;
- } catch (final Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- private void addPagingLinks(final RequestContext request, final Feed feed,
- final int currentpage, final int count) {
- final Map<String, Object> params = new HashMap<String, Object>();
- params.put("count", count);
- params.put("page", currentpage + 1);
- String next = paging_template.expand(params);
- next = request.getResolvedUri().resolve(next).toString();
- feed.addLink(next, "next");
- if (currentpage > 0) {
- params.put("page", currentpage - 1);
- String prev = paging_template.expand(params);
- prev = request.getResolvedUri().resolve(prev).toString();
- feed.addLink(prev, "previous");
- }
- params.put("page", 0);
- String current = paging_template.expand(params);
- current = request.getResolvedUri().resolve(current).toString();
- feed.addLink(current, "current");
- }
-
- private void getEntries(final RequestContext request, final Feed feed,
- final File root) {
- final File[] files = root.listFiles();
- Arrays.sort(files, sorter);
- final int length = ProviderHelper.getPageSize(request, "count", 25);
- final int offset = ProviderHelper.getOffset(request, "page", length);
- final String _page = request.getParameter("page");
- final int page = (_page != null) ? Integer.parseInt(_page) : 0;
- this.addPagingLinks(request, feed, page, length);
- if (offset > files.length) {
- return;
- }
- for (int n = offset; (n < (offset + length)) && (n < files.length); n++) {
- final File file = files[n];
- try {
- final Entry entry = this.getEntry(file);
- feed.addEntry((Entry) entry.clone());
- } catch (final Exception e) {
- // Do nothing
- }
- }
- }
-
- @Override
- public ResponseContext getFeed(final RequestContext request) {
- final Feed feed = this.abdera.newFeed();
- feed.setId(this.config.getServerConfiguration().getServerUri() + "/"
- + this.config.getFeedId());
- feed.setTitle(this.config.getFeedTitle());
- feed.addAuthor(this.config.getFeedAuthor());
- feed.addLink(this.config.getFeedUri());
- feed.addLink(this.config.getFeedUri(), "self");
- feed.setUpdated(new Date());
- this.getEntries(request, feed, this.root);
- return ProviderHelper.returnBase(feed.getDocument(), 200, null);
- }
-
- @Override
- public ResponseContext deleteEntry(final RequestContext request) {
- final Target target = request.getTarget();
- final String key = target.getParameter("entry");
- final File file = this.getFile(key, false);
- if (file.exists()) {
- file.delete();
- }
- return ProviderHelper.nocontent();
- }
-
- @Override
- public ResponseContext getEntry(final RequestContext request) {
- final Target target = request.getTarget();
- final String key = target.getParameter("entry");
- final File file = this.getFile(key, false);
- final Entry entry = this.getEntry(file);
- if (entry != null) {
- return ProviderHelper.returnBase(entry.getDocument(), 200, null);
- } else {
- return ProviderHelper.notfound(request);
- }
- }
-
- @Override
- public ResponseContext postEntry(final RequestContext request) {
- if (request.isAtom()) {
- try {
- final Entry entry = (Entry) request.getDocument().getRoot()
- .clone();
- final String key = this.createKey(request);
- this.setEditDetail(request, entry, key);
- final File file = this.getFile(key);
- final FileOutputStream out = new FileOutputStream(file);
- entry.writeTo(out);
- final String edit = entry.getEditLinkResolvedHref().toString();
- return ProviderHelper
- .returnBase(entry.getDocument(), 201, null)
- .setLocation(edit);
- } catch (final Exception e) {
- return ProviderHelper.badrequest(request);
- }
- } else {
- return ProviderHelper.notsupported(request);
- }
- }
-
- private void setEditDetail(final RequestContext request, final Entry entry,
- final String key) throws IOException {
- final Target target = request.getTarget();
- final String feed = target.getParameter("feed");
- final String id = key;
- entry.setEdited(new Date());
- final Link link = entry.getEditLink();
- final Map<String, Object> params = new HashMap<String, Object>();
- params.put("feed", feed);
- params.put("entry", id);
- final String href = request.absoluteUrlFor("entry", params);
- if (link == null) {
- entry.addLink(href, "edit");
- } else {
- link.setHref(href);
- }
- }
-
- private File getFile(final String key) {
- return this.getFile(key, true);
- }
-
- private File getFile(final String key, final boolean post) {
- final File file = new File(this.root, key);
- if (post && file.exists()) {
- throw new RuntimeException("File exists");
- }
- return file;
- }
-
- private String createKey(final RequestContext request) throws IOException {
- String slug = request.getSlug();
- if (slug == null) {
- slug = ((Entry) request.getDocument().getRoot()).getTitle();
- }
- return Sanitizer.sanitize(slug, "", true, Normalizer.Form.D);
- }
-
- @Override
- public ResponseContext putEntry(final RequestContext request) {
- if (request.isAtom()) {
- try {
- final Entry entry = (Entry) request.getDocument().getRoot()
- .clone();
- final String key = request.getTarget().getParameter("entry");
- this.setEditDetail(request, entry, key);
- final File file = this.getFile(key, false);
- final FileOutputStream out = new FileOutputStream(file);
- entry.writeTo(out);
- final String edit = entry.getEditLinkResolvedHref().toString();
- return ProviderHelper
- .returnBase(entry.getDocument(), 200, null)
- .setLocation(edit);
- } catch (final Exception e) {
- return ProviderHelper.badrequest(request);
- }
- } else {
- return ProviderHelper.notsupported(request);
- }
- }
-
- private static class FileSorter implements Comparator<File> {
- @Override
- public int compare(final File o1, final File o2) {
- return o1.lastModified() > o2.lastModified() ? -1 : o1
- .lastModified() < o2.lastModified() ? 1 : 0;
- }
- }
-
- public void setInteractionJetty(InteractionJetty interactionJetty) {
- this.interactionJetty = interactionJetty;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/95509a51/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/InteractionJetty.java
----------------------------------------------------------------------
diff --git a/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/InteractionJetty.java b/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/InteractionJetty.java
deleted file mode 100644
index c5fb3af..0000000
--- a/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/InteractionJetty.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/**
- *
- */
-package net.sf.taverna.t2.activities.interaction.jetty;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
-
-import net.sf.taverna.t2.activities.interaction.FeedReader;
-import net.sf.taverna.t2.activities.interaction.InteractionUtils;
-import net.sf.taverna.t2.activities.interaction.ResponseFeedListener;
-import net.sf.taverna.t2.activities.interaction.feed.ShowRequestFeedListener;
-import net.sf.taverna.t2.activities.interaction.preference.InteractionPreference;
-import net.sf.taverna.t2.security.credentialmanager.CMException;
-import net.sf.taverna.t2.security.credentialmanager.CredentialManager;
-import net.sf.taverna.t2.security.credentialmanager.UsernamePassword;
-//import net.sf.taverna.t2.spi.SPIRegistry;
-import net.sf.webdav.WebdavServlet;
-
-import org.apache.abdera.protocol.server.ServiceManager;
-import org.apache.abdera.protocol.server.provider.basic.BasicProvider;
-import org.apache.abdera.protocol.server.servlet.AbderaServlet;
-import org.apache.log4j.Logger;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.handler.HandlerList;
-import org.mortbay.jetty.security.Constraint;
-import org.mortbay.jetty.security.ConstraintMapping;
-import org.mortbay.jetty.security.HashUserRealm;
-import org.mortbay.jetty.security.SecurityHandler;
-import org.mortbay.jetty.servlet.Context;
-import org.mortbay.jetty.servlet.ServletHolder;
-
-/**
- * @author alanrw
- *
- */
-public class InteractionJetty {
-
- private static Logger logger = Logger.getLogger(InteractionJetty.class);
-
- private InteractionUtils interactionUtils;
-
- private ShowRequestFeedListener showRequestFeedListener;
- private ResponseFeedListener responseFeedListener;
-
- private InteractionPreference interactionPreference;
-
- private static Server server;
-
- private static String REALM_NAME = "TavernaInteraction";
-
- private static boolean listenersStarted = false;
-
- public synchronized void startJettyIfNecessary(CredentialManager credentialManager) {
- if (server != null) {
- return;
- }
-
-// final ClassLoader previousContextClassLoader = Thread.currentThread()
-// .getContextClassLoader();
-// Thread.currentThread().setContextClassLoader(
-// InteractionJetty.class.getClassLoader());
-
- final String port = interactionPreference.getPort();
-
- server = new Server(Integer.parseInt(port));
- server.setStopAtShutdown(true);
-
- final WebdavServlet interactionServlet = new WebdavServlet();
-
- final ServletHolder interactionHolder = new ServletHolder();
- interactionHolder.setServlet(interactionServlet);
-
- try {
-
- interactionHolder.setInitParameter("rootpath",
- getInteractionDirectory().getCanonicalPath());
- } catch (final IOException e1) {
- logger.error("Unable to set root of interaction", e1);
- }
-
- final HandlerList handlers = new HandlerList();
- final Context overallContext = new Context(handlers, "/",
- Context.SESSIONS);
- overallContext.setContextPath("/");
- server.setHandler(overallContext);
-
- final AbderaServlet abderaServlet = new AbderaServlet();
- final ServletHolder abderaHolder = new ServletHolder(abderaServlet);
- abderaHolder.setInitParameter(ServiceManager.PROVIDER,
- BasicProvider.class.getName());
-
- overallContext.addServlet(abderaHolder, "/*");
- overallContext.addServlet(interactionHolder, "/interaction/*");
-
- if (interactionPreference.getUseUsername()) {
- final Constraint constraint = new Constraint();
- constraint.setName(Constraint.__BASIC_AUTH);
-
- constraint.setRoles(new String[] { "user", "admin", "moderator" });
- constraint.setAuthenticate(true);
-
- final ConstraintMapping cm = new ConstraintMapping();
- cm.setConstraint(constraint);
- cm.setPathSpec("/*");
-
- final SecurityHandler sh = new SecurityHandler();
- try {
- final HashUserRealm realm = new HashUserRealm(REALM_NAME);
- final URI serviceURI = createServiceURI(port);
- final UsernamePassword up = credentialManager
- .getUsernameAndPasswordForService(serviceURI, true,
- "Please specify the username and password to secure your interactions");
- if (up != null) {
- final String username = up.getUsername();
- realm.put(username, up.getPasswordAsString());
- realm.addUserToRole(username, "user");
- }
- sh.setUserRealm(realm);
- } catch (final CMException e) {
- logger.error(e);
- } catch (final URISyntaxException e) {
- logger.error(e);
- }
- sh.setConstraintMappings(new ConstraintMapping[] { cm });
- overallContext.addHandler(sh);
-
- }
-
- getFeedDirectory();
-
- try {
- server.start();
- while (!server.isRunning()) {
- Thread.sleep(5000);
- }
- } catch (final Exception e) {
- logger.error("Unable to start Jetty");
- }
-// Thread.currentThread()
-// .setContextClassLoader(previousContextClassLoader);
- }
-
- public static URI createServiceURI(final String port)
- throws URISyntaxException {
- return new URI("http://localhost:" + port + "/#" + REALM_NAME);
- }
-
- public File getJettySubdirectory(final String subdirectoryName) {
- final File workingDir = interactionUtils
- .getInteractionServiceDirectory();
- final File subDir = new File(workingDir, "jetty/" + subdirectoryName);
- subDir.mkdirs();
- return subDir;
- }
-
- public File getFeedDirectory() {
- return getJettySubdirectory("feed");
- }
-
- public File getInteractionDirectory() {
- return getJettySubdirectory("interaction");
- }
-
- public synchronized void startListenersIfNecessary() {
- if (listenersStarted) {
- return;
- }
- listenersStarted = true;
- startListener(this.responseFeedListener);
- startListener(showRequestFeedListener);
-
- }
-
- private void startListener(FeedReader fr) {
- try {
- fr.start();
- }
- catch (Exception e) {
- logger.error("Failed to start " + fr.getClass().getCanonicalName(), e);
- }
- }
-
- public void setInteractionUtils(InteractionUtils interactionUtils) {
- this.interactionUtils = interactionUtils;
- }
-
- public void setShowRequestFeedListener(
- ShowRequestFeedListener showRequestFeedListener) {
- this.showRequestFeedListener = showRequestFeedListener;
- }
-
- public void setResponseFeedListener(ResponseFeedListener responseFeedListener) {
- this.responseFeedListener = responseFeedListener;
- }
-
- public void setInteractionPreference(InteractionPreference interactionPreference) {
- this.interactionPreference = interactionPreference;
- }
-
-}