TSK-1014: Fixed hateoas links
This commit is contained in:
parent
c1d74b2126
commit
1a77810fc2
|
@ -1,6 +1,7 @@
|
|||
package pro.taskana.rest.resource;
|
||||
|
||||
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
|
||||
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
|
||||
|
||||
import java.time.Instant;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
|
@ -10,6 +11,8 @@ import org.springframework.stereotype.Component;
|
|||
|
||||
import pro.taskana.Classification;
|
||||
import pro.taskana.ClassificationService;
|
||||
import pro.taskana.exceptions.ClassificationNotFoundException;
|
||||
import pro.taskana.exceptions.SystemException;
|
||||
import pro.taskana.impl.ClassificationImpl;
|
||||
import pro.taskana.rest.ClassificationController;
|
||||
|
||||
|
@ -21,16 +24,23 @@ import pro.taskana.rest.ClassificationController;
|
|||
public class ClassificationResourceAssembler
|
||||
extends ResourceAssemblerSupport<Classification, ClassificationResource> {
|
||||
|
||||
@Autowired ClassificationService classificationService;
|
||||
final ClassificationService classificationService;
|
||||
|
||||
public ClassificationResourceAssembler() {
|
||||
@Autowired
|
||||
public ClassificationResourceAssembler(ClassificationService classificationService) {
|
||||
super(ClassificationController.class, ClassificationResource.class);
|
||||
this.classificationService = classificationService;
|
||||
}
|
||||
|
||||
public ClassificationResource toResource(Classification classification) {
|
||||
ClassificationResource resource = new ClassificationResource(classification);
|
||||
resource.add(
|
||||
linkTo(ClassificationController.class).slash(classification.getId()).withSelfRel());
|
||||
try {
|
||||
resource.add(
|
||||
linkTo(methodOn(ClassificationController.class).getClassification(classification.getId()))
|
||||
.withSelfRel());
|
||||
} catch (ClassificationNotFoundException e) {
|
||||
throw new SystemException("caught unexpected Exception.", e.getCause());
|
||||
}
|
||||
return resource;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package pro.taskana.rest.resource;
|
||||
|
||||
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
|
||||
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Objects;
|
||||
|
@ -21,16 +22,25 @@ import pro.taskana.rest.TaskController;
|
|||
@Component
|
||||
public class TaskResourceAssembler extends ResourceAssemblerSupport<Task, TaskResource> {
|
||||
|
||||
@Autowired private TaskService taskService;
|
||||
private final TaskService taskService;
|
||||
|
||||
@Autowired private ClassificationSummaryResourceAssembler classificationAssembler;
|
||||
private final ClassificationSummaryResourceAssembler classificationAssembler;
|
||||
|
||||
@Autowired private WorkbasketSummaryResourceAssembler workbasketAssembler;
|
||||
private final WorkbasketSummaryResourceAssembler workbasketAssembler;
|
||||
|
||||
@Autowired private AttachmentResourceAssembler attachmentAssembler;
|
||||
private final AttachmentResourceAssembler attachmentAssembler;
|
||||
|
||||
public TaskResourceAssembler() {
|
||||
@Autowired
|
||||
public TaskResourceAssembler(
|
||||
TaskService taskService,
|
||||
ClassificationSummaryResourceAssembler classificationAssembler,
|
||||
WorkbasketSummaryResourceAssembler workbasketAssembler,
|
||||
AttachmentResourceAssembler attachmentAssembler) {
|
||||
super(TaskController.class, TaskResource.class);
|
||||
this.taskService = taskService;
|
||||
this.classificationAssembler = classificationAssembler;
|
||||
this.workbasketAssembler = workbasketAssembler;
|
||||
this.attachmentAssembler = attachmentAssembler;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -38,8 +48,8 @@ public class TaskResourceAssembler extends ResourceAssemblerSupport<Task, TaskRe
|
|||
TaskResource resource;
|
||||
try {
|
||||
resource = new TaskResource(task);
|
||||
resource.add(linkTo(TaskController.class).slash(task.getId()).withSelfRel());
|
||||
} catch (InvalidArgumentException e) {
|
||||
resource.add(linkTo(methodOn(TaskController.class).getTask(task.getId())).withSelfRel());
|
||||
} catch (Exception e) {
|
||||
throw new SystemException("caught unexpected Exception.", e.getCause());
|
||||
}
|
||||
return resource;
|
||||
|
|
|
@ -6,11 +6,15 @@ import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
|
|||
import java.time.Instant;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.hateoas.mvc.ResourceAssemblerSupport;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
|
||||
import pro.taskana.Workbasket;
|
||||
import pro.taskana.WorkbasketService;
|
||||
import pro.taskana.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.exceptions.SystemException;
|
||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.impl.WorkbasketImpl;
|
||||
import pro.taskana.rest.WorkbasketController;
|
||||
|
@ -20,14 +24,24 @@ import pro.taskana.rest.WorkbasketController;
|
|||
* versa.
|
||||
*/
|
||||
@Component
|
||||
public class WorkbasketResourceAssembler {
|
||||
public class WorkbasketResourceAssembler
|
||||
extends ResourceAssemblerSupport<Workbasket, WorkbasketResource> {
|
||||
|
||||
@Autowired private WorkbasketService workbasketService;
|
||||
private final WorkbasketService workbasketService;
|
||||
|
||||
public WorkbasketResource toResource(Workbasket wb)
|
||||
throws NotAuthorizedException, WorkbasketNotFoundException {
|
||||
WorkbasketResource resource = new WorkbasketResource(wb);
|
||||
return addLinks(resource, wb);
|
||||
@Autowired
|
||||
public WorkbasketResourceAssembler(WorkbasketService workbasketService) {
|
||||
super(WorkbasketController.class, WorkbasketResource.class);
|
||||
this.workbasketService = workbasketService;
|
||||
}
|
||||
|
||||
public WorkbasketResource toResource(Workbasket wb) {
|
||||
try {
|
||||
WorkbasketResource resource = new WorkbasketResource(wb);
|
||||
return addLinks(resource, wb);
|
||||
} catch (Exception e) {
|
||||
throw new SystemException("caught unexpected Exception.", e.getCause());
|
||||
}
|
||||
}
|
||||
|
||||
public Workbasket toModel(WorkbasketResource wbResource) {
|
||||
|
@ -46,7 +60,7 @@ public class WorkbasketResourceAssembler {
|
|||
}
|
||||
|
||||
private WorkbasketResource addLinks(WorkbasketResource resource, Workbasket wb)
|
||||
throws NotAuthorizedException, WorkbasketNotFoundException {
|
||||
throws NotAuthorizedException, WorkbasketNotFoundException, InvalidArgumentException {
|
||||
resource.add(
|
||||
linkTo(methodOn(WorkbasketController.class).getWorkbasket(wb.getId())).withSelfRel());
|
||||
resource.add(
|
||||
|
@ -55,7 +69,9 @@ public class WorkbasketResourceAssembler {
|
|||
resource.add(
|
||||
linkTo(methodOn(WorkbasketController.class).getWorkbasketAccessItems(wb.getId()))
|
||||
.withRel("accessItems"));
|
||||
resource.add(linkTo(WorkbasketController.class).withRel("allWorkbaskets"));
|
||||
resource.add(
|
||||
linkTo(methodOn(WorkbasketController.class).getWorkbaskets(new LinkedMultiValueMap<>()))
|
||||
.withRel("allWorkbaskets"));
|
||||
resource.add(
|
||||
linkTo(
|
||||
methodOn(WorkbasketController.class)
|
||||
|
|
|
@ -9,6 +9,7 @@ import pro.taskana.Classification;
|
|||
import pro.taskana.ClassificationService;
|
||||
import pro.taskana.TaskanaSpringBootTest;
|
||||
import pro.taskana.impl.ClassificationImpl;
|
||||
import pro.taskana.rest.Mapping;
|
||||
|
||||
/** Test for {@link ClassificationResourceAssembler}. */
|
||||
@TaskanaSpringBootTest
|
||||
|
@ -47,6 +48,7 @@ class ClassificationAssemblerTest {
|
|||
classificationResourceAssembler.toResource(classification);
|
||||
// then
|
||||
testEquality(classification, classificationResource);
|
||||
testLinks(classificationResource);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -87,6 +89,13 @@ class ClassificationAssemblerTest {
|
|||
testEquality(classification, classificationResource);
|
||||
}
|
||||
|
||||
private void testLinks(ClassificationResource resource) {
|
||||
Assert.assertEquals(1, resource.getLinks().size());
|
||||
Assert.assertEquals(
|
||||
Mapping.URL_CLASSIFICATIONS_ID.replaceAll("\\{.*}", resource.getClassificationId()),
|
||||
resource.getLink("self").getHref());
|
||||
}
|
||||
|
||||
private void testEquality(
|
||||
Classification classification, ClassificationResource classificationResource) {
|
||||
Assert.assertEquals(
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package pro.taskana.rest.resource;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -8,18 +9,27 @@ import org.junit.jupiter.api.Test;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import pro.taskana.Attachment;
|
||||
import pro.taskana.Classification;
|
||||
import pro.taskana.ClassificationService;
|
||||
import pro.taskana.ObjectReference;
|
||||
import pro.taskana.Task;
|
||||
import pro.taskana.TaskService;
|
||||
import pro.taskana.TaskState;
|
||||
import pro.taskana.TaskanaSpringBootTest;
|
||||
import pro.taskana.Workbasket;
|
||||
import pro.taskana.WorkbasketService;
|
||||
import pro.taskana.exceptions.InvalidArgumentException;
|
||||
import pro.taskana.impl.AttachmentImpl;
|
||||
import pro.taskana.impl.TaskImpl;
|
||||
import pro.taskana.rest.Mapping;
|
||||
|
||||
/** Test for {@link TaskResourceAssembler}. */
|
||||
@TaskanaSpringBootTest
|
||||
class TaskResourceAssemberTest {
|
||||
|
||||
@Autowired TaskService taskService;
|
||||
@Autowired WorkbasketService workbasketService;
|
||||
@Autowired ClassificationService classificationService;
|
||||
@Autowired TaskResourceAssembler taskResourceAssembler;
|
||||
|
||||
@Test
|
||||
|
@ -85,6 +95,65 @@ class TaskResourceAssemberTest {
|
|||
testEquality(task, resource);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testModelToResource() throws InvalidArgumentException {
|
||||
// given
|
||||
ObjectReference primaryObjRef = new ObjectReference();
|
||||
primaryObjRef.setId("abc");
|
||||
Workbasket workbasket = workbasketService.newWorkbasket("key", "domain");
|
||||
Classification classification =
|
||||
classificationService.newClassification("ckey", "cdomain", "MANUAL");
|
||||
AttachmentImpl attachment = (AttachmentImpl) taskService.newAttachment();
|
||||
attachment.setClassificationSummary(classification.asSummary());
|
||||
attachment.setId("attachmentId");
|
||||
TaskImpl task = (TaskImpl) taskService.newTask();
|
||||
task.setId("taskId");
|
||||
task.setExternalId("externalId");
|
||||
task.setCreated(Instant.parse("2019-09-13T08:44:17.588Z"));
|
||||
task.setClaimed(Instant.parse("2019-09-13T08:44:17.588Z"));
|
||||
task.setCompleted(Instant.parse("2019-09-13T08:44:17.588Z"));
|
||||
task.setModified(Instant.parse("2019-09-13T08:44:17.588Z"));
|
||||
task.setPlanned(Instant.parse("2019-09-13T08:44:17.588Z"));
|
||||
task.setDue(Instant.parse("2019-09-13T08:44:17.588Z"));
|
||||
task.setName("name");
|
||||
task.setCreator("creator");
|
||||
task.setDescription("desc");
|
||||
task.setNote("note");
|
||||
task.setPriority(123);
|
||||
task.setState(TaskState.READY);
|
||||
task.setClassificationSummary(classification);
|
||||
task.setWorkbasketSummary(workbasket.asSummary());
|
||||
task.setBusinessProcessId("businessProcessId");
|
||||
task.setParentBusinessProcessId("parentBusinessProcessId");
|
||||
task.setOwner("owner");
|
||||
task.setPrimaryObjRef(primaryObjRef);
|
||||
task.setRead(true);
|
||||
task.setTransferred(true);
|
||||
task.setCustomAttributes(Collections.singletonMap("abc", "def"));
|
||||
task.setCallbackInfo(Collections.singletonMap("ghi", "jkl"));
|
||||
task.setAttachments(Collections.singletonList(attachment));
|
||||
task.setCustom1("custom1");
|
||||
task.setCustom2("custom2");
|
||||
task.setCustom3("custom3");
|
||||
task.setCustom4("custom4");
|
||||
task.setCustom5("custom5");
|
||||
task.setCustom6("custom6");
|
||||
task.setCustom7("custom7");
|
||||
task.setCustom8("custom8");
|
||||
task.setCustom9("custom9");
|
||||
task.setCustom10("custom10");
|
||||
task.setCustom11("custom11");
|
||||
task.setCustom12("custom12");
|
||||
task.setCustom13("custom13");
|
||||
task.setCustom14("custom14");
|
||||
task.setCustom15("custom15");
|
||||
// when
|
||||
TaskResource resource = taskResourceAssembler.toResource(task);
|
||||
// then
|
||||
testEquality(task, resource);
|
||||
testLinks(resource);
|
||||
}
|
||||
|
||||
void testEquality(Task task, TaskResource resource) throws InvalidArgumentException {
|
||||
Assert.assertEquals(task.getId(), resource.getTaskId());
|
||||
Assert.assertEquals(task.getExternalId(), resource.getExternalId());
|
||||
|
@ -139,7 +208,7 @@ class TaskResourceAssemberTest {
|
|||
Assert.assertEquals(task.getCustomAttribute("16"), resource.getCustom16());
|
||||
}
|
||||
|
||||
void testEquality(
|
||||
private void testEquality(
|
||||
Map<String, String> customAttributes, List<TaskResource.CustomAttribute> resourceAttributes) {
|
||||
Assert.assertEquals(customAttributes.size(), resourceAttributes.size());
|
||||
resourceAttributes.forEach(
|
||||
|
@ -147,7 +216,8 @@ class TaskResourceAssemberTest {
|
|||
Assert.assertEquals(customAttributes.get(attribute.getKey()), attribute.getValue()));
|
||||
}
|
||||
|
||||
void testEqualityAttachements(List<Attachment> attachments, List<AttachmentResource> resources) {
|
||||
private void testEqualityAttachements(
|
||||
List<Attachment> attachments, List<AttachmentResource> resources) {
|
||||
Assert.assertEquals(attachments.size(), resources.size());
|
||||
for (int i = 0; i < resources.size(); i++) {
|
||||
AttachmentResource resource = resources.get(i);
|
||||
|
@ -156,4 +226,11 @@ class TaskResourceAssemberTest {
|
|||
Assert.assertEquals(attachment.getId(), resource.getAttachmentId());
|
||||
}
|
||||
}
|
||||
|
||||
private void testLinks(TaskResource resource) {
|
||||
Assert.assertEquals(1, resource.getLinks().size());
|
||||
Assert.assertEquals(
|
||||
Mapping.URL_TASKS_ID.replaceAll("\\{.*}", resource.getTaskId()),
|
||||
resource.getLink("self").getHref());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import pro.taskana.WorkbasketType;
|
|||
import pro.taskana.exceptions.NotAuthorizedException;
|
||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.impl.WorkbasketImpl;
|
||||
import pro.taskana.rest.Mapping;
|
||||
|
||||
/** Test for {@link WorkbasketResourceAssembler}. */
|
||||
@TaskanaSpringBootTest
|
||||
|
@ -40,9 +41,10 @@ class WorkbasketResourceAssemblerTest {
|
|||
((WorkbasketImpl) workbasket).setCreated(Instant.parse("2010-01-01T12:00:00Z"));
|
||||
((WorkbasketImpl) workbasket).setModified(Instant.parse("2010-01-01T12:00:00Z"));
|
||||
// when
|
||||
WorkbasketResource workbasketResource = workbasketResourceAssembler.toResource(workbasket);
|
||||
WorkbasketResource resource = workbasketResourceAssembler.toResource(workbasket);
|
||||
// then
|
||||
testEquality(workbasket, workbasketResource);
|
||||
testEquality(workbasket, resource);
|
||||
verifyLinks(resource);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -98,6 +100,20 @@ class WorkbasketResourceAssemblerTest {
|
|||
testEquality(workbasket, workbasketResource);
|
||||
}
|
||||
|
||||
private void verifyLinks(WorkbasketResource workbasket) {
|
||||
Assert.assertEquals(5, workbasket.getLinks().size());
|
||||
Assert.assertEquals(
|
||||
Mapping.URL_WORKBASKET_ID.replaceAll("\\{.*}", workbasket.getWorkbasketId()),
|
||||
workbasket.getLink("self").getHref());
|
||||
Assert.assertEquals(
|
||||
Mapping.URL_WORKBASKET_ID_DISTRIBUTION.replaceAll("\\{.*}", workbasket.getWorkbasketId()),
|
||||
workbasket.getLink("distributionTargets").getHref());
|
||||
Assert.assertEquals(Mapping.URL_WORKBASKET, workbasket.getLink("allWorkbaskets").getHref());
|
||||
Assert.assertEquals(
|
||||
Mapping.URL_WORKBASKET_DISTRIBUTION_ID.replaceAll("\\{.*}", workbasket.getWorkbasketId()),
|
||||
workbasket.getLink("removeDistributionTargets").getHref());
|
||||
}
|
||||
|
||||
private void testEquality(Workbasket workbasket, WorkbasketResource workbasketResource) {
|
||||
Assert.assertEquals(workbasket.getId(), workbasketResource.workbasketId);
|
||||
Assert.assertEquals(workbasket.getKey(), workbasketResource.key);
|
||||
|
|
Loading…
Reference in New Issue