Use versioning, zusammen and session libs from sdc-common-be
[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.stream.Collectors;
27 import javax.validation.Valid;
28 import org.onap.sdc.workflow.api.mappers.ActivitySpecDtoMapper;
29 import org.onap.sdc.workflow.api.types.CollectionResponse;
30 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecActionRequest;
31 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecCreateResponse;
32 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecDataResponse;
33 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecRequest;
34 import org.onap.sdc.workflow.api.types.activityspec.ActivitySpecResponse;
35 import org.onap.sdc.workflow.persistence.types.ActivitySpecEntity;
36 import org.onap.sdc.workflow.services.ActivitySpecManager;
37 import org.springframework.beans.factory.annotation.Autowired;
38 import org.springframework.beans.factory.annotation.Qualifier;
39 import org.springframework.http.HttpStatus;
40 import org.springframework.http.ResponseEntity;
41 import org.springframework.validation.annotation.Validated;
42 import org.springframework.web.bind.annotation.GetMapping;
43 import org.springframework.web.bind.annotation.PathVariable;
44 import org.springframework.web.bind.annotation.PostMapping;
45 import org.springframework.web.bind.annotation.PutMapping;
46 import org.springframework.web.bind.annotation.RequestBody;
47 import org.springframework.web.bind.annotation.RequestMapping;
48 import org.springframework.web.bind.annotation.RequestParam;
49 import org.springframework.web.bind.annotation.RestController;
50
51 @RequestMapping(value = "/v1.0/activity-spec")
52 @Api("Activity Specs")
53 @RestController("activitySpecController")
54 @Validated
55 public class ActivitySpecController {
56
57     private final ActivitySpecManager activitySpecManager;
58     private final ActivitySpecDtoMapper activitySpecDtoMapper;
59
60     @Autowired
61     public ActivitySpecController(@Qualifier("activitySpecManager") ActivitySpecManager activitySpecManager,
62             ActivitySpecDtoMapper activitySpecDtoMapper) {
63         this.activitySpecManager = activitySpecManager;
64         this.activitySpecDtoMapper = activitySpecDtoMapper;
65     }
66
67     @GetMapping
68     @ApiOperation(value = "List activity specs", responseContainer = "List")
69     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
70     public CollectionResponse<ActivitySpecResponse> list(@ApiParam(value = "List activity specs based on status filter",
71             allowableValues = "Draft,Certified,Deprecated,Deleted") @RequestParam(name = "status", required = false)
72                                                                  String versionStatus) {
73         return new CollectionResponse<>(
74                 activitySpecManager.list(versionStatus).stream().map(activitySpecDtoMapper::toActivitySpecResponse)
75                         .collect(Collectors.toList()));
76     }
77
78     @PostMapping
79     @ApiOperation(value = "Create Activity Spec")
80     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
81     public ResponseEntity<ActivitySpecCreateResponse> create(@Valid @RequestBody ActivitySpecRequest request) {
82         ActivitySpecEntity activitySpec =
83                 activitySpecManager.createActivitySpec(activitySpecDtoMapper.fromActivitySpecRequest(request));
84         return new ResponseEntity<>(new ActivitySpecCreateResponse(activitySpec.getId(),activitySpec.getVersionId()),
85                 HttpStatus.CREATED);
86     }
87
88     @GetMapping("/{id}/versions/{versionId}")
89     @ApiOperation(value = "Get Activity Spec")
90     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
91     public ActivitySpecDataResponse get(@ApiParam(value = "Activity Spec Id") @PathVariable("id") String activitySpecId,
92             @ApiParam(value = "Version Id", defaultValue = VERSION_ID_DEFAULT_VALUE) @PathVariable("versionId")
93                     String versionId) {
94         return activitySpecDtoMapper.toActivitySpecDataResponse(
95                 activitySpecManager.get(new ActivitySpecEntity(activitySpecId, versionId)));
96     }
97
98     @PutMapping("/{id}/versions/{versionId}")
99     @ApiOperation(value = "Update Activity Spec")
100     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
101     public void update(@Valid @RequestBody ActivitySpecRequest request,
102             @ApiParam(value = "Activity Spec Id") @PathVariable("id") String activitySpecId,
103             @ApiParam(value = "Version Id", defaultValue = VERSION_ID_DEFAULT_VALUE) @PathVariable("versionId")
104                     String versionId) {
105         ActivitySpecEntity activitySpec = activitySpecDtoMapper.fromActivitySpecRequest(request);
106         activitySpec.setId(activitySpecId);
107         activitySpec.setVersionId(versionId);
108
109         activitySpecManager.update(activitySpec);
110     }
111
112     @PutMapping("/{id}/versions/{versionId}/actions")
113     @ApiOperation(value = "Actions on a activity spec",
114             notes = "Performs one of the following actions on a activity spec: |" + "CERTIFY: Certifies activity spec.|"
115                             + "DEPRECATE: Deprecates activity spec.|" + "DELETE: Deletes activity spec.")
116     @ApiImplicitParam(name = USER_ID_HEADER, required = true, dataType = "string", paramType = "header")
117     public void actOn(@Valid @RequestBody ActivitySpecActionRequest request,
118             @ApiParam(value = "Activity Spec Id") @PathVariable("id") String activitySpecId,
119             @ApiParam(value = "Version Id", defaultValue = VERSION_ID_DEFAULT_VALUE) @PathVariable("versionId")
120                     String versionId) {
121         activitySpecManager
122                 .actOnAction(new ActivitySpecEntity(activitySpecId, versionId), request.getAction());
123     }
124 }