From c0604184b2aa8cff924ca783ec6b36f1f5988775 Mon Sep 17 00:00:00 2001 From: Zhaoxing Date: Tue, 8 Aug 2017 14:02:53 +0800 Subject: init code Change-Id: Icd0948118397b256da70dfbcbbec5520dc5eafd4 Signed-off-by: Zhaoxing --- .../main/java/org/onap/workflow/WorkflowApp.java | 42 +++ .../java/org/onap/workflow/WorkflowAppConfig.java | 43 +++ .../onap/workflow/activitiext/common/ToolUtil.java | 52 ++++ .../workflow/activitiext/common/package-info.java | 16 ++ .../main/java/org/onap/workflow/common/Config.java | 31 +++ .../org/onap/workflow/common/EnumModuleUrl.java | 33 +++ .../java/org/onap/workflow/common/EnumStatus.java | 21 ++ .../java/org/onap/workflow/common/RestClient.java | 310 +++++++++++++++++++++ .../org/onap/workflow/common/RestClientUtils.java | 42 +++ .../org/onap/workflow/common/RestResponse.java | 37 +++ .../java/org/onap/workflow/common/ToolUtil.java | 67 +++++ .../org/onap/workflow/common/package-info.java | 16 ++ .../workflow/entity/DeployBpmnFileResponse.java | 31 +++ .../org/onap/workflow/entity/MsbClientConfig.java | 26 ++ .../onap/workflow/entity/StartProcessRequest.java | 33 +++ .../activitientitiy/ActivitiDeployResponse.java | 25 ++ .../ActivitiStartProcessRequest.java | 25 ++ .../ActivitiStartProcessRequestParam.java | 27 ++ .../entity/activitientitiy/package-info.java | 19 ++ .../activitiservice/ActivitiServiceConsumer.java | 142 ++++++++++ .../activitiservice/IActivitiRestService.java | 44 +++ .../service/activitiservice/package-info.java | 17 ++ .../onap/workflow/resources/WorkflowResource.java | 101 +++++++ .../java/org/onap/workflow/tools/Constants.java | 29 ++ .../onap/workflow/tools/HttpDeleteWithBody.java | 37 +++ .../org/onap/workflow/tools/RequestParameters.java | 35 +++ .../java/org/onap/workflow/tools/package-info.java | 17 ++ .../workflow/wrapper/WorkflowInstanceWrapper.java | 98 +++++++ 28 files changed, 1416 insertions(+) create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/WorkflowApp.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/WorkflowAppConfig.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/activitiext/common/ToolUtil.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/activitiext/common/package-info.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/common/Config.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/common/EnumModuleUrl.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/common/EnumStatus.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/common/RestClient.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/common/RestClientUtils.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/common/RestResponse.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/common/ToolUtil.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/common/package-info.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/entity/DeployBpmnFileResponse.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/entity/MsbClientConfig.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/entity/StartProcessRequest.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiDeployResponse.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiStartProcessRequest.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiStartProcessRequestParam.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/package-info.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/ActivitiServiceConsumer.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/IActivitiRestService.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/package-info.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/resources/WorkflowResource.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/tools/Constants.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/tools/HttpDeleteWithBody.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/tools/RequestParameters.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/tools/package-info.java create mode 100644 wfenginemgrservice/src/main/java/org/onap/workflow/wrapper/WorkflowInstanceWrapper.java (limited to 'wfenginemgrservice/src/main/java/org/onap/workflow') diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/WorkflowApp.java b/wfenginemgrservice/src/main/java/org/onap/workflow/WorkflowApp.java new file mode 100644 index 0000000..23f6ac6 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/WorkflowApp.java @@ -0,0 +1,42 @@ +/** + * 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; + +import org.glassfish.jersey.media.multipart.MultiPartFeature; +import org.onap.workflow.common.Config; + +import io.dropwizard.Application; +import io.dropwizard.setup.Environment; + +public class WorkflowApp extends Application { + + public static void main(String[] args) throws Exception { + new WorkflowApp().run(args); + } + + public String getName() { + return " Workflow APP "; + } + + @Override + public void run(WorkflowAppConfig configuration, Environment environment) throws Exception { + // TODO Auto-generated method stub + environment.jersey().register(MultiPartFeature.class); + + Config.setWorkflowAppConfig(configuration); + } +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/WorkflowAppConfig.java b/wfenginemgrservice/src/main/java/org/onap/workflow/WorkflowAppConfig.java new file mode 100644 index 0000000..71985cc --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/WorkflowAppConfig.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; + +import javax.validation.Valid; + +import org.hibernate.validator.constraints.NotEmpty; +import org.onap.workflow.entity.MsbClientConfig; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import io.dropwizard.Configuration; + +public class WorkflowAppConfig 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/wfenginemgrservice/src/main/java/org/onap/workflow/activitiext/common/ToolUtil.java b/wfenginemgrservice/src/main/java/org/onap/workflow/activitiext/common/ToolUtil.java new file mode 100644 index 0000000..fe573e2 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/activitiext/common/ToolUtil.java @@ -0,0 +1,52 @@ +/** + * 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 java.io.IOException; +import java.io.InputStream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + + +public class ToolUtil { + private static final Logger logger = LoggerFactory.getLogger(ToolUtil.class); + public static boolean isEmptyString(String val) { + return ((val == null || "".equals(val)) ? true : false); + } + + public static boolean isTrimedEmptyString(String val) { + return ((val == null || "".equals(val.trim())) ? true : false); + } + + public static boolean isTrimedEmptyArray(String[] val) { + return ((val == null || val.length == 0) ? true : false); + } + + /** + * @param ins + */ + public static void closeInputStream(InputStream ins) { + if (ins != null) { + try { + ins.close(); + } catch (IOException e) { + logger.info("Close InputStream failed.", e); + } + } + } +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/activitiext/common/package-info.java b/wfenginemgrservice/src/main/java/org/onap/workflow/activitiext/common/package-info.java new file mode 100644 index 0000000..d64450f --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/activitiext/common/package-info.java @@ -0,0 +1,16 @@ +/** + * 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; \ No newline at end of file diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/common/Config.java b/wfenginemgrservice/src/main/java/org/onap/workflow/common/Config.java new file mode 100644 index 0000000..49dc227 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/common/Config.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.common; + +import org.onap.workflow.WorkflowAppConfig; + +public class Config { + private static WorkflowAppConfig workflowAppConfig; + + public static WorkflowAppConfig getWorkflowAppConfig() { + return workflowAppConfig; + } + + public static void setWorkflowAppConfig(WorkflowAppConfig config) { + workflowAppConfig = config; + } +} \ No newline at end of file diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/common/EnumModuleUrl.java b/wfenginemgrservice/src/main/java/org/onap/workflow/common/EnumModuleUrl.java new file mode 100644 index 0000000..00f10d8 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/common/EnumModuleUrl.java @@ -0,0 +1,33 @@ +/** + * Copyright 2017 [ZTE] and others. + * + * 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.common; + +public enum EnumModuleUrl { + ACTIVITI { + @Override + public String getApiRootDomain() { + return "/activiti-rest/service"; + } + }; + + public abstract String getApiRootDomain(); + + public static String getBaseUrl(EnumModuleUrl enumUrl) { + String msbHost = Config.getWorkflowAppConfig().getMsbClientConfig().getMsbSvrIp(); + return "http://" + msbHost + ":" + "80" + enumUrl.getApiRootDomain(); + } + +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/common/EnumStatus.java b/wfenginemgrservice/src/main/java/org/onap/workflow/common/EnumStatus.java new file mode 100644 index 0000000..e2d1c5c --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/common/EnumStatus.java @@ -0,0 +1,21 @@ +/** + * 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.common; + +public enum EnumStatus { + SUCCESS, FAIL +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/common/RestClient.java b/wfenginemgrservice/src/main/java/org/onap/workflow/common/RestClient.java new file mode 100644 index 0000000..f037757 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/common/RestClient.java @@ -0,0 +1,310 @@ +/** + * 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.common; + +import java.io.IOException; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpHost; +import org.apache.http.HttpRequest; +import org.apache.http.HttpResponse; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.onap.workflow.externalservice.entity.activitientitiy.ActivitiStartProcessRequest; +import org.onap.workflow.tools.Constants; +import org.onap.workflow.tools.HttpDeleteWithBody; +import org.onap.workflow.tools.RequestParameters; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; + +public class RestClient { + private static final String HTTP = "http"; + private static final Logger logger = LoggerFactory.getLogger(RestClient.class); + + enum HttpMethod { + GET, POST, PUT, DELETE + } + + /** + * + * @param method + * @param ip + * @param port + * @param url + * @param body + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public static RestResponse executeHttp(HttpMethod method, String ip, Integer port, String url, + HttpEntity body) throws ClientProtocolException, IOException { + logger.info("deployfile method send"); + CloseableHttpClient httpclient = HttpClients.createDefault(); + HttpResponse httpResponse = null; + RestResponse result = new RestResponse(); + try { + if (ip == null) { + ip = Config.getWorkflowAppConfig().getMsbClientConfig().getMsbSvrIp(); + } + if (port == null) { + port = Config.getWorkflowAppConfig().getMsbClientConfig().getMsbSvrPort(); + } + HttpHost target = new HttpHost(ip, port, HTTP); + HttpRequest request = getRequest(method, url, body); + logger.info("deployfile method send ip"+ip); + request.addHeader(Constants.AUTHORIZATION, ToolUtil.getHeader()); + + httpResponse = httpclient.execute(target, request); + HttpEntity entity = httpResponse.getEntity(); + logger.info("deployfile method send"); + if (entity != null) { + result.setStatusCode(httpResponse.getStatusLine().getStatusCode()); + logger.info("reply status code deploy"+httpResponse.getStatusLine().getStatusCode()); + result.setResult(EntityUtils.toString(entity)); + } + } catch (IOException e) { + logger.warn("Close httpclient failed.", e); + } finally { + if (httpclient != null) { + try { + httpclient.close(); + } catch (IOException e) { + logger.warn("Close httpclient failed.", e); + } + } + } + return result; + } + + private static HttpRequest getRequest(HttpMethod method, String url, HttpEntity body) { + HttpRequest request = null; + switch (method) { + case GET: + request = new HttpGet(url); + break; + case POST: + request = new HttpPost(url); + ((HttpPost) request).setEntity(body); + break; + case PUT: + request = new HttpPut(url); + ((HttpPut) request).setEntity(body); + break; + case DELETE: + request = new HttpDelete(url); + break; + default: + break; + } + return request; + } + + /** + * + * @param ip + * @param port + * @param url + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public static String get(String ip, int port, String url) + throws ClientProtocolException, IOException { + return executeHttp(HttpMethod.GET, ip, port, url, null).getResult(); + } + + /** + * + * @param ip + * @param port + * @param url + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public static RestResponse delete(String ip, int port, String url) + throws ClientProtocolException, IOException { + return executeHttp(HttpMethod.GET, ip, port, url, null); + } + + /** + * + * @param ip + * @param port + * @param url + * @param requestBody + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public static RestResponse post(String ip, int port, String url, HttpEntity requestBody) + throws ClientProtocolException, IOException { + return executeHttp(HttpMethod.POST, ip, port, url, requestBody); + } + + + + /** + * + * @param method + * @param ip + * @param port + * @param url + * @param body + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public static RestResponse executeHttpDeleteDeploy(HttpMethod method, String ip, Integer port, + String url) throws ClientProtocolException, IOException { + if (ip == null) { + ip = Config.getWorkflowAppConfig().getMsbClientConfig().getMsbSvrIp(); + } + port = Config.getWorkflowAppConfig().getMsbClientConfig().getMsbSvrPort(); + RestResponse result = new RestResponse(); + CloseableHttpClient httpClient = HttpClients.createDefault(); + try { + httpClient = HttpClients.createDefault(); + // "http://localhost:8080/activiti-rest/service/repository/deployments/167501" + String deleteUrl = Constants.HTTP_HEADER + ip + Constants.COLON + port + url; + HttpDeleteWithBody httpDeteTest = new HttpDeleteWithBody(deleteUrl); + Gson gson = new Gson(); + RequestParameters reqPa = new RequestParameters(); + reqPa.setCasCade(true); + String jsonStr = gson.toJson(reqPa, RequestParameters.class); + StringEntity requestEntity = new StringEntity(jsonStr, "UTF-8"); + requestEntity.setContentEncoding("UTF-8"); + httpDeteTest.setHeader("Content-type", "application/json"); + httpDeteTest.setHeader(Constants.AUTHORIZATION, ToolUtil.getHeader()); + httpDeteTest.setEntity(new StringEntity(jsonStr)); + // returnValue = httpClient.execute(httpDeteTest, responseHandler); // 调接口获取返回值时,必须用此方法 + CloseableHttpResponse httpResonse = httpClient.execute(httpDeteTest); + int statusCode = httpResonse.getStatusLine().getStatusCode(); + result.setStatusCode(statusCode); + // result.setResult(EntityUtils.toString(httpResonse.getEntity())); + } catch (Exception e) { + e.printStackTrace(); + } + + finally { + try { + httpClient.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + return result; + } + + /** + * + * @param method + * @param ip + * @param port + * @param url + * @param body + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public static RestResponse executeHttpStartIntance(HttpMethod method, String ip, Integer port, + String url, ActivitiStartProcessRequest object) throws ClientProtocolException, IOException { + String returnValue = ""; + RestResponse result = new RestResponse(); + CloseableHttpClient httpClient = HttpClients.createDefault(); + ResponseHandler responseHandler = new BasicResponseHandler(); + try { + httpClient = HttpClients.createDefault(); + if (ip == null) { + ip = Config.getWorkflowAppConfig().getMsbClientConfig().getMsbSvrIp(); + } + port = Config.getWorkflowAppConfig().getMsbClientConfig().getMsbSvrPort(); + + HttpPost httpPost = new HttpPost(Constants.HTTP_HEADER + ip + ":" + port + url); + Gson gson = new Gson(); + String jsonStr = gson.toJson(object, ActivitiStartProcessRequest.class); + StringEntity requestEntity = new StringEntity(jsonStr, "utf-8"); + requestEntity.setContentEncoding("UTF-8"); + httpPost.setHeader("Content-type", "application/json"); + httpPost.setHeader(Constants.AUTHORIZATION, ToolUtil.getHeader()); + httpPost.setEntity(requestEntity); + returnValue = httpClient.execute(httpPost, responseHandler); // 调接口获取返回值时,必须用此方法 + CloseableHttpResponse httpResonse = httpClient.execute(httpPost); + int statusCode = httpResonse.getStatusLine().getStatusCode(); + returnValue = EntityUtils.toString(httpResonse.getEntity(),"UTF-8"); + result.setStatusCode(statusCode); + result.setResult(returnValue); + } catch (Exception e) { + e.printStackTrace(); + } + + finally { + try { + httpClient.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + return result; + } + + /** + * + * @param ip + * @param port + * @param url + * @param requestBody + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public static RestResponse post(String ip, Integer port, String url, + ActivitiStartProcessRequest requestBody) throws ClientProtocolException, IOException { + return executeHttpStartIntance(HttpMethod.POST, ip, port, url, requestBody); + } + + /** + * + * @param ip + * @param port + * @param url + * @param requestBody + * @return + * @throws ClientProtocolException + * @throws IOException + */ + public static RestResponse post(String ip, Integer port, String url) + throws ClientProtocolException, IOException { + return executeHttpDeleteDeploy(HttpMethod.DELETE, ip, port, url); + } + +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/common/RestClientUtils.java b/wfenginemgrservice/src/main/java/org/onap/workflow/common/RestClientUtils.java new file mode 100644 index 0000000..d90077c --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/common/RestClientUtils.java @@ -0,0 +1,42 @@ +/** + * 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.common; + +import java.io.InputStream; + +import org.apache.http.HttpEntity; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.mime.MultipartEntityBuilder; + +/** + * + * @author 10090474 + * + */ +public class RestClientUtils { + /** + * + * @param ins + * @param fileName + * @return + */ + public static HttpEntity buildMultipartRequest(InputStream ins, String fileName) { + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + builder.seContentType(ContentType.MULTIPART_FORM_DATA); + builder.addBinaryBody("file", ins, ContentType.APPLICATION_OCTET_STREAM, fileName); + return builder.build(); + } +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/common/RestResponse.java b/wfenginemgrservice/src/main/java/org/onap/workflow/common/RestResponse.java new file mode 100644 index 0000000..21467bf --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/common/RestResponse.java @@ -0,0 +1,37 @@ +/** + * 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.common; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) +public class RestResponse { + private int statusCode; + private String result; + + @Override + public String toString() { + return "RestResponse [statusCode=" + statusCode + ", result=" + result + "]"; + } + +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/common/ToolUtil.java b/wfenginemgrservice/src/main/java/org/onap/workflow/common/ToolUtil.java new file mode 100644 index 0000000..c148eb3 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/common/ToolUtil.java @@ -0,0 +1,67 @@ +/** + * Copyright (C) 2017 ZTE, Inc. and others. All rights reserved. (ZTE) + * + * 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.common; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.Charset; + +import org.apache.commons.codec.binary.Base64; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + + +public class ToolUtil { + private static final Logger logger = LoggerFactory.getLogger(ToolUtil.class); + + /** + * 构造Basic Auth认证头信息 + * + * @return + */ + public static String getHeader() { + String auth = "kermit" + ":" +"kermit"; + byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("US-ASCII"))); + String authHeader = "Basic " + new String(encodedAuth); + return authHeader; + } + + public static boolean isEmptyString(String val) { + return ((val == null || "".equals(val)) ? true : false); + } + + public static boolean isTrimedEmptyString(String val) { + return ((val == null || "".equals(val.trim())) ? true : false); + } + + public static boolean isTrimedEmptyArray(String[] val) { + return ((val == null || val.length == 0) ? true : false); + } + + /** + * @param ins + */ + public static void closeInputStream(InputStream ins) { + if (ins != null) { + try { + ins.close(); + } catch (IOException e) { + logger.info("Close InputStream failed.", e); + } + } + } +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/common/package-info.java b/wfenginemgrservice/src/main/java/org/onap/workflow/common/package-info.java new file mode 100644 index 0000000..e47fcb8 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/common/package-info.java @@ -0,0 +1,16 @@ +/** + * Copyright 2017 [ZTE] and others. + * + * 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.common; \ No newline at end of file diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/entity/DeployBpmnFileResponse.java b/wfenginemgrservice/src/main/java/org/onap/workflow/entity/DeployBpmnFileResponse.java new file mode 100644 index 0000000..6a1920e --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/entity/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.entity; + +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/wfenginemgrservice/src/main/java/org/onap/workflow/entity/MsbClientConfig.java b/wfenginemgrservice/src/main/java/org/onap/workflow/entity/MsbClientConfig.java new file mode 100644 index 0000000..e73c4f2 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/entity/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.entity; + +import lombok.Data; + +@Data +public class MsbClientConfig { + + private String msbSvrIp; + private Integer msbSvrPort; +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/entity/StartProcessRequest.java b/wfenginemgrservice/src/main/java/org/onap/workflow/entity/StartProcessRequest.java new file mode 100644 index 0000000..cddaa09 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/entity/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.entity; + +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 processDefinitionKey; + private Map params; +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiDeployResponse.java b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiDeployResponse.java new file mode 100644 index 0000000..5ad3d12 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiDeployResponse.java @@ -0,0 +1,25 @@ +/** + * 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.externalservice.entity.activitientitiy; + +import lombok.Data; + +@Data +public class ActivitiDeployResponse { + private String id; + private String deploymentTime; + private String url; +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiStartProcessRequest.java b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiStartProcessRequest.java new file mode 100644 index 0000000..ae7edf1 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiStartProcessRequest.java @@ -0,0 +1,25 @@ +/** + * 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.externalservice.entity.activitientitiy; + +import lombok.Data; + +@Data +public class ActivitiStartProcessRequest { + private String processDefinitionKey; + private ActivitiStartProcessRequestParam[] variables; +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiStartProcessRequestParam.java b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiStartProcessRequestParam.java new file mode 100644 index 0000000..35dc487 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/ActivitiStartProcessRequestParam.java @@ -0,0 +1,27 @@ +/** + * Copyright 2017 [ZTE] and others. + * + * 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.externalservice.entity.activitientitiy; + +import lombok.Data; + +/** + * + */ +@Data +public class ActivitiStartProcessRequestParam { + private String name; + private String value; +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/package-info.java b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/package-info.java new file mode 100644 index 0000000..102c36f --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/entity/activitientitiy/package-info.java @@ -0,0 +1,19 @@ +/** + * Copyright 2017 [ZTE] and others. + * + * 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.externalservice.entity.activitientitiy; \ No newline at end of file diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/ActivitiServiceConsumer.java b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/ActivitiServiceConsumer.java new file mode 100644 index 0000000..017cf35 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/ActivitiServiceConsumer.java @@ -0,0 +1,142 @@ +/** + * 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.externalservice.service.activitiservice; + +import java.io.IOException; +import java.io.InputStream; + +import javax.ws.rs.core.Response; + +import org.apache.http.client.ClientProtocolException; +import org.glassfish.jersey.client.ClientConfig; +import org.onap.workflow.common.Config; +import org.onap.workflow.common.EnumModuleUrl; +import org.onap.workflow.common.RestClient; +import org.onap.workflow.common.RestClientUtils; +import org.onap.workflow.common.RestResponse; +import org.onap.workflow.common.ToolUtil; +import org.onap.workflow.externalservice.entity.activitientitiy.ActivitiDeployResponse; +import org.onap.workflow.externalservice.entity.activitientitiy.ActivitiStartProcessRequest; +import org.onap.workflow.tools.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.eclipsesource.jaxrs.consumer.ConsumerFactory; +import com.google.gson.Gson; + +/** + * + * @author 10090474 + * + */ +public class ActivitiServiceConsumer { + private static final Logger logger = LoggerFactory.getLogger(ActivitiServiceConsumer.class); + private static final String DEPLOY_BPMNFILE_URL = + EnumModuleUrl.ACTIVITI.getApiRootDomain() + "/repository/deployments"; + + private static IActivitiRestService activitiServiceProxy = null; + + private static IActivitiRestService getActivitiService() { + if (activitiServiceProxy == null) { + ClientConfig config = new ClientConfig(); + activitiServiceProxy = ConsumerFactory.createConsumer( + EnumModuleUrl.getBaseUrl(EnumModuleUrl.ACTIVITI), config, IActivitiRestService.class); + + } + return activitiServiceProxy; + } + + public static RestResponse undeploybpmnfile(String deploymentId) { + /* + * IActivitiRestService activitiProxy = getActivitiService(); + * activitiProxy.undeployBpmnFile(deploymentId); + */ + RestResponse res = deleteDeployProcess(deploymentId); + // activitiProxy.startProcess(request); + + return res; + } + + public static RestResponse startBpmnProcess(ActivitiStartProcessRequest request) { + // IActivitiRestService activitiProxy = getActivitiService(); + // startProcess( request); + // activitiProxy.startProcess(request); + return startProcess(request); + } + + public static RestResponse deleteDeployProcess(String deploymentId) { + // TODO Auto-generated method stub + RestResponse res = null; + try { + res = RestClient.post(null, null, Constants.DEPLOY_BPMNFILE_URL + "/" + deploymentId); + } catch (ClientProtocolException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return res; + } + + public static RestResponse startProcess(ActivitiStartProcessRequest request) { + // TODO Auto-generated method stub + RestResponse res = null; + try { + res = RestClient.post(null, null, Constants.ACITIVI_START_INSTANCE_URL, request); + } catch (ClientProtocolException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // if (Response.Status.OK.getStatusCode() == res.getStatusCode() + // || Response.Status.CREATED.getStatusCode() == res.getStatusCode()) { + // Response response = new Gson().fromJson(res.getResult(), Response.class); + // return response; + // } + return res; + } + + public static ActivitiDeployResponse deploybpmnfile(InputStream ins, String filename) + throws ClientProtocolException, IOException { + try { + return deployPackage2Activiti(ins, filename); + } finally { + ToolUtil.closeInputStream(ins); + } + } + + private static ActivitiDeployResponse deployPackage2Activiti(InputStream ins, String filename) + throws ClientProtocolException, IOException { + String ip = Config.getWorkflowAppConfig().getMsbClientConfig().getMsbSvrIp(); + int port = Config.getWorkflowAppConfig().getMsbClientConfig().getMsbSvrPort(); + RestResponse res = RestClient.post(ip, port, DEPLOY_BPMNFILE_URL, + RestClientUtils.buildMultipartRequest(ins, filename)); + logger.info("deployfile to activiti return. {}", res); + + if (Response.Status.OK.getStatusCode() == res.getStatusCode() + || Response.Status.CREATED.getStatusCode() == res.getStatusCode()) { + ActivitiDeployResponse response = + new Gson().fromJson(res.getResult(), ActivitiDeployResponse.class); + return response; + } + return null; + } +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/IActivitiRestService.java b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/IActivitiRestService.java new file mode 100644 index 0000000..b2a8366 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/IActivitiRestService.java @@ -0,0 +1,44 @@ +/** + * 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.externalservice.service.activitiservice; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.onap.workflow.externalservice.entity.activitientitiy.ActivitiStartProcessRequest; + +@Path("/") +public interface IActivitiRestService { + @Path("/repository/deployments/{deploymentId}") + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + Response undeployBpmnFile(@PathParam("deploymentId") String deploymentId); + + + @Path("/runtime/process-instances") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + Response startProcess(ActivitiStartProcessRequest request); +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/package-info.java b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/package-info.java new file mode 100644 index 0000000..a32e966 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/externalservice/service/activitiservice/package-info.java @@ -0,0 +1,17 @@ +/** + * Copyright 2017 [ZTE] and others. + * + * 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.externalservice.service.activitiservice; \ No newline at end of file diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/resources/WorkflowResource.java b/wfenginemgrservice/src/main/java/org/onap/workflow/resources/WorkflowResource.java new file mode 100644 index 0000000..5450d75 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/resources/WorkflowResource.java @@ -0,0 +1,101 @@ +/** + * 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.resources; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; + +import java.io.InputStream; + +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import org.eclipse.jetty.http.HttpStatus; +import org.glassfish.jersey.media.multipart.FormDataContentDisposition; +import org.glassfish.jersey.media.multipart.FormDataParam; +import org.jvnet.hk2.annotations.Service; +import org.onap.workflow.common.RestResponse; +import org.onap.workflow.entity.DeployBpmnFileResponse; +import org.onap.workflow.entity.StartProcessRequest; +import org.onap.workflow.wrapper.WorkflowInstanceWrapper; + +@Path("/") +@Api(tags = {"Workflow Resource"}) +@Produces(MediaType.APPLICATION_JSON) +@Service +public class WorkflowResource { + @POST + @Path("/package") + @Consumes({"multipart/form-data"}) + @Produces({"application/json"}) + @ApiOperation(value = "deploy bpmn file") + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = DeployBpmnFileResponse.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "error")}) + public Response deployBpmnFile( + @ApiParam(value = "file inputstream", + required = true) @FormDataParam("file") InputStream fileInputStream, + @ApiParam(value = "file detail", + required = false) @FormDataParam("file") FormDataContentDisposition fileDetail) { + return WorkflowInstanceWrapper.getInstance().deployBpmnFile(fileDetail.getFileName(), + fileInputStream, null); + } + + @Path("/package/{deployId}") + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @ApiOperation(value = "undeploy bpmn file") + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = DeployBpmnFileResponse.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "error")}) + public RestResponse undeployBpmnFile( + @ApiParam("deployId") @PathParam("deployId") String deployId) { + return WorkflowInstanceWrapper.getInstance().undeployBpmnFile(deployId); + } + + @Path("process/instance") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @ApiOperation(value = "package process") + @ApiResponses(value = { + @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found", + response = DeployBpmnFileResponse.class), + @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415, + message = "Unprocessable MicroServiceInfo Entity ", response = String.class), + @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "error")}) + public Response startProcess( + @ApiParam(value = "request", required = false) StartProcessRequest request) { + return WorkflowInstanceWrapper.getInstance().startProcess(request); + } +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/tools/Constants.java b/wfenginemgrservice/src/main/java/org/onap/workflow/tools/Constants.java new file mode 100644 index 0000000..15aac35 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/tools/Constants.java @@ -0,0 +1,29 @@ +/** + * 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.tools; + +import org.onap.workflow.common.EnumModuleUrl; + +public class Constants { + public final static String AUTHORIZATION ="Authorization"; + public final static String HTTP_HEADER ="http://"; + public final static String HTTP ="HTTP"; + public final static String COLON =":"; + public static final String ACITIVI_START_INSTANCE_URL = + EnumModuleUrl.ACTIVITI.getApiRootDomain() + "/runtime/process-instances"; + public static final String DEPLOY_BPMNFILE_URL = EnumModuleUrl.ACTIVITI.getApiRootDomain() + "/repository/deployments"; +} diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/tools/HttpDeleteWithBody.java b/wfenginemgrservice/src/main/java/org/onap/workflow/tools/HttpDeleteWithBody.java new file mode 100644 index 0000000..8fcc7a0 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/tools/HttpDeleteWithBody.java @@ -0,0 +1,37 @@ +/** + * 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.tools; + +import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; +import java.net.URI; +import org.apache.http.annotation.NotThreadSafe; + +@NotThreadSafe +public class HttpDeleteWithBody extends HttpEntityEnclosingRequestBase { + public static final String METHOD_NAME = "DELETE"; + public String getMethod() { return METHOD_NAME; } + + public HttpDeleteWithBody(final String uri) { + super(); + setURI(URI.create(uri)); + } + public HttpDeleteWithBody(final URI uri) { + super(); + setURI(uri); + } + public HttpDeleteWithBody() { super(); } +} \ No newline at end of file diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/tools/RequestParameters.java b/wfenginemgrservice/src/main/java/org/onap/workflow/tools/RequestParameters.java new file mode 100644 index 0000000..b8e76d8 --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/tools/RequestParameters.java @@ -0,0 +1,35 @@ +/** + * 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.tools; + +import lombok.Data; + +/** + * @author 10175158 + * + */ +@Data +public class RequestParameters { + + protected boolean casCade; + @Override + public String toString() { + return "casCade [casCade=" + casCade + "]"; + } +} + + diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/tools/package-info.java b/wfenginemgrservice/src/main/java/org/onap/workflow/tools/package-info.java new file mode 100644 index 0000000..afd5cfc --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/tools/package-info.java @@ -0,0 +1,17 @@ +/** + * 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.tools; diff --git a/wfenginemgrservice/src/main/java/org/onap/workflow/wrapper/WorkflowInstanceWrapper.java b/wfenginemgrservice/src/main/java/org/onap/workflow/wrapper/WorkflowInstanceWrapper.java new file mode 100644 index 0000000..5bc734d --- /dev/null +++ b/wfenginemgrservice/src/main/java/org/onap/workflow/wrapper/WorkflowInstanceWrapper.java @@ -0,0 +1,98 @@ +/** + * 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.wrapper; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.core.Response; + +import org.glassfish.jersey.media.multipart.FormDataContentDisposition; +import org.onap.workflow.common.EnumStatus; +import org.onap.workflow.common.RestResponse; +import org.onap.workflow.entity.DeployBpmnFileResponse; +import org.onap.workflow.entity.StartProcessRequest; +import org.onap.workflow.externalservice.entity.activitientitiy.ActivitiDeployResponse; +import org.onap.workflow.externalservice.entity.activitientitiy.ActivitiStartProcessRequest; +import org.onap.workflow.externalservice.entity.activitientitiy.ActivitiStartProcessRequestParam; +import org.onap.workflow.externalservice.service.activitiservice.ActivitiServiceConsumer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class WorkflowInstanceWrapper { + private static final Logger logger = LoggerFactory.getLogger(WorkflowInstanceWrapper.class); + + private static WorkflowInstanceWrapper wrapper = new WorkflowInstanceWrapper(); + + public static WorkflowInstanceWrapper getInstance() { + return wrapper; + } + + public Response deployBpmnFile(String filename, InputStream fileInputStream, + FormDataContentDisposition fileDetail) { + try { + ActivitiDeployResponse deployresult = + ActivitiServiceConsumer.deploybpmnfile(fileInputStream, filename); + if (deployresult != null) { + DeployBpmnFileResponse result = new DeployBpmnFileResponse(); + result.setStatus(EnumStatus.SUCCESS.ordinal()); + result.setMessage(EnumStatus.SUCCESS.toString()); + result.setDeployedId(deployresult.getId()); + result.setProcessId(filename); + return Response.ok(result).build(); + } + } catch (Exception e) { + logger.error("deployBpmnFile fail.", e); + } + return Response.serverError().build(); + } + + public RestResponse undeployBpmnFile(String deployId) { + return ActivitiServiceConsumer.undeploybpmnfile(deployId); + } + + public Response startProcess(StartProcessRequest request) { + try { + ActivitiStartProcessRequest bpmnrequest = new ActivitiStartProcessRequest(); + bpmnrequest.setProcessDefinitionKey(request.getProcessDefinitionKey()); + if (request.getParams() != null) { + List paramlist = convertProcessRequest(request); + bpmnrequest.setVariables(paramlist.toArray(new ActivitiStartProcessRequestParam[0])); + } + RestResponse result = ActivitiServiceConsumer.startBpmnProcess(bpmnrequest); + return Response.ok(result.getResult()).build(); + } catch (Exception e) { + logger.error("startProcess fail.", e); + } + return Response.serverError().build(); + } + + private List convertProcessRequest( + StartProcessRequest request) { + List paramlist = + new ArrayList(); + while (request.getParams().keySet().iterator().hasNext()) { + String key = request.getParams().keySet().iterator().next(); + ActivitiStartProcessRequestParam param = new ActivitiStartProcessRequestParam(); + param.setName(key); + param.setValue(request.getParams().get(key)); + paramlist.add(param); + } + return paramlist; + } +} -- cgit 1.2.3-korg