1 package org.onap.sdc.workflow.api;
 
   3 import static org.onap.sdc.workflow.api.RestConstants.USER_ID_HEADER_PARAM;
 
   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;
 
  32 @RequestMapping("/workflows/{workflowId}/versions")
 
  33 @Api("Workflow versions")
 
  34 @RestController("workflowsVersionController")
 
  35 public class WorkflowVersionController {
 
  37     private final WorkflowVersionManager workflowVersionManager;
 
  40     public WorkflowVersionController(
 
  41         @Qualifier("workflowVersionManager") WorkflowVersionManager workflowVersionManager) {
 
  42         this.workflowVersionManager = workflowVersionManager;
 
  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));
 
  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) {
 
  57         WorkflowVersion createdVersion = workflowVersionManager.create(workflowId, versionRequest);
 
  58         return new ResponseEntity<>(createdVersion, HttpStatus.CREATED);
 
  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);
 
  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);
 
  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));
 
  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());
 
  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);
 
  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);
 
 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()));
 
 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);