| package org.apache.taverna.scufl2.translator.t2flow; |
| /* |
| * |
| * 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 static org.apache.taverna.scufl2.translator.t2flow.defaultactivities.BeanshellActivityParser.ACTIVITY_URI; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNotNull; |
| |
| import java.net.URL; |
| import java.util.Arrays; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| 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.Processor; |
| import org.apache.taverna.scufl2.api.port.InputActivityPort; |
| import org.apache.taverna.scufl2.api.profiles.Profile; |
| import org.apache.taverna.scufl2.translator.t2flow.T2FlowParser; |
| import org.junit.Test; |
| |
| |
| import com.fasterxml.jackson.databind.node.ObjectNode; |
| |
| public class TestBeanshellActivityParser { |
| |
| private static final String WF_AS = "/as.t2flow"; |
| private static final String WF_BEANSHELL_DEPS = "/beanshell-deps.t2flow"; |
| |
| private static Scufl2Tools scufl2Tools = new Scufl2Tools(); |
| |
| @Test |
| public void parseBeanshellScript() throws Exception { |
| URL wfResource = getClass().getResource(WF_AS); |
| assertNotNull("Could not find workflow " + WF_AS, wfResource); |
| T2FlowParser parser = new T2FlowParser(); |
| parser.setValidating(true); |
| parser.setStrict(true); |
| WorkflowBundle researchObj = parser |
| .parseT2Flow(wfResource.openStream()); |
| // System.out.println(researchObj.getProfiles().iterator().next() |
| // .getConfigurations()); |
| Profile profile = researchObj.getProfiles().getByName("taverna-2.1.0"); |
| // Processors: [Workflow19, Echo_List, Concatenate_two_strings, |
| // Concatenate_two_strings_2, Concatenate_two_strings_3, |
| // Concatenate_two_strings_4, Create_Lots_Of_Strings, String_constant] |
| Processor concat = researchObj.getMainWorkflow().getProcessors() |
| .getByName("Concatenate_two_strings"); |
| |
| Configuration concatConfig = scufl2Tools |
| .configurationForActivityBoundToProcessor(concat, profile); |
| Activity concatAct = (Activity) concatConfig.getConfigures(); |
| assertEquals(ACTIVITY_URI, |
| concatAct.getType()); |
| |
| ObjectNode configResource = concatConfig.getJsonAsObjectNode(); |
| assertEquals(ACTIVITY_URI.resolve("#Config"), concatConfig.getType()); |
| |
| assertEquals("http://ns.taverna.org.uk/2010/activity/localworker/org.embl.ebi.escience.scuflworkers.java.StringConcat", |
| configResource.get("derivedFrom").asText()); |
| |
| String script = configResource.get("script").asText(); |
| assertEquals("output = string1 + string2;", script); |
| |
| assertFalse(configResource.has("classLoader")); |
| assertFalse(configResource.has("dependency")); |
| |
| |
| Set<String> expectedInputs = new HashSet<String>(Arrays.asList( |
| "string1", "string2")); |
| assertEquals(expectedInputs, concatAct.getInputPorts().getNames()); |
| InputActivityPort s1 = concatAct.getInputPorts().getByName("string1"); |
| assertEquals(0, s1.getDepth().intValue()); |
| InputActivityPort s2 = concatAct.getInputPorts().getByName("string2"); |
| assertEquals(0, s2.getDepth().intValue()); |
| |
| /** TODO: Update tests |
| Set<PropertyResource> inputDef = configResource |
| .getPropertiesAsResources( |
| PORT_DEFINITION.resolve("#inputPortDefinition")); |
| assertEquals(2, inputDef.size()); |
| |
| Set<URI> expectedPortUris = new HashSet<URI>(); |
| for (InputActivityPort inPort : concatAct.getInputPorts()) { |
| expectedPortUris.add(new URITools().relativeUriForBean(inPort, |
| concatConfig)); |
| } |
| assertEquals(2, expectedPortUris.size()); |
| assertEquals(2, inputDef.size()); |
| for (PropertyResource portDef : inputDef) { |
| assertEquals(PORT_DEFINITION.resolve("#InputPortDefinition"), |
| portDef.getTypeURI()); |
| assertNull(portDef.getResourceURI()); |
| URI dataType = portDef.getPropertyAsResourceURI(PORT_DEFINITION |
| .resolve("#dataType")); |
| |
| assertEquals("java", dataType.getScheme()); |
| assertEquals("java.lang.String", dataType |
| .getSchemeSpecificPart()); |
| |
| URI portURI = portDef.getPropertyAsResourceURI(PORT_DEFINITION |
| .resolve("#definesInputPort")); |
| assertTrue("Unknown port " + portURI, |
| expectedPortUris.contains(portURI)); |
| |
| } |
| |
| // TODO: Is java class here OK? It's a beanshell script after all.. |
| |
| Set<String> expectedOutputs = new HashSet<String>( |
| Arrays.asList("output")); |
| assertEquals(expectedOutputs, concatAct.getOutputPorts().getNames()); |
| OutputActivityPort out = concatAct.getOutputPorts().getByName("output"); |
| assertEquals(0, out.getDepth().intValue()); |
| |
| Set<PropertyResource> outputDef = configResource |
| .getPropertiesAsResources( |
| PORT_DEFINITION.resolve("#outputPortDefinition")); |
| assertEquals(1, outputDef.size()); |
| PropertyResource out1Def = outputDef.iterator().next(); |
| assertEquals(PORT_DEFINITION.resolve("#OutputPortDefinition"), |
| out1Def.getTypeURI()); |
| |
| Set<URI> mimeTypes = out1Def.getPropertiesAsResourceURIs(PORT_DEFINITION |
| .resolve("#expectedMimeType")); |
| assertEquals(1, mimeTypes.size()); |
| |
| assertEquals(URI.create("http://purl.org/NET/mediatypes/text/plain"), |
| mimeTypes.iterator().next()); |
| |
| */ |
| |
| Processor echoList = researchObj.getMainWorkflow().getProcessors() |
| .getByName("Echo_List"); |
| Configuration echoConfig = scufl2Tools |
| .configurationForActivityBoundToProcessor(echoList, profile); |
| Activity echoAct = (Activity) echoConfig.getConfigures(); |
| |
| expectedInputs = new HashSet<String>(Arrays.asList("inputlist")); |
| assertEquals(expectedInputs, echoAct.getInputPorts().getNames()); |
| InputActivityPort inputList = echoAct.getInputPorts().getByName( |
| "inputlist"); |
| assertEquals(1, inputList.getDepth().intValue()); |
| /* TODO: Update tests |
| expectedOutputs = new HashSet<String>(Arrays.asList("outputlist")); |
| assertEquals(expectedOutputs, echoAct.getOutputPorts().getNames()); |
| OutputActivityPort outputList = echoAct.getOutputPorts().getByName( |
| "outputlist"); |
| assertEquals(1, outputList.getDepth().intValue()); |
| */ |
| } |
| |
| |
| @Test |
| public void beanshellDependencies() throws Exception { |
| URL wfResource = getClass().getResource(WF_BEANSHELL_DEPS); |
| assertNotNull("Could not find workflow " + WF_BEANSHELL_DEPS, wfResource); |
| T2FlowParser parser = new T2FlowParser(); |
| parser.setValidating(true); |
| parser.setStrict(true); |
| WorkflowBundle wfBundle = parser |
| .parseT2Flow(wfResource.openStream()); |
| |
| Profile profile = wfBundle.getMainProfile(); |
| // Processors: [Workflow19, Echo_List, Concatenate_two_strings, |
| // Concatenate_two_strings_2, Concatenate_two_strings_3, |
| // Concatenate_two_strings_4, Create_Lots_Of_Strings, String_constant] |
| Processor a_c_workflow = wfBundle.getMainWorkflow().getProcessors() |
| .getByName("A_C_workflow"); |
| Configuration a_c_config = scufl2Tools |
| .configurationForActivityBoundToProcessor(a_c_workflow, profile); |
| assertNotNull(a_c_config); |
| Configuration c2 = a_c_workflow.getActivityConfiguration(profile); |
| assertEquals(a_c_config,c2); |
| /* TODO: Update tests |
| PropertyResource a_c_configResource = a_c_config.getJson(); |
| |
| assertFalse(a_c_configResource.hasProperty(ACTIVITY_URI.resolve("#derivedFrom"))); |
| SortedSet<PropertyResource> deps = a_c_configResource.getPropertiesAsResources(DEPENDENCY_URI.resolve("#dependency")); |
| Set<String> jars = new HashSet<String>(); |
| for (PropertyResource dep : deps) { |
| assertEquals(DEPENDENCY_URI.resolve("#LocalJarDependency"), dep.getTypeURI()); |
| jars.add(dep.getPropertyAsString(DEPENDENCY_URI.resolve("#jarFile"))); |
| } |
| assertEquals(new HashSet<String>(Arrays.asList("libraryA.jar", "libraryC.jar")), |
| jars); |
| assertFalse(a_c_configResource.hasProperty(DEPENDENCY_URI.resolve("#classLoader"))); |
| |
| |
| Processor b_system = wfBundle.getMainWorkflow().getProcessors() |
| .getByName("B_system"); |
| Configuration b_config = scufl2Tools |
| .configurationForActivityBoundToProcessor(b_system, profile); |
| |
| PropertyResource b_configResource = b_config.getJson(); |
| |
| deps = b_configResource.getPropertiesAsResources(DEPENDENCY_URI.resolve("#dependency")); |
| jars = new HashSet<String>(); |
| for (PropertyResource dep : deps) { |
| assertEquals(DEPENDENCY_URI.resolve("#LocalJarDependency"), dep.getTypeURI()); |
| jars.add(dep.getPropertyAsString(DEPENDENCY_URI.resolve("#jarFile"))); |
| } |
| assertEquals(new HashSet<String>(Arrays.asList("libraryB.jar")), |
| jars); |
| assertTrue(b_configResource.hasProperty(DEPENDENCY_URI.resolve("#classLoader"))); |
| assertEquals(DEPENDENCY_URI.resolve("#SystemClassLoader"), |
| b_configResource.getPropertyAsResourceURI(DEPENDENCY_URI.resolve("#classLoader"))); |
| |
| */ |
| |
| } |
| |
| |
| } |