TSK-299: added rest endpoint to export workbaskets

first version


initial setup


revert core


reverted changes


added query for domain in WorkbasketDefinitionController
created bean WorkbasketDefinitionMapper and autowired WorkbasketService
deleted ImportExportController

fixed rebase error
This commit is contained in:
Mustapha Zorgati 2018-02-15 14:06:39 +01:00 committed by Holger Hagen
parent 9d41c4e06b
commit 468d2668ff
4 changed files with 135 additions and 0 deletions

View File

@ -25,6 +25,7 @@ import pro.taskana.TaskanaEngine;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketService;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.rest.resource.mapper.WorkbasketDefinitionMapper;
import pro.taskana.rest.serialization.WorkbasketMixIn;
import pro.taskana.sampledata.SampleDataGenerator;
@ -109,4 +110,8 @@ public class RestApplication {
return new ModelMapper();
}
@Bean
public WorkbasketDefinitionMapper getWorkbasketDefinitionMapper() {
return new WorkbasketDefinitionMapper();
}
}

View File

@ -0,0 +1,49 @@
package pro.taskana.rest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketService;
import pro.taskana.WorkbasketSummary;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.rest.resource.WorkbasketDefinition;
import pro.taskana.rest.resource.mapper.WorkbasketDefinitionMapper;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping(path = "/v1/workbasketdefinitions", produces = {MediaType.APPLICATION_JSON_VALUE})
public class WorkbasketDefinitionController {
@Autowired
private WorkbasketService workbasketService;
@Autowired
private WorkbasketDefinitionMapper workbasketDefinitionMapper;
@GetMapping
public ResponseEntity<List<WorkbasketDefinition>> exportWorkbaskets(@RequestParam(required = false) String domain) {
try {
List<WorkbasketDefinition> basketExports = new ArrayList<>();
for (WorkbasketSummary summary : workbasketService.getWorkbaskets()) {
if (domain == null || summary.getDomain().equals(domain)) {
Workbasket workbasket = workbasketService.getWorkbasket(summary.getId());
basketExports.add(workbasketDefinitionMapper.toResource(workbasket));
}
}
return new ResponseEntity<>(basketExports, HttpStatus.OK);
} catch (WorkbasketNotFoundException e) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} catch (NotAuthorizedException e) {
return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
}
}
}

View File

@ -0,0 +1,42 @@
package pro.taskana.rest.resource;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketAccessItem;
import java.util.List;
import java.util.Set;
/**
* this class represents a workbasket including its distro targets and authorisations.
*/
public class WorkbasketDefinition {
private final Workbasket workbasket;
private final Set<String> distroTargets;
private final List<WorkbasketAccessItem> authorizations;
public WorkbasketDefinition(Workbasket workbasket, Set<String> distroTargets, List<WorkbasketAccessItem> authorizations) {
this.workbasket = workbasket;
this.distroTargets = distroTargets;
this.authorizations = authorizations;
}
public Workbasket getWorkbasket() {
return workbasket;
}
public Set<String> getDistroTargets() {
return distroTargets;
}
public List<WorkbasketAccessItem> getAuthorizations() {
return authorizations;
}
@Override
public String toString() {
return "WorkbasketDefinition{"
+ "workbasket=" + workbasket.toString()
+ ", authorizations=" + authorizations.toString()
+ '}';
}
}

View File

@ -0,0 +1,39 @@
package pro.taskana.rest.resource.mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketAccessItem;
import pro.taskana.WorkbasketService;
import pro.taskana.WorkbasketSummary;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.rest.resource.WorkbasketDefinition;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Service
public class WorkbasketDefinitionMapper {
@Autowired
private WorkbasketService workbasketService;
/**
* maps the distro targets to their id to remove overhead.
* @param basket {@link Workbasket} which will be converted
* @return a {@link WorkbasketDefinition}, containing the {@code basket},
* its ditribution targets and its authorizations
* @throws NotAuthorizedException if the user is not authorized
* @throws WorkbasketNotFoundException if {@code basket} is an unknown workbasket
*/
public WorkbasketDefinition toResource(Workbasket basket) throws NotAuthorizedException, WorkbasketNotFoundException {
List<WorkbasketAccessItem> authorizations = workbasketService.getWorkbasketAuthorizations(basket.getKey());
Set<String> distroTargets = workbasketService.getDistributionTargets(basket.getId()).stream()
.map(WorkbasketSummary::getId)
.collect(Collectors.toSet());
return new WorkbasketDefinition(basket,distroTargets,authorizations);
}
}