From a4c936a24b8e1394753ecae9176071176974e828 Mon Sep 17 00:00:00 2001 From: dfilppi Date: Thu, 3 Aug 2017 21:26:02 +0000 Subject: ARIA java binding initial Change-Id: I806c879f7eddadec396adbb72f3fc2117dccbeb5 Issue-id: SO-77 Signed-off-by: DeWayne Filppi --- .../gigaspaces/aria/rest/client/AriaClient.java | 201 ++++++++++++ .../aria/rest/client/AriaClientFactory.java | 31 ++ .../aria/rest/client/AriaRestClient.java | 336 +++++++++++++++++++++ .../com/gigaspaces/aria/rest/client/Execution.java | 29 ++ .../aria/rest/client/ExecutionDetails.java | 73 +++++ .../gigaspaces/aria/rest/client/ExecutionImpl.java | 54 ++++ .../com/gigaspaces/aria/rest/client/Input.java | 27 ++ .../com/gigaspaces/aria/rest/client/InputImpl.java | 49 +++ .../gigaspaces/aria/rest/client/NodeTemplate.java | 29 ++ .../aria/rest/client/NodeTemplateImpl.java | 68 +++++ .../com/gigaspaces/aria/rest/client/Output.java | 27 ++ .../gigaspaces/aria/rest/client/OutputImpl.java | 37 +++ .../com/gigaspaces/aria/rest/client/Service.java | 32 ++ .../aria/rest/client/ServiceTemplate.java | 31 ++ .../aria/rest/client/ServiceTemplateImpl.java | 81 +++++ .../aria/rest/client/ValidationResult.java | 26 ++ .../aria/rest/client/ValidationResultImpl.java | 32 ++ .../com/gigaspaces/aria/rest/client/Workflow.java | 25 ++ .../gigaspaces/aria/rest/client/WorkflowImpl.java | 29 ++ .../rest/client/exceptions/StorageException.java | 27 ++ .../client/exceptions/ValidationException.java | 27 ++ 21 files changed, 1271 insertions(+) create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClient.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaClientFactory.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/AriaRestClient.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Execution.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionDetails.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ExecutionImpl.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Input.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/InputImpl.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplate.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/NodeTemplateImpl.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Output.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/OutputImpl.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Service.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplate.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ServiceTemplateImpl.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResult.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/ValidationResultImpl.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/Workflow.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/WorkflowImpl.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/StorageException.java create mode 100755 aria/aria-rest-java-client/src/main/java/com/gigaspaces/aria/rest/client/exceptions/ValidationException.java (limited to 'aria/aria-rest-java-client/src/main/java/com/gigaspaces') 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 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 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 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 list_service_outputs(int service_id) throws IllegalArgumentException; + + /** + * Fetch the inputs of the specified service + * + * @param service_id + * @return + * @throws IllegalArgumentException + */ + public List 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 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 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 list_executions()throws Exception; + + /** + * List executions for provided service + * + * @param service_id + * @return + * @throws Exception + */ + public List 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 list_service_templates(){ + List templates = base_target.path("templates").request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + + 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 list_nodes(int template_id) { + List nodes = base_target.path("templates/"+template_id+"/nodes").request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + 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 list_services() { + List services = base_target.path("services").request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + return services; + } + + public Service get_service(int service_id) throws IllegalArgumentException { + throw new NotImplementedException(); + } + + public List list_service_outputs(int service_id) throws IllegalArgumentException { + List outputs = base_target.path("services").request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + return outputs; + } + + public List list_service_inputs(int service_id) throws IllegalArgumentException { + List inputs = base_target.path("services").request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + 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 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 list_workflows(int service_id) throws IllegalArgumentException { + List workflows = base_target.path("services/"+service_id+"/workflows").request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + return workflows; + } + + public Workflow get_workflow(int workflow_id) throws IllegalArgumentException { + throw new NotImplementedException(); + } + + /** + * List all executions + * + * @return + * @throws Exception + */ + public List list_executions() throws Exception { + List executions = base_target.path("executions").request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + return executions; + } + + /** + * List executions for specified service + * + * @param service_id + * @return + * @throws Exception + */ + public List list_executions(int service_id) throws Exception { + List executions = base_target.path("services/"+service_id+"/executions").request(MediaType.APPLICATION_JSON).get(new GenericType>(){}); + 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 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 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 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 getInputs(){ + return inputs; + } + public void setInputs(List 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); + } +} -- cgit 1.2.3-korg