2 * Copyright © 2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.onap.sdc.workflow.api;
19 import static org.onap.sdc.workflow.api.RestParams.LIMIT;
20 import static org.onap.sdc.workflow.api.RestParams.OFFSET;
21 import static org.onap.sdc.workflow.api.RestParams.SORT;
22 import static org.onap.sdc.workflow.api.RestParams.USER_ID_HEADER;
23 import static org.onap.sdc.workflow.services.types.PagingConstants.DEFAULT_LIMIT;
24 import static org.onap.sdc.workflow.services.types.PagingConstants.DEFAULT_OFFSET;
26 import io.swagger.annotations.Api;
27 import io.swagger.annotations.ApiImplicitParam;
28 import io.swagger.annotations.ApiImplicitParams;
29 import io.swagger.annotations.ApiOperation;
30 import io.swagger.annotations.ApiParam;
31 import org.onap.sdc.workflow.api.types.Paging;
32 import org.onap.sdc.workflow.api.types.Sorting;
33 import org.onap.sdc.workflow.api.types.VersionStatesFormatter;
34 import org.onap.sdc.workflow.persistence.types.Workflow;
35 import org.onap.sdc.workflow.services.WorkflowManager;
36 import org.onap.sdc.workflow.services.WorkflowVersionManager;
37 import org.onap.sdc.workflow.services.types.Page;
38 import org.onap.sdc.workflow.services.types.PagingRequest;
39 import org.onap.sdc.workflow.services.types.RequestSpec;
40 import org.onap.sdc.workflow.services.types.SortingRequest;
41 import org.springframework.beans.factory.annotation.Autowired;
42 import org.springframework.beans.factory.annotation.Qualifier;
43 import org.springframework.http.HttpStatus;
44 import org.springframework.http.MediaType;
45 import org.springframework.http.ResponseEntity;
46 import org.springframework.validation.annotation.Validated;
47 import org.springframework.web.bind.annotation.GetMapping;
48 import org.springframework.web.bind.annotation.PathVariable;
49 import org.springframework.web.bind.annotation.PostMapping;
50 import org.springframework.web.bind.annotation.PutMapping;
51 import org.springframework.web.bind.annotation.RequestBody;
52 import org.springframework.web.bind.annotation.RequestHeader;
53 import org.springframework.web.bind.annotation.RequestMapping;
54 import org.springframework.web.bind.annotation.RequestParam;
55 import org.springframework.web.bind.annotation.RestController;
56 import springfox.documentation.annotations.ApiIgnore;
58 @RequestMapping("/workflows")
60 @RestController("workflowController")
61 public class WorkflowController {
62 private final WorkflowManager workflowManager;
63 private final WorkflowVersionManager workflowVersionManager;
66 public WorkflowController(@Qualifier("workflowManager") WorkflowManager workflowManager,
67 @Qualifier("workflowVersionManager") WorkflowVersionManager workflowVersionManager) {
68 this.workflowManager = workflowManager;
69 this.workflowVersionManager = workflowVersionManager;
72 @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
73 @ApiOperation("List workflows")
75 @ApiImplicitParam(name = "versionState", dataType = "string", paramType = "query",
76 allowableValues = "DRAFT,CERTIFIED", value = "Filter by version state"),
77 @ApiImplicitParam(name = OFFSET, dataType = "string", paramType = "query", defaultValue = "0",
78 value = "Index of the starting item"),
79 @ApiImplicitParam(name = LIMIT, dataType = "string", paramType = "query", defaultValue = "200",
80 value = "Number of returned items"),
81 @ApiImplicitParam(name = SORT, dataType = "string", paramType = "query", defaultValue = "name:asc",
82 value = "Sorting criteria in the format: property:(asc|desc). Default sort order is ascending.",
83 allowableValues = "name:asc,name:desc")})
84 public Page<Workflow> list(@ApiIgnore VersionStatesFormatter versionStateFilter,
85 @ApiIgnore Paging paging,
86 @ApiIgnore Sorting sorting,
87 @RequestHeader(USER_ID_HEADER) String user) {
88 return workflowManager.list(versionStateFilter.getVersionStates(), initRequestSpec(paging, sorting));
91 @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
92 @ApiOperation("Create workflow")
93 public ResponseEntity<Workflow> create(@Validated @RequestBody Workflow workflow,
94 @RequestHeader(USER_ID_HEADER) String user) {
95 return new ResponseEntity<>(workflowManager.create(workflow), HttpStatus.CREATED);
98 @GetMapping(path = "/{workflowId}")
99 @ApiOperation("Get workflow")
100 public Workflow get(@PathVariable("workflowId") String workflowId,
101 @ApiParam(value = "Expand workflow data", allowableValues = "versions")
102 @RequestParam(value = "expand", required = false) String expand,
103 @RequestHeader(USER_ID_HEADER) String user) {
104 Workflow workflow = new Workflow();
105 workflow.setId(workflowId);
106 Workflow retrievedWorkflow = workflowManager.get(workflow);
107 if("versions".equals(expand)){
108 retrievedWorkflow.setVersions(workflowVersionManager.list(workflowId,null));
110 return retrievedWorkflow;
113 @PutMapping(path = "/{workflowId}", consumes = MediaType.APPLICATION_JSON_VALUE)
114 @ApiOperation("Update workflow")
115 public Workflow update(@RequestBody Workflow workflow, @PathVariable("workflowId") String workflowId,
116 @RequestHeader(USER_ID_HEADER) String user) {
117 workflow.setId(workflowId);
118 workflowManager.update(workflow);
122 private RequestSpec initRequestSpec(Paging paging, Sorting sorting) {
123 return new RequestSpec(new PagingRequest(paging.getOffset() == null ? DEFAULT_OFFSET : paging.getOffset(),
124 paging.getLimit() == null ? DEFAULT_LIMIT : paging.getLimit()),
125 SortingRequest.builder().sorts(sorting.getSorts()).build());