diff --git a/api/pom.xml b/api/pom.xml index d5128d57..f6186156 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -121,77 +121,6 @@ - - org.apache.maven.plugins - maven-checkstyle-plugin - - - - - - - - - - - - - - - - ${project.build.directory}/checkstyle.log - true - true - true - false - false - ${checkstyle.logViolationsToConsole} - ${checkstyle.failOnViolation} - - ${project.build.sourceDirectory} - ${project.build.testSourceDirectory} - - - - - compile - - check - - - - - - com.spotify.fmt - fmt-maven-plugin - - src/main/java - src/test/java - false - .*\.java - false - false - - - - - - format - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - diff --git a/impl/bom/pom.xml b/impl/bom/pom.xml new file mode 100644 index 00000000..63ef0fe3 --- /dev/null +++ b/impl/bom/pom.xml @@ -0,0 +1,20 @@ + + 4.0.0 + + io.serverlessworkflow + serverlessworkflow-impl + 7.0.0-SNAPSHOT + + serverlessworkflow-impl-bom + pom + + + io.serverlessworkflow + serverlessworkflow-impl-core + + + io.serverlessworkflow + serverlessworkflow-impl-http + + + \ No newline at end of file diff --git a/impl/core/.checkstyle b/impl/core/.checkstyle new file mode 100644 index 00000000..cdd4188c --- /dev/null +++ b/impl/core/.checkstyle @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/impl/core/pom.xml b/impl/core/pom.xml new file mode 100644 index 00000000..597b3758 --- /dev/null +++ b/impl/core/pom.xml @@ -0,0 +1,48 @@ + + 4.0.0 + + io.serverlessworkflow + serverlessworkflow-impl + 7.0.0-SNAPSHOT + + serverlessworkflow-impl-core + + 1.1.0 + + + + io.serverlessworkflow + serverlessworkflow-api + 7.0.0-SNAPSHOT + + + com.networknt + json-schema-validator + + + net.thisptr + jackson-jq + ${version.net.thisptr} + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params + test + + + org.assertj + assertj-core + test + + + diff --git a/impl/src/main/java/io/serverlessworkflow/impl/DefaultWorkflowPosition.java b/impl/core/src/main/java/io/serverlessworkflow/impl/DefaultWorkflowPosition.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/DefaultWorkflowPosition.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/DefaultWorkflowPosition.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/TaskContext.java b/impl/core/src/main/java/io/serverlessworkflow/impl/TaskContext.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/TaskContext.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/TaskContext.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowApplication.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowContext.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowDefinition.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowDefinition.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowDefinition.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowDefinition.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowExecutionListener.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowExecutionListener.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowExecutionListener.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowExecutionListener.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowFilter.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowFilter.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowFilter.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowFilter.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowInstance.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowInstance.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowInstance.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowInstance.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowPosition.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowPosition.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowPosition.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowPosition.java diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowState.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowState.java new file mode 100644 index 00000000..310dbd0b --- /dev/null +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowState.java @@ -0,0 +1,22 @@ +/* + * Copyright 2020-Present The Serverless Workflow Specification Authors + * + * Licensed 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. + */ +package io.serverlessworkflow.impl; + +public enum WorkflowState { + STARTED, + WAITING, + COMPLETED +} diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java b/impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/WorkflowUtils.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/AbstractTaskExecutor.java diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallTaskExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallTaskExecutor.java new file mode 100644 index 00000000..535057fa --- /dev/null +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallTaskExecutor.java @@ -0,0 +1,37 @@ +/* + * Copyright 2020-Present The Serverless Workflow Specification Authors + * + * Licensed 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. + */ +package io.serverlessworkflow.impl.executors; + +import io.serverlessworkflow.api.types.TaskBase; +import io.serverlessworkflow.impl.TaskContext; +import io.serverlessworkflow.impl.WorkflowContext; +import io.serverlessworkflow.impl.WorkflowDefinition; + +public class CallTaskExecutor extends AbstractTaskExecutor { + + private final CallableTask callable; + + protected CallTaskExecutor(T task, WorkflowDefinition definition, CallableTask callable) { + super(task, definition); + this.callable = callable; + callable.init(task, definition); + } + + @Override + protected void internalExecute(WorkflowContext workflow, TaskContext taskContext) { + taskContext.rawOutput(callable.apply(workflow, taskContext, taskContext.input())); + } +} diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallableTask.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallableTask.java new file mode 100644 index 00000000..ffb94912 --- /dev/null +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/CallableTask.java @@ -0,0 +1,30 @@ +/* + * Copyright 2020-Present The Serverless Workflow Specification Authors + * + * Licensed 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. + */ +package io.serverlessworkflow.impl.executors; + +import com.fasterxml.jackson.databind.JsonNode; +import io.serverlessworkflow.api.types.TaskBase; +import io.serverlessworkflow.impl.TaskContext; +import io.serverlessworkflow.impl.WorkflowContext; +import io.serverlessworkflow.impl.WorkflowDefinition; + +public interface CallableTask { + void init(T task, WorkflowDefinition definition); + + JsonNode apply(WorkflowContext workflowContext, TaskContext taskContext, JsonNode input); + + boolean accept(Class clazz); +} diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java similarity index 71% rename from impl/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java index 117a8ed2..8ca2feb4 100644 --- a/impl/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/DefaultTaskExecutorFactory.java @@ -15,10 +15,13 @@ */ package io.serverlessworkflow.impl.executors; +import io.serverlessworkflow.api.types.CallHTTP; import io.serverlessworkflow.api.types.CallTask; import io.serverlessworkflow.api.types.Task; import io.serverlessworkflow.api.types.TaskBase; import io.serverlessworkflow.impl.WorkflowDefinition; +import java.util.ServiceLoader; +import java.util.ServiceLoader.Provider; public class DefaultTaskExecutorFactory implements TaskExecutorFactory { @@ -30,12 +33,15 @@ public static TaskExecutorFactory get() { protected DefaultTaskExecutorFactory() {} + private ServiceLoader callTasks = ServiceLoader.load(CallableTask.class); + public TaskExecutor getTaskExecutor( Task task, WorkflowDefinition definition) { if (task.getCallTask() != null) { CallTask callTask = task.getCallTask(); if (callTask.getCallHTTP() != null) { - return new HttpExecutor(callTask.getCallHTTP(), definition); + return new CallTaskExecutor<>( + callTask.getCallHTTP(), definition, findCallTask(CallHTTP.class)); } } else if (task.getSwitchTask() != null) { return new SwitchExecutor(task.getSwitchTask(), definition); @@ -46,4 +52,15 @@ public TaskExecutor getTaskExecutor( } throw new UnsupportedOperationException(task.get().getClass().getName() + " not supported yet"); } + + @SuppressWarnings("unchecked") + private CallableTask findCallTask(Class clazz) { + return (CallableTask) + callTasks.stream() + .map(Provider::get) + .filter(s -> s.accept(clazz)) + .findAny() + .orElseThrow( + () -> new UnsupportedOperationException(clazz.getName() + " not supported yet")); + } } diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/DoExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/DoExecutor.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/executors/DoExecutor.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/DoExecutor.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/SetExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/SetExecutor.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/executors/SetExecutor.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/SetExecutor.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java similarity index 74% rename from impl/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java index 9f421acb..f081dfa4 100644 --- a/impl/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/SwitchExecutor.java @@ -1,3 +1,18 @@ +/* + * Copyright 2020-Present The Serverless Workflow Specification Authors + * + * Licensed 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. + */ package io.serverlessworkflow.impl.executors; import io.serverlessworkflow.api.types.FlowDirective; diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutor.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutor.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutor.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutor.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutorFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutorFactory.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutorFactory.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/executors/TaskExecutorFactory.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/Expression.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/Expression.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/Expression.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/Expression.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionFactory.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionFactory.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionFactory.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionUtils.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionUtils.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionUtils.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionUtils.java diff --git a/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionValidationException.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionValidationException.java new file mode 100644 index 00000000..8dc1b4f2 --- /dev/null +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionValidationException.java @@ -0,0 +1,29 @@ +/* + * Copyright 2020-Present The Serverless Workflow Specification Authors + * + * Licensed 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. + */ +package io.serverlessworkflow.impl.expressions; + +public class ExpressionValidationException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + public ExpressionValidationException(String message) { + super(message); + } + + public ExpressionValidationException(String message, Throwable ex) { + super(message, ex); + } +} diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/JQExpression.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/JQExpression.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/JQExpression.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/JQExpression.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/JQExpressionFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/JQExpressionFactory.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/JQExpressionFactory.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/JQExpressionFactory.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/ProxyMap.java b/impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ProxyMap.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/expressions/ProxyMap.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/expressions/ProxyMap.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/json/JsonUtils.java b/impl/core/src/main/java/io/serverlessworkflow/impl/json/JsonUtils.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/json/JsonUtils.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/json/JsonUtils.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/json/MergeUtils.java b/impl/core/src/main/java/io/serverlessworkflow/impl/json/MergeUtils.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/json/MergeUtils.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/json/MergeUtils.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java similarity index 61% rename from impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java index 232926b3..d3ab3190 100644 --- a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java +++ b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidator.java @@ -1,20 +1,17 @@ /* - * 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 + * Copyright 2020-Present The Serverless Workflow Specification Authors * - * http://www.apache.org/licenses/LICENSE-2.0 + * Licensed 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 * - * 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. + * 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. */ package io.serverlessworkflow.impl.jsonschema; diff --git a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidatorFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidatorFactory.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidatorFactory.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/DefaultSchemaValidatorFactory.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidator.java b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidator.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidator.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidator.java diff --git a/impl/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidatorFactory.java b/impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidatorFactory.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidatorFactory.java rename to impl/core/src/main/java/io/serverlessworkflow/impl/jsonschema/SchemaValidatorFactory.java diff --git a/impl/src/main/java/io/serverlessworkflow/resources/ClasspathResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/ClasspathResource.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/resources/ClasspathResource.java rename to impl/core/src/main/java/io/serverlessworkflow/resources/ClasspathResource.java diff --git a/impl/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoader.java b/impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoader.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoader.java rename to impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoader.java diff --git a/impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoaderFactory.java b/impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoaderFactory.java new file mode 100644 index 00000000..4efddb30 --- /dev/null +++ b/impl/core/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoaderFactory.java @@ -0,0 +1,34 @@ +/* + * Copyright 2020-Present The Serverless Workflow Specification Authors + * + * Licensed 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. + */ +package io.serverlessworkflow.resources; + +import java.nio.file.Path; + +public class DefaultResourceLoaderFactory implements ResourceLoaderFactory { + + public static final ResourceLoaderFactory get() { + return factory; + } + + private static final ResourceLoaderFactory factory = new DefaultResourceLoaderFactory(); + + private DefaultResourceLoaderFactory() {} + + @Override + public ResourceLoader getResourceLoader(Path path) { + return new DefaultResourceLoader(path); + } +} diff --git a/impl/src/main/java/io/serverlessworkflow/resources/DynamicResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/DynamicResource.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/resources/DynamicResource.java rename to impl/core/src/main/java/io/serverlessworkflow/resources/DynamicResource.java diff --git a/impl/src/main/java/io/serverlessworkflow/resources/FileResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/FileResource.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/resources/FileResource.java rename to impl/core/src/main/java/io/serverlessworkflow/resources/FileResource.java diff --git a/impl/src/main/java/io/serverlessworkflow/resources/HttpResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/HttpResource.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/resources/HttpResource.java rename to impl/core/src/main/java/io/serverlessworkflow/resources/HttpResource.java diff --git a/impl/src/main/java/io/serverlessworkflow/resources/ResourceLoader.java b/impl/core/src/main/java/io/serverlessworkflow/resources/ResourceLoader.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/resources/ResourceLoader.java rename to impl/core/src/main/java/io/serverlessworkflow/resources/ResourceLoader.java diff --git a/impl/src/main/java/io/serverlessworkflow/resources/ResourceLoaderFactory.java b/impl/core/src/main/java/io/serverlessworkflow/resources/ResourceLoaderFactory.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/resources/ResourceLoaderFactory.java rename to impl/core/src/main/java/io/serverlessworkflow/resources/ResourceLoaderFactory.java diff --git a/impl/src/main/java/io/serverlessworkflow/resources/StaticResource.java b/impl/core/src/main/java/io/serverlessworkflow/resources/StaticResource.java similarity index 100% rename from impl/src/main/java/io/serverlessworkflow/resources/StaticResource.java rename to impl/core/src/main/java/io/serverlessworkflow/resources/StaticResource.java diff --git a/impl/core/src/test/java/io/serverlessworkflow/impl/WorkflowDefinitionTest.java b/impl/core/src/test/java/io/serverlessworkflow/impl/WorkflowDefinitionTest.java new file mode 100644 index 00000000..f6c3455a --- /dev/null +++ b/impl/core/src/test/java/io/serverlessworkflow/impl/WorkflowDefinitionTest.java @@ -0,0 +1,87 @@ +/* + * Copyright 2020-Present The Serverless Workflow Specification Authors + * + * Licensed 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. + */ +package io.serverlessworkflow.impl; + +import static io.serverlessworkflow.api.WorkflowReader.readWorkflowFromClasspath; +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.IOException; +import java.util.Map; +import java.util.stream.Stream; +import org.assertj.core.api.Condition; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +public class WorkflowDefinitionTest { + + private static WorkflowApplication appl; + + @BeforeAll + static void init() { + appl = WorkflowApplication.builder().build(); + } + + @ParameterizedTest + @MethodSource("provideParameters") + void testWorkflowExecution(String fileName, Object input, Condition condition) + throws IOException { + assertThat(appl.workflowDefinition(readWorkflowFromClasspath(fileName)).execute(input).output()) + .is(condition); + } + + private static Stream provideParameters() { + Map petInput = Map.of("petId", 10); + Condition petCondition = + new Condition<>( + o -> ((Map) o).containsKey("photoUrls"), "callHttpCondition"); + return Stream.of( + Arguments.of( + "switch-then-string.yaml", + Map.of("orderType", "electronic"), + new Condition( + o -> + o.equals( + Map.of("orderType", "electronic", "validate", true, "status", "fulfilled")), + "switch-electronic")), + Arguments.of( + "switch-then-string.yaml", + Map.of("orderType", "physical"), + new Condition( + o -> + o.equals( + Map.of( + "orderType", + "physical", + "inventory", + "clear", + "items", + 1, + "address", + "Elmer St")), + "switch-physical")), + Arguments.of( + "switch-then-string.yaml", + Map.of("orderType", "unknown"), + new Condition( + o -> + o.equals( + Map.of( + "orderType", "unknown", "log", "warn", "message", "something's wrong")), + "switch-unknown"))); + } +} diff --git a/impl/src/test/resources/switch-then-string.yaml b/impl/core/src/test/resources/switch-then-string.yaml similarity index 100% rename from impl/src/test/resources/switch-then-string.yaml rename to impl/core/src/test/resources/switch-then-string.yaml diff --git a/impl/http/.checkstyle b/impl/http/.checkstyle new file mode 100644 index 00000000..a33f7d91 --- /dev/null +++ b/impl/http/.checkstyle @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/impl/http/pom.xml b/impl/http/pom.xml new file mode 100644 index 00000000..1b19e5a4 --- /dev/null +++ b/impl/http/pom.xml @@ -0,0 +1,43 @@ + + 4.0.0 + + io.serverlessworkflow + serverlessworkflow-impl + 7.0.0-SNAPSHOT + + serverlessworkflow-impl-http + + + org.glassfish.jersey.core + jersey-client + + + org.glassfish.jersey.media + jersey-media-json-jackson + + + io.serverlessworkflow + serverlessworkflow-impl-core + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params + test + + + org.assertj + assertj-core + test + + + \ No newline at end of file diff --git a/impl/src/main/java/io/serverlessworkflow/impl/executors/HttpExecutor.java b/impl/http/src/main/java/io/serverlessworkflow/impl/executors/HttpExecutor.java similarity index 89% rename from impl/src/main/java/io/serverlessworkflow/impl/executors/HttpExecutor.java rename to impl/http/src/main/java/io/serverlessworkflow/impl/executors/HttpExecutor.java index b8548549..684acd47 100644 --- a/impl/src/main/java/io/serverlessworkflow/impl/executors/HttpExecutor.java +++ b/impl/http/src/main/java/io/serverlessworkflow/impl/executors/HttpExecutor.java @@ -21,6 +21,7 @@ import io.serverlessworkflow.api.types.Endpoint; import io.serverlessworkflow.api.types.EndpointUri; import io.serverlessworkflow.api.types.HTTPArguments; +import io.serverlessworkflow.api.types.TaskBase; import io.serverlessworkflow.api.types.UriTemplate; import io.serverlessworkflow.impl.TaskContext; import io.serverlessworkflow.impl.WorkflowContext; @@ -39,14 +40,14 @@ import java.util.Map.Entry; import java.util.Optional; -public class HttpExecutor extends AbstractTaskExecutor { +public class HttpExecutor implements CallableTask { private static final Client client = ClientBuilder.newClient(); - private final TargetSupplier targetSupplier; - private final Map headersMap; - private final Map queryMap; - private final RequestSupplier requestFunction; + private TargetSupplier targetSupplier; + private Map headersMap; + private Map queryMap; + private RequestSupplier requestFunction; @FunctionalInterface private interface TargetSupplier { @@ -58,8 +59,8 @@ private interface RequestSupplier { JsonNode apply(Builder request, WorkflowContext workflow, TaskContext task, JsonNode node); } - public HttpExecutor(CallHTTP task, WorkflowDefinition definition) { - super(task, definition); + @Override + public void init(CallHTTP task, WorkflowDefinition definition) { HTTPArguments httpArgs = task.getWith(); this.targetSupplier = getTargetSupplier(httpArgs.getEndpoint(), definition.expressionFactory()); this.headersMap = @@ -92,8 +93,8 @@ public HttpExecutor(CallHTTP task, WorkflowDefinition definition) { } @Override - protected void internalExecute(WorkflowContext workflow, TaskContext taskContext) { - JsonNode input = taskContext.input(); + public JsonNode apply( + WorkflowContext workflow, TaskContext taskContext, JsonNode input) { WebTarget target = targetSupplier.apply(workflow, taskContext, input); for (Entry entry : ExpressionUtils.evaluateExpressionMap(queryMap, workflow, Optional.of(taskContext), input) @@ -103,7 +104,12 @@ protected void internalExecute(WorkflowContext workflow, TaskContext t Builder request = target.request(); ExpressionUtils.evaluateExpressionMap(headersMap, workflow, Optional.of(taskContext), input) .forEach(request::header); - taskContext.rawOutput(requestFunction.apply(request, workflow, taskContext, input)); + return requestFunction.apply(request, workflow, taskContext, input); + } + + @Override + public boolean accept(Class clazz) { + return clazz.equals(CallHTTP.class); } private static TargetSupplier getTargetSupplier( diff --git a/impl/http/src/main/resources/META-INF/services/io.serverlessworkflow.impl.executors.CallableTask b/impl/http/src/main/resources/META-INF/services/io.serverlessworkflow.impl.executors.CallableTask new file mode 100644 index 00000000..7d5e6bf9 --- /dev/null +++ b/impl/http/src/main/resources/META-INF/services/io.serverlessworkflow.impl.executors.CallableTask @@ -0,0 +1 @@ +io.serverlessworkflow.impl.executors.HttpExecutor \ No newline at end of file diff --git a/impl/src/test/java/io/serverlessworkflow/impl/WorkflowDefinitionTest.java b/impl/http/src/test/java/io/serverlessworkflow/impl/HTTPWorkflowDefinitionTest.java similarity index 72% rename from impl/src/test/java/io/serverlessworkflow/impl/WorkflowDefinitionTest.java rename to impl/http/src/test/java/io/serverlessworkflow/impl/HTTPWorkflowDefinitionTest.java index 187c0215..dacdfe2e 100644 --- a/impl/src/test/java/io/serverlessworkflow/impl/WorkflowDefinitionTest.java +++ b/impl/http/src/test/java/io/serverlessworkflow/impl/HTTPWorkflowDefinitionTest.java @@ -1,5 +1,3 @@ -package io.serverlessworkflow.impl; - /* * Copyright 2020-Present The Serverless Workflow Specification Authors * @@ -15,6 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +package io.serverlessworkflow.impl; + import static io.serverlessworkflow.api.WorkflowReader.readWorkflowFromClasspath; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowableOfType; @@ -29,7 +29,7 @@ import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; -public class WorkflowDefinitionTest { +public class HTTPWorkflowDefinitionTest { private static WorkflowApplication appl; @@ -83,39 +83,6 @@ private static Stream provideParameters() { Arguments.of( "callPostHttp.yaml", Map.of("name", "Javierito", "status", "available"), - new Condition<>(o -> o.equals("Javierito"), "CallHttpPostCondition")), - Arguments.of( - "switch-then-string.yaml", - Map.of("orderType", "electronic"), - new Condition( - o -> - o.equals( - Map.of("orderType", "electronic", "validate", true, "status", "fulfilled")), - "switch-electronic")), - Arguments.of( - "switch-then-string.yaml", - Map.of("orderType", "physical"), - new Condition( - o -> - o.equals( - Map.of( - "orderType", - "physical", - "inventory", - "clear", - "items", - 1, - "address", - "Elmer St")), - "switch-physical")), - Arguments.of( - "switch-then-string.yaml", - Map.of("orderType", "unknown"), - new Condition( - o -> - o.equals( - Map.of( - "orderType", "unknown", "log", "warn", "message", "something's wrong")), - "switch-unknown"))); + new Condition<>(o -> o.equals("Javierito"), "CallHttpPostCondition"))); } } diff --git a/impl/src/test/resources/call-http-endpoint-interpolation.yaml b/impl/http/src/test/resources/call-http-endpoint-interpolation.yaml similarity index 100% rename from impl/src/test/resources/call-http-endpoint-interpolation.yaml rename to impl/http/src/test/resources/call-http-endpoint-interpolation.yaml diff --git a/impl/src/test/resources/call-http-query-parameters-external-schema.yaml b/impl/http/src/test/resources/call-http-query-parameters-external-schema.yaml similarity index 100% rename from impl/src/test/resources/call-http-query-parameters-external-schema.yaml rename to impl/http/src/test/resources/call-http-query-parameters-external-schema.yaml diff --git a/impl/src/test/resources/call-http-query-parameters.yaml b/impl/http/src/test/resources/call-http-query-parameters.yaml similarity index 100% rename from impl/src/test/resources/call-http-query-parameters.yaml rename to impl/http/src/test/resources/call-http-query-parameters.yaml diff --git a/impl/src/test/resources/callGetHttp.yaml b/impl/http/src/test/resources/callGetHttp.yaml similarity index 100% rename from impl/src/test/resources/callGetHttp.yaml rename to impl/http/src/test/resources/callGetHttp.yaml diff --git a/impl/src/test/resources/callPostHttp.yaml b/impl/http/src/test/resources/callPostHttp.yaml similarity index 100% rename from impl/src/test/resources/callPostHttp.yaml rename to impl/http/src/test/resources/callPostHttp.yaml diff --git a/impl/src/test/resources/schema/searchquery.yaml b/impl/http/src/test/resources/schema/searchquery.yaml similarity index 100% rename from impl/src/test/resources/schema/searchquery.yaml rename to impl/http/src/test/resources/schema/searchquery.yaml diff --git a/impl/pom.xml b/impl/pom.xml index 770f8090..191dc39d 100644 --- a/impl/pom.xml +++ b/impl/pom.xml @@ -6,78 +6,37 @@ 7.0.0-SNAPSHOT serverlessworkflow-impl + pom - 3.1.9 - 1.1.0 + 3.1.9 - - - io.serverlessworkflow - serverlessworkflow-api - 7.0.0-SNAPSHOT - - - org.glassfish.jersey.core - jersey-client - ${version.org.glassfish.jersey} - - - org.glassfish.jersey.media - jersey-media-json-jackson - ${version.org.glassfish.jersey} - - - com.networknt - json-schema-validator - - - net.thisptr - jackson-jq - ${version.net.thisptr} - - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.jupiter - junit-jupiter-engine - test - - - org.junit.jupiter - junit-jupiter-params - test - - - org.assertj - assertj-core - test - - - - - - com.spotify.fmt - fmt-maven-plugin - - src/main/java - src/test/java - false - .*\.java - false - false - - - - - - format - - - - - - + + + + io.serverlessworkflow + serverlessworkflow-impl-core + ${project.version} + + + io.serverlessworkflow + serverlessworkflow-impl-http + ${project.version} + + + org.glassfish.jersey.core + jersey-client + ${version.org.glassfish.jersey} + + + org.glassfish.jersey.media + jersey-media-json-jackson + ${version.org.glassfish.jersey} + + + + + http + core + bom + \ No newline at end of file diff --git a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowState.java b/impl/src/main/java/io/serverlessworkflow/impl/WorkflowState.java deleted file mode 100644 index 939fd1e8..00000000 --- a/impl/src/main/java/io/serverlessworkflow/impl/WorkflowState.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.serverlessworkflow.impl; - -public enum WorkflowState { - STARTED, - WAITING, - COMPLETED -} diff --git a/impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionValidationException.java b/impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionValidationException.java deleted file mode 100644 index 16fe144f..00000000 --- a/impl/src/main/java/io/serverlessworkflow/impl/expressions/ExpressionValidationException.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.serverlessworkflow.impl.expressions; - -public class ExpressionValidationException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - public ExpressionValidationException(String message) { - super(message); - } - - public ExpressionValidationException(String message, Throwable ex) { - super(message, ex); - } -} diff --git a/impl/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoaderFactory.java b/impl/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoaderFactory.java deleted file mode 100644 index 5a33601b..00000000 --- a/impl/src/main/java/io/serverlessworkflow/resources/DefaultResourceLoaderFactory.java +++ /dev/null @@ -1,19 +0,0 @@ -package io.serverlessworkflow.resources; - -import java.nio.file.Path; - -public class DefaultResourceLoaderFactory implements ResourceLoaderFactory { - - public static final ResourceLoaderFactory get() { - return factory; - } - - private static final ResourceLoaderFactory factory = new DefaultResourceLoaderFactory(); - - private DefaultResourceLoaderFactory() {} - - @Override - public ResourceLoader getResourceLoader(Path path) { - return new DefaultResourceLoader(path); - } -} diff --git a/pom.xml b/pom.xml index 36fc113b..da0a7678 100644 --- a/pom.xml +++ b/pom.xml @@ -232,6 +232,67 @@ + + org.apache.maven.plugins + maven-checkstyle-plugin + + + + + + + + + + + + + + + + ${project.build.directory}/checkstyle.log + true + true + true + false + false + ${checkstyle.logViolationsToConsole} + ${checkstyle.failOnViolation} + + ${project.build.sourceDirectory} + ${project.build.testSourceDirectory} + + + + + compile + + check + + + + + + com.spotify.fmt + fmt-maven-plugin + + src/main/java + src/test/java + false + .*\.java + false + false + + + + + + format + + + + + pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy