From 84f4d06360055e619fc1af86a7a2196ef5ec93ce Mon Sep 17 00:00:00 2001 From: Zhaoxing Date: Wed, 9 Aug 2017 13:07:00 +0800 Subject: activiti-extention added Change-Id: I21cae6691190a32ef5ef9883cb1418f769f1b043 Signed-off-by: Zhaoxing --- .../onap/workflow/activitiext/ActivitiExtApp.java | 41 ++++ .../workflow/activitiext/ActivitiExtAppConfig.java | 43 +++++ .../workflow/activitiext/ActivitiExtAppInit.java | 39 ++++ .../onap/workflow/activitiext/common/Config.java | 39 ++++ .../activitiext/common/MsbClientConfig.java | 26 +++ .../activitiext/restservicetask/ConstString.java | 70 +++++++ .../restservicetask/DeployBpmnFileResponse.java | 31 +++ .../restservicetask/HighLevelRestApi.java | 210 +++++++++++++++++++++ .../restservicetask/HttpResponseMessage.java | 56 ++++++ .../activitiext/restservicetask/HttpUtil.java | 176 +++++++++++++++++ .../restservicetask/LowLevelRestApi.java | 79 ++++++++ .../activitiext/restservicetask/Parameter.java | 56 ++++++ .../activitiext/restservicetask/PropertyUtil.java | 46 +++++ .../restservicetask/StartProcessRequest.java | 33 ++++ .../src/main/resources/api-doc/index.html | 99 ++++++++++ activiti-extension/src/main/resources/banner.txt | 6 + 16 files changed, 1050 insertions(+) create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtApp.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtAppConfig.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtAppInit.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/common/Config.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/common/MsbClientConfig.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/ConstString.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/DeployBpmnFileResponse.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HighLevelRestApi.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HttpResponseMessage.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HttpUtil.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/LowLevelRestApi.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/Parameter.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/PropertyUtil.java create mode 100644 activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/StartProcessRequest.java create mode 100644 activiti-extension/src/main/resources/api-doc/index.html create mode 100644 activiti-extension/src/main/resources/banner.txt (limited to 'activiti-extension/src/main') diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtApp.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtApp.java new file mode 100644 index 0000000..dd56610 --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtApp.java @@ -0,0 +1,41 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.workflow.activitiext; + +import org.glassfish.jersey.media.multipart.MultiPartFeature; + +import io.dropwizard.Application; +import io.dropwizard.setup.Environment; + +public class ActivitiExtApp extends Application { + + public static void main(String[] args) throws Exception { + new ActivitiExtApp().run(args); + } + + @Override + public String getName() { + return " Activiti Ext APP "; + } + + @Override + public void run(ActivitiExtAppConfig configuration, Environment environment) throws Exception { + + environment.jersey().register(MultiPartFeature.class); + } +} + diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtAppConfig.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtAppConfig.java new file mode 100644 index 0000000..ffe3c9e --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtAppConfig.java @@ -0,0 +1,43 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.workflow.activitiext; + +import io.dropwizard.Configuration; + +import javax.validation.Valid; + +import org.hibernate.validator.constraints.NotEmpty; +import org.onap.workflow.activitiext.common.MsbClientConfig; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ActivitiExtAppConfig extends Configuration { + + @NotEmpty + private String defaultName = "WORKFLOW-ACTIVITI-EXT"; + @NotEmpty + @JsonProperty + private String apidescription = "ZTE workflow-activiti-ext rest API"; + + @JsonProperty + @Valid + private MsbClientConfig msbClientConfig; + + public MsbClientConfig getMsbClientConfig() { + return msbClientConfig; + } +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtAppInit.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtAppInit.java new file mode 100644 index 0000000..0291e3b --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/ActivitiExtAppInit.java @@ -0,0 +1,39 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.workflow.activitiext; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import org.jvnet.hk2.annotations.Service; +import org.onap.workflow.activitiext.common.Config; + + +@Service +public class ActivitiExtAppInit { + @Inject + private ActivitiExtAppConfig appconfig; + + @PostConstruct + private void run() { + runConfigComponent(); + } + + private void runConfigComponent() { + Config.getInstance().setAppconfig(appconfig); + } +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/common/Config.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/common/Config.java new file mode 100644 index 0000000..62ee72a --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/common/Config.java @@ -0,0 +1,39 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.workflow.activitiext.common; + +import org.onap.workflow.activitiext.ActivitiExtAppConfig; + +public class Config { + + private static Config instance = new Config(); + + private ActivitiExtAppConfig appconfig; + + public static Config getInstance(){ + return instance; + } + + public ActivitiExtAppConfig getAppconfig() { + return appconfig; + } + + public void setAppconfig(ActivitiExtAppConfig config) { + this.appconfig = config; + } + +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/common/MsbClientConfig.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/common/MsbClientConfig.java new file mode 100644 index 0000000..338a1ff --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/common/MsbClientConfig.java @@ -0,0 +1,26 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.workflow.activitiext.common; + +import lombok.Data; + +@Data +public class MsbClientConfig { + + private String msbSvrIp; + private Integer msbSvrPort; +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/ConstString.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/ConstString.java new file mode 100644 index 0000000..371d8d7 --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/ConstString.java @@ -0,0 +1,70 @@ +/** + * Copyright 2016-2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.workflow.activitiext.restservicetask; + +/** + * + * @author 10222158 + * + */ +public class ConstString { + + /** + * http method type : get + */ + public static final String HTTP_GET = "GET"; + + /** + * http method type : post + */ + public static final String HTTP_POST = "POST"; + + /** + * http method type : delete + */ + public static final String HTTP_DELETE = "DELETE"; + + /** + * http method type : put + */ + public static final String HTTP_PUT = "PUT"; + + /** + * parameter position : in the uri path + */ + public static final String PARAMETER_POSITION_PATH = "path"; + + /** + * parameter positoin : after the uri + */ + public static final String PARAMETER_POSITION_QUERY = "query"; + + /** + * parameter positoin : in the request body + */ + public static final String PARAMETER_POSITION_BODY = "body"; + + /** + * parameter type : string + */ + public static final String PARAMETER_TYPE_STRING = "string"; + + /** + * parameter type : acitviti expression + */ + public static final String PARAMETER_TYPE_EXPRESSION = "expression"; + +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/DeployBpmnFileResponse.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/DeployBpmnFileResponse.java new file mode 100644 index 0000000..83b8514 --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/DeployBpmnFileResponse.java @@ -0,0 +1,31 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.workflow.activitiext.restservicetask; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class DeployBpmnFileResponse { + private int status; + private String message; + private String deployedId; + private String processId; +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HighLevelRestApi.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HighLevelRestApi.java new file mode 100644 index 0000000..31001b7 --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HighLevelRestApi.java @@ -0,0 +1,210 @@ +/** + * Copyright 2016-2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.workflow.activitiext.restservicetask; + +import org.activiti.engine.ActivitiException; +import org.apache.commons.httpclient.HttpMethodBase; +import org.apache.commons.httpclient.NameValuePair; +import org.apache.commons.httpclient.methods.DeleteMethod; +import org.apache.commons.httpclient.methods.GetMethod; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.PutMethod; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author 10222158 + * + */ +public class HighLevelRestApi { + + private static final Logger logger = LoggerFactory.getLogger(HighLevelRestApi.class); + + /** + * invoke http service + * + * @param methodValue + * @param uri + * @param requestPayload + * @param acceptValue + * @param contentTypeValue + * @return + */ + public static HttpResponseMessage invoke(String methodValue, String uri, String requestPayload, String acceptValue, + String contentTypeValue) throws ActivitiException { + + // complete uri + uri = completeUri(uri); + + logger.info("uri: " + uri); + logger.info("method: " + methodValue); + logger.info("requestbody: " + requestPayload); + logger.info("accept: " + acceptValue); + logger.info("content-type: " + contentTypeValue); + + HttpResponseMessage msg = new HttpResponseMessage(); + switch (methodValue.toUpperCase()) { + case ConstString.HTTP_GET: + msg = HighLevelRestApi.Get(uri, acceptValue, contentTypeValue); + break; + case ConstString.HTTP_POST: + msg = HighLevelRestApi.Post(uri, requestPayload, acceptValue, contentTypeValue); + break; + case ConstString.HTTP_DELETE: + msg = HighLevelRestApi.Delete(uri, acceptValue, contentTypeValue); + break; + case ConstString.HTTP_PUT: + msg = HighLevelRestApi.Put(uri, requestPayload, acceptValue, contentTypeValue); + break; + default: + throw new ActivitiException("can not find the http method type '" + methodValue + "'!"); + } + return msg; + } + + /** + * This method implements the HTTP Put Method + * + * @param uri + * Resource URI + * @param requestPayload + * Content which has to be put into the Resource + * @return ResponseCode of HTTP Interaction + */ + @SuppressWarnings("deprecation") + public static HttpResponseMessage Put(String uri, String requestPayload, String acceptValue, + String contentTypeValue) { + + PutMethod method = new PutMethod(uri); + + HighLevelRestApi.setAcceptHeader(method, acceptValue); + HighLevelRestApi.setContentTypeHeader(method, contentTypeValue); + method.setRequestBody(requestPayload); + + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + + return responseMessage; + } + + /** + * This method implements the HTTP Post Method + * + * @param uri + * Resource URI + * @param requestPayload + * Content which has to be posted into the Resource + * @return ResponseCode of HTTP Interaction + */ + @SuppressWarnings("deprecation") + public static HttpResponseMessage Post(String uri, String requestPayload, String acceptValue, + String contentTypeValue) { + + PostMethod method = null; + if (uri.contains("?")) { + String[] split = uri.split("\\?"); + method = new PostMethod(split[0]); + method.setQueryString(HighLevelRestApi.createNameValuePairArrayFromQuery(split[1])); + } else { + method = new PostMethod(uri); + } + method.setRequestBody(requestPayload); + HighLevelRestApi.setAcceptHeader(method, acceptValue); + HighLevelRestApi.setContentTypeHeader(method, contentTypeValue); + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + return responseMessage; + } + + /** + * This method implements the HTTP Get Method + * + * @param uri + * Resource URI + * @return Content represented by the Resource URI + */ + public static HttpResponseMessage Get(String uri, String acceptValue, String contentTypeValue) { + GetMethod method = null; + if (uri.contains("?")) { + String[] split = uri.split("\\?"); + method = new GetMethod(split[0]); + method.setQueryString(HighLevelRestApi.createNameValuePairArrayFromQuery(split[1])); + } else { + method = new GetMethod(uri); + } + + HighLevelRestApi.setAcceptHeader(method, acceptValue); + HighLevelRestApi.setContentTypeHeader(method, contentTypeValue); + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + return responseMessage; + } + + private static NameValuePair[] createNameValuePairArrayFromQuery(String query) { + String[] pairs = query.trim().split("&"); + NameValuePair[] nameValuePairArray = new NameValuePair[pairs.length]; + int count = 0; + for (String pair : pairs) { + String[] keyValue = pair.split("="); + NameValuePair nameValuePair = new NameValuePair(); + nameValuePair.setName(keyValue[0]); + nameValuePair.setValue(keyValue[1]); + nameValuePairArray[count] = nameValuePair; + count++; + } + return nameValuePairArray; + } + + /** + * This method implements the HTTP Delete Method + * + * @param uri + * Resource URI + * @return ResponseCode of HTTP Interaction + */ + public static HttpResponseMessage Delete(String uri, String acceptValue, String contentTypeValue) { + + DeleteMethod method = new DeleteMethod(uri); + HighLevelRestApi.setAcceptHeader(method, acceptValue); + HighLevelRestApi.setContentTypeHeader(method, contentTypeValue); + HttpResponseMessage responseMessage = LowLevelRestApi.executeHttpMethod(method); + return responseMessage; + } + + private static void setAcceptHeader(HttpMethodBase method, String value) { + if (!StringUtils.isEmpty(value)) { + method.setRequestHeader("Accept", value); + } else { + method.setRequestHeader("Accept", "application/xml"); + } + } + + private static void setContentTypeHeader(HttpMethodBase method, String value) { + if (!StringUtils.isEmpty(value)) { + method.setRequestHeader("content-type", value); + } else { + method.setRequestHeader("content-type", "application/json"); + } + } + + private static String completeUri(String uri) { + + String urlReg = "^http[\\s\\S]*"; + if (uri != null && !uri.matches(urlReg)) { + uri = PropertyUtil.getBasePath() + uri; + } + + return uri; + } +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HttpResponseMessage.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HttpResponseMessage.java new file mode 100644 index 0000000..2128c18 --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HttpResponseMessage.java @@ -0,0 +1,56 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.workflow.activitiext.restservicetask; + +import java.io.Serializable; + +/** + */ +public class HttpResponseMessage implements Serializable { + + private int statusCode; + private String responseBody; + + + /** + * @return the statusCode + */ + public int getStatusCode() { + return this.statusCode; + } + + /** + * @param statusCode the statusCode to set + */ + protected void setStatusCode(int statusCode) { + this.statusCode = statusCode; + } + + /** + * @return the responseBody + */ + public String getResponseBody() { + return this.responseBody; + } + + /** + * @param responseBody the responseBody to set + */ + protected void setResponseBody(String responseBody) { + this.responseBody = responseBody; + } + +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HttpUtil.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HttpUtil.java new file mode 100644 index 0000000..75a6b2f --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/HttpUtil.java @@ -0,0 +1,176 @@ +/** + * Copyright 2016-2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.workflow.activitiext.restservicetask; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.activiti.engine.ActivitiException; +import org.activiti.engine.delegate.BpmnError; +import org.activiti.engine.delegate.DelegateExecution; +import org.activiti.engine.delegate.Expression; +import org.activiti.engine.delegate.JavaDelegate; +import org.activiti.engine.impl.context.Context; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; + +/** + * rest service + * + * @author 10222158 + * + */ +public class HttpUtil implements JavaDelegate { + + private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class); + + private Expression uri; + private Expression method; + private Expression accept; + private Expression contentType; + private Expression parameters; + + @Override + public void execute(DelegateExecution execution) throws ActivitiException { + + try { + this.executeMethod(execution); + } catch (Exception e) { + + logger.error("Invoke rest service failed!", e); + throw new BpmnError(e.getMessage()); + } + } + + /** + * invoke rest service + * + * @param execution + */ + public boolean executeMethod(DelegateExecution execution) throws Exception { + + String uriValue = getValue(uri, execution); + String methodValue = getValue(method, execution); + String acceptValue = getValue(accept, execution); + String contentTypeValue = getValue(contentType, execution); + String parametersValue = getValue(parameters, execution); + + Map requestBody = new HashMap(); + + if (!StringUtils.isEmpty(parametersValue)) { + + // Parse the parameter into Object List + List parameters = JSONArray.parseArray(parametersValue, Parameter.class); + + for (Parameter param : parameters) { + + handleParam(execution, param, requestBody, uriValue); + } + } + + String requestPayload = JSON.toJSONString(requestBody); + + // invoke http service + HttpResponseMessage msg = HighLevelRestApi.invoke(methodValue, uriValue, requestPayload, acceptValue, + contentTypeValue); + + // inject the result to variable + execution.setVariable(execution.getCurrentActivityId(), msg); + + logger.info("statusCode: " + msg.getStatusCode()); + logger.info("responseBody: " + msg.getResponseBody()); + + return true; + } + + /** + * + * @param execution + * @param param + * @param requestBody + * @param uriValue + */ + public void handleParam(DelegateExecution execution, Parameter param, Map requestBody, + String uriValue) throws ActivitiException { + + if (ConstString.PARAMETER_TYPE_EXPRESSION.equals(param.getType())) { + handleExpression(execution, param); + } + + switch (param.getPosition()) { + case ConstString.PARAMETER_POSITION_PATH: + + // replace the path parameter + uriValue = uriValue.replaceAll("\\{+" + param.getName() + "+\\}", param.getValue()); + break; + case ConstString.PARAMETER_POSITION_QUERY: + + // add the query parameter + if (!uriValue.contains("?")) { + uriValue = uriValue + "?" + param.getName() + "=" + param.getValue(); + } else { + uriValue = uriValue + "&" + param.getName() + "=" + param.getValue(); + } + break; + case ConstString.PARAMETER_POSITION_BODY: + + // add parameter to request body + requestBody.put(param.getName(), param.getValue()); + break; + default: + throw new ActivitiException( + "The position '" + param.getPosition() + "' is illegal, please check your input!"); + } + } + + /** + * get value from VariableScope + * + * @param expression + * @param execution + * @return + */ + public String getValue(Expression expression, DelegateExecution execution) { + + String value = new String(); + if (expression != null) { + value = (String) expression.getValue(execution); + } + + return value; + } + + /** + * parse expression in the parameter + * + * @param execution + * @param param + */ + public void handleExpression(DelegateExecution execution, Parameter param) { + + Expression expression = Context.getProcessEngineConfiguration().getExpressionManager() + .createExpression(param.getValue()); + + String value = String.valueOf(expression.getValue(execution)); + + param.setValue(value); + } +} \ No newline at end of file diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/LowLevelRestApi.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/LowLevelRestApi.java new file mode 100644 index 0000000..9171c31 --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/LowLevelRestApi.java @@ -0,0 +1,79 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.workflow.activitiext.restservicetask; + +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.HttpMethod; + +/** + * This static-class eases HTTP-method execution by self-managed fault-handling and automated + * Response-information processing + */ +public class LowLevelRestApi { + + // Local HttpClient used for every communication (Singleton implementation) + private static HttpClient httpClient = new HttpClient(); + + + /** + * Executes a passed HttpMethod (Method type is either PUT, POST, GET or DELETE) and returns a + * HttpResponseMessage + * + * @param method Method to execute + * @return HttpResponseMessage which contains all information about the execution + */ + public static HttpResponseMessage executeHttpMethod(HttpMethod method) { + + HttpResponseMessage responseMessage = null; + + try { + + // Execute Request + LowLevelRestApi.httpClient.executeMethod(method); + responseMessage = LowLevelRestApi.extractResponseInformation(method); + + } catch (Exception e) { + e.printStackTrace(); + } finally { + + // Release Connection anyway + method.releaseConnection(); + } + + // Extract response information and return + return responseMessage; + } + + /** + * Extracts the response information from an executed HttpMethod + * + * @param method Executed Method + * @return Packaged response information + */ + private static HttpResponseMessage extractResponseInformation(HttpMethod method) { + // Create and return HttpResponseMethod + HttpResponseMessage responseMessage = new HttpResponseMessage(); + responseMessage.setStatusCode(method.getStatusCode()); + try { + responseMessage.setResponseBody(method.getResponseBodyAsString()); + } catch (Exception e) { + e.printStackTrace(); + } + return responseMessage; + + } + +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/Parameter.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/Parameter.java new file mode 100644 index 0000000..9397d33 --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/Parameter.java @@ -0,0 +1,56 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.workflow.activitiext.restservicetask; + +public class Parameter { + + private String position; + private String type; + private String name; + private String value; + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/PropertyUtil.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/PropertyUtil.java new file mode 100644 index 0000000..5391757 --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/PropertyUtil.java @@ -0,0 +1,46 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.onap.workflow.activitiext.restservicetask; + +import java.util.ResourceBundle; + +public class PropertyUtil { + + public static final String REST_PROPERTY_LOCATION = "config"; + + public static final String BASE_URL = "baseurl"; + + private static ResourceBundle resource; + + static{ + resource = ResourceBundle.getBundle(REST_PROPERTY_LOCATION); + } + + public static String findByKey(String key){ + + String value = resource.getString(key); + + return value; + } + + public static String getBasePath(){ + + String basepath = findByKey(BASE_URL); + + return basepath; + } +} diff --git a/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/StartProcessRequest.java b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/StartProcessRequest.java new file mode 100644 index 0000000..9d712f2 --- /dev/null +++ b/activiti-extension/src/main/java/org/onap/workflow/activitiext/restservicetask/StartProcessRequest.java @@ -0,0 +1,33 @@ +/** + * Copyright 2017 ZTE Corporation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onap.workflow.activitiext.restservicetask; + +import java.util.Map; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class StartProcessRequest { + private String processId; + private Map params; +} diff --git a/activiti-extension/src/main/resources/api-doc/index.html b/activiti-extension/src/main/resources/api-doc/index.html new file mode 100644 index 0000000..fb25d00 --- /dev/null +++ b/activiti-extension/src/main/resources/api-doc/index.html @@ -0,0 +1,99 @@ + + + + Swagger UI + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
+
+ + diff --git a/activiti-extension/src/main/resources/banner.txt b/activiti-extension/src/main/resources/banner.txt new file mode 100644 index 0000000..ec90bd7 --- /dev/null +++ b/activiti-extension/src/main/resources/banner.txt @@ -0,0 +1,6 @@ + _ ____ _____ ___ __ __ ___ _____ ___ _____ __ __ _____ + / \ / ___| |_ _| |_ _| \ \ / / |_ _| |_ _| |_ _| | ____| \ \/ / |_ _| + / _ \ | | | | | | \ \ / / | | | | | | _____ | _| \ / | | + / ___ \ | |___ | | | | \ V / | | | | | | |_____| | |___ / \ | | + /_/ \_\ \____| |_| |___| \_/ |___| |_| |___| |_____| /_/\_\ |_| + \ No newline at end of file -- cgit 1.2.3-korg