TSK-301 import all classifications
This commit is contained in:
parent
25107f5760
commit
633bc2372f
|
@ -75,6 +75,4 @@
|
|||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
</project>
|
||||
|
|
|
@ -2,13 +2,19 @@ package pro.taskana.rest;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
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.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.interceptor.TransactionInterceptor;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
@ -16,7 +22,9 @@ import pro.taskana.Classification;
|
|||
import pro.taskana.ClassificationQuery;
|
||||
import pro.taskana.ClassificationService;
|
||||
import pro.taskana.ClassificationSummary;
|
||||
import pro.taskana.exceptions.ClassificationAlreadyExistException;
|
||||
import pro.taskana.exceptions.ClassificationNotFoundException;
|
||||
import pro.taskana.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.rest.resource.ClassificationResource;
|
||||
import pro.taskana.rest.resource.mapper.ClassificationMapper;
|
||||
|
||||
|
@ -30,22 +38,52 @@ public class ClassificationDefinitionController {
|
|||
@Autowired
|
||||
private ClassificationMapper classificationMapper;
|
||||
|
||||
@RequestMapping(method = RequestMethod.GET)
|
||||
public ResponseEntity<List<ClassificationResource>> getClassifications(@RequestParam(required = false) String domain) {
|
||||
@GetMapping
|
||||
@Transactional(readOnly = true, rollbackFor = Exception.class)
|
||||
public ResponseEntity<List<ClassificationResource>> getClassifications(
|
||||
@RequestParam(required = false) String domain) {
|
||||
try {
|
||||
ClassificationQuery query = classificationService.createClassificationQuery();
|
||||
List<ClassificationSummary> summaries = domain != null ? query.domainIn(domain).list() : query.list();
|
||||
List<ClassificationResource> export = new ArrayList<>();
|
||||
|
||||
for (ClassificationSummary summary : summaries) {
|
||||
Classification classification = classificationService.getClassification(summary.getKey(), summary.getDomain());
|
||||
Classification classification = classificationService.getClassification(summary.getKey(),
|
||||
summary.getDomain());
|
||||
export.add(classificationMapper.toResource(classification));
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(export, HttpStatus.OK);
|
||||
} catch (ClassificationNotFoundException e) {
|
||||
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping(path = "/import")
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public ResponseEntity<String> importClassifications(
|
||||
@RequestBody List<ClassificationResource> classificationResources) {
|
||||
try {
|
||||
Map<String, String> systemIds = classificationService.createClassificationQuery().list().stream()
|
||||
.collect(Collectors.toMap(i -> i.getKey() + i.getDomain(), ClassificationSummary::getId));
|
||||
|
||||
for (ClassificationResource classificationResource : classificationResources) {
|
||||
Classification classification = classificationMapper.toModel(classificationResource);
|
||||
if (systemIds.containsKey(classificationResource.key + classificationResource.domain))
|
||||
classificationService.updateClassification(classification);
|
||||
else
|
||||
classificationService.createClassification(classification);
|
||||
}
|
||||
} catch (ClassificationNotFoundException e) {
|
||||
TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
|
||||
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
|
||||
} catch (NotAuthorizedException e) {
|
||||
TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
|
||||
return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
|
||||
} catch (ClassificationAlreadyExistException e) {
|
||||
TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
|
||||
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
}
|
||||
|
||||
return new ResponseEntity<>(HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,8 @@ import org.springframework.context.annotation.Primary;
|
|||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||
import org.springframework.http.converter.json.SpringHandlerInstantiator;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.transaction.PlatformTransactionManager;
|
||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||
|
||||
import com.fasterxml.jackson.databind.cfg.HandlerInstantiator;
|
||||
|
@ -28,11 +30,6 @@ import pro.taskana.TaskanaEngine;
|
|||
import pro.taskana.WorkbasketService;
|
||||
import pro.taskana.configuration.SpringTaskanaEngineConfiguration;
|
||||
import pro.taskana.configuration.TaskanaEngineConfiguration;
|
||||
import pro.taskana.rest.resource.mapper.ClassificationMapper;
|
||||
import pro.taskana.rest.resource.mapper.WorkbasketAccessItemMapper;
|
||||
import pro.taskana.rest.resource.mapper.WorkbasketDefinitionMapper;
|
||||
import pro.taskana.rest.resource.mapper.WorkbasketMapper;
|
||||
import pro.taskana.rest.resource.mapper.WorkbasketSummaryMapper;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
|
||||
@SpringBootApplication
|
||||
|
@ -79,31 +76,6 @@ public class RestApplication {
|
|||
return taskanaEngine.getWorkbasketService();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public WorkbasketSummaryMapper getWorkbasketSummaryMapper() {
|
||||
return new WorkbasketSummaryMapper();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public WorkbasketMapper getWorkbasketMapper() {
|
||||
return new WorkbasketMapper();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public WorkbasketAccessItemMapper getWorkbasketAccessItemMapper() {
|
||||
return new WorkbasketAccessItemMapper();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public WorkbasketDefinitionMapper getWorkbasketDefinitionMapper() {
|
||||
return new WorkbasketDefinitionMapper();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ClassificationMapper getClassificationMapper() {
|
||||
return new ClassificationMapper();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public TaskanaEngine getTaskanaEngine(TaskanaEngineConfiguration taskanaEngineConfiguration) throws SQLException {
|
||||
|
@ -146,4 +118,9 @@ public class RestApplication {
|
|||
return new SpringHandlerInstantiator(context.getAutowireCapableBeanFactory());
|
||||
}
|
||||
|
||||
@Bean
|
||||
public PlatformTransactionManager txManager(DataSource dataSource) {
|
||||
return new DataSourceTransactionManager(dataSource);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ public class ClassificationResource extends ResourceSupport {
|
|||
public String custom8;
|
||||
|
||||
public ClassificationResource() {
|
||||
// necessary for deserializing
|
||||
}
|
||||
|
||||
public ClassificationResource(String classificationId, String key, String parentId, String category, String type,
|
||||
|
|
|
@ -1,10 +1,17 @@
|
|||
package pro.taskana.rest.resource.mapper;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import pro.taskana.Classification;
|
||||
import pro.taskana.ClassificationService;
|
||||
import pro.taskana.rest.resource.ClassificationResource;
|
||||
|
||||
@Component
|
||||
public class ClassificationMapper {
|
||||
|
||||
@Autowired ClassificationService classificationService;
|
||||
|
||||
public ClassificationResource toResource(Classification classification) {
|
||||
return new ClassificationResource(
|
||||
classification.getId(),
|
||||
|
@ -30,4 +37,25 @@ public class ClassificationMapper {
|
|||
classification.getCustom8());
|
||||
}
|
||||
|
||||
public Classification toModel(ClassificationResource classificationResource) {
|
||||
Classification classification = classificationService.newClassification(classificationResource.domain,
|
||||
classificationResource.key, classificationResource.type);
|
||||
classification.setServiceLevel(classificationResource.serviceLevel);
|
||||
classification.setPriority(classificationResource.priority);
|
||||
classification.setParentId(classificationResource.parentId);
|
||||
classification.setName(classificationResource.name);
|
||||
classification.setIsValidInDomain(classificationResource.isValidInDomain);
|
||||
classification.setDescription(classificationResource.description);
|
||||
classification.setCustom1(classificationResource.custom1);
|
||||
classification.setCustom2(classificationResource.custom2);
|
||||
classification.setCustom3(classificationResource.custom3);
|
||||
classification.setCustom4(classificationResource.custom4);
|
||||
classification.setCustom5(classificationResource.custom5);
|
||||
classification.setCustom6(classificationResource.custom6);
|
||||
classification.setCustom7(classificationResource.custom7);
|
||||
classification.setCustom8(classificationResource.custom8);
|
||||
classification.setCategory(classificationResource.category);
|
||||
classification.setApplicationEntryPoint(classificationResource.applicationEntryPoint);
|
||||
return classification;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
|
|||
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import pro.taskana.WorkbasketAccessItem;
|
||||
import pro.taskana.WorkbasketService;
|
||||
|
@ -11,6 +12,7 @@ import pro.taskana.impl.WorkbasketAccessItemImpl;
|
|||
import pro.taskana.rest.WorkbasketController;
|
||||
import pro.taskana.rest.resource.WorkbasketAccessItemResource;
|
||||
|
||||
@Component
|
||||
public class WorkbasketAccessItemMapper {
|
||||
|
||||
@Autowired
|
||||
|
|
|
@ -1,7 +1,12 @@
|
|||
package pro.taskana.rest.resource.mapper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import pro.taskana.Workbasket;
|
||||
import pro.taskana.WorkbasketAccessItem;
|
||||
import pro.taskana.WorkbasketService;
|
||||
|
@ -10,11 +15,7 @@ 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
|
||||
@Component
|
||||
public class WorkbasketDefinitionMapper {
|
||||
|
||||
@Autowired
|
||||
|
|
|
@ -6,6 +6,7 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
|
|||
import java.time.Instant;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import pro.taskana.Workbasket;
|
||||
import pro.taskana.WorkbasketService;
|
||||
|
@ -13,6 +14,7 @@ import pro.taskana.impl.WorkbasketImpl;
|
|||
import pro.taskana.rest.WorkbasketController;
|
||||
import pro.taskana.rest.resource.WorkbasketResource;
|
||||
|
||||
@Component
|
||||
public class WorkbasketMapper {
|
||||
|
||||
@Autowired
|
||||
|
|
|
@ -3,10 +3,13 @@ package pro.taskana.rest.resource.mapper;
|
|||
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
|
||||
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import pro.taskana.WorkbasketSummary;
|
||||
import pro.taskana.rest.WorkbasketController;
|
||||
import pro.taskana.rest.resource.WorkbasketSummaryResource;
|
||||
|
||||
@Component
|
||||
public class WorkbasketSummaryMapper {
|
||||
|
||||
public WorkbasketSummaryResource toResource(WorkbasketSummary summary) {
|
||||
|
|
Loading…
Reference in New Issue