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.ActivitySpecProxyException;
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 (ActivitySpecProxyException 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.setScript(activitySpec.getContent());
164 content.setInputs(convert2InputOutputs(activitySpec.getInputs()));
165 content.setOutputs(convert2InputOutputs(activitySpec.getOutputs()));
173 private Map<String, InputOutput> convert2InputOutputs(Parameter[] parameters) {
174 Map<String, InputOutput> inputOutputs = new HashMap<>();
175 for (Parameter parameter : parameters) {
176 inputOutputs.put(parameter.getName(), convert2InputOutput(parameter));
185 private InputOutput convert2InputOutput(Parameter parameter) {
186 InputOutput inputOutput = new InputOutput();
187 inputOutput.setDisplayName(new I18nString(parameter.getName(), parameter.getName()));
188 inputOutput.setType(parameter.getType());
189 inputOutput.setDefault(parameter.getDefault());
190 inputOutput.setValue(parameter.getValue());
195 @Path("/displayInfo")
197 @Consumes(MediaType.APPLICATION_JSON)
198 @Produces(MediaType.APPLICATION_JSON)
199 @ApiOperation(value = "Get Extend Activities DisplayInfo",
200 response = ExtActivityDisplayInfo.class)
201 @ApiResponses(value = {
202 @ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "microservice not found",
203 response = String.class),
204 @ApiResponse(code = HttpStatus.UNSUPPORTED_MEDIA_TYPE_415,
205 message = "Unprocessable MicroServiceInfo Entity ", response = String.class),
206 @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500, message = "server internal error",
207 response = String.class)})
209 public Response getDisplayInfo(@ApiParam(value = "sence") @QueryParam("sence") String sence) {
210 if (AppConfig.isSDCAdapter()) {
211 return getDisplayInfofromSDC();
213 return getDisplayInfofromLocal(sence);
221 private Response getDisplayInfofromLocal(String sence) {
223 ExtActivityDisplayInfo displayInfo = retriveDisplayInfo(sence);
224 return Response.status(Response.Status.OK).entity(displayInfo).build();
225 } catch (IOException e) {
226 LOGGER.error("Get Extend Activities DisplayInfo from failed.", e);
227 throw RestUtils.newInternalServerErrorException(e);
234 private Response getDisplayInfofromSDC() {
236 ActivitySpecServiceProxy proxy = new ActivitySpecServiceProxy();
237 ActivitySpec[] activitySpecs = proxy.getActivitySpecs();
238 ExtActivityDisplayInfo displayInfo = convert2ExtActivityDisplayInfo(activitySpecs);
239 return Response.status(Response.Status.OK).entity(displayInfo).build();
240 } catch (ActivitySpecProxyException e) {
241 LOGGER.error("Get Extend Activities DisplayInfo from sdc failed.", e);
242 throw RestUtils.newInternalServerErrorException(e);
247 * @param activitySpecs
250 private ExtActivityDisplayInfo convert2ExtActivityDisplayInfo(ActivitySpec[] activitySpecs) {
251 ExtActivityDisplayInfo displayInfo = new ExtActivityDisplayInfo();
253 for (ActivitySpec activitySpec : activitySpecs) {
254 displayInfo.getNodes().put(activitySpec.getId(), buildNodeCategory(activitySpec));
257 displayInfo.getCategoryData().put(EXTENSION_TASK_CATEGORY_CATEGORY_ID, EXTENSION_TASK_CATEGORY);
263 * @param activitySpec
266 private NodeCategory buildNodeCategory(ActivitySpec activitySpec) {
267 NodeCategory nodeCategory = new NodeCategory();
268 nodeCategory.setCategory(EXTENSION_TASK_CATEGORY_CATEGORY_ID);
276 * @throws IOException
278 private ExtActivityDisplayInfo retriveDisplayInfo(String sence) throws IOException {
279 String json = FileCommonUtils.readString(EXT_ACTIVITIES_DISPLAY_INFO_FILE_NAME);
280 return JsonUtils.fromJson(json, ExtActivityDisplayInfo.class);