From 6e075bce6b43741cc75ebe6d432214ae283e921e Mon Sep 17 00:00:00 2001
From: Holger Hagen <19706592+holgerhagen@users.noreply.github.com>
Date: Fri, 13 Apr 2018 11:28:10 +0200
Subject: [PATCH] TSK-429: added task update to and integration test to task
rest service.
---
.../pro/taskana/mappings/QueryMapper.java | 1 -
.../main/resources/sql/sample-data/task.sql | 4 +-
.../taskana/rest/TaskControllerIntTest.java | 99 +++++++++++++++----
.../java/pro/taskana/rest/TaskController.java | 33 ++++++-
.../taskana/rest/resource/TaskResource.java | 2 +-
...lassificationSummaryResourceAssembler.java | 18 ++++
.../mapper/TaskResourceAssembler.java | 41 +++++++-
.../WorkbasketSummaryResourceAssembler.java | 16 +++
8 files changed, 184 insertions(+), 30 deletions(-)
diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java b/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java
index 11a193cf9..f372760cd 100644
--- a/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java
+++ b/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java
@@ -434,7 +434,6 @@ public interface QueryMapper {
+ "AND t.CUSTOM_16 IN(#{item}) "
+ "AND (UPPER(t.CUSTOM_16) LIKE #{item}) "
+ ""
- + "ORDER BY ${item} "
+ "with UR "
+ "")
Long countQueryTasks(TaskQueryImpl taskQuery);
diff --git a/rest/taskana-rest-spring-example/src/main/resources/sql/sample-data/task.sql b/rest/taskana-rest-spring-example/src/main/resources/sql/sample-data/task.sql
index 6490da876..3ce9cafcb 100644
--- a/rest/taskana-rest-spring-example/src/main/resources/sql/sample-data/task.sql
+++ b/rest/taskana-rest-spring-example/src/main/resources/sql/sample-data/task.sql
@@ -1,4 +1,4 @@
--- TASK TABLE (ID , CREATED , CLAIMED , COMPLETED , modified , planned , due , name , creator , description , note , priority, state , classification_category , classification_key, classification_id , workbasket_id , workbasket_key, domain , business_process_id, parent_business_process_id, owner , por_company , por_system , por_system_instance, por_type , por_value , is_read, is_transferred, custom_attributes, custom1, custom2, custom3, custom4, custom5, custom6, custom7, custom8, custom9, custom10, custom11, custom12, custom13, custom14, custom15, custom16
+-- TASK TABLE (ID , CREATED , CLAIMED , COMPLETED , modified , planned , due , name , creator , description , note , priority, state , classification_category , classification_key, classification_id , workbasket_id , workbasket_key, domain , business_process_id, parent_business_process_id, owner , por_company , por_system , por_system_instance, por_type , por_value , is_read, is_transferred, custom_attributes, custom1, custom2, custom3, custom4, custom5, custom6, custom7, custom8, custom9, custom10, custom11, custom12, custom13, custom14, custom15, custom16
INSERT INTO TASKANA.TASK VALUES('TKI:000000000000000000000000000000000000', '2018-01-29 15:55:00', '2018-01-30 15:55:00', null , '2018-01-30 15:55:00', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Task99' , 'creator_user_id' , 'Lorem ipsum was n Quatsch dolor sit amet.', 'Some custom Note' , 1 , 'CLAIMED' , 'MANUAL' , 'T2000' , 'CLI:100000000000000000000000000000000016', 'WBI:100000000000000000000000000000000006' , 'USER_1_1' , 'DOMAIN_A', 'BPI21' , 'PBPI21' , 'user_1_1' , 'MyCompany1', 'MySystem1', 'MyInstance1' , 'MyType1', 'MyValue1' , true , false , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null );
INSERT INTO TASKANA.TASK VALUES('TKI:000000000000000000000000000000000001', '2018-01-29 15:55:01', '2018-01-30 15:55:00', null , '2018-01-30 15:55:01', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Task01' , 'creator_user_id' , 'Lorem ipsum was n Quatsch dolor sit amet.', 'Some custom Note' , 2 , 'CLAIMED' , 'EXTERN' , 'L110102' , 'CLI:100000000000000000000000000000000005', 'WBI:100000000000000000000000000000000006' , 'USER_1_1' , 'DOMAIN_A', 'BPI21' , 'PBPI21' , 'user_1_1' , 'MyCompany1', 'MySystem1', 'MyInstance1' , 'MyType1', 'MyValue1' , true , false , null , 'pqr' , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null );
INSERT INTO TASKANA.TASK VALUES('TKI:000000000000000000000000000000000002', '2018-01-29 15:55:02', '2018-01-30 15:55:00', null , '2018-01-30 15:55:02', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Task02' , 'creator_user_id' , 'Lorem ipsum was n Quatsch t. Aber stimmt.', 'Some custom Note' , 2 , 'CLAIMED' , 'MANUAL' , 'T2000' , 'CLI:100000000000000000000000000000000016', 'WBI:100000000000000000000000000000000006' , 'USER_1_1' , 'DOMAIN_A', 'BPI21' , 'PBPI21' , 'user_1_1' , 'MyCompany1', 'MySystem1', 'MyInstance1' , 'MyType1', 'MyValue1' , true , false , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null );
@@ -72,3 +72,5 @@ INSERT INTO TASKANA.TASK VALUES('TKI:000000000000000000000000000000000062', '201
INSERT INTO TASKANA.TASK VALUES('TKI:000000000000000000000000000000000063', '2018-01-29 15:55:22', null , null , '2018-01-29 15:55:22', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'creator_user_id' , 'Widerruf' , null , 2 , 'READY' , 'EXTERN' , 'L1060' , 'CLI:200000000000000000000000000000000017', 'WBI:100000000000000000000000000000000015' , 'USER_3_2' , 'DOMAIN_B', 'PI_0000000000022' , 'DOC_0000000000000000022' , null , '00' , 'PASystem' , '00' , 'SDNR' , '11223344' , false , false , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null );
INSERT INTO TASKANA.TASK VALUES('TKI:000000000000000000000000000000000064', '2018-01-29 15:55:23', null , null , '2018-01-29 15:55:23', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'creator_user_id' , 'Widerruf' , null , 2 , 'READY' , 'EXTERN' , 'L1060' , 'CLI:200000000000000000000000000000000017', 'WBI:100000000000000000000000000000000015' , 'USER_3_2' , 'DOMAIN_B', 'PI_0000000000020' , 'DOC_0000000000000000021' , null , '00' , 'PASystem' , '00' , 'SDNR' , '11223344' , false , false , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null );
INSERT INTO TASKANA.TASK VALUES('TKI:000000000000000000000000000000000065', '2018-01-29 15:55:24', null , null , '2018-01-29 15:55:24', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Widerruf' , 'creator_user_id' , 'Widerruf' , null , 2 , 'READY' , 'EXTERN' , 'L1060' , 'CLI:200000000000000000000000000000000017', 'WBI:100000000000000000000000000000000015' , 'USER_3_2' , 'DOMAIN_B', 'PI_0000000000024' , 'DOC_0000000000000000024' , null , '00' , 'PASystem' , '00' , 'SDNR' , '11223344' , false , false , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null );
+-- Tasks for TaskControllerIntTest
+INSERT INTO TASKANA.TASK VALUES('TKI:100000000000000000000000000000000000', '2018-01-29 15:55:00', '2018-01-30 15:55:00', null , '2018-01-30 15:55:00', '2018-01-29 15:55:00', '2018-01-30 15:55:00', 'Dynamikänderung' , 'creator_user_id' , 'Desc Dynamikänderung' , 'Some custom Note' , 1 , 'CLAIMED' , 'AUTOMATIC' , 'T6310' , 'CLI:100000000000000000000000000000000004', 'WBI:100000000000000000000000000000000004' , 'TEAMLEAD_1' , 'DOMAIN_A', 'BPI21' , 'PBPI21' , 'user_3_1' , 'MyCompany1', 'MySystem1', 'MyInstance1' , 'MyType1', '00000001' , true , false , null , null , null , null , null , null , null , null , null , null , null , null , null , null , 'abc' , null , null );
diff --git a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/TaskControllerIntTest.java b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/TaskControllerIntTest.java
index 39c7eb705..3ea2af79d 100644
--- a/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/TaskControllerIntTest.java
+++ b/rest/taskana-rest-spring-example/src/test/java/pro/taskana/rest/TaskControllerIntTest.java
@@ -1,12 +1,19 @@
package pro.taskana.rest;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.HttpURLConnection;
+import java.net.URL;
import java.util.Collections;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
@@ -51,7 +58,7 @@ public class TaskControllerIntTest {
new ParameterizedTypeReference>() {
});
assertNotNull(response.getBody().getLink(Link.REL_SELF));
- assertEquals(22, response.getBody().getContent().size());
+ assertEquals(23, response.getBody().getContent().size());
}
@Test
@@ -65,7 +72,7 @@ public class TaskControllerIntTest {
new ParameterizedTypeReference>() {
});
assertNotNull(response.getBody().getLink(Link.REL_SELF));
- assertEquals(70, response.getBody().getContent().size());
+ assertEquals(71, response.getBody().getContent().size());
}
@Test
@@ -87,26 +94,25 @@ public class TaskControllerIntTest {
}
@Test
- @Ignore
public void testGetLastPageSortedByDue() {
RestTemplate template = getRestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", "Basic YWRtaW46YWRtaW4="); // Role Admin
HttpEntity request = new HttpEntity(headers);
ResponseEntity> response = template.exchange(
- "http://127.0.0.1:" + port + "/v1/tasks?sortBy=due&order=desc&page=14&pageSize=5", HttpMethod.GET,
+ "http://127.0.0.1:" + port + "/v1/tasks?sortBy=por.value&order=desc&page=15&pageSize=5", HttpMethod.GET,
request,
new ParameterizedTypeReference>() {
});
- assertEquals(5, response.getBody().getContent().size());
- assertTrue(response.getBody().getLink(Link.REL_LAST).getHref().contains("page=14"));
- assertEquals("TKI:000000000000000000000000000000000004",
+ assertEquals(1, response.getBody().getContent().size());
+ assertTrue(response.getBody().getLink(Link.REL_LAST).getHref().contains("page=15"));
+ assertEquals("TKI:100000000000000000000000000000000000",
response.getBody().getContent().iterator().next().getTaskId());
assertNotNull(response.getBody().getLink(Link.REL_SELF));
assertTrue(response.getBody()
.getLink(Link.REL_SELF)
.getHref()
- .endsWith("/v1/tasks?sortBy=due&order=desc&page=14&pageSize=5"));
+ .endsWith("/v1/tasks?sortBy=por.value&order=desc&page=15&pageSize=5"));
assertNotNull(response.getBody().getLink("allTasks"));
assertTrue(response.getBody()
.getLink("allTasks")
@@ -129,15 +135,14 @@ public class TaskControllerIntTest {
request,
new ParameterizedTypeReference>() {
});
- int size = response.getBody().getContent().size();
- assertEquals(22, response.getBody().getContent().size());
+ assertEquals(23, response.getBody().getContent().size());
response = template.exchange(
- "http://127.0.0.1:" + port + "/v1/tasks?sortBy=due&order=desc&page=5&pageSize=5", HttpMethod.GET,
+ "http://127.0.0.1:" + port + "/v1/tasks?sortBy=por.value&order=desc&page=5&pageSize=5", HttpMethod.GET,
request,
new ParameterizedTypeReference>() {
});
- assertEquals(2, response.getBody().getContent().size());
+ assertEquals(3, response.getBody().getContent().size());
assertTrue(response.getBody().getLink(Link.REL_LAST).getHref().contains("page=5"));
assertEquals("TKI:000000000000000000000000000000000023",
response.getBody().getContent().iterator().next().getTaskId());
@@ -145,7 +150,7 @@ public class TaskControllerIntTest {
assertTrue(response.getBody()
.getLink(Link.REL_SELF)
.getHref()
- .endsWith("/v1/tasks?sortBy=due&order=desc&page=5&pageSize=5"));
+ .endsWith("/v1/tasks?sortBy=por.value&order=desc&page=5&pageSize=5"));
assertNotNull(response.getBody().getLink("allTasks"));
assertTrue(response.getBody()
.getLink("allTasks")
@@ -157,7 +162,6 @@ public class TaskControllerIntTest {
}
@Test
- @Ignore
public void testGetQueryByPorSecondPageSortedByType() {
RestTemplate template = getRestTemplate();
HttpHeaders headers = new HttpHeaders();
@@ -165,18 +169,20 @@ public class TaskControllerIntTest {
HttpEntity request = new HttpEntity(headers);
ResponseEntity> response = template.exchange(
"http://127.0.0.1:" + port
- + "/v1/tasks?porCompany=00&porSystem=PASystem&porInstance=00&porType=VNR&porValue=22334455&sortBy=porType&order=asc&page=2&pageSize=5",
+ + "/v1/tasks?por.company=00&por.system=PASystem&por.instance=00&por.type=VNR&por.value=22334455&sortBy=por.type&order=asc&page=2&pageSize=5",
HttpMethod.GET,
request,
new ParameterizedTypeReference>() {
});
- assertEquals(5, response.getBody().getContent().size());
- assertEquals("USER_1_1", response.getBody().getContent().iterator().next().getTaskId());
+ assertEquals(1, response.getBody().getContent().size());
+ assertEquals("TKI:000000000000000000000000000000000013",
+ response.getBody().getContent().iterator().next().getTaskId());
assertNotNull(response.getBody().getLink(Link.REL_SELF));
assertTrue(response.getBody()
.getLink(Link.REL_SELF)
.getHref()
- .endsWith("/v1/tasks?sortBy=due&order=desc&page=2&pageSize=5"));
+ .endsWith(
+ "/v1/tasks?por.company=00&por.system=PASystem&por.instance=00&por.type=VNR&por.value=22334455&sortBy=por.type&order=asc&page=2&pageSize=5"));
assertNotNull(response.getBody().getLink("allTasks"));
assertTrue(response.getBody()
.getLink("allTasks")
@@ -184,10 +190,62 @@ public class TaskControllerIntTest {
.endsWith("/v1/tasks"));
assertNotNull(response.getBody().getLink(Link.REL_FIRST));
assertNotNull(response.getBody().getLink(Link.REL_LAST));
- assertNotNull(response.getBody().getLink(Link.REL_NEXT));
assertNotNull(response.getBody().getLink(Link.REL_PREVIOUS));
}
+ @Test
+ public void testGetAndUpdateTask() throws IOException {
+ URL url = new URL("http://127.0.0.1:" + port + "/v1/tasks/TKI:100000000000000000000000000000000000");
+ HttpURLConnection con = (HttpURLConnection) url.openConnection();
+ con.setRequestMethod("GET");
+ con.setRequestProperty("Authorization", "Basic dGVhbWxlYWRfMTp0ZWFtbGVhZF8x");
+ assertEquals(200, con.getResponseCode());
+
+ BufferedReader in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+ String inputLine;
+ StringBuffer content = new StringBuffer();
+ while ((inputLine = in.readLine()) != null) {
+ content.append(inputLine);
+ }
+ in.close();
+ con.disconnect();
+ String originalTask = content.toString();
+
+ con = (HttpURLConnection) url.openConnection();
+ con.setRequestMethod("PUT");
+ con.setDoOutput(true);
+ con.setRequestProperty("Authorization", "Basic dGVhbWxlYWRfMTp0ZWFtbGVhZF8x");
+ con.setRequestProperty("Content-Type", "application/json");
+ BufferedWriter out = new BufferedWriter(new OutputStreamWriter(con.getOutputStream()));
+ out.write(content.toString());
+ out.flush();
+ out.close();
+ assertEquals(200, con.getResponseCode());
+ con.disconnect();
+
+ url = new URL("http://127.0.0.1:" + port + "/v1/tasks/TKI:100000000000000000000000000000000000");
+ con = (HttpURLConnection) url.openConnection();
+ con.setRequestMethod("GET");
+ con.setRequestProperty("Authorization", "Basic dGVhbWxlYWRfMTp0ZWFtbGVhZF8x");
+ assertEquals(200, con.getResponseCode());
+
+ in = new BufferedReader(
+ new InputStreamReader(con.getInputStream()));
+ content = new StringBuffer();
+ while ((inputLine = in.readLine()) != null) {
+ content.append(inputLine);
+ }
+ in.close();
+ con.disconnect();
+ String updatedTask = content.toString();
+
+ assertNotEquals(
+ originalTask.substring(originalTask.indexOf("modified"), originalTask.indexOf("modified") + 30),
+ updatedTask.substring(updatedTask.indexOf("modified"), updatedTask.indexOf("modified") + 30));
+
+ }
+
/**
* Return a REST template which is capable of dealing with responses in HAL format
*
@@ -200,6 +258,7 @@ public class TaskControllerIntTest {
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
+ // converter.setSupportedMediaTypes(ImmutableList.of(MediaTypes.HAL_JSON));
converter.setObjectMapper(mapper);
RestTemplate template = new RestTemplate(Collections.> singletonList(converter));
diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java
index d6bacd6b3..e9692d22c 100644
--- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java
+++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/TaskController.java
@@ -18,6 +18,7 @@ import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -30,7 +31,9 @@ import pro.taskana.TaskQuery;
import pro.taskana.TaskService;
import pro.taskana.TaskState;
import pro.taskana.TaskSummary;
+import pro.taskana.exceptions.AttachmentPersistenceException;
import pro.taskana.exceptions.ClassificationNotFoundException;
+import pro.taskana.exceptions.ConcurrencyException;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.InvalidOwnerException;
import pro.taskana.exceptions.InvalidStateException;
@@ -81,6 +84,9 @@ public class TaskController extends AbstractPagingController {
@Autowired
private TaskService taskService;
+ @Autowired
+ private TaskResourceAssembler taskResourceAssembler;
+
@GetMapping
@Transactional(readOnly = true, rollbackFor = Exception.class)
public ResponseEntity> getTasks(
@@ -120,7 +126,6 @@ public class TaskController extends AbstractPagingController {
public ResponseEntity getTask(@PathVariable String taskId)
throws TaskNotFoundException, NotAuthorizedException {
Task task = taskService.getTask(taskId);
- TaskResourceAssembler taskResourceAssembler = new TaskResourceAssembler();
ResponseEntity result = new ResponseEntity<>(taskResourceAssembler.toResource(task),
HttpStatus.OK);
return result;
@@ -133,7 +138,6 @@ public class TaskController extends AbstractPagingController {
// TODO verify user
taskService.claim(taskId);
Task updatedTask = taskService.getTask(taskId);
- TaskResourceAssembler taskResourceAssembler = new TaskResourceAssembler();
ResponseEntity result = new ResponseEntity<>(taskResourceAssembler.toResource(updatedTask),
HttpStatus.OK);
return result;
@@ -145,7 +149,6 @@ public class TaskController extends AbstractPagingController {
throws TaskNotFoundException, InvalidOwnerException, InvalidStateException, NotAuthorizedException {
taskService.completeTask(taskId, true);
Task updatedTask = taskService.getTask(taskId);
- TaskResourceAssembler taskResourceAssembler = new TaskResourceAssembler();
ResponseEntity result = new ResponseEntity<>(taskResourceAssembler.toResource(updatedTask),
HttpStatus.OK);
return result;
@@ -157,7 +160,6 @@ public class TaskController extends AbstractPagingController {
throws WorkbasketNotFoundException, ClassificationNotFoundException, NotAuthorizedException,
TaskAlreadyExistException, InvalidWorkbasketException, InvalidArgumentException {
Task createdTask = taskService.createTask(task);
- TaskResourceAssembler taskResourceAssembler = new TaskResourceAssembler();
ResponseEntity result = new ResponseEntity<>(taskResourceAssembler.toResource(createdTask),
HttpStatus.CREATED);
return result;
@@ -168,12 +170,33 @@ public class TaskController extends AbstractPagingController {
public ResponseEntity transferTask(@PathVariable String taskId, @PathVariable String workbasketKey)
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, InvalidWorkbasketException {
Task updatedTask = taskService.transfer(taskId, workbasketKey);
- TaskResourceAssembler taskResourceAssembler = new TaskResourceAssembler();
ResponseEntity result = new ResponseEntity<>(taskResourceAssembler.toResource(updatedTask),
HttpStatus.OK);
return result;
}
+ @PutMapping(path = "/{taskId}")
+ @Transactional(rollbackFor = Exception.class)
+ public ResponseEntity updateTask(
+ @PathVariable(value = "taskId") String taskId,
+ @RequestBody TaskResource taskResource) throws TaskNotFoundException, WorkbasketNotFoundException,
+ ClassificationNotFoundException, InvalidArgumentException, ConcurrencyException, InvalidWorkbasketException,
+ NotAuthorizedException, AttachmentPersistenceException {
+ ResponseEntity result;
+ if (taskId.equals(taskResource.getTaskId())) {
+ Task task = taskResourceAssembler.toModel(taskResource);
+ task = taskService.updateTask(task);
+ result = ResponseEntity.ok(taskResourceAssembler.toResource(task));
+ } else {
+ throw new InvalidArgumentException(
+ "TaskId ('" + taskId
+ + "') is not identical with the taskId of to object in the payload which should be updated. ID=('"
+ + taskResource.getTaskId() + "')");
+ }
+
+ return result;
+ }
+
private TaskQuery applyFilterParams(TaskQuery taskQuery, MultiValueMap params)
throws NotAuthorizedException, InvalidArgumentException {
diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/TaskResource.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/TaskResource.java
index d751aa297..fec122a4d 100644
--- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/TaskResource.java
+++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/TaskResource.java
@@ -12,7 +12,7 @@ import pro.taskana.TaskState;
import pro.taskana.impl.ObjectReference;
/**
- * Resource class for {@link pro.taskana.WorkbasketSummary}.
+ * Resource class for {@link pro.taskana.Task}.
*/
public class TaskResource extends ResourceSupport {
diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/ClassificationSummaryResourceAssembler.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/ClassificationSummaryResourceAssembler.java
index ec6f9ab3b..ebcd897e7 100644
--- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/ClassificationSummaryResourceAssembler.java
+++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/ClassificationSummaryResourceAssembler.java
@@ -1,18 +1,26 @@
package pro.taskana.rest.resource.mapper;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.hateoas.mvc.ResourceAssemblerSupport;
+import org.springframework.stereotype.Component;
+import pro.taskana.ClassificationService;
import pro.taskana.ClassificationSummary;
+import pro.taskana.impl.ClassificationImpl;
import pro.taskana.rest.ClassificationController;
import pro.taskana.rest.resource.ClassificationSummaryResource;
/**
* Resource assembler for {@link ClassificationSummaryResource}.
*/
+@Component
public class ClassificationSummaryResourceAssembler
extends ResourceAssemblerSupport {
+ @Autowired
+ private ClassificationService classificationService;
+
public ClassificationSummaryResourceAssembler() {
super(ClassificationController.class, ClassificationSummaryResource.class);
}
@@ -27,4 +35,14 @@ public class ClassificationSummaryResourceAssembler
return resource;
}
+ public ClassificationSummary toModel(ClassificationSummaryResource resource) {
+ ClassificationImpl classification = (ClassificationImpl) classificationService
+ .newClassification(
+ resource.getKey(), resource.getDomain(),
+ resource.getType());
+ classification.setId(resource.getClassificationId());
+ BeanUtils.copyProperties(resource, classification);
+ return classification.asSummary();
+ }
+
}
diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/TaskResourceAssembler.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/TaskResourceAssembler.java
index ed8444d63..4fbdb0728 100644
--- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/TaskResourceAssembler.java
+++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/TaskResourceAssembler.java
@@ -1,20 +1,33 @@
package pro.taskana.rest.resource.mapper;
+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 pro.taskana.Task;
+import pro.taskana.TaskService;
+import pro.taskana.impl.TaskImpl;
import pro.taskana.rest.TaskController;
import pro.taskana.rest.resource.TaskResource;
/**
* Resource assembler for {@link TaskResource}.
*/
+@Component
public class TaskResourceAssembler
extends ResourceAssemblerSupport {
- private WorkbasketSummaryResourceAssembler workbasketAssembler = new WorkbasketSummaryResourceAssembler();
- private ClassificationSummaryResourceAssembler classificationAssembler = new ClassificationSummaryResourceAssembler();
+ @Autowired
+ private TaskService taskService;
+
+ @Autowired
+ private ClassificationSummaryResourceAssembler classificationAssembler;
+
+ @Autowired
+ private WorkbasketSummaryResourceAssembler workbasketAssembler;
public TaskResourceAssembler() {
super(TaskController.class, TaskResource.class);
@@ -46,4 +59,28 @@ public class TaskResourceAssembler
return resource;
}
+ public Task toModel(TaskResource resource) {
+ TaskImpl task = (TaskImpl) taskService.newTask(resource.getWorkbasketSummaryResource().getWorkbasketId());
+ task.setId(resource.getTaskId());
+ BeanUtils.copyProperties(resource, task);
+ if (resource.getCreated() != null) {
+ task.setCreated(Instant.parse(resource.getCreated()));
+ }
+ if (resource.getModified() != null) {
+ task.setModified(Instant.parse(resource.getModified().toString()));
+ }
+ if (resource.getClaimed() != null) {
+ task.setClaimed(Instant.parse(resource.getClaimed().toString()));
+ }
+ if (resource.getCompleted() != null) {
+ task.setCompleted(Instant.parse(resource.getCompleted().toString()));
+ }
+ if (resource.getDue() != null) {
+ task.setDue(Instant.parse(resource.getDue().toString()));
+ }
+ task.setClassificationSummary(classificationAssembler.toModel(resource.getClassificationSummaryResource()));
+ task.setWorkbasketSummary(workbasketAssembler.toModel(resource.getWorkbasketSummaryResource()));
+ return task;
+ }
+
}
diff --git a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/WorkbasketSummaryResourceAssembler.java b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/WorkbasketSummaryResourceAssembler.java
index 8257afaef..bf563f2b7 100644
--- a/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/WorkbasketSummaryResourceAssembler.java
+++ b/rest/taskana-rest-spring/src/main/java/pro/taskana/rest/resource/mapper/WorkbasketSummaryResourceAssembler.java
@@ -1,18 +1,26 @@
package pro.taskana.rest.resource.mapper;
import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.hateoas.mvc.ResourceAssemblerSupport;
+import org.springframework.stereotype.Component;
+import pro.taskana.WorkbasketService;
import pro.taskana.WorkbasketSummary;
+import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.rest.WorkbasketController;
import pro.taskana.rest.resource.WorkbasketSummaryResource;
/**
* @author HH
*/
+@Component
public class WorkbasketSummaryResourceAssembler
extends ResourceAssemblerSupport {
+ @Autowired
+ private WorkbasketService workbasketService;
+
public WorkbasketSummaryResourceAssembler() {
super(WorkbasketController.class, WorkbasketSummaryResource.class);
}
@@ -26,4 +34,12 @@ public class WorkbasketSummaryResourceAssembler
return resource;
}
+ public WorkbasketSummary toModel(WorkbasketSummaryResource resource) {
+ WorkbasketImpl workbasket = (WorkbasketImpl) workbasketService
+ .newWorkbasket(resource.getKey(), resource.getDomain());
+ workbasket.setId(resource.getWorkbasketId());
+ BeanUtils.copyProperties(resource, workbasket);
+ return workbasket.asSummary();
+ }
+
}