aboutsummaryrefslogtreecommitdiffstats
path: root/aria/aria-rest-java-client
diff options
context:
space:
mode:
authordfilppi <dewayne@gigaspaces.com>2017-08-03 21:26:02 +0000
committerdfilppi <dewayne@gigaspaces.com>2017-08-07 20:05:23 +0000
commita4c936a24b8e1394753ecae9176071176974e828 (patch)
treea35c57477e1a7cb8a8b893ddbbb437b252bea526 /aria/aria-rest-java-client
parentd48b750fc08b11a758b4c71ac71fe6cd2a2437d3 (diff)
ARIA java binding initial
Change-Id: I806c879f7eddadec396adbb72f3fc2117dccbeb5 Issue-id: SO-77 Signed-off-by: DeWayne Filppi <dewayne@gigaspaces.com>
Diffstat (limited to 'aria/aria-rest-java-client')
-rwxr-xr-xaria/aria-rest-java-client/pom.xml43
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClient.java201
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClientFactory.java31
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaRestClient.java336
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Execution.java29
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionDetails.java73
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionImpl.java54
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Input.java27
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/InputImpl.java49
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplate.java29
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplateImpl.java68
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Output.java27
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/OutputImpl.java37
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Service.java32
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplate.java31
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplateImpl.java81
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResult.java26
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResultImpl.java32
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Workflow.java25
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/WorkflowImpl.java29
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/StorageException.java27
-rwxr-xr-xaria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/ValidationException.java27
22 files changed, 1314 insertions, 0 deletions
diff --git a/aria/aria-rest-java-client/pom.xml b/aria/aria-rest-java-client/pom.xml
new file mode 100755
index 0000000000..12019f0228
--- /dev/null
+++ b/aria/aria-rest-java-client/pom.xml
@@ -0,0 +1,43 @@
+<!--
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+-->
+<?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/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>aria-client</groupId>
+ <artifactId>aria-client</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.glassfish.jersey.core</groupId>
+ <artifactId>jersey-client</artifactId>
+ <version>2.26-b03</version>
+ </dependency>
+ <dependency>
+ <groupId>org.glassfish.jersey.media</groupId>
+ <artifactId>jersey-media-json-jackson1</artifactId>
+ <version>2.26-b03</version>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClient.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClient.java
new file mode 100755
index 0000000000..d6e9f2434d
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClient.java
@@ -0,0 +1,201 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+import com.gigaspaces.aria.rest.client.exceptions.StorageException;
+import com.gigaspaces.aria.rest.client.exceptions.ValidationException;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public interface AriaClient {
+
+ /**
+ * Installs a service template
+ *
+ * @param template
+ * @throws ValidationException
+ * @throws StorageException
+ */
+ public void install_service_template(ServiceTemplate template)throws ValidationException, StorageException, Exception;
+
+ /**
+ * Validate a service template
+ * @param template
+ * @return
+ */
+ public ValidationResult validate_service_template(ServiceTemplate template)throws Exception;
+
+ /**
+ * Fetch a list of stored service templates
+ *
+ * @return
+ */
+ public List<? extends ServiceTemplate> list_service_templates();
+
+ /**
+ * Delete an existing template
+ *
+ * @param template_id
+ * @throws IllegalArgumentException
+ */
+ public void delete_service_template(int template_id) throws IllegalArgumentException, Exception;
+
+ /**
+ * Returns a list of node templates for a given service template
+ * @param template_id
+ * @return
+ */
+ List<? extends NodeTemplate> list_nodes(int template_id);
+
+ /**
+ * Fetch a given node template
+ *
+ * @param node_id
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public NodeTemplate get_node( int node_id) throws IllegalArgumentException;
+
+ /**
+ * List all services
+ *
+ * @return
+ */
+ public List<? extends Service> list_services();
+
+ /**
+ * Fetch the specified service
+ *
+ * @param service_id
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public Service get_service(int service_id) throws IllegalArgumentException;
+
+ /**
+ * Fetch the outputs of the specified service
+ *
+ * @param service_id
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public List<? extends Output> list_service_outputs(int service_id) throws IllegalArgumentException;
+
+ /**
+ * Fetch the inputs of the specified service
+ *
+ * @param service_id
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public List<? extends Input> list_service_inputs(int service_id) throws IllegalArgumentException;
+
+ /**
+ * Create a service
+ *
+ * @param template_id
+ * @param service_name
+ * @param inputs
+ * @throws Exception
+ */
+ public void create_service(int template_id, String service_name, List<Input> inputs)throws Exception;
+
+ /**
+ * Delete the specified service
+ *
+ * @param service_id
+ * @throws IllegalArgumentException
+ */
+ public void delete_service(int service_id)throws Exception;
+
+ /**
+ * List workflows for the provided service
+ *
+ * @param service_id
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public List<? extends Workflow> list_workflows(int service_id)throws IllegalArgumentException;
+
+ /**
+ * Fetch the specified workflow
+ *
+ * @param workflow_id
+ * @return the requested Workflow
+ * @throws IllegalArgumentException when the workflow_id doesn't exist
+ */
+ public Workflow get_workflow(int workflow_id)throws IllegalArgumentException;
+
+ /**
+ * List all executions
+ *
+ * @return
+ * @throws Exception
+ */
+ public List<? extends Execution> list_executions()throws Exception;
+
+ /**
+ * List executions for provided service
+ *
+ * @param service_id
+ * @return
+ * @throws Exception
+ */
+ public List<? extends Execution> list_executions(int service_id)throws Exception;
+
+ /**
+ * Fetch the specified execution
+ *
+ * @param execution_id
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public Execution get_execution(int execution_id)throws IllegalArgumentException;
+
+ /**
+ * Starts an execution
+ *
+ * @param service_id
+ * @param workflow_name
+ * @param details
+ * @return the execution id
+ * @throws Exception
+ */
+ public int start_execution(int service_id, String workflow_name, ExecutionDetails details)throws Exception;
+
+ /**
+ * Resumes an interrupted execution
+ *
+ * @param execution_id
+ * @param details
+ * @throws IllegalArgumentException
+ */
+ public void resume_execution(int execution_id, ExecutionDetails details)throws IllegalArgumentException;
+
+ /**
+ * Cancels the specified execution
+ *
+ * @param execution_id
+ * @throws IllegalArgumentException
+ */
+ public void cancel_execution(int execution_id)throws Exception;
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClientFactory.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClientFactory.java
new file mode 100755
index 0000000000..a97384e084
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClientFactory.java
@@ -0,0 +1,31 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+
+package com.gigaspaces.aria.rest.client;
+
+import java.net.URL;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public class AriaClientFactory {
+
+ AriaClient createRestClient(String protocol, String address, int port, String version){
+ return new AriaRestClient(protocol, address, port, version);
+ }
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaRestClient.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaRestClient.java
new file mode 100755
index 0000000000..a4e453395d
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaRestClient.java
@@ -0,0 +1,336 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+import com.gigaspaces.aria.rest.client.exceptions.StorageException;
+import com.gigaspaces.aria.rest.client.exceptions.ValidationException;
+import org.codehaus.jackson.JsonFactory;
+import org.codehaus.jackson.JsonNode;
+import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
+import org.codehaus.jackson.map.ObjectMapper;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.GenericType;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import static javax.ws.rs.client.Entity.entity;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public class AriaRestClient implements AriaClient {
+ private Client client=null;
+ private WebTarget base_target=null;
+
+ /**
+ * Construct an Aria REST client
+ *
+ * @param protocol either http or https
+ * @param address the IP address or host name
+ * @param port the port of the service
+ * @param version the api version
+ */
+ public AriaRestClient(String protocol, String address, int port, String version){
+ this.client = ClientBuilder.newBuilder().register(JacksonJsonProvider.class).build();
+ base_target = client.target(protocol+"://"+address+":"+port+"/api/"+version);
+ }
+
+ /**
+ * Installs a service template
+ *
+ * @param template the template object
+ * @throws ValidationException
+ * @throws StorageException
+ */
+ public void install_service_template(ServiceTemplate template) throws ValidationException, StorageException, Exception {
+
+ Response response = base_target.path("templates/"+template.getName()).request(MediaType.APPLICATION_JSON).put(Entity.entity(
+ "{\"service-template-path\":\""+template.getURI().toString()+"\""+
+ ",\"service-template-filename\":\""+template.getFilename()+"\"", MediaType.APPLICATION_JSON));
+
+ if(response.getStatus() == 500){
+ throw new StorageException(response.readEntity(String.class));
+ }
+ else if(response.getStatus() == 400){
+ throw new ValidationException(response.readEntity(String.class));
+ }
+ else if(response.getStatus()>199 && response.getStatus() <300){
+ return;
+ }
+ else{
+ throw new Exception("Error installing template: "+response.getStatus()+" "+ response.readEntity(String.class));
+ }
+ }
+
+ public ValidationResult validate_service_template(ServiceTemplate template)throws Exception{
+ Response response = base_target.path("templates").request(MediaType.APPLICATION_JSON).post(Entity.entity(
+ "{\"service-template-path\":\""+template.getURI().toString()+"\""+
+ ",\"service-template-filename\":\""+template.getFilename()+"\"}", MediaType.APPLICATION_JSON));
+
+ ValidationResultImpl result = new ValidationResultImpl();
+ if(response.getStatus() >= 200 && response.getStatus() < 300){
+ result.setFailed(false);
+ }
+ else if(response.getStatus()==400){
+ result.setFailed(true);
+ }
+ else{
+ throw new Exception("received error response '"+ response.getStatus()+"':"+response.readEntity(String.class));
+ }
+ return result;
+
+ }
+
+ /**
+ *
+ * @return a list of service templates
+ */
+ public List<? extends ServiceTemplate> list_service_templates(){
+ List<? extends ServiceTemplate> templates = base_target.path("templates").request(MediaType.APPLICATION_JSON).get(new GenericType<List<ServiceTemplateImpl>>(){});
+
+ return templates;
+ }
+
+
+ /**
+ * Deletes the specified template.
+ *
+ * TODO: Error handling is a little blunt. Need to describe failures better
+ *
+ * @param template_id the template id to delete
+ * @throws IllegalArgumentException thrown when the template can't be deleted
+ * @throws Exception other server side errors
+ */
+ public void delete_service_template(int template_id) throws IllegalArgumentException, Exception{
+ Response response = base_target.path("templates/"+template_id).request(MediaType.APPLICATION_JSON).delete();
+
+ if(response.getStatus()>=200 && response.getStatus()<300){
+ return;
+ }
+ else if(response.getStatus()==400){
+ throw new IllegalArgumentException("Error deleting template '"+template_id+"'");
+ }
+ else{
+ throw new Exception("Error processing request. Return code = "+response.getStatus());
+ }
+ }
+
+ /**
+ * List the node templates for a given template id
+ *
+ * @param template_id
+ * @return
+ */
+ public List<? extends NodeTemplate> list_nodes(int template_id) {
+ List<? extends NodeTemplate> nodes = base_target.path("templates/"+template_id+"/nodes").request(MediaType.APPLICATION_JSON).get(new GenericType<List<NodeTemplateImpl>>(){});
+ return nodes;
+ }
+
+ /**
+ * Get a specific node by id
+ *
+ * @param node_id the node id
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public NodeTemplate get_node(int node_id) throws IllegalArgumentException {
+ NodeTemplate node = base_target.path("nodes/"+node_id).request(MediaType.APPLICATION_JSON).get(NodeTemplateImpl.class);
+ return node;
+ }
+
+ public List<? extends Service> list_services() {
+ List<? extends Service> services = base_target.path("services").request(MediaType.APPLICATION_JSON).get(new GenericType<List<ServiceImpl>>(){});
+ return services;
+ }
+
+ public Service get_service(int service_id) throws IllegalArgumentException {
+ throw new NotImplementedException();
+ }
+
+ public List<? extends Output> list_service_outputs(int service_id) throws IllegalArgumentException {
+ List<? extends Output> outputs = base_target.path("services").request(MediaType.APPLICATION_JSON).get(new GenericType<List<OutputImpl>>(){});
+ return outputs;
+ }
+
+ public List<? extends Input> list_service_inputs(int service_id) throws IllegalArgumentException {
+ List<? extends Input> inputs = base_target.path("services").request(MediaType.APPLICATION_JSON).get(new GenericType<List<InputImpl>>(){});
+ return inputs;
+ }
+
+ /**
+ * Create a service based on the supplied template
+ *
+ * @param template_id the template to create the service for
+ * @param service_name a name for the service
+ * @param inputs an optional list of inputs for the service (can be null)
+ * @throws Exception
+ */
+ public void create_service(int template_id, String service_name, List<Input> inputs) throws Exception {
+
+ String json="{"+inputsToJson(inputs)+"}";
+
+ Response response = base_target.path("templates/"+template_id+"/services/"+service_name).
+ request(MediaType.APPLICATION_JSON).post(
+ Entity.entity(json, MediaType.APPLICATION_JSON)
+ );
+
+ if( response.getStatus()< 200 || response.getStatus()>299){
+ throw new Exception("create service failed:"+response.getStatus()+" "+ response.readEntity(String.class));
+ }
+ }
+
+ public void delete_service(int service_id) throws Exception {
+ Response response = base_target.path("services/"+service_id).request(MediaType.APPLICATION_JSON).delete();
+ if(!responseOK(response)){
+ throw new Exception("delete service failed: "+response.getStatus()+" "+ response.readEntity(String.class));
+ }
+ }
+
+ /**
+ * List user workflows for supplied service
+ *
+ * @param service_id
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public List<? extends Workflow> list_workflows(int service_id) throws IllegalArgumentException {
+ List<? extends Workflow> workflows = base_target.path("services/"+service_id+"/workflows").request(MediaType.APPLICATION_JSON).get(new GenericType<List<WorkflowImpl>>(){});
+ return workflows;
+ }
+
+ public Workflow get_workflow(int workflow_id) throws IllegalArgumentException {
+ throw new NotImplementedException();
+ }
+
+ /**
+ * List all executions
+ *
+ * @return
+ * @throws Exception
+ */
+ public List<? extends Execution> list_executions() throws Exception {
+ List<? extends Execution> executions = base_target.path("executions").request(MediaType.APPLICATION_JSON).get(new GenericType<List<ExecutionImpl>>(){});
+ return executions;
+ }
+
+ /**
+ * List executions for specified service
+ *
+ * @param service_id
+ * @return
+ * @throws Exception
+ */
+ public List<? extends Execution> list_executions(int service_id) throws Exception {
+ List<? extends Execution> executions = base_target.path("services/"+service_id+"/executions").request(MediaType.APPLICATION_JSON).get(new GenericType<List<ExecutionImpl>>(){});
+ return executions;
+ }
+
+ /**
+ * Get details about a specified execution
+ *
+ * @param execution_id
+ * @return
+ * @throws IllegalArgumentException
+ */
+ public Execution get_execution(int execution_id) throws IllegalArgumentException {
+ Execution execution = base_target.path("executions/"+execution_id).request(MediaType.APPLICATION_JSON).get(ExecutionImpl.class);
+ return execution;
+ }
+
+ /**
+ * Start an execution for the specified service
+ *
+ * @param service_id the service to run the execution for
+ * @param workflow_name the name of the workflow to execute
+ * @param details details controlling execution operation
+ * @return the execution id
+ * @throws Exception
+ */
+ public int start_execution(int service_id, String workflow_name, ExecutionDetails details) throws Exception {
+ StringBuilder json=new StringBuilder("{");
+ if(details.getExecutor().length()>0){
+ json.append("\"executor\":\"").append(details.getExecutor()).append("\",");
+ }
+ if(details.getInputs()!=null){
+ json.append(inputsToJson(details.getInputs()));
+ }
+ json.append("\"task_max_attempts\":").append(details.getTaskMaxAttempts()).append(",");
+ json.append("\"task_retry_interval\":").append(details.getTaskRetryInterval()).append("}");
+
+ System.out.println("JSON="+json.toString());
+
+ Response response = base_target.path("services/"+service_id+"/executions/"+workflow_name).request(MediaType.APPLICATION_JSON).
+ post(Entity.entity(json.toString(), MediaType.APPLICATION_JSON));
+
+ if(!responseOK(response)){
+ throw new Exception("start execution failed: "+response.getStatus()+" "+response.readEntity(String.class));
+ }
+
+ ObjectMapper mapper = new ObjectMapper(new JsonFactory());
+ JsonNode rootNode = mapper.readTree(response.readEntity(String.class));
+ int id=rootNode.get("id").asInt(-1);
+ return id;
+ }
+
+ public void resume_execution(int execution_id, ExecutionDetails details) throws IllegalArgumentException {
+ StringBuilder json=new StringBuilder("{");
+ if(details.getExecutor().length()>0){
+ json.append("\"executor\":\"").append(details.getExecutor()).append("\",");
+ }
+ json.append("\"retry_failed_tasks\":").append(details.isRetry_failed_tasks()).append("}");
+ Response response = base_target.path("executions/"+execution_id).request(MediaType.APPLICATION_JSON).
+ post(Entity.entity(json.toString(), MediaType.APPLICATION_JSON));
+ }
+
+ public void cancel_execution(int execution_id) throws Exception {
+ Response response = base_target.path("executions/"+execution_id).request(MediaType.APPLICATION_JSON).delete();
+ if(!responseOK(response)){
+ throw new Exception("delete service failed: "+response.getStatus()+" "+ response.readEntity(String.class));
+ }
+ }
+
+ /**
+ * -----
+ * ----- PRIVATE METHODS
+ * -----
+ */
+
+ private boolean responseOK(Response response){
+ return response.getStatus()>199 && response.getStatus()<300;
+ }
+
+ private String inputsToJson(List<Input> inputs){
+ if(inputs==null)return null;
+
+ StringBuilder sb=new StringBuilder("\"inputs\":{");
+ for(Input input:inputs){
+ sb.append("\"").append(input.getName()).append("\":\"").append(input.getValue()).append("\",");
+ }
+ if(inputs.size()>0)sb.deleteCharAt(sb.length()-1); //trim comma
+
+ return sb.toString();
+ }
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Execution.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Execution.java
new file mode 100755
index 0000000000..ab742833e6
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Execution.java
@@ -0,0 +1,29 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public interface Execution {
+ int getExecutionId();
+ String getWorkflowName();
+ String getServiceTemplateName();
+ String getServiceName();
+ String getStatus();
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionDetails.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionDetails.java
new file mode 100755
index 0000000000..e7685a259c
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionDetails.java
@@ -0,0 +1,73 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+import java.util.List;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public class ExecutionDetails {
+ private String executor=""; //default
+ private int task_max_attempts=30;
+ private int task_retry_interval=30;
+ private List<Input> inputs=null;
+ private boolean retry_failed_tasks=false;
+
+ public ExecutionDetails(){}
+
+ public ExecutionDetails(String executor){
+ this.executor=executor;
+ }
+
+ public ExecutionDetails(String executor, int task_max_attempts, int task_retry_interval, boolean retry_failed_tasks,
+ List<Input> inputs){
+ this.executor=executor;
+ this.task_max_attempts=task_max_attempts;
+ this.task_retry_interval=task_retry_interval;
+ this.retry_failed_tasks = retry_failed_tasks;
+ this.inputs=inputs;
+ }
+ public String getExecutor(){
+ return executor;
+ }
+ public void setExecutor(String executor){
+ this.executor=executor;
+ }
+ public int getTaskMaxAttempts(){
+ return task_max_attempts;
+ }
+ public void setTaskMaxAttempts(int max){
+ this.task_max_attempts=max;
+ }
+ public int getTaskRetryInterval(){
+ return task_retry_interval;
+ }
+ public void setTaskRetryInterval(int interval){
+ this.task_retry_interval=interval;
+ }
+ public List<Input> getInputs(){
+ return inputs;
+ }
+ public void setInputs(List<Input> inputs){
+ this.inputs=inputs;
+ }
+ public boolean isRetry_failed_tasks() {return retry_failed_tasks;}
+ public void setRetry_failed_tasks(boolean retry_failed_tasks) {this.retry_failed_tasks = retry_failed_tasks;}
+
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionImpl.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionImpl.java
new file mode 100755
index 0000000000..8e420cc16c
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionImpl.java
@@ -0,0 +1,54 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+
+/**
+ * Created by DeWayne on 7/17/2017.
+ */
+public class ExecutionImpl implements Execution {
+ @JsonProperty("execution_id")
+ int execution_id;
+ @JsonProperty("workflow_name")
+ String workflow_name;
+ @JsonProperty("service_template_name")
+ String service_template_name;
+ @JsonProperty("service_name")
+ String service_name;
+ String status;
+
+ public int getExecutionId() {
+ return execution_id;
+ }
+ public String getWorkflowName() {
+ return workflow_name;
+ }
+
+ public String getServiceTemplateName() {
+ return service_template_name;
+ }
+
+ public String getServiceName() {
+ return service_name;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Input.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Input.java
new file mode 100755
index 0000000000..595dfb1245
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Input.java
@@ -0,0 +1,27 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public interface Input {
+ String getName();
+ String getDescription();
+ String getValue();
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/InputImpl.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/InputImpl.java
new file mode 100755
index 0000000000..3002b7b54e
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/InputImpl.java
@@ -0,0 +1,49 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/17/2017.
+ */
+public class InputImpl implements Input {
+ private String name, description, value;
+
+ public InputImpl(){}
+
+ public InputImpl(String name,String value,String description){
+ if(name==null || value==null){
+ throw new IllegalArgumentException("null argument supplied");
+ }
+ this.name=name;
+ this.value=value;
+ if(description!=null)this.description=description;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplate.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplate.java
new file mode 100755
index 0000000000..bc46d7f5b2
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplate.java
@@ -0,0 +1,29 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public interface NodeTemplate {
+ int getId();
+ String getName();
+ String getDescription();
+ int getServiceTemplateId();
+ String getTypeName();
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplateImpl.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplateImpl.java
new file mode 100755
index 0000000000..43338c952d
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplateImpl.java
@@ -0,0 +1,68 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+
+/**
+ * Created by DeWayne on 7/18/2017.
+ */
+public class NodeTemplateImpl implements NodeTemplate {
+ private int id;
+ private String name;
+ private String description="";
+ @JsonProperty("service_template_id")
+ private int service_template_id;
+ @JsonProperty("type_name")
+ private String type_name="";
+
+ public NodeTemplateImpl(){}
+
+ public NodeTemplateImpl(int id, String name, String description, int service_template_id, String type_name){
+ this.id=id;
+ this.description=description;
+ this.service_template_id=service_template_id;
+ this.type_name=type_name;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public int getServiceTemplateId() {
+ return service_template_id;
+ }
+
+ public String getTypeName() {
+ return type_name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Output.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Output.java
new file mode 100755
index 0000000000..83363bad6c
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Output.java
@@ -0,0 +1,27 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public interface Output {
+ String getName();
+ String getDescription();
+ String getValue();
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/OutputImpl.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/OutputImpl.java
new file mode 100755
index 0000000000..0a6cecc9c1
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/OutputImpl.java
@@ -0,0 +1,37 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/17/2017.
+ */
+public class OutputImpl implements Output {
+ private String name, description, value;
+
+ public String getName() {
+ return name;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Service.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Service.java
new file mode 100755
index 0000000000..9cf86ec73f
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Service.java
@@ -0,0 +1,32 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+import java.util.Date;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public interface Service {
+ int getId();
+ String getDescription();
+ String getName();
+ String getServiceTemplate();
+ Date getCreated();
+ Date getUpdated();
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplate.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplate.java
new file mode 100755
index 0000000000..0df6d60905
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplate.java
@@ -0,0 +1,31 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+import java.net.URI;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public interface ServiceTemplate {
+ String getName();
+ URI getURI();
+ int getId();
+ String getFilename();
+ String getDescription();
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplateImpl.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplateImpl.java
new file mode 100755
index 0000000000..9e158a27fd
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplateImpl.java
@@ -0,0 +1,81 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+import java.net.URI;
+
+/**
+ * CSAR based implementation
+ *
+ * Created by DeWayne on 7/17/2017.
+ */
+public class ServiceTemplateImpl implements ServiceTemplate {
+ public static final String DEFAULT_TEMPLATE_NAME = "service-template.yaml";
+ private String name;
+ private int id;
+ private URI uri;
+ private String filename = DEFAULT_TEMPLATE_NAME;
+ private String description;
+
+ public ServiceTemplateImpl(){}
+
+ public ServiceTemplateImpl(String name, URI uri){
+ this.name=name;
+ this.uri=uri;
+ }
+
+ /**
+ * Construct an instance
+ * @param name a textual name for the template
+ * @param uri a URI to a CSAR
+ * @param filename the filename in the CSAR representing main yaml template
+ */
+ public ServiceTemplateImpl(String name, URI uri, String filename, String description){
+ this.name=name;
+ this.uri=uri;
+ this.filename=filename;
+ this.description=description;
+ }
+
+ public int getId(){
+ return id;
+ }
+ public void setId(int id){
+ this.id=id;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name){
+ this.name=name;
+ }
+ public URI getURI() {
+ return uri;
+ }
+ public void setPath(String path){
+ this.uri=uri;
+ }
+ public String getFilename() {
+ return filename;
+ }
+ public void setFilename(String filename){
+ this.filename=filename;
+ }
+
+ public String getDescription(){ return description;}
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResult.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResult.java
new file mode 100755
index 0000000000..3d40dfa1ec
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResult.java
@@ -0,0 +1,26 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public interface ValidationResult {
+
+ boolean getFailed();
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResultImpl.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResultImpl.java
new file mode 100755
index 0000000000..22e34eb7b3
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResultImpl.java
@@ -0,0 +1,32 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/17/2017.
+ */
+public class ValidationResultImpl implements ValidationResult {
+ private boolean failed=false;
+
+ public void setFailed(boolean failed){
+ this.failed=failed;
+ }
+ public boolean getFailed() {
+ return failed;
+ }
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Workflow.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Workflow.java
new file mode 100755
index 0000000000..7dbab18943
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Workflow.java
@@ -0,0 +1,25 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public interface Workflow {
+ String getName();
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/WorkflowImpl.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/WorkflowImpl.java
new file mode 100755
index 0000000000..41105df26a
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/WorkflowImpl.java
@@ -0,0 +1,29 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client;
+
+/**
+ * Created by DeWayne on 7/17/2017.
+ */
+public class WorkflowImpl implements Workflow{
+ String name;
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/StorageException.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/StorageException.java
new file mode 100755
index 0000000000..50ff38da10
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/StorageException.java
@@ -0,0 +1,27 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client.exceptions;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public class StorageException extends Exception {
+ public StorageException(String message){
+ super(message);
+ }
+}
diff --git a/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/ValidationException.java b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/ValidationException.java
new file mode 100755
index 0000000000..cbcee31cb4
--- /dev/null
+++ b/aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/ValidationException.java
@@ -0,0 +1,27 @@
+/*
+ * ============LICENSE_START===================================================
+ * Copyright (c) 2017 Cloudify.co. All rights reserved.
+ * ===================================================================
+ * 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.
+ * ============LICENSE_END====================================================
+*/
+package com.gigaspaces.aria.rest.client.exceptions;
+
+/**
+ * Created by DeWayne on 7/12/2017.
+ */
+public class ValidationException extends Exception {
+ public ValidationException(String message){
+ super(message);
+ }
+}