6ae8e34d5dc05f7dbd115c7aada471efe9ea26f1
[sdc/sdc-workflow-designer.git] /
1 package org.onap.sdc.workflow.api;
2
3 import static org.onap.sdc.workflow.api.RestConstants.USER_ID_HEADER_PARAM;
4
5 import io.swagger.annotations.Api;
6 import io.swagger.annotations.ApiOperation;
7 import org.onap.sdc.workflow.api.types.CollectionWrapper;
8 import org.onap.sdc.workflow.api.types.VersionRequestDto;
9 import org.onap.sdc.workflow.api.types.VersionStateDto;
10 import org.onap.sdc.workflow.persistence.types.ArtifactEntity;
11 import org.onap.sdc.workflow.persistence.types.WorkflowVersion;
12 import org.onap.sdc.workflow.services.WorkflowVersionManager;
13 import org.springframework.beans.factory.annotation.Autowired;
14 import org.springframework.beans.factory.annotation.Qualifier;
15 import org.springframework.core.io.InputStreamResource;
16 import org.springframework.core.io.Resource;
17 import org.springframework.http.HttpHeaders;
18 import org.springframework.http.HttpStatus;
19 import org.springframework.http.MediaType;
20 import org.springframework.http.ResponseEntity;
21 import org.springframework.web.bind.annotation.DeleteMapping;
22 import org.springframework.web.bind.annotation.GetMapping;
23 import org.springframework.web.bind.annotation.PathVariable;
24 import org.springframework.web.bind.annotation.PostMapping;
25 import org.springframework.web.bind.annotation.PutMapping;
26 import org.springframework.web.bind.annotation.RequestBody;
27 import org.springframework.web.bind.annotation.RequestHeader;
28 import org.springframework.web.bind.annotation.RequestMapping;
29 import org.springframework.web.bind.annotation.RestController;
30 import org.springframework.web.multipart.MultipartFile;
31
32 @RequestMapping("/workflows/{workflowId}/versions")
33 @Api("Workflow versions")
34 @RestController("workflowsVersionController")
35 public class WorkflowVersionController {
36
37     private final WorkflowVersionManager workflowVersionManager;
38
39     @Autowired
40     public WorkflowVersionController(
41         @Qualifier("workflowVersionManager") WorkflowVersionManager workflowVersionManager) {
42         this.workflowVersionManager = workflowVersionManager;
43     }
44
45     @GetMapping
46     @ApiOperation("List workflow versions")
47     public CollectionWrapper<WorkflowVersion> list(@PathVariable("workflowId") String workflowId,
48         @RequestHeader(USER_ID_HEADER_PARAM) String user) {
49         return new CollectionWrapper<>(workflowVersionManager.list(workflowId));
50     }
51
52     @PostMapping
53     @ApiOperation("Create workflow version")
54     public ResponseEntity<WorkflowVersion> create(@RequestBody VersionRequestDto versionRequest,
55         @PathVariable("workflowId") String workflowId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
56
57         WorkflowVersion createdVersion = workflowVersionManager.create(workflowId, versionRequest);
58         return new ResponseEntity<>(createdVersion, HttpStatus.CREATED);
59     }
60
61     @GetMapping("/{versionId}")
62     @ApiOperation("Get workflow version")
63     public WorkflowVersion get(@PathVariable("workflowId") String workflowId,
64         @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
65         return workflowVersionManager.get(workflowId, versionId);
66     }
67
68     @PutMapping("/{versionId}")
69     @ApiOperation("Update workflow version")
70     public void update(@RequestBody WorkflowVersion version, @PathVariable("workflowId") String workflowId,
71         @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
72         version.setId(versionId);
73         workflowVersionManager.update(workflowId, version);
74     }
75
76     @GetMapping("/{versionId}/state")
77     @ApiOperation("Get workflow version state")
78     public VersionStateDto getState(@PathVariable("workflowId") String workflowId,
79         @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
80         return new VersionStateDto(workflowVersionManager.getState(workflowId, versionId));
81     }
82
83     @PostMapping("/{versionId}/state")
84     @ApiOperation("Update workflow version state")
85     public VersionStateDto updateState(@RequestBody VersionStateDto state,
86         @PathVariable("workflowId") String workflowId, @PathVariable("versionId") String versionId,
87         @RequestHeader(USER_ID_HEADER_PARAM) String user) {
88         workflowVersionManager.updateState(workflowId, versionId, state.getName());
89         return new VersionStateDto(state.getName());
90     }
91
92     @PutMapping("/{versionId}/artifact")
93     @ApiOperation("Create/update artifact of a version")
94     public void uploadArtifact(@RequestBody MultipartFile fileToUpload, @PathVariable("workflowId") String workflowId,
95         @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
96         workflowVersionManager.uploadArtifact(workflowId, versionId, fileToUpload);
97     }
98
99     @GetMapping("/{versionId}/artifact")
100     @ApiOperation("Download workflow version artifact")
101     public ResponseEntity<Resource> getArtifact(@PathVariable("workflowId") String workflowId,
102         @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
103         ArtifactEntity artifact = workflowVersionManager.getArtifact(workflowId, versionId);
104
105         return ResponseEntity.ok()
106             .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + artifact.getFileName())
107             .contentType(MediaType.APPLICATION_OCTET_STREAM)
108             .body(new InputStreamResource(artifact.getArtifactData()));
109     }
110
111     @DeleteMapping("/{versionId}/artifact")
112     @ApiOperation("Delete workflow version artifact")
113     public void deleteArtifact(@PathVariable("workflowId") String workflowId,
114         @PathVariable("versionId") String versionId, @RequestHeader(USER_ID_HEADER_PARAM) String user) {
115         workflowVersionManager.deleteArtifact(workflowId, versionId);
116     }
117 }