Add activity spec code
[sdc/sdc-workflow-designer.git] / workflow-designer-be / src / main / java / org / onap / sdc / workflow / api / ActivitySpecController.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.onap.sdc.workflow.api;
18
19 import static org.onap.sdc.workflow.api.RestParams.USER_ID_HEADER;
20 import static org.onap.sdc.workflow.services.ActivitySpecConstant.VERSION_ID_DEFAULT_VALUE;
21
22 import io.swagger.annotations.Api;
23 import io.swagger.annotations.ApiImplicitParam;
24 import io.swagger.annotations.ApiOperation;
25 import io.swagger.annotations.ApiParam;
26 import java.util.Objects;
27 import java.util.stream.Collectors;
28 import javax.validation.Valid;
29 import org.onap.sdc.workflow.api.mappers.ActivitySpecDtoMapper;
30 import org.onap.sdc.workflow.api.types.CollectionResponse;
31 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecActionRequest;
32 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecCreateResponse;
33 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecDataResponse;
34 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecRequest;
35 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecResponse;
36 import org.onap.sdc.workflow.persistence.types.ActivitySpecEntity;
37 import org.onap.sdc.workflow.services.ActivitySpecManager;
38 import org.openecomp.sdc.versioning.dao.types.Version;
39 import org.springframework.beans.factory.annotation.Autowired;
40 import org.springframework.beans.factory.annotation.Qualifier;
41 import org.springframework.http.HttpStatus;
42 import org.springframework.http.ResponseEntity;
43 import org.springframework.validation.annotation.Validated;
44 import org.springframework.web.bind.annotation.GetMapping;
45 import org.springframework.web.bind.annotation.PathVariable;
46 import org.springframework.web.bind.annotation.PostMapping;
47 import org.springframework.web.bind.annotation.PutMapping;
48 import org.springframework.web.bind.annotation.RequestBody;
49 import org.springframework.web.bind.annotation.RequestMapping;
50 import org.springframework.web.bind.annotation.RequestParam;
51 import org.springframework.web.bind.annotation.RestController;
52
53 @RequestMapping(value = "/v1.0/activity-spec")
54 @Api("Activity Specs")
55 @RestController("activitySpecController")
56 @Validated
57 public class ActivitySpecController {
58
59     private final ActivitySpecManager activitySpecManager;
60     private final ActivitySpecDtoMapper activitySpecDtoMapper;
61
62     @Autowired
63     public ActivitySpecController(@Qualifier("activitySpecManager") ActivitySpecManager activitySpecManager,
64             ActivitySpecDtoMapper activitySpecDtoMapper) {
65         this.activitySpecManager = activitySpecManager;
66         this.activitySpecDtoMapper = activitySpecDtoMapper;
67     }
68
69     @GetMapping
70     @ApiOperation(value = "List activity specs", responseContainer = "List")
71     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
72     public CollectionResponse<ActivitySpecResponse> list(@ApiParam(value = "List activity specs based on status filter",
73             allowableValues = "Draft,Certified,Deprecated,Deleted") @RequestParam(name = "status", required = false)
74                                                                  String versionStatus) {
75         return new CollectionResponse<>(
76                 activitySpecManager.list(versionStatus).stream().map(activitySpecDtoMapper::toActivitySpecResponse)
77                         .collect(Collectors.toList()));
78     }
79
80     @PostMapping
81     @ApiOperation(value = "Create Activity Spec")
82     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
83     public ResponseEntity<ActivitySpecCreateResponse> create(@Valid @RequestBody ActivitySpecRequest request) {
84         ActivitySpecEntity activitySpec =
85                 activitySpecManager.createActivitySpec(activitySpecDtoMapper.fromActivitySpecRequest(request));
86         return new ResponseEntity<>(new ActivitySpecCreateResponse(activitySpec.getId(),
87                 Objects.nonNull(activitySpec.getVersion()) ? activitySpec.getVersion().getId() : null),
88                 HttpStatus.CREATED);
89     }
90
91     @GetMapping("/{id}/versions/{versionId}")
92     @ApiOperation(value = "Get Activity Spec")
93     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
94     public ActivitySpecDataResponse get(@ApiParam(value = "Activity Spec Id") @PathVariable("id") String activitySpecId,
95             @ApiParam(value = "Version Id", defaultValue = VERSION_ID_DEFAULT_VALUE) @PathVariable("versionId")
96                     String versionId) {
97         return activitySpecDtoMapper.toActivitySpecDataResponse(
98                 activitySpecManager.get(new ActivitySpecEntity(activitySpecId, new Version(versionId))));
99     }
100
101     @PutMapping("/{id}/versions/{versionId}")
102     @ApiOperation(value = "Update Activity Spec")
103     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
104     public void update(@Valid @RequestBody ActivitySpecRequest request,
105             @ApiParam(value = "Activity Spec Id") @PathVariable("id") String activitySpecId,
106             @ApiParam(value = "Version Id", defaultValue = VERSION_ID_DEFAULT_VALUE) @PathVariable("versionId")
107                     String versionId) {
108         ActivitySpecEntity activitySpec = activitySpecDtoMapper.fromActivitySpecRequest(request);
109         activitySpec.setId(activitySpecId);
110         activitySpec.setVersion(new Version(versionId));
111
112         activitySpecManager.update(activitySpec);
113     }
114
115     @PutMapping("/{id}/versions/{versionId}/actions")
116     @ApiOperation(value = "Actions on a activity spec",
117             notes = "Performs one of the following actions on a activity spec: |" + "CERTIFY: Certifies activity spec.|"
118                             + "DEPRECATE: Deprecates activity spec.|" + "DELETE: Deletes activity spec.")
119     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
120     public void actOn(@Valid @RequestBody ActivitySpecActionRequest request,
121             @ApiParam(value = "Activity Spec Id") @PathVariable("id") String activitySpecId,
122             @ApiParam(value = "Version Id", defaultValue = VERSION_ID_DEFAULT_VALUE) @PathVariable("versionId")
123                     String versionId) {
124         activitySpecManager
125                 .actOnAction(new ActivitySpecEntity(activitySpecId, new Version(versionId)), request.getAction());
126     }
127 }