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.USER_ID_HEADER;
21 import io.swagger.annotations.Api;
22 import io.swagger.annotations.ApiImplicitParam;
23 import io.swagger.annotations.ApiOperation;
24 import io.swagger.annotations.ApiParam;
25 import javax.validation.Valid;
26 import org.onap.sdc.workflow.api.types.CollectionResponse;
27 import org.onap.sdc.workflow.api.types.VersionStateDto;
28 import org.onap.sdc.workflow.api.types.dto.ArtifactDeliveriesRequestDto;
29 import org.onap.sdc.workflow.api.types.VersionStatesFormatter;
30 import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
31 import org.onap.sdc.workflow.persistence.types.WorkflowVersion;
32 import org.onap.sdc.workflow.services.WorkflowVersionManager;
33 import org.springframework.beans.factory.annotation.Autowired;
34 import org.springframework.beans.factory.annotation.Qualifier;
35 import org.springframework.core.io.InputStreamResource;
36 import org.springframework.core.io.Resource;
37 import org.springframework.http.HttpHeaders;
38 import org.springframework.http.HttpStatus;
39 import org.springframework.http.MediaType;
40 import org.springframework.http.ResponseEntity;
41 import org.springframework.web.bind.annotation.DeleteMapping;
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.RequestHeader;
48 import org.springframework.web.bind.annotation.RequestMapping;
49 import org.springframework.web.bind.annotation.RequestParam;
50 import org.springframework.web.bind.annotation.RestController;
51 import org.springframework.web.multipart.MultipartFile;
52 import springfox.documentation.annotations.ApiIgnore;
54 @RequestMapping("/workflows/{workflowId}/versions")
55 @Api("Workflow versions")
56 @RestController("workflowsVersionController")
57 public class WorkflowVersionController {
59 private final WorkflowVersionManager workflowVersionManager;
60 private final ArtifactAssociationService associationHandler;
63 public WorkflowVersionController(
64 @Qualifier("workflowVersionManager") WorkflowVersionManager workflowVersionManager,
65 @Qualifier("ArtifactAssociationHandler") ArtifactAssociationService artifatcAssociationHandler) {
66 this.workflowVersionManager = workflowVersionManager;
67 this.associationHandler = artifatcAssociationHandler;
70 @ApiImplicitParam(name = "state", dataType = "string", paramType = "query", allowableValues = "DRAFT,CERTIFIED",
71 value = "Filter by state")
73 @ApiOperation("List workflow versions")
74 public CollectionResponse<WorkflowVersion> list(@PathVariable("workflowId") String workflowId,
75 @ApiIgnore VersionStatesFormatter stateFilter, @RequestHeader(USER_ID_HEADER) String user) {
76 return new CollectionResponse<>(workflowVersionManager.list(workflowId, stateFilter.getVersionStates()));
80 @ApiOperation("Create workflow version")
81 public ResponseEntity<WorkflowVersion> create(@RequestBody @Valid WorkflowVersion version,
82 @PathVariable("workflowId") String workflowId,
83 @RequestParam(value = "baseVersionId", required = false) String baseVersionId,
84 @RequestHeader(USER_ID_HEADER) String user) {
85 WorkflowVersion createdVersion = workflowVersionManager.create(workflowId, baseVersionId, version);
86 return new ResponseEntity<>(createdVersion, HttpStatus.CREATED);
89 @GetMapping("/{versionId}")
90 @ApiOperation("Get workflow version")
91 public WorkflowVersion get(@PathVariable("workflowId") String workflowId,
92 @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER) String user) {
93 return workflowVersionManager.get(workflowId, versionId);
96 @PutMapping("/{versionId}")
97 @ApiOperation("Update workflow version")
98 public void update(@RequestBody @Valid WorkflowVersion version, @PathVariable("workflowId") String workflowId,
99 @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER) String user) {
100 version.setId(versionId);
101 workflowVersionManager.update(workflowId, version);
104 @GetMapping("/{versionId}/state")
105 @ApiOperation("Get workflow version state")
106 public VersionStateDto getState(@PathVariable("workflowId") String workflowId,
107 @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER) String user) {
108 return new VersionStateDto(workflowVersionManager.getState(workflowId, versionId));
111 @PostMapping("/{versionId}/state")
112 @ApiOperation("Update workflow version state")
113 public VersionStateDto updateState(@RequestBody VersionStateDto state,
114 @PathVariable("workflowId") String workflowId, @PathVariable("versionId") String versionId,
115 @RequestHeader(USER_ID_HEADER) String user) {
116 workflowVersionManager.updateState(workflowId, versionId, state.getName());
117 return new VersionStateDto(state.getName());
120 @PostMapping("/{versionId}/artifact-deliveries")
121 @ApiOperation("upload of artifact to VF operation workflow")
122 public ResponseEntity<String> artifactDeliveries(@RequestBody ArtifactDeliveriesRequestDto deliveriesRequestDto, @PathVariable("workflowId") String workflowId,
123 @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER) String user) {
124 return associationHandler.execute(user, deliveriesRequestDto,
125 workflowVersionManager.getArtifact(workflowId, versionId));
128 @PutMapping("/{versionId}/artifact")
129 @ApiOperation("Create/update artifact of a version")
130 public void uploadArtifact(@RequestBody MultipartFile fileToUpload, @PathVariable("workflowId") String workflowId,
131 @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER) String user) {
132 workflowVersionManager.uploadArtifact(workflowId, versionId, fileToUpload);
135 @GetMapping("/{versionId}/artifact")
136 @ApiOperation("Download workflow version artifact")
137 public ResponseEntity<Resource> getArtifact(@PathVariable("workflowId") String workflowId,
138 @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER) String user) {
139 ArtifactEntity artifact = workflowVersionManager.getArtifact(workflowId, versionId);
141 return ResponseEntity.ok()
142 .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + artifact.getFileName())
143 .contentType(MediaType.APPLICATION_OCTET_STREAM)
144 .body(new InputStreamResource(artifact.getArtifactData()));
147 @DeleteMapping("/{versionId}/artifact")
148 @ApiOperation("Delete workflow version artifact")
149 public void deleteArtifact(@PathVariable("workflowId") String workflowId,
150 @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER) String user) {
151 workflowVersionManager.deleteArtifact(workflowId, versionId);