http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/2e8f451e/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.RunDeletionListener ---------------------------------------------------------------------- diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.RunDeletionListener b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.RunDeletionListener deleted file mode 100644 index ac84bb3..0000000 --- a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.RunDeletionListener +++ /dev/null @@ -1 +0,0 @@ -net.sf.taverna.t2.activities.externaltool.ExternalToolRunDeletionListener
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/2e8f451e/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.health.HealthChecker ---------------------------------------------------------------------- diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.health.HealthChecker b/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.health.HealthChecker deleted file mode 100644 index c97a79d..0000000 --- a/taverna-external-tool-activity/src/main/resources/META-INF/services/net.sf.taverna.t2.workflowmodel.health.HealthChecker +++ /dev/null @@ -1,2 +0,0 @@ -net.sf.taverna.t2.activities.externaltool.ExternalToolActivityHealthChecker -net.sf.taverna.t2.activities.externaltool.ExternalToolActivityMimeTypeChecker http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/2e8f451e/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context-osgi.xml ---------------------------------------------------------------------- diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context-osgi.xml b/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context-osgi.xml deleted file mode 100644 index 197f2c0..0000000 --- a/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context-osgi.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<beans:beans xmlns="http://www.springframework.org/schema/osgi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns:beans="http://www.springframework.org/schema/beans" - xsi:schemaLocation="http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/osgi - http://www.springframework.org/schema/osgi/spring-osgi.xsd"> - - <service ref="SshReference" interface="net.sf.taverna.t2.reference.ExternalReferenceSPI" /> - - <service ref="invocationGroupManager" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationGroupManager" /> - - <service ref="LocalInvocationPersister" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister" /> - <service ref="SshInvocationPersister" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister" /> - - <service ref="LocalMechanismCreator" interface="net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator" /> - <service ref="SshMechanismCreator" interface="net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator" /> - - <service ref="ExternalToolRunDeletionListener" interface="net.sf.taverna.t2.workflowmodel.RunDeletionListener" /> - - <service ref="SshUrlToSshReference" interface="net.sf.taverna.t2.reference.ValueToReferenceConverterSPI" /> - - <service ref="ExternalToolActivityHealthChecker" interface="net.sf.taverna.t2.workflowmodel.health.HealthChecker" /> - <service ref="ExternalToolActivityMimeTypeChecker" interface="net.sf.taverna.t2.workflowmodel.health.HealthChecker" /> - - <service ref="LocalInvocationCreator" interface="net.sf.taverna.t2.activities.externaltool.InvocationCreator" /> - <service ref="SshInvocationCreator" interface="net.sf.taverna.t2.activities.externaltool.InvocationCreator" /> - - <service ref="externalToolActivityFactory" interface="net.sf.taverna.t2.workflowmodel.processor.activity.ActivityFactory" /> - - <list id="invocationCreators" interface="net.sf.taverna.t2.activities.externaltool.InvocationCreator" cardinality="0..N" /> - - <list id="mechanismCreators" interface="net.sf.taverna.t2.activities.externaltool.manager.MechanismCreator" cardinality="0..N" /> - - <list id="invocationPersisters" interface="net.sf.taverna.t2.activities.externaltool.manager.InvocationPersister" cardinality="0..N" /> - - <reference id="credentialManager" interface="net.sf.taverna.t2.security.credentialmanager.CredentialManager" /> - - <reference id="applicationConfiguration" interface="uk.org.taverna.configuration.app.ApplicationConfiguration" /> - - <reference id="edits" interface="net.sf.taverna.t2.workflowmodel.Edits" /> -</beans:beans> http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/2e8f451e/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context.xml ---------------------------------------------------------------------- diff --git a/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context.xml b/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context.xml deleted file mode 100644 index a3cfdb8..0000000 --- a/taverna-external-tool-activity/src/main/resources/META-INF/spring/external-tool-activity-context.xml +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://www.springframework.org/schema/beans - http://www.springframework.org/schema/beans/spring-beans.xsd"> - - <bean id="SshReference" class="de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshReference"> - <property name="credentialManager" ref="credentialManager" /> - </bean> - - <bean id="LocalInvocationPersister" class="net.sf.taverna.t2.activities.externaltool.local.LocalInvocationPersister" /> - <bean id="SshInvocationPersister" class="net.sf.taverna.t2.activities.externaltool.ssh.SshInvocationPersister"> - <property name="credentialManager" ref="credentialManager" /> - </bean> - - <bean id="LocalMechanismCreator" class="net.sf.taverna.t2.activities.externaltool.local.LocalMechanismCreator" /> - <bean id="SshMechanismCreator" class="net.sf.taverna.t2.activities.externaltool.ssh.SshMechanismCreator" /> - - <bean id="ExternalToolRunDeletionListener" class="net.sf.taverna.t2.activities.externaltool.ExternalToolRunDeletionListener"> - <property name="invocationGroupManager" ref="invocationGroupManager" /> - </bean> - - <bean id="SshUrlToSshReference" class="de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshUrlToSshReference"> - <property name="credentialManager" ref="credentialManager" /> - </bean> - - <bean id="ExternalToolActivityHealthChecker" class="net.sf.taverna.t2.activities.externaltool.ExternalToolActivityHealthChecker"> - <property name="invocationGroupManager" ref="invocationGroupManager" /> - </bean> - <bean id="ExternalToolActivityMimeTypeChecker" class="net.sf.taverna.t2.activities.externaltool.ExternalToolActivityMimeTypeChecker" /> - - <bean id="LocalInvocationCreator" class="net.sf.taverna.t2.activities.externaltool.local.LocalInvocationCreator" /> - <bean id="SshInvocationCreator" class="net.sf.taverna.t2.activities.externaltool.ssh.SshInvocationCreator"> - <property name="credentialManager" ref="credentialManager" /> - </bean> - - - <bean id="externalToolActivityFactory" class="net.sf.taverna.t2.activities.externaltool.ExternalToolActivityFactory"> - <property name="invocationCreators" ref="invocationCreators" /> - <property name="mechanismCreators" ref="mechanismCreators" /> - <property name="edits" ref="edits" /> - </bean> - - <bean id="invocationGroupManager" class="net.sf.taverna.t2.activities.externaltool.manager.impl.InvocationGroupManagerImpl"> - <constructor-arg name="applicationConfiguration" ref="applicationConfiguration" /> - <constructor-arg name="mechanismCreators" ref="mechanismCreators" /> - <constructor-arg name="invocationPersisters" ref="invocationPersisters" /> - </bean> - - -</beans> http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/2e8f451e/taverna-external-tool-activity/src/main/resources/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.hbm.xml ---------------------------------------------------------------------- diff --git a/taverna-external-tool-activity/src/main/resources/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.hbm.xml b/taverna-external-tool-activity/src/main/resources/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.hbm.xml deleted file mode 100644 index 384cb25..0000000 --- a/taverna-external-tool-activity/src/main/resources/de/uni_luebeck/inb/knowarc/usecases/invocation/ssh/SshReference.hbm.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?xml version="1.0"?> -<!DOCTYPE hibernate-mapping PUBLIC - "-//Hibernate/Hibernate Mapping DTD 3.0//EN" - "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> -<!-- Hibernate mapping for ssh reference bean --> -<hibernate-mapping> - <joined-subclass - name="de.uni_luebeck.inb.knowarc.usecases.invocation.ssh.SshReference" - extends="net.sf.taverna.t2.reference.AbstractExternalReference"> - <!-- Link to primary key from abstract superclass --> - <key column="bean_id" /> - <!-- SshReference specific properties below here --> - <property name="host" type="string" /> - <property name="port" type="integer"/> - <property name="directory" type="string" /> - <property name="subDirectory" type="string" /> - <property name="fileName" type="string" /> - <property name="dataNatureInteger" type="integer"/> - - <property name="charset" type="string" /> - </joined-subclass> -</hibernate-mapping> - http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/2e8f451e/taverna-interaction-activity/pom.xml ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/pom.xml b/taverna-interaction-activity/pom.xml deleted file mode 100644 index b32410c..0000000 --- a/taverna-interaction-activity/pom.xml +++ /dev/null @@ -1,158 +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>org.apache.taverna.commonactivities</groupId> - <artifactId>taverna-common-activities</artifactId> - <version>2.1.0-incubating-SNAPSHOT</version> - </parent> - <artifactId>taverna-interaction-activity</artifactId> - <packaging>bundle</packaging> - <name>Apache 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> - - <dependencies> - - <dependency> - <groupId>org.apache.taverna.engine</groupId> - <artifactId>taverna-reference-api</artifactId> - <version>${taverna.engine.version}</version> - </dependency> - <dependency> - <groupId>org.apache.taverna.engine</groupId> - <artifactId>taverna-workflowmodel-api</artifactId> - <version>${taverna.engine.version}</version> - </dependency> - <dependency> - <groupId>org.apache.taverna.engine</groupId> - <artifactId>taverna-credential-manager</artifactId> - <version>${taverna.engine.version}</version> - </dependency> - <dependency> - <groupId>org.apache.taverna.engine</groupId> - <artifactId>taverna-activity-test-utils</artifactId> - <version>${taverna.engine.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> - -</project> http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/FeedReader.java deleted file mode 100644 index 7be03df..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivity.java deleted file mode 100644 index cfc2182..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityFactory.java deleted file mode 100644 index 911d860..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityHealthChecker.java deleted file mode 100644 index 555fe6a..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityRunnable.java deleted file mode 100644 index 342eeda..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionActivityType.java deleted file mode 100644 index 63bc001..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionCallbackRequestor.java deleted file mode 100644 index f7445a8..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRecorder.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRecorder.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRecorder.java deleted file mode 100644 index 66b2d38..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRequestor.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRequestor.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRequestor.java deleted file mode 100644 index 7eff950..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRunDeletionListener.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRunDeletionListener.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionRunDeletionListener.java deleted file mode 100644 index 880ff82..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionType.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionType.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionType.java deleted file mode 100644 index 1e42b4a..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionUtils.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionUtils.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/InteractionUtils.java deleted file mode 100644 index 149f842..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/ResponseFeedListener.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/ResponseFeedListener.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/ResponseFeedListener.java deleted file mode 100644 index 78fdd6d..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/atom/AtomUtils.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/atom/AtomUtils.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/atom/AtomUtils.java deleted file mode 100644 index 350e986..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/feed/ShowRequestFeedListener.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/feed/ShowRequestFeedListener.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/feed/ShowRequestFeedListener.java deleted file mode 100644 index b8996b2..0000000 --- a/taverna-interaction-activity/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/2e8f451e/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/HackedFilesystemAdapter.java ---------------------------------------------------------------------- diff --git a/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/HackedFilesystemAdapter.java b/taverna-interaction-activity/src/main/java/net/sf/taverna/t2/activities/interaction/jetty/HackedFilesystemAdapter.java deleted file mode 100644 index 24ad5a5..0000000 --- a/taverna-interaction-activity/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; - } -}