| package org.apache.taverna.scufl2.api; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. 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. |
| */ |
| |
| |
| import java.net.URI; |
| |
| import org.apache.taverna.scufl2.api.activity.Activity; |
| import org.apache.taverna.scufl2.api.common.Scufl2Tools; |
| import org.apache.taverna.scufl2.api.configurations.Configuration; |
| import org.apache.taverna.scufl2.api.container.WorkflowBundle; |
| import org.apache.taverna.scufl2.api.core.BlockingControlLink; |
| import org.apache.taverna.scufl2.api.core.DataLink; |
| import org.apache.taverna.scufl2.api.core.Processor; |
| import org.apache.taverna.scufl2.api.core.Workflow; |
| import org.apache.taverna.scufl2.api.iterationstrategy.CrossProduct; |
| import org.apache.taverna.scufl2.api.iterationstrategy.IterationStrategyStack; |
| import org.apache.taverna.scufl2.api.iterationstrategy.PortNode; |
| import org.apache.taverna.scufl2.api.port.InputActivityPort; |
| import org.apache.taverna.scufl2.api.port.InputProcessorPort; |
| import org.apache.taverna.scufl2.api.port.InputWorkflowPort; |
| import org.apache.taverna.scufl2.api.port.OutputActivityPort; |
| import org.apache.taverna.scufl2.api.port.OutputProcessorPort; |
| import org.apache.taverna.scufl2.api.port.OutputWorkflowPort; |
| import org.apache.taverna.scufl2.api.profiles.ProcessorBinding; |
| import org.apache.taverna.scufl2.api.profiles.ProcessorInputPortBinding; |
| import org.apache.taverna.scufl2.api.profiles.ProcessorOutputPortBinding; |
| import org.apache.taverna.scufl2.api.profiles.Profile; |
| |
| |
| import com.fasterxml.jackson.databind.node.JsonNodeFactory; |
| import com.fasterxml.jackson.databind.node.ObjectNode; |
| |
| public class ExampleWorkflow { |
| |
| protected Workflow workflow; |
| protected Processor processor; |
| protected WorkflowBundle workflowBundle; |
| protected InputProcessorPort processorName; |
| protected OutputProcessorPort processorGreeting; |
| protected InputActivityPort personName; |
| protected OutputActivityPort hello; |
| protected Activity activity; |
| protected BlockingControlLink condition; |
| protected Processor wait4me; |
| @SuppressWarnings("unused") |
| private DataLink nameLink; |
| |
| protected static URI TAVERNA_2_2 = URI.create("http://ns.taverna.org.uk/2010/taverna/2.2/"); |
| |
| public Activity makeActivity() { |
| activity = new Activity(); |
| activity.setName("HelloScript"); |
| activity.setType(URI |
| .create("http://ns.taverna.org.uk/2010/activity/beanshell")); |
| |
| personName = new InputActivityPort(activity, "personName"); |
| personName.setDepth(0); |
| hello = new OutputActivityPort(activity, "hello"); |
| hello.setDepth(0); |
| hello.setGranularDepth(0); |
| return activity; |
| |
| } |
| |
| public Configuration makeConfiguration() { |
| Configuration configuration = new Configuration("Hello"); |
| configuration.setConfigures(activity); |
| |
| configuration |
| .setType( |
| URI.create("http://ns.taverna.org.uk/2010/activity/beanshell#Config")); |
| ObjectNode json = (ObjectNode) configuration.getJson(); |
| json.put("script", |
| "hello = \"Hello, \" + personName;\n" |
| + "JOptionPane.showMessageDialog(null, hello);"); |
| return configuration; |
| } |
| |
| public IterationStrategyStack makeIterationStrategyStack( |
| InputProcessorPort... inputs) { |
| IterationStrategyStack stack = new IterationStrategyStack(); |
| CrossProduct crossProduct = new CrossProduct(); |
| crossProduct.setParent(stack); |
| for (InputProcessorPort inp : inputs) { |
| PortNode n = new PortNode(crossProduct, inp); |
| n.setDesiredDepth(0); |
| } |
| return stack; |
| } |
| |
| public Profile makeMainProfile() { |
| Profile profile = new Profile(); |
| profile.setName("tavernaWorkbench"); |
| |
| // FIXME: Can't set dc:creator/date/description |
| |
| // FIXME: Can't create recommendsEnvironment/requiresEnvironment |
| |
| makeActivity().setParent(profile); |
| |
| makeConfiguration().setParent(profile); |
| makeProcessorBinding().setParent(profile); |
| |
| // profile.setProfilePosition(0); |
| |
| return profile; |
| } |
| |
| public Workflow makeMainWorkflow() { |
| workflow = new Workflow(); |
| workflow.setName("HelloWorld"); |
| |
| // NOTE: setWorkflowIdentifier should only be called when loading a |
| // workflow |
| // which already has an ID |
| workflow.setIdentifier(URI |
| .create("http://ns.taverna.org.uk/2010/workflow/00626652-55ae-4a9e-80d4-c8e9ac84e2ca/")); |
| |
| InputWorkflowPort yourName = new InputWorkflowPort(workflow, "yourName"); |
| yourName.setDepth(0); |
| OutputWorkflowPort results = new OutputWorkflowPort(workflow, "results"); |
| // Not needed: |
| // workflow.getInputPorts().add(yourName); |
| // workflow.getOutputPorts().add(results); |
| |
| workflow.getProcessors().add(makeProcessor()); |
| workflow.getProcessors().add(makeProcessor2()); |
| |
| // Make links |
| DataLink directLink = new DataLink(workflow, yourName, results); |
| directLink.setMergePosition(1); |
| |
| DataLink greetingLink = new DataLink(workflow, processorGreeting, |
| results); |
| greetingLink.setMergePosition(0); |
| |
| nameLink = new DataLink(workflow, yourName, processorName); |
| |
| condition = new BlockingControlLink(processor, wait4me); |
| |
| return workflow; |
| } |
| |
| public Processor makeProcessor() { |
| processor = new Processor(workflow, "Hello"); |
| processorName = new InputProcessorPort(processor, "name"); |
| processorName.setDepth(0); |
| processorGreeting = new OutputProcessorPort(processor, "greeting"); |
| processorGreeting.setDepth(0); |
| processorGreeting.setGranularDepth(0); |
| |
| // FIXME: Should not need to make default iteration stack |
| makeIterationStrategyStack(processorName).setParent(processor); |
| |
| return processor; |
| } |
| |
| public Processor makeProcessor2() { |
| wait4me = new Processor(workflow, "wait4me"); |
| |
| // FIXME: Should not need to make default iteration stack |
| makeIterationStrategyStack().setParent(wait4me); |
| |
| return processor; |
| } |
| |
| public ProcessorBinding makeProcessorBinding() { |
| ProcessorBinding processorBinding = new ProcessorBinding(); |
| processorBinding.setName("Hello"); |
| processorBinding.setBoundProcessor(processor); |
| processorBinding.setBoundActivity(activity); |
| |
| new ProcessorInputPortBinding(processorBinding, processorName, |
| personName); |
| new ProcessorOutputPortBinding(processorBinding, hello, |
| processorGreeting); |
| |
| return processorBinding; |
| } |
| |
| public Profile makeSecondaryProfile() { |
| Profile profile = makeMainProfile(); |
| profile.setName("tavernaServer"); |
| Configuration config = profile.getConfigurations().getByName("Hello"); |
| ObjectNode json = JsonNodeFactory.instance.objectNode(); |
| json.put("script", |
| "hello = \"Hello, \" + personName;\n" |
| + "System.out.println(\"Server says: \" + hello);"); |
| config.setJson(json); |
| return profile; |
| } |
| |
| public WorkflowBundle makeWorkflowBundle() { |
| // Based on |
| // uk.org.taverna.scufl2.scufl2-usecases/src/main/resources/workflows/example/workflowBundle.rdf |
| |
| workflowBundle = new WorkflowBundle(); |
| workflowBundle.setName("HelloWorld"); |
| // NOTE: setSameBaseAs should only be called when loading a workflow |
| // bundle |
| // which already has an ID |
| workflowBundle |
| .setGlobalBaseURI(URI |
| .create("http://ns.taverna.org.uk/2010/workflowBundle/28f7c554-4f35-401f-b34b-516e9a0ef731/")); |
| Workflow workflow = makeMainWorkflow(); |
| workflow.setParent(workflowBundle); |
| workflowBundle.setMainWorkflow(workflow); |
| Profile profile = makeMainProfile(); |
| profile.setParent(workflowBundle); |
| workflowBundle.setMainProfile(profile); |
| Profile secondaryProfile = makeSecondaryProfile(); |
| secondaryProfile.setParent(workflowBundle); |
| |
| Scufl2Tools scufl2Tools = new Scufl2Tools(); |
| scufl2Tools.setParents(workflowBundle); |
| |
| return workflowBundle; |
| } |
| |
| } |