2 * Copyright (c) 2017-2018 ZTE Corporation.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the Apache License, Version 2.0
5 * and the Eclipse Public License v1.0 which both accompany this distribution,
6 * and are available at http://www.eclipse.org/legal/epl-v10.html
7 * and http://www.apache.org/licenses/LICENSE-2.0
10 * ZTE - initial API and implementation and/or initial documentation
13 package org.onap.sdc.workflowdesigner.resources;
15 import java.io.IOException;
16 import java.util.HashMap;
19 import javax.ws.rs.Consumes;
20 import javax.ws.rs.GET;
21 import javax.ws.rs.Path;
22 import javax.ws.rs.Produces;
23 import javax.ws.rs.QueryParam;
24 import javax.ws.rs.core.MediaType;
25 import javax.ws.rs.core.Response;
27 import org.eclipse.jetty.http.HttpStatus;
28 import org.onap.sdc.workflowdesigner.common.SDCProxyException;
29 import org.onap.sdc.workflowdesigner.config.AppConfig;
30 import org.onap.sdc.workflowdesigner.externalservice.sdc.ActivitySpecServiceProxy;
31 import org.onap.sdc.workflowdesigner.externalservice.sdc.entity.ActivitySpec;
32 import org.onap.sdc.workflowdesigner.externalservice.sdc.entity.Parameter;
33 import org.onap.sdc.workflowdesigner.resources.entity.ExtActivityDisplayInfo;
34 import org.onap.sdc.workflowdesigner.resources.entity.I18nString;
35 import org.onap.sdc.workflowdesigner.resources.entity.InputOutput;
36 import org.onap.sdc.workflowdesigner.resources.entity.NodeCategory;
37 import org.onap.sdc.workflowdesigner.resources.entity.CategoryData;
38 import org.onap.sdc.workflowdesigner.resources.entity.Content;
39 import org.onap.sdc.workflowdesigner.resources.entity.ExtActivity;
40 import org.onap.sdc.workflowdesigner.utils.FileCommonUtils;
41 import org.onap.sdc.workflowdesigner.utils.JsonUtils;
42 import org.onap.sdc.workflowdesigner.utils.RestUtils;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
46 import com.codahale.metrics.annotation.Timed;
48 import io.swagger.annotations.Api;
49 import io.swagger.annotations.ApiOperation;
50 import io.swagger.annotations.ApiParam;
51 import io.swagger.annotations.ApiResponse;
52 import io.swagger.annotations.ApiResponses;
55 * Extend Activity Resource.
58 @Path("/ext-activities")
59 @Api(tags = {"Workflow Modeler"})
60 public class ExtendActivityResource {
61 private static final Logger LOGGER = LoggerFactory.getLogger(ExtendActivityResource.class);
64 private static final String EXT_ACTIVITIES_DISPLAY_INFO_FILE_NAME =
65 "ext-activities-display-info.json";
67 private static final String EXT_ACTIVITIES_FILE_NAME = "ext-activities.json";
69 private static final CategoryData EXTENSION_TASK_CATEGORY =
70 new CategoryData(new I18nString("Extension Task", "Extension Task"));
72 private static final String EXTENSION_TASK_CATEGORY_CATEGORY_ID = "extension_task_category_id";
81 @Consumes(MediaType.APPLICATION_JSON)
82 @Produces(MediaType.APPLICATION_JSON)
83 @ApiOperation(value = "Get Extend Activities.", response = ExtActivity.class,
84 responseContainer = "List")
85 @ApiResponses(value = {
86 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
87 response = String.class),
88 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
89 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
90 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
91 response = String.class)})
93 public Response getExtActivities(@ApiParam(value = "sence") @QueryParam("sence") String sence) {
94 if (AppConfig.isSDCAdapter()) {
95 return getExtActivitiesfromSDC();
97 return getExtActivitiesfromLocal();
104 private Response getExtActivitiesfromLocal() {
106 String json = FileCommonUtils.readString(EXT_ACTIVITIES_FILE_NAME);
107 ExtActivity[] extActivities = JsonUtils.fromJson(json, ExtActivity[].class);
108 return Response.status(Response.Status.OK).entity(extActivities).build();
109 } catch (IOException e) {
110 LOGGER.error("Get ExtActivities from local failed.", e);
111 throw RestUtils.newInternalServerErrorException(e);
118 private Response getExtActivitiesfromSDC() {
120 ActivitySpecServiceProxy proxy = new ActivitySpecServiceProxy();
121 ActivitySpec[] activitySpecs = proxy.getActivitySpecs();
122 ExtActivity[] extActivities = convert2ExtActivities(activitySpecs);
123 return Response.status(Response.Status.OK).entity(extActivities).build();
124 } catch (SDCProxyException e) {
125 LOGGER.error("Get ExtActivities from sdc failed.", e);
126 throw RestUtils.newInternalServerErrorException(e);
131 * @param activitySpecs
134 private ExtActivity[] convert2ExtActivities(ActivitySpec[] activitySpecs) {
135 ExtActivity[] extendActivities = new ExtActivity[activitySpecs.length];
136 for (int i = 0; i < activitySpecs.length; i++) {
137 extendActivities[i] = convert2ExtActivity(activitySpecs[i]);
139 return extendActivities;
143 * @param activitySpec
146 private ExtActivity convert2ExtActivity(ActivitySpec activitySpec) {
147 ExtActivity extActivity = new ExtActivity();
148 extActivity.setId(activitySpec.getId());
149 extActivity.setDisplayName(new I18nString(activitySpec.getName(), activitySpec.getName()));
150 extActivity.setDescription(
151 new I18nString(activitySpec.getDescription(), activitySpec.getDescription()));
152 extActivity.setType(activitySpec.getType());
153 extActivity.setContent(buildContent(activitySpec));
158 * @param activitySpec
161 private Content buildContent(ActivitySpec activitySpec) {
162 Content content = new Content();
163 content.setClass(activitySpec.getContent().getClazz());
164 content.setScript(activitySpec.getContent().getScript());
165 content.setScriptFormat(activitySpec.getContent().getScriptFormat());
166 content.setInputs(convert2InputOutputs(activitySpec.getInputs()));
167 content.setOutputs(convert2InputOutputs(activitySpec.getOutputs()));
175 private Map<String, InputOutput> convert2InputOutputs(Parameter[] parameters) {
176 Map<String, InputOutput> inputOutputs = new HashMap<>();
177 for (Parameter parameter : parameters) {
178 inputOutputs.put(parameter.getName(), convert2InputOutput(parameter));
187 private InputOutput convert2InputOutput(Parameter parameter) {
188 InputOutput inputOutput = new InputOutput();
189 inputOutput.setDisplayName(new I18nString(parameter.getName(), parameter.getName()));
190 inputOutput.setType(parameter.getType());
191 inputOutput.setDefault(parameter.getDefault());
192 inputOutput.setValue(parameter.getValue());
197 @Path("/displayInfo")
199 @Consumes(MediaType.APPLICATION_JSON)
200 @Produces(MediaType.APPLICATION_JSON)
201 @ApiOperation(value = "Get Extend Activities DisplayInfo",
202 response = ExtActivityDisplayInfo.class)
203 @ApiResponses(value = {
204 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
205 response = String.class),
206 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
207 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
208 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
209 response = String.class)})
211 public Response getDisplayInfo(@ApiParam(value = "sence") @QueryParam("sence") String sence) {
212 if (AppConfig.isSDCAdapter()) {
213 return getDisplayInfofromSDC();
215 return getDisplayInfofromLocal(sence);
223 private Response getDisplayInfofromLocal(String sence) {
225 ExtActivityDisplayInfo displayInfo = retriveDisplayInfo(sence);
226 return Response.status(Response.Status.OK).entity(displayInfo).build();
227 } catch (IOException e) {
228 LOGGER.error("Get Extend Activities DisplayInfo from failed.", e);
229 throw RestUtils.newInternalServerErrorException(e);
236 private Response getDisplayInfofromSDC() {
238 ActivitySpecServiceProxy proxy = new ActivitySpecServiceProxy();
239 ActivitySpec[] activitySpecs = proxy.getActivitySpecs();
240 ExtActivityDisplayInfo displayInfo = convert2ExtActivityDisplayInfo(activitySpecs);
241 return Response.status(Response.Status.OK).entity(displayInfo).build();
242 } catch (SDCProxyException e) {
243 LOGGER.error("Get Extend Activities DisplayInfo from sdc failed.", e);
244 throw RestUtils.newInternalServerErrorException(e);
249 * @param activitySpecs
252 private ExtActivityDisplayInfo convert2ExtActivityDisplayInfo(ActivitySpec[] activitySpecs) {
253 ExtActivityDisplayInfo displayInfo = new ExtActivityDisplayInfo();
255 for (ActivitySpec activitySpec : activitySpecs) {
256 displayInfo.getNodes().put(activitySpec.getId(), buildNodeCategory(activitySpec));
259 displayInfo.getCategoryData().put(EXTENSION_TASK_CATEGORY_CATEGORY_ID, EXTENSION_TASK_CATEGORY);
265 * @param activitySpec
268 private NodeCategory buildNodeCategory(ActivitySpec activitySpec) {
269 NodeCategory nodeCategory = new NodeCategory();
270 nodeCategory.setCategory(EXTENSION_TASK_CATEGORY_CATEGORY_ID);
278 * @throws IOException
280 private ExtActivityDisplayInfo retriveDisplayInfo(String sence) throws IOException {
281 String json = FileCommonUtils.readString(EXT_ACTIVITIES_DISPLAY_INFO_FILE_NAME);
282 return JsonUtils.fromJson(json, ExtActivityDisplayInfo.class);