TSK-90 Update Workbasket add domain and type

This commit is contained in:
BerndBreier 2017-12-13 18:51:03 +01:00 committed by Holger Hagen
parent 657cbe5e75
commit 791025fde0
46 changed files with 2222 additions and 1063 deletions

View File

@ -9,6 +9,7 @@ import javax.enterprise.event.Observes;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidOwnerException; import pro.taskana.exceptions.InvalidOwnerException;
import pro.taskana.exceptions.InvalidStateException; import pro.taskana.exceptions.InvalidStateException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
@ -23,7 +24,8 @@ public class ExampleBootstrap {
@PostConstruct @PostConstruct
public void init(@Observes @Initialized(ApplicationScoped.class) Object init) public void init(@Observes @Initialized(ApplicationScoped.class) Object init)
throws TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, throws TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException,
ClassificationNotFoundException, InvalidStateException, InvalidOwnerException, TaskAlreadyExistException { ClassificationNotFoundException, InvalidStateException, InvalidOwnerException, InvalidWorkbasketException,
TaskAlreadyExistException {
System.out.println("---------------------------> Start App"); System.out.println("---------------------------> Start App");
Task task = taskanaEjb.getTaskService().newTask(); Task task = taskanaEjb.getTaskService().newTask();
task = taskanaEjb.getTaskService().createTask(task); task = taskanaEjb.getTaskService().createTask(task);
@ -35,4 +37,5 @@ public class ExampleBootstrap {
taskanaEjb.getTaskService().completeTask(task.getId()); taskanaEjb.getTaskService().completeTask(task.getId());
System.out.println("---------------------------> Task completed"); System.out.println("---------------------------> Task completed");
} }
} }

View File

@ -4,6 +4,7 @@ import javax.ejb.Stateless;
import javax.inject.Inject; import javax.inject.Inject;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
@ -33,7 +34,7 @@ public class TaskanaEjb {
} }
public void triggerRollback() throws NotAuthorizedException, WorkbasketNotFoundException, public void triggerRollback() throws NotAuthorizedException, WorkbasketNotFoundException,
ClassificationNotFoundException, TaskAlreadyExistException { ClassificationNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException {
Task task = taskService.newTask(); Task task = taskService.newTask();
taskService.createTask(task); taskService.createTask(task);
System.out.println("---------------->" + task.getId()); System.out.println("---------------->" + task.getId());

View File

@ -16,10 +16,12 @@ import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidOwnerException; import pro.taskana.exceptions.InvalidOwnerException;
import pro.taskana.exceptions.InvalidStateException; import pro.taskana.exceptions.InvalidStateException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.WorkbasketType;
@Path("/test") @Path("/test")
public class TaskanaRestTest { public class TaskanaRestTest {
@ -34,10 +36,13 @@ public class TaskanaRestTest {
@GET @GET
public Response startTask() throws NotAuthorizedException, WorkbasketNotFoundException, public Response startTask() throws NotAuthorizedException, WorkbasketNotFoundException,
ClassificationNotFoundException, ClassificationAlreadyExistException, TaskAlreadyExistException { ClassificationNotFoundException, ClassificationAlreadyExistException, InvalidWorkbasketException,
TaskAlreadyExistException {
Workbasket workbasket = taskanaEjb.getWorkbasketService().newWorkbasket(); Workbasket workbasket = taskanaEjb.getWorkbasketService().newWorkbasket();
;
workbasket.setName("wb"); workbasket.setName("wb");
workbasket.setKey("key");
workbasket.setDomain("cdiDomain");
workbasket.setType(WorkbasketType.PERSONAL);
taskanaEjb.getWorkbasketService().createWorkbasket(workbasket); taskanaEjb.getWorkbasketService().createWorkbasket(workbasket);
Classification classification = classificationService.newClassification(); Classification classification = classificationService.newClassification();
classification.setKey("TEST"); classification.setKey("TEST");
@ -45,17 +50,17 @@ public class TaskanaRestTest {
Task task = taskanaEjb.getTaskService().newTask(); Task task = taskanaEjb.getTaskService().newTask();
task.setClassification(classification); task.setClassification(classification);
task.setWorkbasketId(workbasket.getId()); task.setWorkbasketKey(workbasket.getKey());
Task result = taskanaEjb.getTaskService().createTask(task);
Task resultTask = taskanaEjb.getTaskService().createTask(task); logger.info(result.getId() + ":" + result.getOwner());
return Response.status(200).entity(result.getId()).build();
logger.info(resultTask.getId() + ":" + resultTask.getOwner());
return Response.status(200).entity(resultTask.getId()).build();
} }
@POST @POST
public Response rollbackTask() throws NotAuthorizedException, WorkbasketNotFoundException, public Response rollbackTask()
ClassificationNotFoundException, TaskAlreadyExistException { throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException,
InvalidWorkbasketException, TaskAlreadyExistException {
taskanaEjb.triggerRollback(); taskanaEjb.triggerRollback();
return Response.status(204).build(); return Response.status(204).build();
} }

View File

@ -13,283 +13,347 @@ public interface Task {
/** /**
* Returns the current id of the task. * Returns the current id of the task.
*
* @return taskId * @return taskId
*/ */
String getId(); String getId();
/** /**
* Returns the time when the task was {@link TaskState#READY}. * Returns the time when the task was {@link TaskState#READY}.
*
* @return created as exact {@link Timestamp} * @return created as exact {@link Timestamp}
*/ */
Timestamp getCreated(); Timestamp getCreated();
/** /**
* Returns the time when the task was set to {@link TaskState#CLAIMED} by/to a user. * Returns the time when the task was set to {@link TaskState#CLAIMED} by/to a user.
*
* @return claimed as exact {@link Timestamp} * @return claimed as exact {@link Timestamp}
*/ */
Timestamp getClaimed(); Timestamp getClaimed();
/** /**
* Returns the time when the task was set into {@link TaskState#COMPLETED}. * Returns the time when the task was set into {@link TaskState#COMPLETED}.
*
* @return completed as exact {@link Timestamp} * @return completed as exact {@link Timestamp}
*/ */
Timestamp getCompleted(); Timestamp getCompleted();
/** /**
* Returns the time when the task was modified the last time. * Returns the time when the task was modified the last time.
*
* @return modified as exact {@link Timestamp} * @return modified as exact {@link Timestamp}
*/ */
Timestamp getModified(); Timestamp getModified();
/** /**
* Returns the time when the work on this task was planned to be started. * Returns the time when the work on this task was planned to be started.
*
* @return planned as exact {@link Timestamp} * @return planned as exact {@link Timestamp}
*/ */
Timestamp getPlanned(); Timestamp getPlanned();
/** /**
* Sets the time when the work on this task should be started. * Sets the time when the work on this task should be started.
* @param planned as exact {@link Timestamp} *
* @param planned
* as exact {@link Timestamp}
*/ */
void setPlanned(Timestamp planned); void setPlanned(Timestamp planned);
/** /**
* Returns the time when this task should be finished. * Returns the time when this task should be finished.
*
* @return due as exact {@link Timestamp} * @return due as exact {@link Timestamp}
*/ */
Timestamp getDue(); Timestamp getDue();
/** /**
* Return the name of the current task. * Return the name of the current task.
*
* @return name of the task * @return name of the task
*/ */
String getName(); String getName();
/** /**
* Sets the name of the current task. * Sets the name of the current task.
* @param name of the task *
* @param name
* the name of the task
*/ */
void setName(String name); void setName(String name);
/** /**
* Return the task-description. * Return the task-description.
*
* @return description of a task * @return description of a task
*/ */
String getDescription(); String getDescription();
/** /**
* Sets the description of the task. * Sets the description of the task.
* @param description of the task *
* @param description
* the description of the task
*/ */
void setDescription(String description); void setDescription(String description);
/** /**
* Returns the numeric priority of a task. * Returns the numeric priority of a task.
*
* @return priority of the task * @return priority of the task
*/ */
int getPriority(); int getPriority();
/** /**
* Returns the current {@link TaskState} of the task. * Returns the current {@link TaskState} of the task.
*
* @return taskState * @return taskState
*/ */
TaskState getState(); TaskState getState();
/** /**
* Returns the {@link Classification} of the task. * Returns the {@link Classification} of the task.
*
* @return classification for specification * @return classification for specification
*/ */
Classification getClassification(); Classification getClassification();
/** /**
* Sets the {@link Classification} to specify this kind of task. * Sets the {@link Classification} to specify this kind of task.
* @param classification of the task *
* @param classification
* the classification of the task
*/ */
void setClassification(Classification classification); void setClassification(Classification classification);
/** /**
* Returns the id of the Workbasket where the task is stored in. * Returns the key of the Workbasket where the task is stored in.
* @return workbasketId *
* @return workbasketKey
*/ */
String getWorkbasketId(); String getWorkbasketKey();
/** /**
* Sets the id of the Workbasket where the task should be stored in. * Sets the key of the Workbasket where the task should be stored in.
* @param workbasketId *
* @param workbasketKey
* the key of the workbasket
*/ */
void setWorkbasketId(String workbasketId); void setWorkbasketKey(String workbasketKey);
/** /**
* Returns the businessProcessId of a task. * Returns the businessProcessId of a task.
*
* @return businessProcessId * @return businessProcessId
*/ */
String getBusinessProcessId(); String getBusinessProcessId();
/** /**
* Returns the parentBusinessProcessId of a task. * Returns the parentBusinessProcessId of a task.
*
* @return parentBusinessProcessId * @return parentBusinessProcessId
*/ */
String getParentBusinessProcessId(); String getParentBusinessProcessId();
/** /**
* Return the id of the task-owner. * Return the id of the task-owner.
*
* @return taskOwnerId * @return taskOwnerId
*/ */
String getOwner(); String getOwner();
/** /**
* Sets the ownerId of this task. * Sets the ownerId of this task.
*
* @param taskOwnerId * @param taskOwnerId
* the user id of the task's owner
*/ */
void setOwner(String taskOwnerId); void setOwner(String taskOwnerId);
/** /**
* Returns the {@link ObjectReference primaryObjectReference} of the task. * Returns the {@link ObjectReference primaryObjectReference} of the task.
*
* @return primaryObjRef to task main-subject * @return primaryObjRef to task main-subject
*/ */
ObjectReference getPrimaryObjRef(); ObjectReference getPrimaryObjRef();
/** /**
* Sets the {@link ObjectReference primaryObjectReference} of the task. * Sets the {@link ObjectReference primaryObjectReference} of the task.
* @param primaryObjRef to task main-subject *
* @param primaryObjRef
* to task main-subject
*/ */
void setPrimaryObjRef(ObjectReference primaryObjRef); void setPrimaryObjRef(ObjectReference primaryObjRef);
/** /**
* Return the isRead-flag, which flags a task as viewed at least one time. * Return the isRead-flag, which flags a task as viewed at least one time.
*
* @return isRead-flag * @return isRead-flag
*/ */
boolean isRead(); boolean isRead();
/** /**
* Return the isTransferred-flag, which flags a task as transfered into an other workbasket. * Return the isTransferred-flag, which flags a task as transfered into an other workbasket.
*
* @return isTransferred-flag * @return isTransferred-flag
*/ */
boolean isTransferred(); boolean isTransferred();
/** /**
* Returns a collection of customAttributes with a max. amount of 10 entries. * Returns a collection of customAttributes with a max. amount of 10 entries.
*
* @return customAttributes as {@link Map} * @return customAttributes as {@link Map}
*/ */
Map<String, Object> getCustomAttributes(); Map<String, Object> getCustomAttributes();
/** /**
* Return the key for the 1. customAttribute. * Return the value for the 1. customAttribute.
*
* @return custom1 * @return custom1
*/ */
String getCustom1(); String getCustom1();
/** /**
* Sets the key for customAttribute1. * Sets the value for customAttribute1.
*
* @param custom1 * @param custom1
* the custom1 property of the task
*/ */
void setCustom1(String custom1); void setCustom1(String custom1);
/** /**
* Return the key for the 2. customAttribute. * Return the value for the 2. customAttribute.
*
* @return custom2 * @return custom2
*/ */
String getCustom2(); String getCustom2();
/** /**
* Sets the key for customAttribute2. * Sets the value for customAttribute2.
*
* @param custom2 * @param custom2
* the custom2 property of the task
*/ */
void setCustom2(String custom2); void setCustom2(String custom2);
/** /**
* Return the key for the 3. customAttribute. * Return the value for the 3. customAttribute.
*
* @return custom3 * @return custom3
*/ */
String getCustom3(); String getCustom3();
/** /**
* Sets the key for customAttribute3. * Sets the value for customAttribute3.
*
* @param custom3 * @param custom3
* the custom3 property of the task
*/ */
void setCustom3(String custom3); void setCustom3(String custom3);
/** /**
* Return the key for the 4. customAttribute. * Return the value for the 4. customAttribute.
*
* @return custom4 * @return custom4
*/ */
String getCustom4(); String getCustom4();
/** /**
* Sets the key for customAttribute4. * Sets the value for customAttribute4.
*
* @param custom4 * @param custom4
* the custom4 property of the task
*/ */
void setCustom4(String custom4); void setCustom4(String custom4);
/** /**
* Return the key for the 5. customAttribute. * Return the value for the 5. customAttribute.
*
* @return custom5 * @return custom5
*/ */
String getCustom5(); String getCustom5();
/** /**
* Sets the key for customAttribute25. * Sets the value for customAttribute25.
*
* @param custom5 * @param custom5
* the custom5 property of the task
*/ */
void setCustom5(String custom5); void setCustom5(String custom5);
/** /**
* Return the key for the 6. customAttribute. * Return the value for the 6. customAttribute.
*
* @return custom6 * @return custom6
*/ */
String getCustom6(); String getCustom6();
/** /**
* Sets the key for customAttribute6. * Sets the value for customAttribute6.
*
* @param custom6 * @param custom6
* the custom6 property of the task
*/ */
void setCustom6(String custom6); void setCustom6(String custom6);
/** /**
* Return the key for the 7. customAttribute. * Return the value for the 7. customAttribute.
*
* @return custom7 * @return custom7
*/ */
String getCustom7(); String getCustom7();
/** /**
* Sets the key for customAttribute7. * Sets the value for customAttribute7.
*
* @param custom7 * @param custom7
* the custom7 property of the task
*/ */
void setCustom7(String custom7); void setCustom7(String custom7);
/** /**
* Return the key for the 8. customAttribute. * Return the value for the 8. customAttribute.
*
* @return custom8 * @return custom8
*/ */
String getCustom8(); String getCustom8();
/** /**
* Sets the key for customAttribute8. * Sets the value for customAttribute8.
*
* @param custom8 * @param custom8
* the custom8 property of the task
*/ */
void setCustom8(String custom8); void setCustom8(String custom8);
/** /**
* Return the key for the 9. customAttribute. * Return the value for the 9. customAttribute.
*
* @return custom9 * @return custom9
*/ */
String getCustom9(); String getCustom9();
/** /**
* Sets the key for customAttribute9. * Sets the value for customAttribute9.
*
* @param custom9 * @param custom9
* the custom9 property of the task
*/ */
void setCustom9(String custom9); void setCustom9(String custom9);
/** /**
* Return the key for the 10. customAttribute. * Return the value for the 10. customAttribute.
*
* @return custom10 * @return custom10
*/ */
String getCustom10(); String getCustom10();
/** /**
* Sets the key for customAttribute10. * Sets the value for customAttribute10.
*
* @param custom10 * @param custom10
* the custom10 property of the task
*/ */
void setCustom10(String custom10); void setCustom10(String custom10);
} }

View File

@ -10,6 +10,7 @@ public interface TaskQuery extends BaseQuery<Task> {
/** /**
* Add your names to your query. * Add your names to your query.
*
* @param name * @param name
* the names as Strings * the names as Strings
* @return the query * @return the query
@ -17,8 +18,9 @@ public interface TaskQuery extends BaseQuery<Task> {
TaskQuery name(String... name); TaskQuery name(String... name);
/** /**
* Add your description to your query. It will be compared in SQL with an LIKE. * Add your description to your query. It will be compared in SQL with an LIKE. If you use a wildcard like % tehn it
* If you use a wildcard like % tehn it will be transmitted to the database. * will be transmitted to the database.
*
* @param description * @param description
* your description * your description
* @return the query * @return the query
@ -27,6 +29,7 @@ public interface TaskQuery extends BaseQuery<Task> {
/** /**
* Add your priorities to your query. * Add your priorities to your query.
*
* @param priorities * @param priorities
* as a integer * as a integer
* @return the query * @return the query
@ -35,6 +38,7 @@ public interface TaskQuery extends BaseQuery<Task> {
/** /**
* Add your state to your query. * Add your state to your query.
*
* @param states * @param states
* the states as {@link TaskState} * the states as {@link TaskState}
* @return the query * @return the query
@ -42,8 +46,8 @@ public interface TaskQuery extends BaseQuery<Task> {
TaskQuery state(TaskState... states); TaskQuery state(TaskState... states);
/** /**
* Add your classification to your query. The classification query can be * Add your classification to your query. The classification query can be obtained from the ClassificationService
* obtained from the ClassificationService *
* @param classificationQuery * @param classificationQuery
* the classification query * the classification query
* @return the query * @return the query
@ -51,17 +55,19 @@ public interface TaskQuery extends BaseQuery<Task> {
TaskQuery classification(ClassificationQuery classificationQuery); TaskQuery classification(ClassificationQuery classificationQuery);
/** /**
* Add your workbasket id to the query. * Add your workbasket key to the query.
* @param workbasketIds *
* the workbasket ids as String * @param workbasketKeys
* the workbasket keys as String
* @return the query * @return the query
* @throws NotAuthorizedException * @throws NotAuthorizedException
* if the user have no rights * if the user have no rights
*/ */
TaskQuery workbasketId(String... workbasketIds) throws NotAuthorizedException; TaskQuery workbasketKeyIn(String... workbasketKeys) throws NotAuthorizedException;
/** /**
* Add the owners to your query. * Add the owners to your query.
*
* @param owners * @param owners
* the owners as String * the owners as String
* @return the query * @return the query
@ -69,8 +75,8 @@ public interface TaskQuery extends BaseQuery<Task> {
TaskQuery owner(String... owners); TaskQuery owner(String... owners);
/** /**
* Add your objectReference to your query. The objectReference query can be * Add your objectReference to your query. The objectReference query can be obtained from the TaskService
* obtained from the TaskService *
* @param objectReferenceQuery * @param objectReferenceQuery
* the objectReference query * the objectReference query
* @return the query * @return the query
@ -79,25 +85,25 @@ public interface TaskQuery extends BaseQuery<Task> {
/** /**
* Add the isRead flag to the query. * Add the isRead flag to the query.
*
* @param isRead * @param isRead
* as Boolean. If null, it won't be integrated into the statement. * as Boolean. If null, it won't be integrated into the statement. You have to set false.
* You have to set false.
* @return the query * @return the query
*/ */
TaskQuery read(Boolean isRead); TaskQuery read(Boolean isRead);
/** /**
* Add the isTransferred flag to the query. * Add the isTransferred flag to the query.
*
* @param isTransferred * @param isTransferred
* as Boolean. If null, it won't be integrated into the statement. * as Boolean. If null, it won't be integrated into the statement. You have to set false.
* You have to set false.
* @return the query * @return the query
*/ */
TaskQuery transferred(Boolean isTransferred); TaskQuery transferred(Boolean isTransferred);
/** /**
* Filter the custom fields with this query. The scan will be run over all 10 * Filter the custom fields with this query. The scan will be run over all 10 fields.
* fields. *
* @param customFields * @param customFields
* the value in the fields * the value in the fields
* @return the query * @return the query
@ -106,6 +112,7 @@ public interface TaskQuery extends BaseQuery<Task> {
/** /**
* This method provides a query builder for quering the database. * This method provides a query builder for quering the database.
*
* @return a {@link ObjectReferenceQuery} * @return a {@link ObjectReferenceQuery}
*/ */
ObjectReferenceQuery createObjectReferenceQuery(); ObjectReferenceQuery createObjectReferenceQuery();

View File

@ -5,6 +5,7 @@ import java.util.List;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidOwnerException; import pro.taskana.exceptions.InvalidOwnerException;
import pro.taskana.exceptions.InvalidStateException; import pro.taskana.exceptions.InvalidStateException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
@ -97,10 +98,12 @@ public interface TaskService {
* thrown if the work basket referenced by the task is not found * thrown if the work basket referenced by the task is not found
* @throws ClassificationNotFoundException * @throws ClassificationNotFoundException
* thrown if the {@link Classification} referenced by the task is not found * thrown if the {@link Classification} referenced by the task is not found
* @throws InvalidWorkbasketException
* thrown if the referenced Workbasket has missing required properties
*/ */
Task createTask(Task taskToCreate) Task createTask(Task taskToCreate)
throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException,
TaskAlreadyExistException; TaskAlreadyExistException, InvalidWorkbasketException;
/** /**
* Get the details of a task by Id. * Get the details of a task by Id.
@ -118,8 +121,8 @@ public interface TaskService {
* *
* @param taskId * @param taskId
* The id of the {@link Task} to be transferred * The id of the {@link Task} to be transferred
* @param workbasketId * @param workbasketKey
* The id of the target work basket * The key of the target work basket
* @return the transferred task * @return the transferred task
* @throws TaskNotFoundException * @throws TaskNotFoundException
* Thrown if the {@link Task} with taskId was not found. * Thrown if the {@link Task} with taskId was not found.
@ -127,9 +130,11 @@ public interface TaskService {
* Thrown if the target work basket was not found. * Thrown if the target work basket was not found.
* @throws NotAuthorizedException * @throws NotAuthorizedException
* Thrown if the current user is not authorized to transfer this {@link Task} to the target work basket * Thrown if the current user is not authorized to transfer this {@link Task} to the target work basket
* @throws InvalidWorkbasketException
* Thrown if either the source or the target workbasket has a missing required property
*/ */
Task transfer(String taskId, String workbasketId) Task transfer(String taskId, String workbasketKey)
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException; throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, InvalidWorkbasketException;
/** /**
* Marks a task as read. * Marks a task as read.
@ -154,8 +159,8 @@ public interface TaskService {
/** /**
* Getting a list of all Tasks which got matching workbasketIds and states. * Getting a list of all Tasks which got matching workbasketIds and states.
* *
* @param workbasketId * @param workbasketKey
* where the tasks need to be in. * the key of the workbasket where the tasks need to be in.
* @param taskState * @param taskState
* which is required for the request, * which is required for the request,
* @return a filled/empty list of tasks with attributes which are matching given params. * @return a filled/empty list of tasks with attributes which are matching given params.
@ -164,19 +169,22 @@ public interface TaskService {
* @throws NotAuthorizedException * @throws NotAuthorizedException
* if the current user got no rights for reading on this work basket. * if the current user got no rights for reading on this work basket.
*/ */
List<Task> getTasksByWorkbasketIdAndState(String workbasketId, TaskState taskState) List<Task> getTasksByWorkbasketKeyAndState(String workbasketKey, TaskState taskState)
throws WorkbasketNotFoundException, NotAuthorizedException; throws WorkbasketNotFoundException, NotAuthorizedException;
/** /**
* Getting a short summary of all tasks in a specific work basket. * Getting a short summary of all tasks in a specific work basket.
* *
* @param workbasketId * @param workbasketKey
* ID of work basket where tasks are located. * Key of work basket where tasks are located.
* @return TaskSummaryList with all TaskSummaries of a work basket * @return TaskSummaryList with all TaskSummaries of a work basket
* @throws WorkbasketNotFoundException * @throws WorkbasketNotFoundException
* if a Work basket can´t be located. * if a Work basket can´t be located.
* @throws InvalidWorkbasketException
* thrown if the Workbasket specified with workbasketId has a missing required property
*/ */
List<TaskSummary> getTaskSummariesByWorkbasketId(String workbasketId) throws WorkbasketNotFoundException; List<TaskSummary> getTaskSummariesByWorkbasketKey(String workbasketKey)
throws WorkbasketNotFoundException, InvalidWorkbasketException;
/** /**
* Returns a not persisted instance of {@link Task}. * Returns a not persisted instance of {@link Task}.

View File

@ -3,74 +3,136 @@ package pro.taskana;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.List; import java.util.List;
/** import pro.taskana.model.WorkbasketType;
* Workbasket entity interface.
*/
public interface Workbasket {
/** /**
* Returns the unique id of a workbasket. * Workbasket entity interface.
* @return workbasketId */
*/ public interface Workbasket {
/**
* Returns the unique id of a workbasket.
*
* @return workbasketId
*/
String getId(); String getId();
/** /**
* Returns the timestamp when the workbasket was created. * Returns the timestamp when the workbasket was created.
*
* @return created timestamp * @return created timestamp
*/ */
Timestamp getCreated(); Timestamp getCreated();
/**
* Returns the key of the workbasket.
*
* @return the key of the workbasket
*/
String getKey();
/**
* Set the key of the workbasket.
*
* @param key
* the key of the workbasket
*/
void setKey(String key);
/**
* Returns the domain of the workbasket.
*
* @return domain of the workbasket
*/
String getDomain();
/**
* Set the domain of the workbasket.
*
* @param domain
* the domain of the workbasket
*/
void setDomain(String domain);
/**
* Returns the type of the workbasket.
*
* @return the type of the workbasket
*/
WorkbasketType getType();
/**
* Sets the type of the workbasket.
*
* @param type
* the type of the workbasket
*/
void setType(WorkbasketType type);
/** /**
* Returns the timestamp when the workbasket was modified the last time. * Returns the timestamp when the workbasket was modified the last time.
*
* @return modified timestamp * @return modified timestamp
*/ */
Timestamp getModified(); Timestamp getModified();
/** /**
* Sets the time when the workbasket was modified the last time. * Sets the time when the workbasket was modified the last time.
* @param modified timestamp *
* @param modified
* the timestamp when the workbasket was last modified
*/ */
void setModified(Timestamp modified); void setModified(Timestamp modified);
/** /**
* Returns the name of the workbasket. * Returns the name of the workbasket.
*
* @return workbasketName * @return workbasketName
*/ */
String getName(); String getName();
/** /**
* Sets the name of the workbasket. * Sets the name of the workbasket.
*
* @param workbasketName * @param workbasketName
* the name of the workbasket
*/ */
void setName(String workbasketName); void setName(String workbasketName);
/** /**
* Returns the workbasket-descriptions. * Returns the workbasket-descriptions.
*
* @return description * @return description
*/ */
String getDescription(); String getDescription();
/** /**
* Sets the workbasket-descriptions. * Sets the workbasket-descriptions.
*
* @param description * @param description
* the description of the workbasket
*/ */
void setDescription(String description); void setDescription(String description);
/** /**
* Returns the Id of the workbasket-owner. * Returns the Id of the workbasket-owner.
*
* @return ownerId * @return ownerId
*/ */
String getOwner(); String getOwner();
/** /**
* Returns a list of all distribution targets. * Returns a list of all distribution targets.
*
* @return distributionTargets * @return distributionTargets
*/ */
List<Workbasket> getDistributionTargets(); List<Workbasket> getDistributionTargets();
/** /**
* Sets the list of distribution targets for this workbasket. * Sets the list of distribution targets for this workbasket.
*
* @param distributionTargets * @param distributionTargets
* the distribution targets of the workbasket
*/ */
void setDistributionTargets(List<Workbasket> distributionTargets); void setDistributionTargets(List<Workbasket> distributionTargets);
} }

View File

@ -4,37 +4,89 @@ import java.util.Date;
import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketType;
/** /**
* WorkitemQuery for generating dynamic sql. * WorkitemQuery for generating dynamic sql.
*/ */
public interface WorkbasketQuery extends BaseQuery<Workbasket> { public interface WorkbasketQuery extends BaseQuery<Workbasket> {
/**
* Add your keys to your query.
*
* @param key
* the keys as Strings
* @return the query
*/
WorkbasketQuery keyIn(String... key);
/** /**
* Add your names to your query. * Add your names to your query.
*
* @param name * @param name
* the names as Strings * the names as Strings
* @return the query * @return the query
*/ */
WorkbasketQuery name(String... name); WorkbasketQuery nameIn(String... name);
/** /**
* Add your created-Dates to your query. * Add your domains to your query.
* @param created TODO *
* @return TODO * @param domain
* the domains as Strings
* @return the query
*/ */
WorkbasketQuery created(Date... created); WorkbasketQuery domainIn(String... domain);
/** /**
* Add your modified-Dates to your query. * Add your types to your query.
* @param created TODO *
* @return TODO * @param type
* the types
* @return the query
*/ */
WorkbasketQuery modified(Date... created); WorkbasketQuery typeIn(WorkbasketType... type);
/** /**
* Add your description to your query. It will be compared in SQL with an LIKE. * Add your createdAfter-Date to your query.
* If you use a wildcard like % tehn it will be transmitted to the database. *
* @param createdAfter
* the date after which the searched Workbaskets are created
* @return the query
*/
WorkbasketQuery createdAfter(Date createdAfter);
/**
* Add your createdBefore-Date to your query.
*
* @param createdBefore
* the date before which the searched Workbaskets are created
* @return the query
*/
WorkbasketQuery createdBefore(Date createdBefore);
/**
* Add your modifiedAfter-Date to your query.
*
* @param modifiedAfter
* the date after which the searched Workbaskets are modified
* @return the query
*/
WorkbasketQuery modifiedAfter(Date modifiedAfter);
/**
* Add your modifiedBefore-Date to your query.
*
* @param modifiedBefore
* the date before which the searched Workbaskets are modified
* @return the query
*/
WorkbasketQuery modifiedBefore(Date modifiedBefore);
/**
* Add your description to your query. It will be compared in SQL with an LIKE. If you use a wildcard like % tehn it
* will be transmitted to the database.
*
* @param description * @param description
* your description * your description
* @return the query * @return the query
@ -43,20 +95,23 @@ public interface WorkbasketQuery extends BaseQuery<Workbasket> {
/** /**
* Add the owners to your query. * Add the owners to your query.
*
* @param owners * @param owners
* the owners as String * the owners as String
* @return the query * @return the query
*/ */
WorkbasketQuery owner(String... owners); WorkbasketQuery ownerIn(String... owners);
/** /**
* Add the access requested. * Add the access requested.
*
* @param permission * @param permission
* the permissions requested * the permissions requested
* @param accessIds * @param accessIds
* the accessIds as String * the accessIds as String
* @return the query * @return the query
* @throws InvalidArgumentException TODO * @throws InvalidArgumentException
* if any argument is not specified
*/ */
WorkbasketQuery access(WorkbasketAuthorization permission, String... accessIds) throws InvalidArgumentException; WorkbasketQuery access(WorkbasketAuthorization permission, String... accessIds) throws InvalidArgumentException;

View File

@ -2,57 +2,91 @@ package pro.taskana;
import java.util.List; import java.util.List;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
/** /**
* This service manages the Workbaskets. * This service manages Workbaskets.
*/ */
public interface WorkbasketService { public interface WorkbasketService {
/** /**
* Get Workbasket for a given id. * Get Workbasket for a given id.
* @param workbasketId TODO *
* @param workbasketId
* the Id of the Workbasket requested
* @return the requested Workbasket * @return the requested Workbasket
* @throws WorkbasketNotFoundException TODO * @throws WorkbasketNotFoundException
* If the Workbasket with workbasketId is not found
* @throws InvalidWorkbasketException
* If required properties are missing in the found Workbasket
*/ */
Workbasket getWorkbasket(String workbasketId) throws WorkbasketNotFoundException; Workbasket getWorkbasket(String workbasketId) throws WorkbasketNotFoundException, InvalidWorkbasketException;
/**
* Get Workbasket for a given key.
*
* @param workbasketKey
* the Key of the Workbasket requested
* @return the requested Workbasket
* @throws WorkbasketNotFoundException
* If the Workbasket with workbasketId is not found
* @throws InvalidWorkbasketException
* If required properties are missing in the found Workbasket
*/
Workbasket getWorkbasketByKey(String workbasketKey) throws WorkbasketNotFoundException, InvalidWorkbasketException;
/** /**
* Get all available Workbaskets. * Get all available Workbaskets.
* @return a list containing all workbaskets *
* @return a list containing all Workbaskets
*/ */
List<Workbasket> getWorkbaskets(); List<Workbasket> getWorkbaskets();
/** /**
* Create a new Workbasket. * Create a new Workbasket.
*
* @param workbasket * @param workbasket
* The workbasket to create * The Workbasket to create
* @return TODO * @return the created and persisted Workbasket
* @throws InvalidWorkbasketException
* If a required property of the Workbasket is not set.
* @throws WorkbasketNotFoundException
* If the to be created work basket references a distribution target that does not exist
*/ */
Workbasket createWorkbasket(Workbasket workbasket); Workbasket createWorkbasket(Workbasket workbasket) throws InvalidWorkbasketException, WorkbasketNotFoundException;
/** /**
* Update a Workbasket. * Update a Workbasket.
*
* @param workbasket * @param workbasket
* The workbasket to update * The Workbasket to update
* @return TODO * @return the updated Workbasket
* @throws NotAuthorizedException TODO * @throws InvalidWorkbasketException
* if a required property of the workbasket is not set
* @throws WorkbasketNotFoundException
* if the updated work basket references a distribution target that does not exist
* @throws NotAuthorizedException
* if the current user is not authorized to update the work basket
*/ */
Workbasket updateWorkbasket(Workbasket workbasket) throws NotAuthorizedException; Workbasket updateWorkbasket(Workbasket workbasket)
throws InvalidWorkbasketException, WorkbasketNotFoundException, NotAuthorizedException;
/** /**
* Create a new Workbasket Authorization with a Workbasket and a AccessId. * Create and persist a new Workbasket Authorization with a Workbasket and a AccessId.
*
* @param workbasketAccessItem * @param workbasketAccessItem
* the new workbasketAccessItem * the new workbasketAccessItem
* @return TODO * @return the created WorkbasketAccessItem
*/ */
WorkbasketAccessItem createWorkbasketAuthorization(WorkbasketAccessItem workbasketAccessItem); WorkbasketAccessItem createWorkbasketAuthorization(WorkbasketAccessItem workbasketAccessItem);
/** /**
* This method updates an Workbasket Authorization. * This method updates an Workbasket Authorization.
*
* @param workbasketAccessItem * @param workbasketAccessItem
* the Authorization * the Authorization
* @return the updated entity * @return the updated entity
@ -61,61 +95,69 @@ public interface WorkbasketService {
/** /**
* Get all authorizations of the workbasket. * Get all authorizations of the workbasket.
*
* @return a WorkbasketAccessItem list * @return a WorkbasketAccessItem list
*/ */
List<WorkbasketAccessItem> getAllAuthorizations(); List<WorkbasketAccessItem> getAllAuthorizations();
/** /**
* Deletes a specific authorization. * Deletes a specific authorization.
*
* @param id * @param id
* the specific id * the id of the WorbasketAccessItem to be deleted
*/ */
void deleteWorkbasketAuthorization(String id); void deleteWorkbasketAuthorization(String id);
/** /**
* This method checks the authorization with the saved one for the actual User. * This method checks the authorization with the saved one for the actual User.
* *
* @param workbasketId * @param workbasketKey
* the workbasket we want to access * the key of the workbasket we want to access
* @param authorization * @param authorization
* the needed Authorization * the needed Authorization
* @throws NotAuthorizedException TODO * @throws NotAuthorizedException
* if the current user has not the requested authorization fot the specified workbasket
*/ */
void checkAuthorization(String workbasketId, WorkbasketAuthorization authorization) throws NotAuthorizedException; void checkAuthorization(String workbasketKey, WorkbasketAuthorization authorization) throws NotAuthorizedException;
/** /**
* This method get one WorkbasketAuthorization with an id. * This method get one WorkbasketAccessItem with an id.
*
* @param id * @param id
* the id * the id of the requested WorkbasketAccessItem
* @return the full {@link WorkbasketAccessItem} * @return the full {@link WorkbasketAccessItem}
*/ */
WorkbasketAccessItem getWorkbasketAuthorization(String id); WorkbasketAccessItem getWorkbasketAuthorization(String id);
/** /**
* Get all authorizations for a Workbasket. * Get all authorizations for a Workbasket.
* @param workbasketId TODO *
* @return List of WorkbasketAccessItems * @param workbasketKey
* the key of the Workbasket
* @return List of WorkbasketAccessItems for the Workbasket with workbasketKey
*/ */
List<WorkbasketAccessItem> getWorkbasketAuthorizations(String workbasketId); List<WorkbasketAccessItem> getWorkbasketAuthorizations(String workbasketKey);
/** /**
* This method returns the workbaskets for which the current user has all permissions * This method returns the workbaskets for which the current user has all permissions specified in the permissions
* specified in the permissions list. * list.
* *
* @param permission * @param permission
* a List of WorkbasketAuthorization enums * a List of WorkbasketAuthorization enums
* @return all filtered workbaskets * @return all Workbaskets for which the current user has the specified authorizations
*/ */
List<Workbasket> getWorkbaskets(List<WorkbasketAuthorization> permission); List<Workbasket> getWorkbaskets(List<WorkbasketAuthorization> permission);
/** /**
* This method provides a query builder for quering the database. * This method provides a query builder for querying the database.
*
* @return a {@link WorkbasketQuery} * @return a {@link WorkbasketQuery}
*/ */
WorkbasketQuery createWorkbasketQuery(); WorkbasketQuery createWorkbasketQuery();
/** /**
* Returns a new workbasket which is not persisted. * Returns a new workbasket which is not persisted.
*
* @return newWorkbasket * @return newWorkbasket
*/ */
Workbasket newWorkbasket(); Workbasket newWorkbasket();

View File

@ -0,0 +1,17 @@
package pro.taskana.exceptions;
/**
* This exception is thrown when a request is made to insert or update a workbasket that is missing a required property.
*
* @author bbr
*/
public class InvalidWorkbasketException extends TaskanaException {
public InvalidWorkbasketException(String msg) {
super(msg);
}
private static final long serialVersionUID = 1L;
}

View File

@ -26,7 +26,7 @@ public class TaskImpl implements Task {
private int priority; private int priority;
private TaskState state; private TaskState state;
private Classification classification; private Classification classification;
private String workbasketId; private String workbasketKey;
private String businessProcessId; private String businessProcessId;
private String parentBusinessProcessId; private String parentBusinessProcessId;
private String owner; private String owner;
@ -46,7 +46,8 @@ public class TaskImpl implements Task {
private String custom9; private String custom9;
private String custom10; private String custom10;
TaskImpl() { } TaskImpl() {
}
@Override @Override
public String getId() { public String getId() {
@ -89,7 +90,6 @@ public class TaskImpl implements Task {
return modified; return modified;
} }
public void setModified(Timestamp modified) { public void setModified(Timestamp modified) {
this.modified = modified; this.modified = modified;
} }
@ -162,13 +162,13 @@ public class TaskImpl implements Task {
} }
@Override @Override
public String getWorkbasketId() { public String getWorkbasketKey() {
return workbasketId; return workbasketKey;
} }
@Override @Override
public void setWorkbasketId(String workbasketId) { public void setWorkbasketKey(String workbasketKey) {
this.workbasketId = workbasketId; this.workbasketKey = workbasketKey;
} }
@Override @Override
@ -176,7 +176,6 @@ public class TaskImpl implements Task {
return businessProcessId; return businessProcessId;
} }
public void setBusinessProcessId(String businessProcessId) { public void setBusinessProcessId(String businessProcessId) {
this.businessProcessId = businessProcessId; this.businessProcessId = businessProcessId;
} }
@ -364,8 +363,8 @@ public class TaskImpl implements Task {
builder.append(state); builder.append(state);
builder.append(", classification="); builder.append(", classification=");
builder.append(classification); builder.append(classification);
builder.append(", workbasketId="); builder.append(", workbasketKey=");
builder.append(workbasketId); builder.append(workbasketKey);
builder.append(", businessProcessId="); builder.append(", businessProcessId=");
builder.append(businessProcessId); builder.append(businessProcessId);
builder.append(", parentBusinessProcessId="); builder.append(", parentBusinessProcessId=");

View File

@ -32,7 +32,7 @@ public class TaskQueryImpl implements TaskQuery {
private int[] priority; private int[] priority;
private TaskState[] states; private TaskState[] states;
private ClassificationQuery classificationQuery; private ClassificationQuery classificationQuery;
private String[] workbasketId; private String[] workbasketKey;
private String[] owner; private String[] owner;
private ObjectReferenceQuery objectReferenceQuery; private ObjectReferenceQuery objectReferenceQuery;
private Boolean isRead; private Boolean isRead;
@ -74,8 +74,8 @@ public class TaskQueryImpl implements TaskQuery {
} }
@Override @Override
public TaskQuery workbasketId(String... workbasketIds) { public TaskQuery workbasketKeyIn(String... workbasketKeys) {
this.workbasketId = workbasketIds; this.workbasketKey = workbasketKeys;
return this; return this;
} }
@ -127,7 +127,8 @@ public class TaskQueryImpl implements TaskQuery {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
int numberOfResultObjects = result == null ? 0 : result.size(); int numberOfResultObjects = result == null ? 0 : result.size();
LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", numberOfResultObjects,
LoggerUtils.listToString(result));
} }
} }
} }
@ -146,7 +147,8 @@ public class TaskQueryImpl implements TaskQuery {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
int numberOfResultObjects = result == null ? 0 : result.size(); int numberOfResultObjects = result == null ? 0 : result.size();
LOGGER.debug("exit from list(offset,limit). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); LOGGER.debug("exit from list(offset,limit). Returning {} resulting Objects: {} ", numberOfResultObjects,
LoggerUtils.listToString(result));
} }
} }
} }
@ -167,8 +169,8 @@ public class TaskQueryImpl implements TaskQuery {
} }
private void checkAuthorization() throws NotAuthorizedException { private void checkAuthorization() throws NotAuthorizedException {
if (this.workbasketId != null && this.workbasketId.length > 0) { if (this.workbasketKey != null && this.workbasketKey.length > 0) {
for (String workbasket : this.workbasketId) { for (String workbasket : this.workbasketKey) {
taskanaEngineImpl.getWorkbasketService().checkAuthorization(workbasket, WorkbasketAuthorization.OPEN); taskanaEngineImpl.getWorkbasketService().checkAuthorization(workbasket, WorkbasketAuthorization.OPEN);
} }
} }
@ -222,12 +224,12 @@ public class TaskQueryImpl implements TaskQuery {
this.classificationQuery = classificationQuery; this.classificationQuery = classificationQuery;
} }
public String[] getWorkbasketId() { public String[] getWorkbasketKey() {
return workbasketId; return workbasketKey;
} }
public void setWorkbasketId(String[] workbasketId) { public void setWorkbasketKey(String[] workbasketKey) {
this.workbasketId = workbasketId; this.workbasketKey = workbasketKey;
} }
public String[] getOwner() { public String[] getOwner() {
@ -285,8 +287,8 @@ public class TaskQueryImpl implements TaskQuery {
builder.append(Arrays.toString(states)); builder.append(Arrays.toString(states));
builder.append(", classificationQuery="); builder.append(", classificationQuery=");
builder.append(classificationQuery); builder.append(classificationQuery);
builder.append(", workbasketId="); builder.append(", workbasketKey=");
builder.append(Arrays.toString(workbasketId)); builder.append(Arrays.toString(workbasketKey));
builder.append(", owner="); builder.append(", owner=");
builder.append(Arrays.toString(owner)); builder.append(Arrays.toString(owner));
builder.append(", objectReferenceQuery="); builder.append(", objectReferenceQuery=");

View File

@ -14,10 +14,12 @@ import pro.taskana.Task;
import pro.taskana.TaskQuery; import pro.taskana.TaskQuery;
import pro.taskana.TaskService; import pro.taskana.TaskService;
import pro.taskana.TaskanaEngine; import pro.taskana.TaskanaEngine;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketService; import pro.taskana.WorkbasketService;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidOwnerException; import pro.taskana.exceptions.InvalidOwnerException;
import pro.taskana.exceptions.InvalidStateException; import pro.taskana.exceptions.InvalidStateException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
@ -38,21 +40,14 @@ import pro.taskana.security.CurrentUserContext;
public class TaskServiceImpl implements TaskService { public class TaskServiceImpl implements TaskService {
private static final Logger LOGGER = LoggerFactory.getLogger(TaskServiceImpl.class); private static final Logger LOGGER = LoggerFactory.getLogger(TaskServiceImpl.class);
private static final String ID_PREFIX_OBJECT_REFERENCE = "ORI"; private static final String ID_PREFIX_OBJECT_REFERENCE = "ORI";
private static final String ID_PREFIX_TASK = "TKI"; private static final String ID_PREFIX_TASK = "TKI";
private static final String ID_PREFIX_BUSINESS_PROCESS = "BPI"; private static final String ID_PREFIX_BUSINESS_PROCESS = "BPI";
private TaskanaEngine taskanaEngine; private TaskanaEngine taskanaEngine;
private TaskanaEngineImpl taskanaEngineImpl; private TaskanaEngineImpl taskanaEngineImpl;
private WorkbasketService workbasketService; private WorkbasketService workbasketService;
private TaskMapper taskMapper; private TaskMapper taskMapper;
private ObjectReferenceMapper objectReferenceMapper; private ObjectReferenceMapper objectReferenceMapper;
public TaskServiceImpl(TaskanaEngine taskanaEngine, TaskMapper taskMapper, public TaskServiceImpl(TaskanaEngine taskanaEngine, TaskMapper taskMapper,
@ -155,7 +150,7 @@ public class TaskServiceImpl implements TaskService {
@Override @Override
public Task createTask(Task taskToCreate) public Task createTask(Task taskToCreate)
throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException,
TaskAlreadyExistException { TaskAlreadyExistException, InvalidWorkbasketException {
LOGGER.debug("entry to createTask(task = {})", taskToCreate); LOGGER.debug("entry to createTask(task = {})", taskToCreate);
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
@ -163,15 +158,15 @@ public class TaskServiceImpl implements TaskService {
if (task.getId() != "" && task.getId() != null) { if (task.getId() != "" && task.getId() != null) {
throw new TaskAlreadyExistException(taskToCreate.getId()); throw new TaskAlreadyExistException(taskToCreate.getId());
} else { } else {
LOGGER.debug("Task {} can´t be be found, so it can be created.", taskToCreate.getId()); LOGGER.debug("Task {} cannot be be found, so it can be created.", taskToCreate.getId());
workbasketService.getWorkbasket(task.getWorkbasketId()); Workbasket workbasket = workbasketService.getWorkbasketByKey(task.getWorkbasketKey());
workbasketService.checkAuthorization(task.getWorkbasketId(), WorkbasketAuthorization.APPEND); workbasketService.checkAuthorization(task.getWorkbasketKey(), WorkbasketAuthorization.APPEND);
Classification classification = task.getClassification(); Classification classification = task.getClassification();
if (classification == null) { if (classification == null) {
throw new ClassificationNotFoundException(null); throw new ClassificationNotFoundException(null);
} }
taskanaEngine.getClassificationService().getClassification(classification.getKey(), taskanaEngine.getClassificationService().getClassification(classification.getKey(),
classification.getDomain()); workbasket.getDomain());
standardSettings(task); standardSettings(task);
this.taskMapper.insert(task); this.taskMapper.insert(task);
@ -204,22 +199,22 @@ public class TaskServiceImpl implements TaskService {
} }
@Override @Override
public Task transfer(String taskId, String destinationWorkbasketId) public Task transfer(String taskId, String destinationWorkbasketKey)
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException { throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, InvalidWorkbasketException {
LOGGER.debug("entry to transfer(taskId = {}, destinationWorkbasketId = {})", taskId, destinationWorkbasketId); LOGGER.debug("entry to transfer(taskId = {}, destinationWorkbasketKey = {})", taskId, destinationWorkbasketKey);
Task result = null; Task result = null;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
TaskImpl task = (TaskImpl) getTaskById(taskId); TaskImpl task = (TaskImpl) getTaskById(taskId);
// transfer requires TRANSFER in source and APPEND on destination workbasket // transfer requires TRANSFER in source and APPEND on destination workbasket
workbasketService.checkAuthorization(destinationWorkbasketId, WorkbasketAuthorization.APPEND); workbasketService.checkAuthorization(destinationWorkbasketKey, WorkbasketAuthorization.APPEND);
workbasketService.checkAuthorization(task.getWorkbasketId(), WorkbasketAuthorization.TRANSFER); workbasketService.checkAuthorization(task.getWorkbasketKey(), WorkbasketAuthorization.TRANSFER);
// if security is disabled, the implicit existance check on the // if security is disabled, the implicit existance check on the
// destination workbasket has been skipped and needs to be performed // destination workbasket has been skipped and needs to be performed
if (!taskanaEngine.getConfiguration().isSecurityEnabled()) { if (!taskanaEngine.getConfiguration().isSecurityEnabled()) {
workbasketService.getWorkbasket(destinationWorkbasketId); workbasketService.getWorkbasketByKey(destinationWorkbasketKey);
} }
// reset read flag and set transferred flag // reset read flag and set transferred flag
@ -227,13 +222,13 @@ public class TaskServiceImpl implements TaskService {
task.setTransferred(true); task.setTransferred(true);
// transfer task from source to destination workbasket // transfer task from source to destination workbasket
task.setWorkbasketId(destinationWorkbasketId); task.setWorkbasketKey(destinationWorkbasketKey);
task.setModified(Timestamp.valueOf(LocalDateTime.now())); task.setModified(Timestamp.valueOf(LocalDateTime.now()));
taskMapper.update(task); taskMapper.update(task);
result = getTaskById(taskId); result = getTaskById(taskId);
LOGGER.debug("Method transfer() transferred Task '{}' to destination workbasket {}", taskId, LOGGER.debug("Method transfer() transferred Task '{}' to destination workbasket {}", taskId,
destinationWorkbasketId); destinationWorkbasketKey);
return result; return result;
} finally { } finally {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
@ -266,15 +261,15 @@ public class TaskServiceImpl implements TaskService {
} }
@Override @Override
public List<Task> getTasksByWorkbasketIdAndState(String workbasketId, TaskState taskState) public List<Task> getTasksByWorkbasketKeyAndState(String workbasketKey, TaskState taskState)
throws WorkbasketNotFoundException, NotAuthorizedException { throws WorkbasketNotFoundException, NotAuthorizedException {
LOGGER.debug("entry to getTasksByWorkbasketIdAndState(workbasketId = {}, taskState = {})", workbasketId, LOGGER.debug("entry to getTasksByWorkbasketKeyAndState(workbasketId = {}, taskState = {})", workbasketKey,
taskState); taskState);
List<Task> results = new ArrayList<>(); List<Task> results = new ArrayList<>();
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
workbasketService.checkAuthorization(workbasketId, WorkbasketAuthorization.READ); workbasketService.checkAuthorization(workbasketKey, WorkbasketAuthorization.READ);
List<TaskImpl> tasks = taskMapper.findTasksByWorkbasketIdAndState(workbasketId, taskState); List<TaskImpl> tasks = taskMapper.findTasksByWorkbasketIdAndState(workbasketKey, taskState);
tasks.stream().forEach(t -> results.add(t)); tasks.stream().forEach(t -> results.add(t));
} finally { } finally {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
@ -341,13 +336,14 @@ public class TaskServiceImpl implements TaskService {
} }
@Override @Override
public List<TaskSummary> getTaskSummariesByWorkbasketId(String workbasketId) throws WorkbasketNotFoundException { public List<TaskSummary> getTaskSummariesByWorkbasketKey(String workbasketKey)
LOGGER.debug("entry to getTaskSummariesByWorkbasketId(workbasketId = {}", workbasketId); throws WorkbasketNotFoundException, InvalidWorkbasketException {
LOGGER.debug("entry to getTaskSummariesByWorkbasketId(workbasketId = {}", workbasketKey);
List<TaskSummary> taskSummaries = new ArrayList<>(); List<TaskSummary> taskSummaries = new ArrayList<>();
workbasketService.getWorkbasket(workbasketId); workbasketService.getWorkbasketByKey(workbasketKey);
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
taskSummaries = taskMapper.findTaskSummariesByWorkbasketId(workbasketId); taskSummaries = taskMapper.findTaskSummariesByWorkbasketKey(workbasketKey);
} catch (Exception ex) { } catch (Exception ex) {
LOGGER.error("Getting TASKSUMMARY failed internally.", ex); LOGGER.error("Getting TASKSUMMARY failed internally.", ex);
} finally { } finally {

View File

@ -5,6 +5,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import pro.taskana.Workbasket; import pro.taskana.Workbasket;
import pro.taskana.model.WorkbasketType;
/** /**
* Workbasket entity. * Workbasket entity.
@ -12,14 +13,26 @@ import pro.taskana.Workbasket;
public class WorkbasketImpl implements Workbasket { public class WorkbasketImpl implements Workbasket {
private String id; private String id;
private String key;
private Timestamp created; private Timestamp created;
private Timestamp modified; private Timestamp modified;
private String name; private String name;
private String description; private String description;
private String owner; private String owner;
private String domain;
private WorkbasketType type;
private List<Workbasket> distributionTargets = new ArrayList<>(); private List<Workbasket> distributionTargets = new ArrayList<>();
private String custom1;
private String custom2;
private String custom3;
private String custom4;
private String orgLevel1;
private String orgLevel2;
private String orgLevel3;
private String orgLevel4;
WorkbasketImpl() { } WorkbasketImpl() {
}
@Override @Override
public String getId() { public String getId() {
@ -30,6 +43,16 @@ public class WorkbasketImpl implements Workbasket {
this.id = id; this.id = id;
} }
@Override
public String getKey() {
return key;
}
@Override
public void setKey(String key) {
this.key = key;
}
@Override @Override
public Timestamp getCreated() { public Timestamp getCreated() {
return created; return created;
@ -78,6 +101,26 @@ public class WorkbasketImpl implements Workbasket {
this.owner = owner; this.owner = owner;
} }
@Override
public String getDomain() {
return domain;
}
@Override
public void setDomain(String domain) {
this.domain = domain;
}
@Override
public WorkbasketType getType() {
return type;
}
@Override
public void setType(WorkbasketType type) {
this.type = type;
}
@Override @Override
public List<Workbasket> getDistributionTargets() { public List<Workbasket> getDistributionTargets() {
return distributionTargets; return distributionTargets;
@ -88,11 +131,77 @@ public class WorkbasketImpl implements Workbasket {
this.distributionTargets = distributionTargets; this.distributionTargets = distributionTargets;
} }
public String getCustom1() {
return custom1;
}
public void setCustom1(String custom1) {
this.custom1 = custom1;
}
public String getCustom2() {
return custom2;
}
public void setCustom2(String custom2) {
this.custom2 = custom2;
}
public String getCustom3() {
return custom3;
}
public void setCustom3(String custom3) {
this.custom3 = custom3;
}
public String getCustom4() {
return custom4;
}
public void setCustom4(String custom4) {
this.custom4 = custom4;
}
public String getOrgLevel1() {
return orgLevel1;
}
public void setOrgLevel1(String orgLevel1) {
this.orgLevel1 = orgLevel1;
}
public String getOrgLevel2() {
return orgLevel2;
}
public void setOrgLevel2(String orgLevel2) {
this.orgLevel2 = orgLevel2;
}
public String getOrgLevel3() {
return orgLevel3;
}
public void setOrgLevel3(String orgLevel3) {
this.orgLevel3 = orgLevel3;
}
public String getOrgLevel4() {
return orgLevel4;
}
public void setOrgLevel4(String orgLevel4) {
this.orgLevel4 = orgLevel4;
}
@Override @Override
public String toString() { public String toString() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append("Workbasket [id="); builder.append("Workbasket [id=");
builder.append(id); builder.append(id);
builder.append(", key=");
builder.append(key);
builder.append(", created="); builder.append(", created=");
builder.append(created); builder.append(created);
builder.append(", modified="); builder.append(", modified=");
@ -103,11 +212,29 @@ public class WorkbasketImpl implements Workbasket {
builder.append(description); builder.append(description);
builder.append(", owner="); builder.append(", owner=");
builder.append(owner); builder.append(owner);
builder.append(", domain=");
builder.append(domain);
builder.append(", type=");
builder.append(type);
builder.append(", distributionTargets="); builder.append(", distributionTargets=");
builder.append(distributionTargets); builder.append(distributionTargets);
builder.append(", custom1=");
builder.append(custom1);
builder.append(", custom2=");
builder.append(custom2);
builder.append(", custom3=");
builder.append(custom3);
builder.append(", custom4=");
builder.append(custom4);
builder.append(", orgLevel1=");
builder.append(orgLevel1);
builder.append(", orgLevel2=");
builder.append(orgLevel2);
builder.append(", orgLevel3=");
builder.append(orgLevel3);
builder.append(", orgLevel4=");
builder.append(orgLevel4);
builder.append("]"); builder.append("]");
return builder.toString(); return builder.toString();
} }
} }

View File

@ -15,20 +15,29 @@ import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.impl.util.LoggerUtils; import pro.taskana.impl.util.LoggerUtils;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketType;
/** /**
* WorkbasketQuery for generating dynamic SQL. * WorkbasketQuery for generating dynamic SQL.
* @author bbr
* *
* @author bbr
*/ */
public class WorkbasketQueryImpl implements WorkbasketQuery { public class WorkbasketQueryImpl implements WorkbasketQuery {
private static final String LINK_TO_MAPPER = "pro.taskana.model.mappings.QueryMapper.queryWorkbasket"; private static final String LINK_TO_MAPPER = "pro.taskana.model.mappings.QueryMapper.queryWorkbasket";
private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketQueryImpl.class); private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketQueryImpl.class);
private String[] accessId; private String[] accessId;
private WorkbasketAuthorization authorization; private WorkbasketAuthorization authorization;
private String[] name; private String[] name;
private Date[] created; private String[] key;
private Date[] modified; private String[] domain;
private WorkbasketType[] type;
private Date createdAfter;
private Date createdBefore;
private Date modifiedAfter;
private Date modifiedBefore;
private String description; private String description;
private String[] owner; private String[] owner;
private TaskanaEngineImpl taskanaEngineImpl; private TaskanaEngineImpl taskanaEngineImpl;
@ -38,20 +47,50 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
} }
@Override @Override
public WorkbasketQuery name(String... names) { public WorkbasketQuery keyIn(String... key) {
this.key = key;
return this;
}
@Override
public WorkbasketQuery domainIn(String... domain) {
this.domain = domain;
return this;
}
@Override
public WorkbasketQuery typeIn(WorkbasketType... type) {
this.type = type;
return this;
}
@Override
public WorkbasketQuery nameIn(String... names) {
this.name = names; this.name = names;
return this; return this;
} }
@Override @Override
public WorkbasketQuery created(Date... created) { public WorkbasketQuery createdAfter(Date createdAfter) {
this.created = created; this.createdAfter = createdAfter;
return this; return this;
} }
@Override @Override
public WorkbasketQuery modified(Date... modified) { public WorkbasketQuery createdBefore(Date createdBefore) {
this.modified = modified; this.createdBefore = createdBefore;
return this;
}
@Override
public WorkbasketQuery modifiedAfter(Date modifiedAfter) {
this.modifiedAfter = modifiedAfter;
return this;
}
@Override
public WorkbasketQuery modifiedBefore(Date modifiedBefore) {
this.modifiedBefore = modifiedBefore;
return this; return this;
} }
@ -62,13 +101,14 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
} }
@Override @Override
public WorkbasketQuery owner(String... owners) { public WorkbasketQuery ownerIn(String... owners) {
this.owner = owners; this.owner = owners;
return this; return this;
} }
@Override @Override
public WorkbasketQuery access(WorkbasketAuthorization permission, String... accessIds) throws InvalidArgumentException { public WorkbasketQuery access(WorkbasketAuthorization permission, String... accessIds)
throws InvalidArgumentException {
if (permission == null) { if (permission == null) {
throw new InvalidArgumentException("permission must not be null"); throw new InvalidArgumentException("permission must not be null");
} }
@ -92,7 +132,8 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
int numberOfResultObjects = result == null ? 0 : result.size(); int numberOfResultObjects = result == null ? 0 : result.size();
LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", numberOfResultObjects,
LoggerUtils.listToString(result));
} }
} }
} }
@ -110,7 +151,8 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
int numberOfResultObjects = result == null ? 0 : result.size(); int numberOfResultObjects = result == null ? 0 : result.size();
LOGGER.debug("exit from list(offset,limit). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); LOGGER.debug("exit from list(offset,limit). Returning {} resulting Objects: {} ", numberOfResultObjects,
LoggerUtils.listToString(result));
} }
} }
} }
@ -153,20 +195,60 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
this.name = name; this.name = name;
} }
public Date[] getCreated() { public String[] getKey() {
return created; return key;
} }
public void setCreated(Date[] created) { public void setKey(String[] key) {
this.created = created; this.key = key;
} }
public Date[] getModified() { public String[] getDomain() {
return modified; return domain;
} }
public void setModified(Date[] modified) { public void setDomain(String[] domain) {
this.modified = modified; this.domain = domain;
}
public WorkbasketType[] getType() {
return type;
}
public void setType(WorkbasketType[] type) {
this.type = type;
}
public Date getCreatedAfter() {
return createdAfter;
}
public void setCreatedAfter(Date createdAfter) {
this.createdAfter = createdAfter;
}
public Date getCreatedBefore() {
return createdBefore;
}
public void setCreatedBefore(Date createdBefore) {
this.createdBefore = createdBefore;
}
public Date getModifiedAfter() {
return modifiedAfter;
}
public void setModifiedAfter(Date modifiedAfter) {
this.modifiedAfter = modifiedAfter;
}
public Date getModifiedBefore() {
return modifiedBefore;
}
public void setModifiedBefore(Date modifiedBefore) {
this.modifiedBefore = modifiedBefore;
} }
public String getDescription() { public String getDescription() {
@ -194,16 +276,24 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
builder.append(authorization); builder.append(authorization);
builder.append(", name="); builder.append(", name=");
builder.append(Arrays.toString(name)); builder.append(Arrays.toString(name));
builder.append(", created="); builder.append(", key=");
builder.append(Arrays.toString(created)); builder.append(Arrays.toString(key));
builder.append(", modified="); builder.append(", domain=");
builder.append(Arrays.toString(modified)); builder.append(Arrays.toString(domain));
builder.append(", type=");
builder.append(Arrays.toString(type));
builder.append(", createdAfter=");
builder.append(createdAfter);
builder.append(", createdBefore=");
builder.append(createdBefore);
builder.append(", modifiedAfter=");
builder.append(modifiedAfter);
builder.append(", modifiedBefore=");
builder.append(modifiedBefore);
builder.append(", description="); builder.append(", description=");
builder.append(description); builder.append(description);
builder.append(", owner="); builder.append(", owner=");
builder.append(Arrays.toString(owner)); builder.append(Arrays.toString(owner));
builder.append(", taskanaEngineImpl=");
builder.append(taskanaEngineImpl);
builder.append("]"); builder.append("]");
return builder.toString(); return builder.toString();
} }

View File

@ -13,6 +13,7 @@ import pro.taskana.TaskanaEngine;
import pro.taskana.Workbasket; import pro.taskana.Workbasket;
import pro.taskana.WorkbasketQuery; import pro.taskana.WorkbasketQuery;
import pro.taskana.WorkbasketService; import pro.taskana.WorkbasketService;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.util.IdGenerator; import pro.taskana.impl.util.IdGenerator;
@ -30,13 +31,11 @@ import pro.taskana.security.CurrentUserContext;
public class WorkbasketServiceImpl implements WorkbasketService { public class WorkbasketServiceImpl implements WorkbasketService {
private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketServiceImpl.class); private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketServiceImpl.class);
private static final String ID_PREFIX_WORKBASKET = "WBI"; private static final String ID_PREFIX_WORKBASKET = "WBI";
private static final String ID_PREFIX_WORKBASKET_AUTHORIZATION = "WAI"; private static final String ID_PREFIX_WORKBASKET_AUTHORIZATION = "WAI";
private TaskanaEngine taskanaEngine; private TaskanaEngine taskanaEngine;
private TaskanaEngineImpl taskanaEngineImpl; private TaskanaEngineImpl taskanaEngineImpl;
private WorkbasketMapper workbasketMapper; private WorkbasketMapper workbasketMapper;
private DistributionTargetMapper distributionTargetMapper; private DistributionTargetMapper distributionTargetMapper;
private WorkbasketAccessMapper workbasketAccessMapper; private WorkbasketAccessMapper workbasketAccessMapper;
@ -45,7 +44,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
} }
public WorkbasketServiceImpl(TaskanaEngine taskanaEngine, WorkbasketMapper workbasketMapper, public WorkbasketServiceImpl(TaskanaEngine taskanaEngine, WorkbasketMapper workbasketMapper,
DistributionTargetMapper distributionTargetMapper, WorkbasketAccessMapper workbasketAccessMapper) { DistributionTargetMapper distributionTargetMapper, WorkbasketAccessMapper workbasketAccessMapper) {
this.taskanaEngine = taskanaEngine; this.taskanaEngine = taskanaEngine;
this.taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine; this.taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
this.workbasketMapper = workbasketMapper; this.workbasketMapper = workbasketMapper;
@ -54,16 +53,46 @@ public class WorkbasketServiceImpl implements WorkbasketService {
} }
@Override @Override
public Workbasket getWorkbasket(String workbasketId) throws WorkbasketNotFoundException { public Workbasket getWorkbasket(String workbasketId)
throws WorkbasketNotFoundException, InvalidWorkbasketException {
LOGGER.debug("entry to getWorkbasket(workbasketId = {})", workbasketId); LOGGER.debug("entry to getWorkbasket(workbasketId = {})", workbasketId);
Workbasket result = null; Workbasket result = null;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
result = workbasketMapper.findById(workbasketId); result = workbasketMapper.findById(workbasketId);
if (result == null) { if (result == null) {
LOGGER.warn("Method getWorkbasket() didn't find workbasket with id {}. Throwing WorkbasketNotFoundException", workbasketId); LOGGER.warn(
"Method getWorkbasket() didn't find workbasket with id {}. Throwing WorkbasketNotFoundException",
workbasketId);
throw new WorkbasketNotFoundException(workbasketId); throw new WorkbasketNotFoundException(workbasketId);
} else {
validateWorkbasket(result);
} }
return result;
} finally {
taskanaEngineImpl.returnConnection();
LOGGER.debug("exit from getWorkbasket(workbasketId). Returning result {} ", result);
}
}
@Override
public Workbasket getWorkbasketByKey(String workbasketKey)
throws WorkbasketNotFoundException, InvalidWorkbasketException {
LOGGER.debug("entry to getWorkbasketByKey(workbasketKey = {})", workbasketKey);
Workbasket result = null;
try {
taskanaEngineImpl.openConnection();
result = workbasketMapper.findByKey(workbasketKey);
if (result == null) {
LOGGER.warn(
"Method getWorkbasket() didn't find workbasket with key {}. Throwing WorkbasketNotFoundException",
workbasketKey);
throw new WorkbasketNotFoundException(workbasketKey);
} else {
validateWorkbasket(result);
}
return result; return result;
} finally { } finally {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
@ -79,7 +108,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
List<Workbasket> result = null; List<Workbasket> result = null;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
//use a set to avoid duplicates // use a set to avoid duplicates
Set<Workbasket> workbaskets = new HashSet<>(); Set<Workbasket> workbaskets = new HashSet<>();
for (String accessId : CurrentUserContext.getAccessIds()) { for (String accessId : CurrentUserContext.getAccessIds()) {
workbaskets.addAll(workbasketMapper.findByPermission(permissions, accessId)); workbaskets.addAll(workbasketMapper.findByPermission(permissions, accessId));
@ -91,7 +120,8 @@ public class WorkbasketServiceImpl implements WorkbasketService {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
int numberOfResultObjects = result == null ? 0 : result.size(); int numberOfResultObjects = result == null ? 0 : result.size();
LOGGER.debug("exit from getWorkbaskets(permissions). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); LOGGER.debug("exit from getWorkbaskets(permissions). Returning {} resulting Objects: {} ",
numberOfResultObjects, LoggerUtils.listToString(result));
} }
} }
} }
@ -109,13 +139,16 @@ public class WorkbasketServiceImpl implements WorkbasketService {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
int numberOfResultObjects = workbaskets == null ? 0 : workbaskets.size(); int numberOfResultObjects = workbaskets == null ? 0 : workbaskets.size();
LOGGER.debug("exit from getWorkbaskets(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(workbaskets)); LOGGER.debug("exit from getWorkbaskets(). Returning {} resulting Objects: {} ", numberOfResultObjects,
LoggerUtils.listToString(workbaskets));
} }
} }
} }
@Override @Override
public Workbasket createWorkbasket(Workbasket newWorkbasket) {
public Workbasket createWorkbasket(Workbasket newWorkbasket)
throws InvalidWorkbasketException, WorkbasketNotFoundException {
LOGGER.debug("entry to createtWorkbasket(workbasket)", newWorkbasket); LOGGER.debug("entry to createtWorkbasket(workbasket)", newWorkbasket);
Workbasket result = null; Workbasket result = null;
WorkbasketImpl workbasket = (WorkbasketImpl) newWorkbasket; WorkbasketImpl workbasket = (WorkbasketImpl) newWorkbasket;
@ -127,20 +160,17 @@ public class WorkbasketServiceImpl implements WorkbasketService {
if (workbasket.getId() == null || workbasket.getId().isEmpty()) { if (workbasket.getId() == null || workbasket.getId().isEmpty()) {
workbasket.setId(IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET)); workbasket.setId(IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET));
} }
validateWorkbasket(workbasket);
workbasketMapper.insert(workbasket); workbasketMapper.insert(workbasket);
LOGGER.debug("Method createWorkbasket() created Workbasket '{}'", workbasket); LOGGER.debug("Method createWorkbasket() created Workbasket '{}'", workbasket);
if (workbasket.getDistributionTargets() != null) { if (workbasket.getDistributionTargets() != null) {
for (Workbasket distributionTarget : workbasket.getDistributionTargets()) { for (Workbasket distributionTarget : workbasket.getDistributionTargets()) {
if (workbasketMapper.findById(distributionTarget.getId()) == null) { // validate that all distribution targets exist
WorkbasketImpl tempBasket = (WorkbasketImpl) distributionTarget; getWorkbasket(distributionTarget.getId());
tempBasket.setCreated(now);
tempBasket.setModified(now);
workbasketMapper.insert(tempBasket);
distributionTarget = tempBasket;
LOGGER.debug("Method createWorkbasket() created distributionTarget '{}'", distributionTarget);
}
distributionTargetMapper.insert(workbasket.getId(), distributionTarget.getId()); distributionTargetMapper.insert(workbasket.getId(), distributionTarget.getId());
LOGGER.debug("Method createWorkbasket() created distributiontarget for source '{}' and target {}", workbasket.getId(), distributionTarget.getId()); LOGGER.debug("Method createWorkbasket() created distributiontarget for source '{}' and target {}",
workbasket.getId(), distributionTarget.getId());
} }
} }
result = workbasketMapper.findById(workbasket.getId()); result = workbasketMapper.findById(workbasket.getId());
@ -152,7 +182,8 @@ public class WorkbasketServiceImpl implements WorkbasketService {
} }
@Override @Override
public Workbasket updateWorkbasket(Workbasket workbasketToUpdate) throws NotAuthorizedException { public Workbasket updateWorkbasket(Workbasket workbasketToUpdate)
throws NotAuthorizedException, WorkbasketNotFoundException, InvalidWorkbasketException {
LOGGER.debug("entry to updateWorkbasket(workbasket)", workbasketToUpdate); LOGGER.debug("entry to updateWorkbasket(workbasket)", workbasketToUpdate);
Workbasket result = null; Workbasket result = null;
WorkbasketImpl workbasket = (WorkbasketImpl) workbasketToUpdate; WorkbasketImpl workbasket = (WorkbasketImpl) workbasketToUpdate;
@ -162,25 +193,23 @@ public class WorkbasketServiceImpl implements WorkbasketService {
workbasketMapper.update(workbasket); workbasketMapper.update(workbasket);
LOGGER.debug("Method updateWorkbasket() updated workbasket '{}'", workbasket.getId()); LOGGER.debug("Method updateWorkbasket() updated workbasket '{}'", workbasket.getId());
List<String> oldDistributionTargets = distributionTargetMapper.findBySourceId(workbasket.getId()); List<String> oldDistributionTargets = distributionTargetMapper.findBySourceId(workbasket.getId());
List<Workbasket> distributionTargets = workbasket.getDistributionTargets(); List<Workbasket> newDistributionTargets = workbasket.getDistributionTargets();
for (Workbasket distributionTarget : distributionTargets) { for (Workbasket distributionTarget : newDistributionTargets) {
if (!oldDistributionTargets.contains(distributionTarget.getId())) { if (!oldDistributionTargets.contains(distributionTarget.getId())) {
if (workbasketMapper.findById(distributionTarget.getId()) == null) { // check that old distribution target exists
WorkbasketImpl tempBasket = (WorkbasketImpl) distributionTarget; getWorkbasket(distributionTarget.getId());
workbasketMapper.insert(tempBasket);
distributionTarget = tempBasket;
LOGGER.debug(" Method updateWorkbasket() created distributionTarget '{}'", distributionTarget);
}
distributionTargetMapper.insert(workbasket.getId(), distributionTarget.getId()); distributionTargetMapper.insert(workbasket.getId(), distributionTarget.getId());
LOGGER.debug("Method updateWorkbasket() created distributionTarget for '{}' and '{}'", workbasket.getId(), distributionTarget.getId()); LOGGER.debug("Method updateWorkbasket() created distributionTarget for '{}' and '{}'",
workbasket.getId(), distributionTarget.getId());
} else { } else {
oldDistributionTargets.remove(distributionTarget.getId()); oldDistributionTargets.remove(distributionTarget.getId());
} }
} }
distributionTargetMapper.deleteMultiple(workbasket.getId(), oldDistributionTargets); distributionTargetMapper.deleteMultiple(workbasket.getId(), oldDistributionTargets);
if (LOGGER.isInfoEnabled()) { if (LOGGER.isInfoEnabled()) {
LOGGER.debug("Method updateWorkbasket() deleted distributionTargets for '{}' and old distribution targets {}", LOGGER.debug(
workbasket.getId(), LoggerUtils.listToString(oldDistributionTargets)); "Method updateWorkbasket() deleted distributionTargets for '{}' and old distribution targets {}",
workbasket.getId(), LoggerUtils.listToString(oldDistributionTargets));
} }
result = workbasketMapper.findById(workbasket.getId()); result = workbasketMapper.findById(workbasket.getId());
return result; return result;
@ -197,19 +226,21 @@ public class WorkbasketServiceImpl implements WorkbasketService {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
workbasketAccessItem.setId(IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_AUTHORIZATION)); workbasketAccessItem.setId(IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_AUTHORIZATION));
workbasketAccessMapper.insert(workbasketAccessItem); workbasketAccessMapper.insert(workbasketAccessItem);
LOGGER.debug("Method createWorkbasketAuthorization() created workbaskteAccessItem {}", workbasketAccessItem); LOGGER.debug("Method createWorkbasketAuthorization() created workbaskteAccessItem {}",
workbasketAccessItem);
return workbasketAccessItem; return workbasketAccessItem;
} finally { } finally {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
LOGGER.debug("exit from createWorkbasketAuthorization(workbasketAccessItem). Returning result {}", workbasketAccessItem); LOGGER.debug("exit from createWorkbasketAuthorization(workbasketAccessItem). Returning result {}",
workbasketAccessItem);
} }
} }
@Override @Override
public WorkbasketAccessItem getWorkbasketAuthorization(String id) { public WorkbasketAccessItem getWorkbasketAuthorization(String id) {
LOGGER.debug("entry to getWorkbasketAuthorization(id = {})", id); LOGGER.debug("entry to getWorkbasketAuthorization(id = {})", id);
WorkbasketAccessItem result = null; WorkbasketAccessItem result = null;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
result = workbasketAccessMapper.findById(id); result = workbasketAccessMapper.findById(id);
return result; return result;
@ -244,15 +275,17 @@ public class WorkbasketServiceImpl implements WorkbasketService {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
int numberOfResultObjects = result == null ? 0 : result.size(); int numberOfResultObjects = result == null ? 0 : result.size();
LOGGER.debug("exit from getAllAuthorizations(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); LOGGER.debug("exit from getAllAuthorizations(). Returning {} resulting Objects: {} ",
numberOfResultObjects, LoggerUtils.listToString(result));
} }
} }
} }
@Override @Override
public void checkAuthorization(String workbasketId, WorkbasketAuthorization workbasketAuthorization) public void checkAuthorization(String workbasketKey, WorkbasketAuthorization workbasketAuthorization)
throws NotAuthorizedException { throws NotAuthorizedException {
LOGGER.debug("entry to checkAuthorization(workbasketId = {}, workbasketAuthorization = {})", workbasketId, workbasketAuthorization); LOGGER.debug("entry to checkAuthorization(workbasketId = {}, workbasketAuthorization = {})", workbasketKey,
workbasketAuthorization);
boolean isAuthorized = false; boolean isAuthorized = false;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
@ -265,14 +298,14 @@ public class WorkbasketServiceImpl implements WorkbasketService {
List<String> accessIds = CurrentUserContext.getAccessIds(); List<String> accessIds = CurrentUserContext.getAccessIds();
LOGGER.debug("checkAuthorization: Verifying that {} has the permission {} on workbasket {}", LOGGER.debug("checkAuthorization: Verifying that {} has the permission {} on workbasket {}",
CurrentUserContext.getUserid(), workbasketAuthorization.name(), workbasketId); CurrentUserContext.getUserid(), workbasketAuthorization.name(), workbasketKey);
List<WorkbasketAccessItem> accessItems = workbasketAccessMapper List<WorkbasketAccessItem> accessItems = workbasketAccessMapper
.findByWorkbasketAndAccessIdAndAuthorizations(workbasketId, accessIds, workbasketAuthorization.name()); .findByWorkbasketAndAccessIdAndAuthorizations(workbasketKey, accessIds, workbasketAuthorization.name());
if (accessItems.size() <= 0) { if (accessItems.size() <= 0) {
throw new NotAuthorizedException("Not authorized. Authorization '" + workbasketAuthorization.name() throw new NotAuthorizedException("Not authorized. Authorization '" + workbasketAuthorization.name()
+ "' on workbasket '" + workbasketId + "' is needed."); + "' on workbasket '" + workbasketKey + "' is needed.");
} }
isAuthorized = true; isAuthorized = true;
@ -289,27 +322,30 @@ public class WorkbasketServiceImpl implements WorkbasketService {
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
workbasketAccessMapper.update(workbasketAccessItem); workbasketAccessMapper.update(workbasketAccessItem);
LOGGER.debug("Method updateWorkbasketAuthorization() updated workbasketAccessItem {}", workbasketAccessItem); LOGGER.debug("Method updateWorkbasketAuthorization() updated workbasketAccessItem {}",
workbasketAccessItem);
return workbasketAccessItem; return workbasketAccessItem;
} finally { } finally {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
LOGGER.debug("exit from updateWorkbasketAuthorization(workbasketAccessItem). Returning {}", workbasketAccessItem); LOGGER.debug("exit from updateWorkbasketAuthorization(workbasketAccessItem). Returning {}",
workbasketAccessItem);
} }
} }
@Override @Override
public List<WorkbasketAccessItem> getWorkbasketAuthorizations(String workbasketId) { public List<WorkbasketAccessItem> getWorkbasketAuthorizations(String workbasketKey) {
LOGGER.debug("entry to getWorkbasketAuthorizations(workbasketId = {})", workbasketId); LOGGER.debug("entry to getWorkbasketAuthorizations(workbasketId = {})", workbasketKey);
List<WorkbasketAccessItem> result = null; List<WorkbasketAccessItem> result = null;
try { try {
taskanaEngineImpl.openConnection(); taskanaEngineImpl.openConnection();
result = workbasketAccessMapper.findByWorkbasketId(workbasketId); result = workbasketAccessMapper.findByWorkbasketKey(workbasketKey);
return result; return result;
} finally { } finally {
taskanaEngineImpl.returnConnection(); taskanaEngineImpl.returnConnection();
if (LOGGER.isDebugEnabled()) { if (LOGGER.isDebugEnabled()) {
int numberOfResultObjects = result == null ? 0 : result.size(); int numberOfResultObjects = result == null ? 0 : result.size();
LOGGER.debug("exit from getWorkbasketAuthorizations(workbasketId). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); LOGGER.debug("exit from getWorkbasketAuthorizations(workbasketId). Returning {} resulting Objects: {} ",
numberOfResultObjects, LoggerUtils.listToString(result));
} }
} }
} }
@ -319,6 +355,24 @@ public class WorkbasketServiceImpl implements WorkbasketService {
return new WorkbasketQueryImpl(taskanaEngine); return new WorkbasketQueryImpl(taskanaEngine);
} }
private void validateWorkbasket(Workbasket workbasket) throws InvalidWorkbasketException {
// check that required properties (database not null) are set
if (workbasket.getId() == null || workbasket.getId().length() == 0) {
throw new InvalidWorkbasketException("Id must not be null for " + workbasket);
} else if (workbasket.getKey() == null || workbasket.getKey().length() == 0) {
throw new InvalidWorkbasketException("Key must not be null for " + workbasket);
}
if (workbasket.getName() == null || workbasket.getName().length() == 0) {
throw new InvalidWorkbasketException("Name must not be null for " + workbasket);
}
if (workbasket.getDomain() == null) {
throw new InvalidWorkbasketException("Domain must not be null for " + workbasket);
}
if (workbasket.getType() == null) {
throw new InvalidWorkbasketException("Type must not be null for " + workbasket);
}
}
@Override @Override
public Workbasket newWorkbasket() { public Workbasket newWorkbasket() {
return new WorkbasketImpl(); return new WorkbasketImpl();

View File

@ -8,7 +8,7 @@ public class TaskSummary {
private String taskId; private String taskId;
private String taskName; private String taskName;
private String workbasketId; private String workbasketKey;
private String workbasketName; private String workbasketName;
private String classificationKey; private String classificationKey;
private String classificationName; private String classificationName;
@ -25,11 +25,13 @@ public class TaskSummary {
public void setTaskName(String taskName) { public void setTaskName(String taskName) {
this.taskName = taskName; this.taskName = taskName;
} }
public String getWorkbasketId() {
return workbasketId; public String getWorkbasketKey() {
return workbasketKey;
} }
public void setWorkbasketId(String workbasketId) {
this.workbasketId = workbasketId; public void setWorkbasketKey(String workbasketKey) {
this.workbasketKey = workbasketKey;
} }
public String getWorkbasketName() { public String getWorkbasketName() {
return workbasketName; return workbasketName;
@ -58,7 +60,7 @@ public class TaskSummary {
result = prime * result + ((classificationName == null) ? 0 : classificationName.hashCode()); result = prime * result + ((classificationName == null) ? 0 : classificationName.hashCode());
result = prime * result + ((taskId == null) ? 0 : taskId.hashCode()); result = prime * result + ((taskId == null) ? 0 : taskId.hashCode());
result = prime * result + ((taskName == null) ? 0 : taskName.hashCode()); result = prime * result + ((taskName == null) ? 0 : taskName.hashCode());
result = prime * result + ((workbasketId == null) ? 0 : workbasketId.hashCode()); result = prime * result + ((workbasketKey == null) ? 0 : workbasketKey.hashCode());
result = prime * result + ((workbasketName == null) ? 0 : workbasketName.hashCode()); result = prime * result + ((workbasketName == null) ? 0 : workbasketName.hashCode());
return result; return result;
} }
@ -103,11 +105,11 @@ public class TaskSummary {
} else if (!taskName.equals(other.taskName)) { } else if (!taskName.equals(other.taskName)) {
return false; return false;
} }
if (workbasketId == null) { if (workbasketKey == null) {
if (other.workbasketId != null) { if (other.workbasketKey != null) {
return false; return false;
} }
} else if (!workbasketId.equals(other.workbasketId)) { } else if (!workbasketKey.equals(other.workbasketKey)) {
return false; return false;
} }
if (workbasketName == null) { if (workbasketName == null) {
@ -122,8 +124,20 @@ public class TaskSummary {
@Override @Override
public String toString() { public String toString() {
return "TaskSummary [taskId=" + taskId + ", taskName=" + taskName + ", workbasketId=" + workbasketId StringBuilder builder = new StringBuilder();
+ ", workbasketName=" + workbasketName + ", classificationKey=" + classificationKey builder.append("TaskSummary [taskId=");
+ ", classificationName=" + classificationName + "]"; builder.append(taskId);
builder.append(", taskName=");
builder.append(taskName);
builder.append(", workbasketKey=");
builder.append(workbasketKey);
builder.append(", workbasketName=");
builder.append(workbasketName);
builder.append(", classificationKey=");
builder.append(classificationKey);
builder.append(", classificationName=");
builder.append(classificationName);
builder.append("]");
return builder.toString();
} }
} }

View File

@ -6,7 +6,7 @@ package pro.taskana.model;
public class WorkbasketAccessItem { public class WorkbasketAccessItem {
private String id; private String id;
private String workbasketId; private String workbasketKey;
private String accessId; private String accessId;
private boolean permRead; private boolean permRead;
private boolean permOpen; private boolean permOpen;
@ -31,12 +31,12 @@ public class WorkbasketAccessItem {
this.id = id; this.id = id;
} }
public String getWorkbasketId() { public String getWorkbasketKey() {
return workbasketId; return workbasketKey;
} }
public void setWorkbasketId(String workbasketId) { public void setWorkbasketKey(String workbasketKey) {
this.workbasketId = workbasketId; this.workbasketKey = workbasketKey;
} }
public String getAccessId() { public String getAccessId() {
@ -156,8 +156,8 @@ public class WorkbasketAccessItem {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
builder.append("WorkbasketAccessItem [id="); builder.append("WorkbasketAccessItem [id=");
builder.append(id); builder.append(id);
builder.append(", workbasketId="); builder.append(", workbasketKey=");
builder.append(workbasketId); builder.append(workbasketKey);
builder.append(", accessId="); builder.append(", accessId=");
builder.append(accessId); builder.append(accessId);
builder.append(", permRead="); builder.append(", permRead=");

View File

@ -0,0 +1,8 @@
package pro.taskana.model;
/**
* This enum contains the supported work basket types.
*/
public enum WorkbasketType {
GROUP, PERSONAL, TOPIC, CLEARANCE
}

View File

@ -26,184 +26,201 @@ public interface QueryMapper {
String CLASSIFICATION_FINDBYIDANDDOMAIN = "pro.taskana.model.mappings.ClassificationMapper.findByKeyAndDomain"; String CLASSIFICATION_FINDBYIDANDDOMAIN = "pro.taskana.model.mappings.ClassificationMapper.findByKeyAndDomain";
String CLASSIFICATION_FINDBYID = "pro.taskana.model.mappings.ClassificationMapper.findById"; String CLASSIFICATION_FINDBYID = "pro.taskana.model.mappings.ClassificationMapper.findById";
@Select("<script>SELECT t.ID, t.CREATED, t.CLAIMED, t.COMPLETED, t.MODIFIED, t.PLANNED, t.DUE, t.NAME, t.DESCRIPTION, t.PRIORITY, t.STATE, t.CLASSIFICATION_KEY, t.WORKBASKETID, t.OWNER, t.PRIMARY_OBJ_REF_ID, t.IS_READ, t.IS_TRANSFERRED, t.CUSTOM_1, t.CUSTOM_2, t.CUSTOM_3, t.CUSTOM_4, t.CUSTOM_5, t.CUSTOM_6, t.CUSTOM_7, t.CUSTOM_8, t.CUSTOM_9, t.CUSTOM_10 " @Select("<script>SELECT t.ID, t.CREATED, t.CLAIMED, t.COMPLETED, t.MODIFIED, t.PLANNED, t.DUE, t.NAME, t.DESCRIPTION, t.PRIORITY, t.STATE, t.CLASSIFICATION_KEY, t.WORKBASKET_KEY, t.OWNER, t.PRIMARY_OBJ_REF_ID, t.IS_READ, t.IS_TRANSFERRED, t.CUSTOM_1, t.CUSTOM_2, t.CUSTOM_3, t.CUSTOM_4, t.CUSTOM_5, t.CUSTOM_6, t.CUSTOM_7, t.CUSTOM_8, t.CUSTOM_9, t.CUSTOM_10 "
+ "FROM TASK t " + "FROM TASK t "
// Joins if Classification or Object Reference Query is needed // Joins if Classification or Object Reference Query is needed
+ "<if test='classificationQuery != null'>LEFT OUTER JOIN CLASSIFICATION c on t.CLASSIFICATION_KEY = c.KEY</if> " + "<if test='classificationQuery != null'>LEFT OUTER JOIN CLASSIFICATION c on t.CLASSIFICATION_KEY = c.KEY</if> "
+ "<if test='objectReferenceQuery != null'>LEFT OUTER JOIN OBJECT_REFERENCE o on t.PRIMARY_OBJ_REF_ID = o.ID</if> " + "<if test='objectReferenceQuery != null'>LEFT OUTER JOIN OBJECT_REFERENCE o on t.PRIMARY_OBJ_REF_ID = o.ID</if> "
+ "<where>" + "<where>"
+ "<if test='name != null'>AND t.NAME IN(<foreach item='item' collection='name' separator=',' >#{item}</foreach>)</if> " + "<if test='name != null'>AND t.NAME IN(<foreach item='item' collection='name' separator=',' >#{item}</foreach>)</if> "
+ "<if test='description != null'>AND t.DESCRIPTION like #{description}</if> " + "<if test='description != null'>AND t.DESCRIPTION like #{description}</if> "
+ "<if test='priority != null'>AND t.PRIORITY IN(<foreach item='item' collection='priority' separator=',' >#{item}</foreach>)</if> " + "<if test='priority != null'>AND t.PRIORITY IN(<foreach item='item' collection='priority' separator=',' >#{item}</foreach>)</if> "
+ "<if test='states != null'>AND t.STATE IN(<foreach item='item' collection='states' separator=',' >#{item}</foreach>)</if> " + "<if test='states != null'>AND t.STATE IN(<foreach item='item' collection='states' separator=',' >#{item}</foreach>)</if> "
+ "<if test='workbasketId != null'>AND t.WORKBASKETID IN(<foreach item='item' collection='workbasketId' separator=',' >#{item}</foreach>)</if> " + "<if test='workbasketKey != null'>AND t.WORKBASKET_KEY IN(<foreach item='item' collection='workbasketKey' separator=',' >#{item}</foreach>)</if> "
+ "<if test='owner != null'>AND t.OWNER IN(<foreach item='item' collection='owner' separator=',' >#{item}</foreach>)</if> " + "<if test='owner != null'>AND t.OWNER IN(<foreach item='item' collection='owner' separator=',' >#{item}</foreach>)</if> "
+ "<if test='isRead != null'>AND t.IS_READ = #{isRead}</if> " + "<if test='isRead != null'>AND t.IS_READ = #{isRead}</if> "
+ "<if test='isTransferred != null'>AND t.IS_TRANSFERRED = #{isTransferred}</if> " + "<if test='isTransferred != null'>AND t.IS_TRANSFERRED = #{isTransferred}</if> "
+ "<if test='customFields != null'>AND (t.CUSTOM_1 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_2 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_3 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_4 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_5 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_6 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_7 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_8 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_9 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_10 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>))</if> " + "<if test='customFields != null'>AND (t.CUSTOM_1 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_2 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_3 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_4 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_5 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_6 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_7 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_8 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_9 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR t.CUSTOM_10 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>))</if> "
// Classification Query // Classification Query
+ "<if test='classificationQuery != null'>" + "<if test='classificationQuery != null'>"
+ "<if test='classificationQuery.key != null'>AND c.KEY IN(<foreach item='item' collection='classificationQuery.key' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.key != null'>AND c.KEY IN(<foreach item='item' collection='classificationQuery.key' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.parentClassificationKey != null'>AND c.PARENT_CLASSIFICATION_KEY IN(<foreach item='item' collection='classificationQuery.parentClassificationKey' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.parentClassificationKey != null'>AND c.PARENT_CLASSIFICATION_KEY IN(<foreach item='item' collection='classificationQuery.parentClassificationKey' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.category != null'>AND c.CATEGORY IN(<foreach item='item' collection='classificationQuery.category' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.category != null'>AND c.CATEGORY IN(<foreach item='item' collection='classificationQuery.category' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.type != null'>AND c.TYPE IN(<foreach item='item' collection='classificationQuery.type' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.type != null'>AND c.TYPE IN(<foreach item='item' collection='classificationQuery.type' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.domain != null'>AND c.DOMAIN IN(<foreach item='item' collection='classificationQuery.domain' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.domain != null'>AND c.DOMAIN IN(<foreach item='item' collection='classificationQuery.domain' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.validInDomain != null'>AND c.VALID_IN_DOMAIN = #{classificationQuery.validInDomain}</if> " + "<if test='classificationQuery.validInDomain != null'>AND c.VALID_IN_DOMAIN = #{classificationQuery.validInDomain}</if> "
+ "<if test='classificationQuery.created != null'>AND c.CREATED IN(<foreach item='item' collection='classificationQuery.created' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.created != null'>AND c.CREATED IN(<foreach item='item' collection='classificationQuery.created' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.name != null'>AND c.NAME IN(<foreach item='item' collection='classificationQuery.name' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.name != null'>AND c.NAME IN(<foreach item='item' collection='classificationQuery.name' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.description != null'>AND c.DESCRIPTION like #{classificationQuery.description}</if> " + "<if test='classificationQuery.description != null'>AND c.DESCRIPTION like #{classificationQuery.description}</if> "
+ "<if test='classificationQuery.priority != null'>AND c.PRIORITY IN(<foreach item='item' collection='classificationQuery.priority' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.priority != null'>AND c.PRIORITY IN(<foreach item='item' collection='classificationQuery.priority' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.serviceLevel != null'>AND c.SERVICE_LEVEL IN(<foreach item='item' collection='classificationQuery.serviceLevel' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.serviceLevel != null'>AND c.SERVICE_LEVEL IN(<foreach item='item' collection='classificationQuery.serviceLevel' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.applicationEntryPoint != null'>AND c.APPLICATION_ENTRY_POINT IN(<foreach item='item' collection='classificationQuery.applicationEntryPoint' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.applicationEntryPoint != null'>AND c.APPLICATION_ENTRY_POINT IN(<foreach item='item' collection='classificationQuery.applicationEntryPoint' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.customFields != null'>AND (c.CUSTOM_1 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_2 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_3 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_4 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_5 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_6 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_7 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_8 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>))</if> " + "<if test='classificationQuery.customFields != null'>AND (c.CUSTOM_1 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_2 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_3 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_4 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_5 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_6 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_7 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_8 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>))</if> "
+ "<if test='classificationQuery.validFrom != null'>AND c.VALID_FROM IN(<foreach item='item' collection='classificationQuery.validFrom' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.validFrom != null'>AND c.VALID_FROM IN(<foreach item='item' collection='classificationQuery.validFrom' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.validUntil != null'>AND c.VALID_UNTIL IN(<foreach item='item' collection='classificationQuery.validUntil' separator=',' >#{item}</foreach>)</if> " + "<if test='classificationQuery.validUntil != null'>AND c.VALID_UNTIL IN(<foreach item='item' collection='classificationQuery.validUntil' separator=',' >#{item}</foreach>)</if> "
+ "</if>" + "</if>"
// Object Reference Query // Object Reference Query
+ "<if test='objectReferenceQuery != null'>" + "<if test='objectReferenceQuery != null'>"
+ "<if test='objectReferenceQuery.company != null'>AND o.COMPANY IN(<foreach item='item' collection='objectReferenceQuery.company' separator=',' >#{item}</foreach>)</if> " + "<if test='objectReferenceQuery.company != null'>AND o.COMPANY IN(<foreach item='item' collection='objectReferenceQuery.company' separator=',' >#{item}</foreach>)</if> "
+ "<if test='objectReferenceQuery.system != null'>AND o.SYSTEM IN(<foreach item='item' collection='objectReferenceQuery.system' separator=',' >#{item}</foreach>)</if> " + "<if test='objectReferenceQuery.system != null'>AND o.SYSTEM IN(<foreach item='item' collection='objectReferenceQuery.system' separator=',' >#{item}</foreach>)</if> "
+ "<if test='objectReferenceQuery.systemInstance != null'>AND o.SYSTEM_INSTANCE IN(<foreach item='item' collection='objectReferenceQuery.systemInstance' separator=',' >#{item}</foreach>)</if> " + "<if test='objectReferenceQuery.systemInstance != null'>AND o.SYSTEM_INSTANCE IN(<foreach item='item' collection='objectReferenceQuery.systemInstance' separator=',' >#{item}</foreach>)</if> "
+ "<if test='objectReferenceQuery.type != null'>AND o.TYPE IN(<foreach item='item' collection='objectReferenceQuery.type' separator=',' >#{item}</foreach>)</if> " + "<if test='objectReferenceQuery.type != null'>AND o.TYPE IN(<foreach item='item' collection='objectReferenceQuery.type' separator=',' >#{item}</foreach>)</if> "
+ "<if test='objectReferenceQuery.value != null'>AND o.VALUE IN(<foreach item='item' collection='objectReferenceQuery.value' separator=',' >#{item}</foreach>)</if> " + "<if test='objectReferenceQuery.value != null'>AND o.VALUE IN(<foreach item='item' collection='objectReferenceQuery.value' separator=',' >#{item}</foreach>)</if> "
+ "</if>" + "</if>"
+ "</where>" + "</where>"
+ "</script>") + "</script>")
@Results(value = { @Result(property = "id", column = "ID"), @Results(value = {@Result(property = "id", column = "ID"),
@Result(property = "created", column = "CREATED"), @Result(property = "created", column = "CREATED"),
@Result(property = "claimed", column = "CLAIMED"), @Result(property = "claimed", column = "CLAIMED"),
@Result(property = "completed", column = "COMPLETED"), @Result(property = "completed", column = "COMPLETED"),
@Result(property = "planned", column = "PLANNED"), @Result(property = "planned", column = "PLANNED"),
@Result(property = "due", column = "DUE"), @Result(property = "due", column = "DUE"),
@Result(property = "name", column = "NAME"), @Result(property = "name", column = "NAME"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "priority", column = "PRIORITY"), @Result(property = "priority", column = "PRIORITY"),
@Result(property = "state", column = "STATE"), @Result(property = "state", column = "STATE"),
@Result(property = "classification", column = "CLASSIFICATION_ID", javaType = ClassificationImpl.class, one = @One(select = CLASSIFICATION_FINDBYID)), @Result(property = "classification", column = "CLASSIFICATION_ID", javaType = ClassificationImpl.class,
@Result(property = "workbasketId", column = "WORKBASKETID"), one = @One(select = CLASSIFICATION_FINDBYID)),
@Result(property = "owner", column = "OWNER"), @Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
@Result(property = "primaryObjRef", column = "PRIMARY_OBJ_REF_ID", javaType = ObjectReference.class, one = @One(select = OBJECTREFERENCEMAPPER_FINDBYID)), @Result(property = "owner", column = "OWNER"),
@Result(property = "isRead", column = "IS_READ"), @Result(property = "primaryObjRef", column = "PRIMARY_OBJ_REF_ID", javaType = ObjectReference.class,
@Result(property = "isTransferred", column = "IS_TRANSFERRED"), one = @One(select = OBJECTREFERENCEMAPPER_FINDBYID)),
@Result(property = "custom1", column = "CUSTOM_1"), @Result(property = "isRead", column = "IS_READ"),
@Result(property = "custom2", column = "CUSTOM_2"), @Result(property = "isTransferred", column = "IS_TRANSFERRED"),
@Result(property = "custom3", column = "CUSTOM_3"), @Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom4", column = "CUSTOM_4"), @Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom5", column = "CUSTOM_5"), @Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom6", column = "CUSTOM_6"), @Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom7", column = "CUSTOM_7"), @Result(property = "custom5", column = "CUSTOM_5"),
@Result(property = "custom8", column = "CUSTOM_8"), @Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom9", column = "CUSTOM_9"), @Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom10", column = "CUSTOM_10") }) @Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10")})
List<TaskImpl> queryTasks(TaskQueryImpl taskQuery); List<TaskImpl> queryTasks(TaskQueryImpl taskQuery);
@Select("<script>SELECT ID, KEY, PARENT_CLASSIFICATION_KEY, CATEGORY, TYPE, DOMAIN, VALID_IN_DOMAIN, CREATED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL, APPLICATION_ENTRY_POINT, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, VALID_FROM, VALID_UNTIL " @Select("<script>SELECT ID, KEY, PARENT_CLASSIFICATION_KEY, CATEGORY, TYPE, DOMAIN, VALID_IN_DOMAIN, CREATED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL, APPLICATION_ENTRY_POINT, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, VALID_FROM, VALID_UNTIL "
+ "FROM CLASSIFICATION " + "FROM CLASSIFICATION "
+ "<where>" + "<where>"
+ "<if test='key != null'>AND KEY IN(<foreach item='item' collection='key' separator=',' >#{item}</foreach>)</if> " + "<if test='key != null'>AND KEY IN(<foreach item='item' collection='key' separator=',' >#{item}</foreach>)</if> "
+ "<if test='parentClassificationKey != null'>AND PARENT_CLASSIFICATION_KEY IN(<foreach item='item' collection='parentClassificationKey' separator=',' >#{item}</foreach>)</if> " + "<if test='parentClassificationKey != null'>AND PARENT_CLASSIFICATION_KEY IN(<foreach item='item' collection='parentClassificationKey' separator=',' >#{item}</foreach>)</if> "
+ "<if test='category != null'>AND CATEGORY IN(<foreach item='item' collection='category' separator=',' >#{item}</foreach>)</if> " + "<if test='category != null'>AND CATEGORY IN(<foreach item='item' collection='category' separator=',' >#{item}</foreach>)</if> "
+ "<if test='type != null'>AND TYPE IN(<foreach item='item' collection='type' separator=',' >#{item}</foreach>)</if> " + "<if test='type != null'>AND TYPE IN(<foreach item='item' collection='type' separator=',' >#{item}</foreach>)</if> "
+ "<if test='domain != null'>AND DOMAIN IN(<foreach item='item' collection='domain' separator=',' >#{item}</foreach>)</if> " + "<if test='domain != null'>AND DOMAIN IN(<foreach item='item' collection='domain' separator=',' >#{item}</foreach>)</if> "
+ "<if test='validInDomain != null'>AND VALID_IN_DOMAIN = #{validInDomain}</if> " + "<if test='validInDomain != null'>AND VALID_IN_DOMAIN = #{validInDomain}</if> "
+ "<if test='created != null'>AND CREATED IN(<foreach item='item' collection='created' separator=',' >#{item}</foreach>)</if> " + "<if test='created != null'>AND CREATED IN(<foreach item='item' collection='created' separator=',' >#{item}</foreach>)</if> "
+ "<if test='name != null'>AND NAME IN(<foreach item='item' collection='name' separator=',' >#{item}</foreach>)</if> " + "<if test='name != null'>AND NAME IN(<foreach item='item' collection='name' separator=',' >#{item}</foreach>)</if> "
+ "<if test='description != null'>AND DESCRIPTION like #{description}</if> " + "<if test='description != null'>AND DESCRIPTION like #{description}</if> "
+ "<if test='priority != null'>AND PRIORITY IN(<foreach item='item' collection='priority' separator=',' >#{item}</foreach>)</if> " + "<if test='priority != null'>AND PRIORITY IN(<foreach item='item' collection='priority' separator=',' >#{item}</foreach>)</if> "
+ "<if test='serviceLevel != null'>AND SERVICE_LEVEL IN(<foreach item='item' collection='serviceLevel' separator=',' >#{item}</foreach>)</if> " + "<if test='serviceLevel != null'>AND SERVICE_LEVEL IN(<foreach item='item' collection='serviceLevel' separator=',' >#{item}</foreach>)</if> "
+ "<if test='applicationEntryPoint != null'>AND APPLICATION_ENTRY_POINT IN(<foreach item='item' collection='applicationEntryPoint' separator=',' >#{item}</foreach>)</if> " + "<if test='applicationEntryPoint != null'>AND APPLICATION_ENTRY_POINT IN(<foreach item='item' collection='applicationEntryPoint' separator=',' >#{item}</foreach>)</if> "
+ "<if test='customFields != null'>AND (CUSTOM_1 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_2 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_3 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_4 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_5 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_6 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_7 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_8 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>))</if> " + "<if test='customFields != null'>AND (CUSTOM_1 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_2 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_3 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_4 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_5 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_6 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_7 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_8 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>))</if> "
+ "<if test='validFrom != null'>AND VALID_FROM IN(<foreach item='item' collection='validFrom' separator=',' >#{item}</foreach>)</if> " + "<if test='validFrom != null'>AND VALID_FROM IN(<foreach item='item' collection='validFrom' separator=',' >#{item}</foreach>)</if> "
+ "<if test='validUntil != null'>AND VALID_UNTIL IN(<foreach item='item' collection='validUntil' separator=',' >#{item}</foreach>)</if> " + "<if test='validUntil != null'>AND VALID_UNTIL IN(<foreach item='item' collection='validUntil' separator=',' >#{item}</foreach>)</if> "
+ "</where>" + "</where>"
+ "</script>") + "</script>")
@Results({ @Result(property = "id", column = "ID"), @Results({@Result(property = "id", column = "ID"),
@Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"), @Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"),
@Result(property = "category", column = "CATEGORY"), @Result(property = "category", column = "CATEGORY"),
@Result(property = "type", column = "TYPE"), @Result(property = "type", column = "TYPE"),
@Result(property = "domain", column = "DOMAIN"), @Result(property = "domain", column = "DOMAIN"),
@Result(property = "isValidInDomain", column = "VALID_IN_DOMAIN"), @Result(property = "isValidInDomain", column = "VALID_IN_DOMAIN"),
@Result(property = "created", column = "CREATED"), @Result(property = "created", column = "CREATED"),
@Result(property = "name", column = "NAME"), @Result(property = "name", column = "NAME"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "priority", column = "PRIORITY"), @Result(property = "priority", column = "PRIORITY"),
@Result(property = "serviceLevel", column = "SERVICE_LEVEL"), @Result(property = "serviceLevel", column = "SERVICE_LEVEL"),
@Result(property = "custom1", column = "CUSTOM_1"), @Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"), @Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"), @Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"), @Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom5", column = "CUSTOM_5"), @Result(property = "custom5", column = "CUSTOM_5"),
@Result(property = "custom6", column = "CUSTOM_6"), @Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom7", column = "CUSTOM_7"), @Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom8", column = "CUSTOM_8"), @Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "validFrom", column = "VALID_FROM"), @Result(property = "validFrom", column = "VALID_FROM"),
@Result(property = "validUntil", column = "VALID_UNTIL") }) @Result(property = "validUntil", column = "VALID_UNTIL")})
List<ClassificationImpl> queryClassification(ClassificationQueryImpl classificationQuery); List<ClassificationImpl> queryClassification(ClassificationQueryImpl classificationQuery);
@Select("<script>SELECT ID, COMPANY, SYSTEM, SYSTEM_INSTANCE, TYPE, VALUE " @Select("<script>SELECT ID, COMPANY, SYSTEM, SYSTEM_INSTANCE, TYPE, VALUE "
+ "FROM OBJECT_REFERENCE " + "FROM OBJECT_REFERENCE "
+ "<where>" + "<where>"
+ "<if test='company != null'>AND COMPANY IN(<foreach item='item' collection='company' separator=',' >#{item}</foreach>)</if> " + "<if test='company != null'>AND COMPANY IN(<foreach item='item' collection='company' separator=',' >#{item}</foreach>)</if> "
+ "<if test='system != null'>AND SYSTEM IN(<foreach item='item' collection='system' separator=',' >#{item}</foreach>)</if> " + "<if test='system != null'>AND SYSTEM IN(<foreach item='item' collection='system' separator=',' >#{item}</foreach>)</if> "
+ "<if test='systemInstance != null'>AND SYSTEM_INSTANCE IN(<foreach item='item' collection='systemInstance' separator=',' >#{item}</foreach>)</if> " + "<if test='systemInstance != null'>AND SYSTEM_INSTANCE IN(<foreach item='item' collection='systemInstance' separator=',' >#{item}</foreach>)</if> "
+ "<if test='type != null'>AND TYPE IN(<foreach item='item' collection='type' separator=',' >#{item}</foreach>)</if> " + "<if test='type != null'>AND TYPE IN(<foreach item='item' collection='type' separator=',' >#{item}</foreach>)</if> "
+ "<if test='value != null'>AND VALUE IN(<foreach item='item' collection='value' separator=',' >#{item}</foreach>)</if> " + "<if test='value != null'>AND VALUE IN(<foreach item='item' collection='value' separator=',' >#{item}</foreach>)</if> "
+ "</where>" + "</where>"
+ "</script>") + "</script>")
@Results({ @Results({
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "company", column = "COMPANY"), @Result(property = "company", column = "COMPANY"),
@Result(property = "system", column = "SYSTEM"), @Result(property = "system", column = "SYSTEM"),
@Result(property = "systemInstance", column = "SYSTEM_INSTANCE"), @Result(property = "systemInstance", column = "SYSTEM_INSTANCE"),
@Result(property = "type", column = "TYPE"), @Result(property = "type", column = "TYPE"),
@Result(property = "value", column = "VALUE") }) @Result(property = "value", column = "VALUE")})
List<ObjectReference> queryObjectReference(ObjectReferenceQueryImpl objectReference); List<ObjectReference> queryObjectReference(ObjectReferenceQueryImpl objectReference);
@Select("<script>SELECT w.ID, w.CREATED, w.MODIFIED, w.NAME, w.DESCRIPTION, w.OWNER from WORKBASKET w " @Select("<script>SELECT w.ID, w.KEY, w.CREATED, w.MODIFIED, w.NAME, w.DOMAIN, W.TYPE, w.DESCRIPTION, w.OWNER, w.CUSTOM_1, w.CUSTOM_2, w.CUSTOM_3, w.CUSTOM_4, w.ORG_LEVEL_1, w.ORG_LEVEL_2, w.ORG_LEVEL_3, w.ORG_LEVEL_4 from WORKBASKET w "
+ "<if test='accessId != null'>LEFT OUTER JOIN WORKBASKET_ACCESS_LIST a on w.ID = a.WORKBASKET_ID</if> " + "<if test='accessId != null'>LEFT OUTER JOIN WORKBASKET_ACCESS_LIST a on w.KEY = a.WORKBASKET_KEY</if> "
+ "<where>" + "<where>"
+ "<if test='owner != null'>AND w.OWNER IN(<foreach item='item' collection='owner' separator=',' >#{item}</foreach>)</if> " + "<if test='owner != null'>AND w.OWNER IN(<foreach item='item' collection='owner' separator=',' >#{item}</foreach>)</if> "
+ "<if test='name != null'>AND w.NAME IN(<foreach item='item' collection='name' separator=',' >#{item}</foreach>)</if> " + "<if test='key != null'>AND w.KEY IN(<foreach item='item' collection='key' separator=',' >#{item}</foreach>)</if> "
+ "<if test='created != null'>AND w.CREATED IN(<foreach item='item' collection='created' separator=',' >#{item}</foreach>)</if> " + "<if test='name != null'>AND w.NAME IN(<foreach item='item' collection='name' separator=',' >#{item}</foreach>)</if> "
+ "<if test='modified != null'>AND w.MODIFIED IN(<foreach item='item' collection='modified' separator=',' >#{item}</foreach>)</if> " + "<if test='domain != null'>AND w.DOMAIN IN(<foreach item='item' collection='domain' separator=',' >#{item}</foreach>)</if> "
+ "<if test='description != null'>AND w.DESCRIPTION like #{description}</if> " + "<if test='type!= null'>AND w.TYPE IN(<foreach item='item' collection='type' separator=',' >#{item}</foreach>)</if> "
+ "<if test='accessId != null'>AND a.ACCESS_ID IN(<foreach item='item' collection='accessId' separator=',' >#{item}</foreach>)</if> " + "<if test='createdAfter != null'>AND w.CREATED &gt; #{createdAfter}</if> "
+ "<if test='authorization != null'>AND " + "<if test='createdBefore != null'>AND w.CREATED &lt; #{createdBefore}</if> "
+ "<if test=\"authorization.name().equals('OPEN')\">PERM_OPEN</if> " + "<if test='modifiedAfter != null'>AND w.MODIFIED &gt; #{modifiedAfter}</if> "
+ "<if test=\"authorization.name().equals('READ')\">PERM_READ</if>" + "<if test='modifiedBefore != null'>AND w.MODIFIED &lt; #{modifiedBefore}</if> "
+ "<if test=\"authorization.name().equals('APPEND')\">PERM_APPEND</if>" + "<if test='description != null'>AND w.DESCRIPTION like #{description}</if> "
+ "<if test=\"authorization.name().equals('TRANSFER')\">PERM_TRANSFER</if>" + "<if test='accessId != null'>AND a.ACCESS_ID IN(<foreach item='item' collection='accessId' separator=',' >#{item}</foreach>)</if> "
+ "<if test=\"authorization.name().equals('DISTRIBUTE')\">PERM_DISTRIBUTE</if>" + "<if test='authorization != null'>AND "
+ "<if test=\"authorization.name().equals('CUSTOM_1')\">PERM_CUSTOM_1</if>" + "<if test=\"authorization.name().equals('OPEN')\">PERM_OPEN</if> "
+ "<if test=\"authorization.name().equals('CUSTOM_2')\">PERM_CUSTOM_2</if>" + "<if test=\"authorization.name().equals('READ')\">PERM_READ</if>"
+ "<if test=\"authorization.name().equals('CUSTOM_3')\">PERM_CUSTOM_3</if>" + "<if test=\"authorization.name().equals('APPEND')\">PERM_APPEND</if>"
+ "<if test=\"authorization.name().equals('CUSTOM_4')\">PERM_CUSTOM_4</if>" + "<if test=\"authorization.name().equals('TRANSFER')\">PERM_TRANSFER</if>"
+ "<if test=\"authorization.name().equals('CUSTOM_5')\">PERM_CUSTOM_5</if>" + "<if test=\"authorization.name().equals('DISTRIBUTE')\">PERM_DISTRIBUTE</if>"
+ "<if test=\"authorization.name().equals('CUSTOM_6')\">PERM_CUSTOM_6</if>" + "<if test=\"authorization.name().equals('CUSTOM_1')\">PERM_CUSTOM_1</if>"
+ "<if test=\"authorization.name().equals('CUSTOM_7')\">PERM_CUSTOM_7</if>" + "<if test=\"authorization.name().equals('CUSTOM_2')\">PERM_CUSTOM_2</if>"
+ "<if test=\"authorization.name().equals('CUSTOM_8')\">PERM_CUSTOM_8</if> = 1 " + "<if test=\"authorization.name().equals('CUSTOM_3')\">PERM_CUSTOM_3</if>"
+ "</if>" + "<if test=\"authorization.name().equals('CUSTOM_4')\">PERM_CUSTOM_4</if>"
+ "</where>" + "<if test=\"authorization.name().equals('CUSTOM_5')\">PERM_CUSTOM_5</if>"
+ "</script>") + "<if test=\"authorization.name().equals('CUSTOM_6')\">PERM_CUSTOM_6</if>"
+ "<if test=\"authorization.name().equals('CUSTOM_7')\">PERM_CUSTOM_7</if>"
+ "<if test=\"authorization.name().equals('CUSTOM_8')\">PERM_CUSTOM_8</if> = 1 "
+ "</if>"
+ "</where>"
+ "</script>")
@Results({ @Results({
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "key", column = "KEY"),
@Result(property = "name", column = "NAME"), @Result(property = "name", column = "NAME"),
@Result(property = "created", column = "CREATED"), @Result(property = "created", column = "CREATED"),
@Result(property = "modified", column = "MODIFIED"), @Result(property = "modified", column = "MODIFIED"),
@Result(property = "domain", column = "DOMAIN"),
@Result(property = "type", column = "TYPE"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"), @Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "id", javaType = List.class, many = @Many(select = "findDistributionTargets"))}) @Result(property = "distributionTargets", column = "id", javaType = List.class,
many = @Many(select = "findDistributionTargets")),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "orgLevel1", column = "ORG_LEVEL_1"),
@Result(property = "orgLevel2", column = "ORG_LEVEL_2"),
@Result(property = "orgLevel3", column = "ORG_LEVEL_3"),
@Result(property = "orgLevel4", column = "ORG_LEVEL_4")})
List<WorkbasketImpl> queryWorkbasket(WorkbasketQueryImpl workbasketQuery); List<WorkbasketImpl> queryWorkbasket(WorkbasketQueryImpl workbasketQuery);
@Select("<script>SELECT TARGET_ID from DISTRIBUTION_TARGETS " @Select("<script>SELECT TARGET_ID from DISTRIBUTION_TARGETS "
+ "<where>" + "<where>"
+ "SOURCE_ID = #{sourceId}" + "SOURCE_ID = #{sourceId}"
+ "</where>" + "</where>"
+ "</script>") + "</script>")
@Results(value = { @Results(value = {
@Result(property = "distributionTarget", column = "TARGET_ID")}) @Result(property = "distributionTarget", column = "TARGET_ID")})
List<String> findDistributionTargets(String sourceId); List<String> findDistributionTargets(String sourceId);
} }

View File

@ -31,7 +31,7 @@ public interface TaskMapper {
String CLASSIFICATION_FINDBYKEYROOTDOMAIN = "pro.taskana.model.mappings.ClassificationMapper.findByKeyRootDomain"; String CLASSIFICATION_FINDBYKEYROOTDOMAIN = "pro.taskana.model.mappings.ClassificationMapper.findByKeyRootDomain";
@Select("SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_KEY, WORKBASKETID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 " @Select("SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_KEY, WORKBASKET_KEY, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 "
+ "FROM TASK " + "FROM TASK "
+ "WHERE ID = #{id}") + "WHERE ID = #{id}")
@Results(value = { @Results(value = {
@ -48,7 +48,7 @@ public interface TaskMapper {
@Result(property = "state", column = "STATE"), @Result(property = "state", column = "STATE"),
@Result(property = "classification", column = "CLASSIFICATION_KEY", javaType = ClassificationImpl.class, @Result(property = "classification", column = "CLASSIFICATION_KEY", javaType = ClassificationImpl.class,
one = @One(select = CLASSIFICATION_FINDBYKEYROOTDOMAIN)), one = @One(select = CLASSIFICATION_FINDBYKEYROOTDOMAIN)),
@Result(property = "workbasketId", column = "WORKBASKETID"), @Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
@Result(property = "businessProcessId", column = "BUSINESS_PROCESS_ID"), @Result(property = "businessProcessId", column = "BUSINESS_PROCESS_ID"),
@Result(property = "parentBusinessProcessId", column = "PARENT_BUSINESS_PROCESS_ID"), @Result(property = "parentBusinessProcessId", column = "PARENT_BUSINESS_PROCESS_ID"),
@Result(property = "owner", column = "OWNER"), @Result(property = "owner", column = "OWNER"),
@ -71,21 +71,21 @@ public interface TaskMapper {
}) })
TaskImpl findById(@Param("id") String id); TaskImpl findById(@Param("id") String id);
@Insert("INSERT INTO TASK(ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_KEY, WORKBASKETID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10) " @Insert("INSERT INTO TASK(ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_KEY, WORKBASKET_KEY, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10) "
+ "VALUES(#{id}, #{created}, #{claimed}, #{completed}, #{modified}, #{planned}, #{due}, #{name}, #{description}, #{priority}, #{state}, #{classification.key}, #{workbasketId}, #{businessProcessId}, #{parentBusinessProcessId}, #{owner}, #{primaryObjRef.id}, #{isRead}, #{isTransferred}, #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, #{custom1}, #{custom2}, #{custom3}, #{custom4}, #{custom5}, #{custom6}, #{custom7}, #{custom8}, #{custom9}, #{custom10})") + "VALUES(#{id}, #{created}, #{claimed}, #{completed}, #{modified}, #{planned}, #{due}, #{name}, #{description}, #{priority}, #{state}, #{classification.key}, #{workbasketKey}, #{businessProcessId}, #{parentBusinessProcessId}, #{owner}, #{primaryObjRef.id}, #{isRead}, #{isTransferred}, #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, #{custom1}, #{custom2}, #{custom3}, #{custom4}, #{custom5}, #{custom6}, #{custom7}, #{custom8}, #{custom9}, #{custom10})")
@Options(keyProperty = "id", keyColumn = "ID") @Options(keyProperty = "id", keyColumn = "ID")
void insert(TaskImpl task); void insert(TaskImpl task);
@Update("UPDATE TASK SET CLAIMED = #{claimed}, COMPLETED = #{completed}, MODIFIED = #{modified}, PLANNED = #{planned}, DUE = #{due}, NAME = #{name}, DESCRIPTION = #{description}, PRIORITY = #{priority}, STATE = #{state}, CLASSIFICATION_KEY = #{classification.key}, WORKBASKETID = #{workbasketId}, BUSINESS_PROCESS_ID = #{businessProcessId}, PARENT_BUSINESS_PROCESS_ID = #{parentBusinessProcessId}, OWNER = #{owner}, PRIMARY_OBJ_REF_ID = #{primaryObjRef.id}, IS_READ = #{isRead}, IS_TRANSFERRED = #{isTransferred}, CUSTOM_ATTRIBUTES = #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, CUSTOM_1 = #{custom1}, CUSTOM_2 = #{custom2}, CUSTOM_3 = #{custom3}, CUSTOM_4 = #{custom4}, CUSTOM_5 = #{custom5}, CUSTOM_6 = #{custom6}, CUSTOM_7 = #{custom7}, CUSTOM_8 = #{custom8}, CUSTOM_9 = #{custom9}, CUSTOM_10 = #{custom10} " @Update("UPDATE TASK SET CLAIMED = #{claimed}, COMPLETED = #{completed}, MODIFIED = #{modified}, PLANNED = #{planned}, DUE = #{due}, NAME = #{name}, DESCRIPTION = #{description}, PRIORITY = #{priority}, STATE = #{state}, CLASSIFICATION_KEY = #{classification.key}, WORKBASKET_KEY = #{workbasketKey}, BUSINESS_PROCESS_ID = #{businessProcessId}, PARENT_BUSINESS_PROCESS_ID = #{parentBusinessProcessId}, OWNER = #{owner}, PRIMARY_OBJ_REF_ID = #{primaryObjRef.id}, IS_READ = #{isRead}, IS_TRANSFERRED = #{isTransferred}, CUSTOM_ATTRIBUTES = #{customAttributes,jdbcType=BLOB,javaType=java.util.Map,typeHandler=pro.taskana.impl.persistence.MapTypeHandler}, CUSTOM_1 = #{custom1}, CUSTOM_2 = #{custom2}, CUSTOM_3 = #{custom3}, CUSTOM_4 = #{custom4}, CUSTOM_5 = #{custom5}, CUSTOM_6 = #{custom6}, CUSTOM_7 = #{custom7}, CUSTOM_8 = #{custom8}, CUSTOM_9 = #{custom9}, CUSTOM_10 = #{custom10} "
+ "WHERE ID = #{id}") + "WHERE ID = #{id}")
void update(TaskImpl task); void update(TaskImpl task);
@Delete("DELETE FROM TASK WHERE ID = #{id}") @Delete("DELETE FROM TASK WHERE ID = #{id}")
void delete(String id); void delete(String id);
@Select("SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_KEY, WORKBASKETID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 " @Select("SELECT ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_KEY, WORKBASKET_KEY, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 "
+ "FROM TASK " + "FROM TASK "
+ "WHERE WORKBASKETID = #{workbasketId} " + "WHERE WORKBASKET_KEY = #{workbasketKey} "
+ "AND STATE = #{taskState}") + "AND STATE = #{taskState}")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@ -101,7 +101,7 @@ public interface TaskMapper {
@Result(property = "state", column = "STATE"), @Result(property = "state", column = "STATE"),
@Result(property = "classification", column = "CLASSIFICATION_KEY", javaType = Classification.class, @Result(property = "classification", column = "CLASSIFICATION_KEY", javaType = Classification.class,
one = @One(select = CLASSIFICATION_FINDBYKEYROOTDOMAIN)), one = @One(select = CLASSIFICATION_FINDBYKEYROOTDOMAIN)),
@Result(property = "workbasketId", column = "WORKBASKETID"), @Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
@Result(property = "owner", column = "OWNER"), @Result(property = "owner", column = "OWNER"),
@Result(property = "primaryObjRef", column = "PRIMARY_OBJ_REF_ID", javaType = ObjectReference.class, @Result(property = "primaryObjRef", column = "PRIMARY_OBJ_REF_ID", javaType = ObjectReference.class,
one = @One(select = OBJECTREFERENCEMAPPER_FINDBYID)), one = @One(select = OBJECTREFERENCEMAPPER_FINDBYID)),
@ -120,22 +120,22 @@ public interface TaskMapper {
@Result(property = "custom9", column = "CUSTOM_9"), @Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10") @Result(property = "custom10", column = "CUSTOM_10")
}) })
List<TaskImpl> findTasksByWorkbasketIdAndState(@Param("workbasketId") String workbasketId, List<TaskImpl> findTasksByWorkbasketIdAndState(@Param("workbasketKey") String workbasketKey,
@Param("taskState") TaskState taskState); @Param("taskState") TaskState taskState);
@Select("SELECT TASK.ID AS taskId, TASK.NAME AS taskName, TASK.WORKBASKETID AS workId, TASK.CLASSIFICATION_KEY AS classificationKey, " @Select("SELECT TASK.ID AS taskId, TASK.NAME AS taskName, TASK.WORKBASKET_KEY AS workId, TASK.CLASSIFICATION_KEY AS classificationKey, "
+ "WORKBASKET.NAME AS workName, CLASSIFICATION.NAME AS classificationName " + "WORKBASKET.NAME AS workName, CLASSIFICATION.NAME AS classificationName "
+ "FROM TASK " + "FROM TASK "
+ "LEFT JOIN WORKBASKET ON WORKBASKET.ID = TASK.WORKBASKETID " + "LEFT JOIN WORKBASKET ON WORKBASKET.KEY = TASK.WORKBASKET_KEY "
+ "LEFT JOIN CLASSIFICATION ON CLASSIFICATION.KEY = TASK.CLASSIFICATION_KEY " + "LEFT JOIN CLASSIFICATION ON CLASSIFICATION.KEY = TASK.CLASSIFICATION_KEY "
+ "WHERE TASK.WORKBASKETID = #{workbasketId}") + "WHERE TASK.WORKBASKET_KEY = #{workbasketKey}")
@Results({ @Results({
@Result(property = "taskId", column = "taskId"), @Result(property = "taskId", column = "taskId"),
@Result(property = "taskName", column = "taskName"), @Result(property = "taskName", column = "taskName"),
@Result(property = "workbasketId", column = "workId"), @Result(property = "workbasketKey", column = "workKey"),
@Result(property = "workbasketName", column = "workName"), @Result(property = "workbasketName", column = "workName"),
@Result(property = "classificationKey", column = "classificationKey"), @Result(property = "classificationKey", column = "classificationKey"),
@Result(property = "classificationName", column = "classificationName") @Result(property = "classificationName", column = "classificationName")
}) })
List<TaskSummary> findTaskSummariesByWorkbasketId(@Param("workbasketId") String workbasketId); List<TaskSummary> findTaskSummariesByWorkbasketKey(@Param("workbasketKey") String workbasketKey);
} }

View File

@ -9,132 +9,134 @@ import java.util.List;
*/ */
public interface WorkbasketAccessMapper { public interface WorkbasketAccessMapper {
@Select("SELECT ID, WORKBASKET_ID, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 FROM WORKBASKET_ACCESS_LIST WHERE ID = #{id}") @Select("SELECT ID, WORKBASKET_KEY, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 FROM WORKBASKET_ACCESS_LIST WHERE ID = #{id}")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "workbasketId", column = "WORKBASKET_ID"), @Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
@Result(property = "accessId", column = "ACCESS_ID"), @Result(property = "accessId", column = "ACCESS_ID"),
@Result(property = "permRead", column = "PERM_READ"), @Result(property = "permRead", column = "PERM_READ"),
@Result(property = "permOpen", column = "PERM_OPEN"), @Result(property = "permOpen", column = "PERM_OPEN"),
@Result(property = "permAppend", column = "PERM_APPEND"), @Result(property = "permAppend", column = "PERM_APPEND"),
@Result(property = "permTransfer", column = "PERM_TRANSFER"), @Result(property = "permTransfer", column = "PERM_TRANSFER"),
@Result(property = "permDistribute", column = "PERM_DISTRIBUTE"), @Result(property = "permDistribute", column = "PERM_DISTRIBUTE"),
@Result(property = "permCustom1", column = "PERM_CUSTOM_1"), @Result(property = "permCustom1", column = "PERM_CUSTOM_1"),
@Result(property = "permCustom2", column = "PERM_CUSTOM_2"), @Result(property = "permCustom2", column = "PERM_CUSTOM_2"),
@Result(property = "permCustom3", column = "PERM_CUSTOM_3"), @Result(property = "permCustom3", column = "PERM_CUSTOM_3"),
@Result(property = "permCustom4", column = "PERM_CUSTOM_4"), @Result(property = "permCustom4", column = "PERM_CUSTOM_4"),
@Result(property = "permCustom5", column = "PERM_CUSTOM_5"), @Result(property = "permCustom5", column = "PERM_CUSTOM_5"),
@Result(property = "permCustom6", column = "PERM_CUSTOM_6"), @Result(property = "permCustom6", column = "PERM_CUSTOM_6"),
@Result(property = "permCustom7", column = "PERM_CUSTOM_7"), @Result(property = "permCustom7", column = "PERM_CUSTOM_7"),
@Result(property = "permCustom8", column = "PERM_CUSTOM_8")}) @Result(property = "permCustom8", column = "PERM_CUSTOM_8")})
WorkbasketAccessItem findById(@Param("id") String id); WorkbasketAccessItem findById(@Param("id") String id);
@Select("SELECT ID, WORKBASKET_ID, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 FROM WORKBASKET_ACCESS_LIST WHERE ACCESS_ID = #{accessId}") @Select("SELECT ID, WORKBASKET_KEY, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 FROM WORKBASKET_ACCESS_LIST WHERE ACCESS_ID = #{accessId}")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "workbasketId", column = "WORKBASKET_ID"), @Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
@Result(property = "accessId", column = "ACCESS_ID"), @Result(property = "accessId", column = "ACCESS_ID"),
@Result(property = "permRead", column = "PERM_READ"), @Result(property = "permRead", column = "PERM_READ"),
@Result(property = "permOpen", column = "PERM_OPEN"), @Result(property = "permOpen", column = "PERM_OPEN"),
@Result(property = "permAppend", column = "PERM_APPEND"), @Result(property = "permAppend", column = "PERM_APPEND"),
@Result(property = "permTransfer", column = "PERM_TRANSFER"), @Result(property = "permTransfer", column = "PERM_TRANSFER"),
@Result(property = "permDistribute", column = "PERM_DISTRIBUTE"), @Result(property = "permDistribute", column = "PERM_DISTRIBUTE"),
@Result(property = "permCustom1", column = "PERM_CUSTOM_1"), @Result(property = "permCustom1", column = "PERM_CUSTOM_1"),
@Result(property = "permCustom2", column = "PERM_CUSTOM_2"), @Result(property = "permCustom2", column = "PERM_CUSTOM_2"),
@Result(property = "permCustom3", column = "PERM_CUSTOM_3"), @Result(property = "permCustom3", column = "PERM_CUSTOM_3"),
@Result(property = "permCustom4", column = "PERM_CUSTOM_4"), @Result(property = "permCustom4", column = "PERM_CUSTOM_4"),
@Result(property = "permCustom5", column = "PERM_CUSTOM_5"), @Result(property = "permCustom5", column = "PERM_CUSTOM_5"),
@Result(property = "permCustom6", column = "PERM_CUSTOM_6"), @Result(property = "permCustom6", column = "PERM_CUSTOM_6"),
@Result(property = "permCustom7", column = "PERM_CUSTOM_7"), @Result(property = "permCustom7", column = "PERM_CUSTOM_7"),
@Result(property = "permCustom8", column = "PERM_CUSTOM_8")}) @Result(property = "permCustom8", column = "PERM_CUSTOM_8")})
List<WorkbasketAccessItem> findByAccessId(@Param("accessId") String accessId); List<WorkbasketAccessItem> findByAccessId(@Param("accessId") String accessId);
@Select("SELECT ID, WORKBASKET_ID, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 FROM WORKBASKET_ACCESS_LIST WHERE WORKBASKET_ID = #{id}") @Select("SELECT ID, WORKBASKET_KEY, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 FROM WORKBASKET_ACCESS_LIST WHERE WORKBASKET_KEY = #{key}")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "workbasketId", column = "WORKBASKET_ID"), @Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
@Result(property = "accessId", column = "ACCESS_ID"), @Result(property = "accessId", column = "ACCESS_ID"),
@Result(property = "permRead", column = "PERM_READ"), @Result(property = "permRead", column = "PERM_READ"),
@Result(property = "permOpen", column = "PERM_OPEN"), @Result(property = "permOpen", column = "PERM_OPEN"),
@Result(property = "permAppend", column = "PERM_APPEND"), @Result(property = "permAppend", column = "PERM_APPEND"),
@Result(property = "permTransfer", column = "PERM_TRANSFER"), @Result(property = "permTransfer", column = "PERM_TRANSFER"),
@Result(property = "permDistribute", column = "PERM_DISTRIBUTE"), @Result(property = "permDistribute", column = "PERM_DISTRIBUTE"),
@Result(property = "permCustom1", column = "PERM_CUSTOM_1"), @Result(property = "permCustom1", column = "PERM_CUSTOM_1"),
@Result(property = "permCustom2", column = "PERM_CUSTOM_2"), @Result(property = "permCustom2", column = "PERM_CUSTOM_2"),
@Result(property = "permCustom3", column = "PERM_CUSTOM_3"), @Result(property = "permCustom3", column = "PERM_CUSTOM_3"),
@Result(property = "permCustom4", column = "PERM_CUSTOM_4"), @Result(property = "permCustom4", column = "PERM_CUSTOM_4"),
@Result(property = "permCustom5", column = "PERM_CUSTOM_5"), @Result(property = "permCustom5", column = "PERM_CUSTOM_5"),
@Result(property = "permCustom6", column = "PERM_CUSTOM_6"), @Result(property = "permCustom6", column = "PERM_CUSTOM_6"),
@Result(property = "permCustom7", column = "PERM_CUSTOM_7"), @Result(property = "permCustom7", column = "PERM_CUSTOM_7"),
@Result(property = "permCustom8", column = "PERM_CUSTOM_8")}) @Result(property = "permCustom8", column = "PERM_CUSTOM_8")})
List<WorkbasketAccessItem> findByWorkbasketId(@Param("id") String id); List<WorkbasketAccessItem> findByWorkbasketKey(@Param("key") String key);
@Select("SELECT ID, WORKBASKET_ID, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 FROM WORKBASKET_ACCESS_LIST ORDER BY ID") @Select("SELECT ID, WORKBASKET_KEY, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 FROM WORKBASKET_ACCESS_LIST ORDER BY ID")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "workbasketId", column = "WORKBASKET_ID"), @Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
@Result(property = "accessId", column = "ACCESS_ID"), @Result(property = "accessId", column = "ACCESS_ID"),
@Result(property = "permRead", column = "PERM_READ"), @Result(property = "permRead", column = "PERM_READ"),
@Result(property = "permOpen", column = "PERM_OPEN"), @Result(property = "permOpen", column = "PERM_OPEN"),
@Result(property = "permAppend", column = "PERM_APPEND"), @Result(property = "permAppend", column = "PERM_APPEND"),
@Result(property = "permTransfer", column = "PERM_TRANSFER"), @Result(property = "permTransfer", column = "PERM_TRANSFER"),
@Result(property = "permDistribute", column = "PERM_DISTRIBUTE"), @Result(property = "permDistribute", column = "PERM_DISTRIBUTE"),
@Result(property = "permCustom1", column = "PERM_CUSTOM_1"), @Result(property = "permCustom1", column = "PERM_CUSTOM_1"),
@Result(property = "permCustom2", column = "PERM_CUSTOM_2"), @Result(property = "permCustom2", column = "PERM_CUSTOM_2"),
@Result(property = "permCustom3", column = "PERM_CUSTOM_3"), @Result(property = "permCustom3", column = "PERM_CUSTOM_3"),
@Result(property = "permCustom4", column = "PERM_CUSTOM_4"), @Result(property = "permCustom4", column = "PERM_CUSTOM_4"),
@Result(property = "permCustom5", column = "PERM_CUSTOM_5"), @Result(property = "permCustom5", column = "PERM_CUSTOM_5"),
@Result(property = "permCustom6", column = "PERM_CUSTOM_6"), @Result(property = "permCustom6", column = "PERM_CUSTOM_6"),
@Result(property = "permCustom7", column = "PERM_CUSTOM_7"), @Result(property = "permCustom7", column = "PERM_CUSTOM_7"),
@Result(property = "permCustom8", column = "PERM_CUSTOM_8")}) @Result(property = "permCustom8", column = "PERM_CUSTOM_8")})
List<WorkbasketAccessItem> findAll(); List<WorkbasketAccessItem> findAll();
@Insert("INSERT INTO WORKBASKET_ACCESS_LIST (ID, WORKBASKET_ID, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8) " @Insert("INSERT INTO WORKBASKET_ACCESS_LIST (ID, WORKBASKET_KEY, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8) "
+ "VALUES (#{workbasketAccessItem.id}, #{workbasketAccessItem.workbasketId}, #{workbasketAccessItem.accessId}, #{workbasketAccessItem.permRead}, #{workbasketAccessItem.permOpen}, #{workbasketAccessItem.permAppend}, #{workbasketAccessItem.permTransfer}, #{workbasketAccessItem.permDistribute}, #{workbasketAccessItem.permCustom1}, #{workbasketAccessItem.permCustom2}, #{workbasketAccessItem.permCustom3}, #{workbasketAccessItem.permCustom4}, #{workbasketAccessItem.permCustom5}, #{workbasketAccessItem.permCustom6}, #{workbasketAccessItem.permCustom7}, #{workbasketAccessItem.permCustom8})") + "VALUES (#{workbasketAccessItem.id}, #{workbasketAccessItem.workbasketKey}, #{workbasketAccessItem.accessId}, #{workbasketAccessItem.permRead}, #{workbasketAccessItem.permOpen}, #{workbasketAccessItem.permAppend}, #{workbasketAccessItem.permTransfer}, #{workbasketAccessItem.permDistribute}, #{workbasketAccessItem.permCustom1}, #{workbasketAccessItem.permCustom2}, #{workbasketAccessItem.permCustom3}, #{workbasketAccessItem.permCustom4}, #{workbasketAccessItem.permCustom5}, #{workbasketAccessItem.permCustom6}, #{workbasketAccessItem.permCustom7}, #{workbasketAccessItem.permCustom8})")
@Options(keyProperty = "id", keyColumn = "ID") @Options(keyProperty = "id", keyColumn = "ID")
void insert(@Param("workbasketAccessItem") WorkbasketAccessItem workbasketAccessItem); void insert(@Param("workbasketAccessItem") WorkbasketAccessItem workbasketAccessItem);
@Update("UPDATE WORKBASKET_ACCESS_LIST SET WORKBASKET_ID = #{workbasketAccessItem.workbasketId}, ACCESS_ID = #{workbasketAccessItem.accessId}, PERM_READ = #{workbasketAccessItem.permRead}, PERM_OPEN = #{workbasketAccessItem.permOpen}, PERM_APPEND = #{workbasketAccessItem.permAppend}, PERM_TRANSFER = #{workbasketAccessItem.permTransfer}, PERM_DISTRIBUTE = #{workbasketAccessItem.permDistribute}, PERM_CUSTOM_1 = #{workbasketAccessItem.permCustom1}, PERM_CUSTOM_2 = #{workbasketAccessItem.permCustom2}, PERM_CUSTOM_3 = #{workbasketAccessItem.permCustom3}, PERM_CUSTOM_4 = #{workbasketAccessItem.permCustom4}, PERM_CUSTOM_5 = #{workbasketAccessItem.permCustom5}, PERM_CUSTOM_6 = #{workbasketAccessItem.permCustom6}, PERM_CUSTOM_7 = #{workbasketAccessItem.permCustom7}, PERM_CUSTOM_8 = #{workbasketAccessItem.permCustom8} " @Update("UPDATE WORKBASKET_ACCESS_LIST SET WORKBASKET_KEY = #{workbasketAccessItem.workbasketKey}, ACCESS_ID = #{workbasketAccessItem.accessId}, PERM_READ = #{workbasketAccessItem.permRead}, PERM_OPEN = #{workbasketAccessItem.permOpen}, PERM_APPEND = #{workbasketAccessItem.permAppend}, PERM_TRANSFER = #{workbasketAccessItem.permTransfer}, PERM_DISTRIBUTE = #{workbasketAccessItem.permDistribute}, PERM_CUSTOM_1 = #{workbasketAccessItem.permCustom1}, PERM_CUSTOM_2 = #{workbasketAccessItem.permCustom2}, PERM_CUSTOM_3 = #{workbasketAccessItem.permCustom3}, PERM_CUSTOM_4 = #{workbasketAccessItem.permCustom4}, PERM_CUSTOM_5 = #{workbasketAccessItem.permCustom5}, PERM_CUSTOM_6 = #{workbasketAccessItem.permCustom6}, PERM_CUSTOM_7 = #{workbasketAccessItem.permCustom7}, PERM_CUSTOM_8 = #{workbasketAccessItem.permCustom8} "
+ "WHERE id = #{workbasketAccessItem.id}") + "WHERE id = #{workbasketAccessItem.id}")
void update(@Param("workbasketAccessItem") WorkbasketAccessItem workbasketAccessItem); void update(@Param("workbasketAccessItem") WorkbasketAccessItem workbasketAccessItem);
@Delete("DELETE FROM WORKBASKET_ACCESS_LIST where id = #{id}") @Delete("DELETE FROM WORKBASKET_ACCESS_LIST where id = #{id}")
void delete(@Param("id") String id); void delete(@Param("id") String id);
@Select("<script>SELECT ID, WORKBASKET_ID, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 " @Select("<script>SELECT ID, WORKBASKET_KEY, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 "
+ "FROM WORKBASKET_ACCESS_LIST " + "FROM WORKBASKET_ACCESS_LIST "
+ "WHERE WORKBASKET_ID = #{workbasketId} " + "WHERE WORKBASKET_KEY = #{workbasketKey} "
+ "AND ACCESS_ID IN(<foreach item='item' collection='accessIds' separator=',' >#{item}</foreach>)" + "AND ACCESS_ID IN(<foreach item='item' collection='accessIds' separator=',' >#{item}</foreach>)"
+ "AND <if test=\"authorization == 'OPEN'\">PERM_OPEN</if>" + "AND <if test=\"authorization == 'OPEN'\">PERM_OPEN</if>"
+ "<if test=\"authorization == 'READ'\">PERM_READ</if>" + "<if test=\"authorization == 'READ'\">PERM_READ</if>"
+ "<if test=\"authorization == 'APPEND'\">PERM_APPEND</if>" + "<if test=\"authorization == 'APPEND'\">PERM_APPEND</if>"
+ "<if test=\"authorization == 'TRANSFER'\">PERM_TRANSFER</if>" + "<if test=\"authorization == 'TRANSFER'\">PERM_TRANSFER</if>"
+ "<if test=\"authorization == 'DISTRIBUTE'\">PERM_DISTRIBUTE</if>" + "<if test=\"authorization == 'DISTRIBUTE'\">PERM_DISTRIBUTE</if>"
+ "<if test=\"authorization == 'CUSTOM_1'\">PERM_CUSTOM_1</if>" + "<if test=\"authorization == 'CUSTOM_1'\">PERM_CUSTOM_1</if>"
+ "<if test=\"authorization == 'CUSTOM_2'\">PERM_CUSTOM_2</if>" + "<if test=\"authorization == 'CUSTOM_2'\">PERM_CUSTOM_2</if>"
+ "<if test=\"authorization == 'CUSTOM_3'\">PERM_CUSTOM_3</if>" + "<if test=\"authorization == 'CUSTOM_3'\">PERM_CUSTOM_3</if>"
+ "<if test=\"authorization == 'CUSTOM_4'\">PERM_CUSTOM_4</if>" + "<if test=\"authorization == 'CUSTOM_4'\">PERM_CUSTOM_4</if>"
+ "<if test=\"authorization == 'CUSTOM_5'\">PERM_CUSTOM_5</if>" + "<if test=\"authorization == 'CUSTOM_5'\">PERM_CUSTOM_5</if>"
+ "<if test=\"authorization == 'CUSTOM_6'\">PERM_CUSTOM_6</if>" + "<if test=\"authorization == 'CUSTOM_6'\">PERM_CUSTOM_6</if>"
+ "<if test=\"authorization == 'CUSTOM_7'\">PERM_CUSTOM_7</if>" + "<if test=\"authorization == 'CUSTOM_7'\">PERM_CUSTOM_7</if>"
+ "<if test=\"authorization == 'CUSTOM_8'\">PERM_CUSTOM_8</if> = 1</script>") + "<if test=\"authorization == 'CUSTOM_8'\">PERM_CUSTOM_8</if> = 1</script>")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "workbasketId", column = "WORKBASKET_ID"), @Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
@Result(property = "accessId", column = "ACCESS_ID"), @Result(property = "accessId", column = "ACCESS_ID"),
@Result(property = "permRead", column = "PERM_READ"), @Result(property = "permRead", column = "PERM_READ"),
@Result(property = "permOpen", column = "PERM_OPEN"), @Result(property = "permOpen", column = "PERM_OPEN"),
@Result(property = "permAppend", column = "PERM_APPEND"), @Result(property = "permAppend", column = "PERM_APPEND"),
@Result(property = "permTransfer", column = "PERM_TRANSFER"), @Result(property = "permTransfer", column = "PERM_TRANSFER"),
@Result(property = "permDistribute", column = "PERM_DISTRIBUTE"), @Result(property = "permDistribute", column = "PERM_DISTRIBUTE"),
@Result(property = "permCustom1", column = "PERM_CUSTOM_1"), @Result(property = "permCustom1", column = "PERM_CUSTOM_1"),
@Result(property = "permCustom2", column = "PERM_CUSTOM_2"), @Result(property = "permCustom2", column = "PERM_CUSTOM_2"),
@Result(property = "permCustom3", column = "PERM_CUSTOM_3"), @Result(property = "permCustom3", column = "PERM_CUSTOM_3"),
@Result(property = "permCustom4", column = "PERM_CUSTOM_4"), @Result(property = "permCustom4", column = "PERM_CUSTOM_4"),
@Result(property = "permCustom5", column = "PERM_CUSTOM_5"), @Result(property = "permCustom5", column = "PERM_CUSTOM_5"),
@Result(property = "permCustom6", column = "PERM_CUSTOM_6"), @Result(property = "permCustom6", column = "PERM_CUSTOM_6"),
@Result(property = "permCustom7", column = "PERM_CUSTOM_7"), @Result(property = "permCustom7", column = "PERM_CUSTOM_7"),
@Result(property = "permCustom8", column = "PERM_CUSTOM_8")}) @Result(property = "permCustom8", column = "PERM_CUSTOM_8")})
List<WorkbasketAccessItem> findByWorkbasketAndAccessIdAndAuthorizations(@Param("workbasketId") String workbasketId, @Param("accessIds") List<String> accessIds, @Param("authorization") String authorization); List<WorkbasketAccessItem> findByWorkbasketAndAccessIdAndAuthorizations(
@Param("workbasketKey") String workbasketKey, @Param("accessIds") List<String> accessIds,
@Param("authorization") String authorization);
} }

View File

@ -1,81 +1,172 @@
package pro.taskana.model.mappings; package pro.taskana.model.mappings;
import org.apache.ibatis.annotations.*; import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.mapping.FetchType; import org.apache.ibatis.mapping.FetchType;
import pro.taskana.impl.WorkbasketImpl; import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import java.util.List;
/** /**
* This class is the mybatis mapping of workbaskets. * This class is the mybatis mapping of workbaskets.
*/ */
public interface WorkbasketMapper { public interface WorkbasketMapper {
@Select("SELECT ID, CREATED, MODIFIED, NAME, DESCRIPTION, OWNER FROM WORKBASKET WHERE ID = #{id}") @Select("SELECT ID, KEY, CREATED, MODIFIED, NAME, DOMAIN, TYPE, DESCRIPTION, OWNER, CUSTOM_1 ,CUSTOM_2 ,CUSTOM_3 ,CUSTOM_4 ,ORG_LEVEL_1 ,ORG_LEVEL_2 ,ORG_LEVEL_3 ,ORG_LEVEL_4 FROM WORKBASKET WHERE ID = #{id}")
@Results(value = { @Result(property = "id", column = "ID"), @Results(value = {@Result(property = "id", column = "ID"),
@Result(property = "created", column = "CREATED"), @Result(property = "key", column = "KEY"),
@Result(property = "modified", column = "MODIFIED"), @Result(property = "created", column = "CREATED"),
@Result(property = "name", column = "NAME"), @Result(property = "modified", column = "MODIFIED"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "name", column = "NAME"),
@Result(property = "owner", column = "OWNER"), @Result(property = "domain", column = "DOMAIN"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class, many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")) }) @Result(property = "type", column = "TYPE"),
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class,
many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom5", column = "CUSTOM_5"),
@Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10")})
WorkbasketImpl findById(@Param("id") String id); WorkbasketImpl findById(@Param("id") String id);
@Select("SELECT ID, KEY, CREATED, MODIFIED, NAME, DOMAIN, TYPE, DESCRIPTION, OWNER, CUSTOM_1 ,CUSTOM_2 ,CUSTOM_3 ,CUSTOM_4 ,ORG_LEVEL_1 ,ORG_LEVEL_2 ,ORG_LEVEL_3 ,ORG_LEVEL_4 FROM WORKBASKET WHERE KEY = #{key}")
@Results(value = {@Result(property = "id", column = "ID"),
@Result(property = "key", column = "KEY"),
@Result(property = "created", column = "CREATED"),
@Result(property = "modified", column = "MODIFIED"),
@Result(property = "name", column = "NAME"),
@Result(property = "domain", column = "DOMAIN"),
@Result(property = "type", column = "TYPE"),
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class,
many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom5", column = "CUSTOM_5"),
@Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10")})
WorkbasketImpl findByKey(@Param("key") String key);
@Select("SELECT * FROM WORKBASKET WHERE id IN (SELECT TARGET_ID FROM DISTRIBUTION_TARGETS WHERE SOURCE_ID = #{id})") @Select("SELECT * FROM WORKBASKET WHERE id IN (SELECT TARGET_ID FROM DISTRIBUTION_TARGETS WHERE SOURCE_ID = #{id})")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "created", column = "CREATED"), @Result(property = "key", column = "KEY"),
@Result(property = "modified", column = "MODIFIED"), @Result(property = "created", column = "CREATED"),
@Result(property = "name", column = "NAME"), @Result(property = "modified", column = "MODIFIED"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "name", column = "NAME"),
@Result(property = "owner", column = "OWNER"), @Result(property = "domain", column = "DOMAIN"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class, many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")) }) @Result(property = "type", column = "TYPE"),
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class,
many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom5", column = "CUSTOM_5"),
@Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10")})
List<WorkbasketImpl> findByDistributionTargets(@Param("id") String id); List<WorkbasketImpl> findByDistributionTargets(@Param("id") String id);
@Select("SELECT * FROM WORKBASKET ORDER BY id") @Select("SELECT * FROM WORKBASKET ORDER BY id")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "created", column = "CREATED"), @Result(property = "key", column = "KEY"),
@Result(property = "modified", column = "MODIFIED"), @Result(property = "created", column = "CREATED"),
@Result(property = "name", column = "NAME"), @Result(property = "modified", column = "MODIFIED"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "name", column = "NAME"),
@Result(property = "owner", column = "OWNER"), @Result(property = "domain", column = "DOMAIN"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class, many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")) }) @Result(property = "type", column = "TYPE"),
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class,
many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom5", column = "CUSTOM_5"),
@Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10")})
List<WorkbasketImpl> findAll(); List<WorkbasketImpl> findAll();
@Select("<script>SELECT W.ID, W.CREATED, W.MODIFIED, W.NAME, W.DESCRIPTION, W.OWNER FROM WORKBASKET AS W " @Select("<script>SELECT W.ID, W.KEY, W.CREATED, W.MODIFIED, W.NAME, W.DESCRIPTION, W.OWNER FROM WORKBASKET AS W "
+ "INNER JOIN WORKBASKET_ACCESS_LIST AS ACL " + "ON (W.ID = ACL.WORKBASKET_ID AND ACL.ACCESS_ID = #{accessId}) " + "INNER JOIN WORKBASKET_ACCESS_LIST AS ACL "
+ "WHERE <foreach collection='authorizations' item='authorization' separator=' AND '>" + "ON (W.KEY = ACL.WORKBASKET_KEY AND ACL.ACCESS_ID = #{accessId}) "
+ "<if test=\"authorization.name() == 'OPEN'\">PERM_OPEN</if>" + "WHERE <foreach collection='authorizations' item='authorization' separator=' AND '>"
+ "<if test=\"authorization.name() == 'READ'\">PERM_READ</if>" + "<if test=\"authorization.name() == 'OPEN'\">PERM_OPEN</if>"
+ "<if test=\"authorization.name() == 'APPEND'\">PERM_APPEND</if>" + "<if test=\"authorization.name() == 'READ'\">PERM_READ</if>"
+ "<if test=\"authorization.name() == 'TRANSFER'\">PERM_TRANSFER</if>" + "<if test=\"authorization.name() == 'APPEND'\">PERM_APPEND</if>"
+ "<if test=\"authorization.name() == 'DISTRIBUTE'\">PERM_DISTRIBUTE</if>" + "<if test=\"authorization.name() == 'TRANSFER'\">PERM_TRANSFER</if>"
+ "<if test=\"authorization.name() == 'CUSTOM_1'\">PERM_CUSTOM_1</if>" + "<if test=\"authorization.name() == 'DISTRIBUTE'\">PERM_DISTRIBUTE</if>"
+ "<if test=\"authorization.name() == 'CUSTOM_2'\">PERM_CUSTOM_2</if>" + "<if test=\"authorization.name() == 'CUSTOM_1'\">PERM_CUSTOM_1</if>"
+ "<if test=\"authorization.name() == 'CUSTOM_3'\">PERM_CUSTOM_3</if>" + "<if test=\"authorization.name() == 'CUSTOM_2'\">PERM_CUSTOM_2</if>"
+ "<if test=\"authorization.name() == 'CUSTOM_4'\">PERM_CUSTOM_4</if>" + "<if test=\"authorization.name() == 'CUSTOM_3'\">PERM_CUSTOM_3</if>"
+ "<if test=\"authorization.name() == 'CUSTOM_5'\">PERM_CUSTOM_5</if>" + "<if test=\"authorization.name() == 'CUSTOM_4'\">PERM_CUSTOM_4</if>"
+ "<if test=\"authorization.name() == 'CUSTOM_6'\">PERM_CUSTOM_6</if>" + "<if test=\"authorization.name() == 'CUSTOM_5'\">PERM_CUSTOM_5</if>"
+ "<if test=\"authorization.name() == 'CUSTOM_7'\">PERM_CUSTOM_7</if>" + "<if test=\"authorization.name() == 'CUSTOM_6'\">PERM_CUSTOM_6</if>"
+ "<if test=\"authorization.name() == 'CUSTOM_8'\">PERM_CUSTOM_8</if> = 1 </foreach> " + "<if test=\"authorization.name() == 'CUSTOM_7'\">PERM_CUSTOM_7</if>"
+ "ORDER BY id</script>") + "<if test=\"authorization.name() == 'CUSTOM_8'\">PERM_CUSTOM_8</if> = 1 </foreach> "
+ "ORDER BY id</script>")
@Results(value = { @Results(value = {
@Result(property = "id", column = "ID"), @Result(property = "id", column = "ID"),
@Result(property = "created", column = "CREATED"), @Result(property = "key", column = "KEY"),
@Result(property = "modified", column = "MODIFIED"), @Result(property = "created", column = "CREATED"),
@Result(property = "name", column = "NAME"), @Result(property = "modified", column = "MODIFIED"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "name", column = "NAME"),
@Result(property = "owner", column = "OWNER"), @Result(property = "domain", column = "DOMAIN"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class, many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")) }) @Result(property = "type", column = "TYPE"),
List<WorkbasketImpl> findByPermission(@Param("authorizations") List<WorkbasketAuthorization> authorizations, @Param("accessId") String accessId); @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "owner", column = "OWNER"),
@Result(property = "distributionTargets", column = "ID", javaType = List.class,
many = @Many(fetchType = FetchType.DEFAULT, select = "findByDistributionTargets")),
@Result(property = "custom1", column = "CUSTOM_1"),
@Result(property = "custom2", column = "CUSTOM_2"),
@Result(property = "custom3", column = "CUSTOM_3"),
@Result(property = "custom4", column = "CUSTOM_4"),
@Result(property = "custom5", column = "CUSTOM_5"),
@Result(property = "custom6", column = "CUSTOM_6"),
@Result(property = "custom7", column = "CUSTOM_7"),
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "custom9", column = "CUSTOM_9"),
@Result(property = "custom10", column = "CUSTOM_10")})
List<WorkbasketImpl> findByPermission(@Param("authorizations") List<WorkbasketAuthorization> authorizations,
@Param("accessId") String accessId);
@Insert("INSERT INTO WORKBASKET (ID, CREATED, MODIFIED, NAME, DESCRIPTION, OWNER) VALUES (#{workbasket.id}, #{workbasket.created}, #{workbasket.modified}, #{workbasket.name}, #{workbasket.description}, #{workbasket.owner})") @Insert("INSERT INTO WORKBASKET (ID, KEY, CREATED, MODIFIED, NAME, DOMAIN, TYPE, DESCRIPTION, OWNER, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, ORG_LEVEL_1, ORG_LEVEL_2, ORG_LEVEL_3, ORG_LEVEL_4) VALUES (#{workbasket.id}, #{workbasket.key}, #{workbasket.created}, #{workbasket.modified}, #{workbasket.name}, #{workbasket.domain}, #{workbasket.type}, #{workbasket.description}, #{workbasket.owner}, #{workbasket.custom1}, #{workbasket.custom2}, #{workbasket.custom3}, #{workbasket.custom4}, #{workbasket.orgLevel1}, #{workbasket.orgLevel2}, #{workbasket.orgLevel3}, #{workbasket.orgLevel4})")
@Options(keyProperty = "id", keyColumn = "ID") @Options(keyProperty = "id", keyColumn = "ID")
void insert(@Param("workbasket") WorkbasketImpl workbasket); void insert(@Param("workbasket") WorkbasketImpl workbasket);
@Update("UPDATE WORKBASKET SET MODIFIED = #{workbasket.modified}, NAME = #{workbasket.name}, DESCRIPTION = #{workbasket.description}, OWNER = #{workbasket.owner} WHERE id = #{workbasket.id}") @Update("UPDATE WORKBASKET SET MODIFIED = #{workbasket.modified}, KEY = #{workbasket.key}, NAME = #{workbasket.name}, DOMAIN = #{workbasket.domain}, TYPE = #{workbasket.type}, DESCRIPTION = #{workbasket.description}, OWNER = #{workbasket.owner}, CUSTOM_1 = #{workbasket.custom1}, CUSTOM_2 = #{workbasket.custom2}, CUSTOM_3 = #{workbasket.custom3}, CUSTOM_4 = #{workbasket.custom4}, ORG_LEVEL_1 = #{workbasket.orgLevel1}, ORG_LEVEL_2 = #{workbasket.orgLevel2}, ORG_LEVEL_3 = #{workbasket.orgLevel3}, ORG_LEVEL_4 = #{workbasket.orgLevel4} WHERE id = #{workbasket.id}")
void update(@Param("workbasket") WorkbasketImpl workbasket); void update(@Param("workbasket") WorkbasketImpl workbasket);
@Delete("DELETE FROM WORKBASKET where id = #{id}") @Delete("DELETE FROM WORKBASKET where id = #{id}")

View File

@ -18,7 +18,7 @@ CREATE TABLE TASK (
PRIORITY INT NULL, PRIORITY INT NULL,
STATE VARCHAR(20) NULL, STATE VARCHAR(20) NULL,
CLASSIFICATION_KEY VARCHAR(32) NULL, CLASSIFICATION_KEY VARCHAR(32) NULL,
WORKBASKETID CHAR(40) NULL, WORKBASKET_KEY VARCHAR(32) NULL,
BUSINESS_PROCESS_ID VARCHAR(128) NULL, BUSINESS_PROCESS_ID VARCHAR(128) NULL,
PARENT_BUSINESS_PROCESS_ID VARCHAR(128) NULL, PARENT_BUSINESS_PROCESS_ID VARCHAR(128) NULL,
OWNER VARCHAR(255) NULL, OWNER VARCHAR(255) NULL,
@ -41,11 +41,22 @@ CREATE TABLE TASK (
CREATE TABLE WORKBASKET( CREATE TABLE WORKBASKET(
ID CHAR(40) NOT NULL, ID CHAR(40) NOT NULL,
KEY VARCHAR(32) NOT NULL,
CREATED TIMESTAMP NULL, CREATED TIMESTAMP NULL,
MODIFIED TIMESTAMP NULL, MODIFIED TIMESTAMP NULL,
NAME VARCHAR(255) NOT NULL, NAME VARCHAR(255) NOT NULL,
DOMAIN VARCHAR(32) NOT NULL,
TYPE VARCHAR(16) NOT NULL,
DESCRIPTION VARCHAR(255) NULL, DESCRIPTION VARCHAR(255) NULL,
OWNER VARCHAR(255) NULL, OWNER VARCHAR(255) NULL,
CUSTOM_1 VARCHAR(255) NULL,
CUSTOM_2 VARCHAR(255) NULL,
CUSTOM_3 VARCHAR(255) NULL,
CUSTOM_4 VARCHAR(255) NULL,
ORG_LEVEL_1 VARCHAR(255) NULL,
ORG_LEVEL_2 VARCHAR(255) NULL,
ORG_LEVEL_3 VARCHAR(255) NULL,
ORG_LEVEL_4 VARCHAR(255) NULL,
PRIMARY KEY (ID), PRIMARY KEY (ID),
CONSTRAINT UC_NAME UNIQUE (NAME) CONSTRAINT UC_NAME UNIQUE (NAME)
); );
@ -84,7 +95,7 @@ CREATE TABLE CLASSIFICATION(
CREATE TABLE WORKBASKET_ACCESS_LIST( CREATE TABLE WORKBASKET_ACCESS_LIST(
ID CHAR(40) NOT NULL, ID CHAR(40) NOT NULL,
WORKBASKET_ID CHAR(40) NOT NULL, WORKBASKET_KEY VARCHAR(32) NOT NULL,
ACCESS_ID VARCHAR(255) NULL, ACCESS_ID VARCHAR(255) NULL,
PERM_READ BOOLEAN NOT NULL, PERM_READ BOOLEAN NOT NULL,
PERM_OPEN BOOLEAN NOT NULL, PERM_OPEN BOOLEAN NOT NULL,

View File

@ -34,12 +34,14 @@ import org.powermock.modules.junit4.PowerMockRunner;
import pro.taskana.Classification; import pro.taskana.Classification;
import pro.taskana.ClassificationService; import pro.taskana.ClassificationService;
import pro.taskana.Task; import pro.taskana.Task;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketService; import pro.taskana.WorkbasketService;
import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationAlreadyExistException; import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidOwnerException; import pro.taskana.exceptions.InvalidOwnerException;
import pro.taskana.exceptions.InvalidStateException; import pro.taskana.exceptions.InvalidStateException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
@ -107,21 +109,22 @@ public class TaskServiceImplTest {
@Test @Test
public void testCreateSimpleTask() throws NotAuthorizedException, WorkbasketNotFoundException, public void testCreateSimpleTask() throws NotAuthorizedException, WorkbasketNotFoundException,
ClassificationNotFoundException, ClassificationAlreadyExistException, TaskAlreadyExistException, ClassificationNotFoundException, ClassificationAlreadyExistException, TaskAlreadyExistException,
TaskNotFoundException { TaskNotFoundException, InvalidWorkbasketException {
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
TaskImpl expectedTask = createUnitTestTask("", "DUMMYTASK", "1"); TaskImpl expectedTask = createUnitTestTask("", "DUMMYTASK", "k1");
WorkbasketImpl wb = new WorkbasketImpl(); WorkbasketImpl wb = new WorkbasketImpl();
wb.setId("1"); wb.setId("1");
wb.setKey("k1");
wb.setName("workbasket"); wb.setName("workbasket");
doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(expectedTask.getId()); doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(expectedTask.getId());
doReturn(wb).when(workbasketServiceMock).getWorkbasket(wb.getId()); doReturn(wb).when(workbasketServiceMock).getWorkbasketByKey(wb.getKey());
doNothing().when(taskMapperMock).insert(expectedTask); doNothing().when(taskMapperMock).insert(expectedTask);
Task actualTask = cutSpy.createTask(expectedTask); Task actualTask = cutSpy.createTask(expectedTask);
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).checkAuthorization(any(), any()); verify(workbasketServiceMock, times(1)).checkAuthorization(any(), any());
verify(workbasketServiceMock, times(1)).getWorkbasket(any()); verify(workbasketServiceMock, times(1)).getWorkbasketByKey(any());
verify(taskanaEngineMock, times(1)).getClassificationService(); verify(taskanaEngineMock, times(1)).getClassificationService();
verify(classificationServiceMock, times(1)).getClassification(any(), any()); verify(classificationServiceMock, times(1)).getClassification(any(), any());
verify(taskMapperMock, times(1)).insert(expectedTask); verify(taskMapperMock, times(1)).insert(expectedTask);
@ -134,7 +137,7 @@ public class TaskServiceImplTest {
assertNotNull(actualTask.getCreated()); assertNotNull(actualTask.getCreated());
assertNotNull(actualTask.getModified()); assertNotNull(actualTask.getModified());
assertNull(actualTask.getCompleted()); assertNull(actualTask.getCompleted());
assertThat(actualTask.getWorkbasketId(), equalTo(expectedTask.getWorkbasketId())); assertThat(actualTask.getWorkbasketKey(), equalTo(expectedTask.getWorkbasketKey()));
assertThat(actualTask.getName(), equalTo(expectedTask.getName())); assertThat(actualTask.getName(), equalTo(expectedTask.getName()));
assertThat(actualTask.getState(), equalTo(TaskState.READY)); assertThat(actualTask.getState(), equalTo(TaskState.READY));
} }
@ -142,7 +145,7 @@ public class TaskServiceImplTest {
@Test @Test
public void testCreateSimpleTaskWithObjectReference() throws NotAuthorizedException, WorkbasketNotFoundException, public void testCreateSimpleTaskWithObjectReference() throws NotAuthorizedException, WorkbasketNotFoundException,
ClassificationNotFoundException, ClassificationAlreadyExistException, TaskAlreadyExistException, ClassificationNotFoundException, ClassificationAlreadyExistException, TaskAlreadyExistException,
TaskNotFoundException { TaskNotFoundException, InvalidWorkbasketException {
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
ObjectReference expectedObjectReference = new ObjectReference(); ObjectReference expectedObjectReference = new ObjectReference();
expectedObjectReference.setId("1"); expectedObjectReference.setId("1");
@ -150,11 +153,14 @@ public class TaskServiceImplTest {
WorkbasketImpl wb = new WorkbasketImpl(); WorkbasketImpl wb = new WorkbasketImpl();
wb.setId("1"); wb.setId("1");
wb.setName("workbasket"); wb.setName("workbasket");
TaskImpl expectedTask = createUnitTestTask(null, "DUMMYTASK", wb.getId()); wb.setKey("k33");
wb.setDomain("dummy-domain");
TaskImpl expectedTask = createUnitTestTask("", "DUMMYTASK", wb.getKey());
expectedTask.setPrimaryObjRef(expectedObjectReference); expectedTask.setPrimaryObjRef(expectedObjectReference);
Classification classification = expectedTask.getClassification(); Classification classification = expectedTask.getClassification();
doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(expectedTask.getId()); doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(expectedTask.getId());
doReturn(wb).when(workbasketServiceMock).getWorkbasket(wb.getId()); doReturn(wb).when(workbasketServiceMock).getWorkbasketByKey(expectedTask.getWorkbasketKey());
doReturn(expectedObjectReference).when(objectReferenceMapperMock) doReturn(expectedObjectReference).when(objectReferenceMapperMock)
.findByObjectReference(expectedObjectReference); .findByObjectReference(expectedObjectReference);
doNothing().when(taskMapperMock).insert(expectedTask); doNothing().when(taskMapperMock).insert(expectedTask);
@ -162,11 +168,11 @@ public class TaskServiceImplTest {
Task actualTask = cutSpy.createTask(expectedTask); Task actualTask = cutSpy.createTask(expectedTask);
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).getWorkbasket(wb.getId()); verify(workbasketServiceMock, times(1)).getWorkbasketByKey(wb.getKey());
verify(workbasketServiceMock, times(1)).checkAuthorization(wb.getId(), WorkbasketAuthorization.APPEND); verify(workbasketServiceMock, times(1)).checkAuthorization(wb.getKey(), WorkbasketAuthorization.APPEND);
verify(taskanaEngineMock, times(1)).getClassificationService(); verify(taskanaEngineMock, times(1)).getClassificationService();
verify(classificationServiceMock, times(1)).getClassification(classification.getKey(), verify(classificationServiceMock, times(1)).getClassification(classification.getKey(),
classification.getDomain()); wb.getDomain());
verify(objectReferenceMapperMock, times(1)).findByObjectReference(expectedObjectReference); verify(objectReferenceMapperMock, times(1)).findByObjectReference(expectedObjectReference);
verify(taskMapperMock, times(1)).insert(expectedTask); verify(taskMapperMock, times(1)).insert(expectedTask);
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
@ -177,7 +183,7 @@ public class TaskServiceImplTest {
assertNotNull(actualTask.getCreated()); assertNotNull(actualTask.getCreated());
assertNotNull(actualTask.getModified()); assertNotNull(actualTask.getModified());
assertNull(actualTask.getCompleted()); assertNull(actualTask.getCompleted());
assertThat(actualTask.getWorkbasketId(), equalTo(expectedTask.getWorkbasketId())); assertThat(actualTask.getWorkbasketKey(), equalTo(expectedTask.getWorkbasketKey()));
assertThat(actualTask.getName(), equalTo(expectedTask.getName())); assertThat(actualTask.getName(), equalTo(expectedTask.getName()));
assertThat(actualTask.getState(), equalTo(TaskState.READY)); assertThat(actualTask.getState(), equalTo(TaskState.READY));
assertThat(actualTask.getPrimaryObjRef(), equalTo(expectedObjectReference)); assertThat(actualTask.getPrimaryObjRef(), equalTo(expectedObjectReference));
@ -186,16 +192,18 @@ public class TaskServiceImplTest {
@Test @Test
public void testCreateSimpleTaskWithObjectReferenceIsNull() throws NotAuthorizedException, public void testCreateSimpleTaskWithObjectReferenceIsNull() throws NotAuthorizedException,
WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException,
TaskAlreadyExistException, TaskNotFoundException { TaskAlreadyExistException, TaskNotFoundException, InvalidWorkbasketException {
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
ObjectReference expectedObjectReference = new ObjectReference(); ObjectReference expectedObjectReference = new ObjectReference();
expectedObjectReference.setId("1"); expectedObjectReference.setId("1");
expectedObjectReference.setType("DUMMY"); expectedObjectReference.setType("DUMMY");
WorkbasketImpl wb = new WorkbasketImpl(); WorkbasketImpl wb = new WorkbasketImpl();
wb.setId("1"); wb.setId("1");
wb.setKey("key1");
wb.setName("workbasket"); wb.setName("workbasket");
doReturn(wb).when(workbasketServiceMock).getWorkbasket(wb.getId());
TaskImpl expectedTask = createUnitTestTask("", "DUMMYTASK", "1"); doReturn(wb).when(workbasketServiceMock).getWorkbasketByKey(wb.getKey());
TaskImpl expectedTask = createUnitTestTask("", "DUMMYTASK", "key1");
expectedTask.setPrimaryObjRef(expectedObjectReference); expectedTask.setPrimaryObjRef(expectedObjectReference);
Classification classification = expectedTask.getClassification(); Classification classification = expectedTask.getClassification();
doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(expectedTask.getId()); doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(expectedTask.getId());
@ -209,12 +217,12 @@ public class TaskServiceImplTest {
expectedTask.getPrimaryObjRef().setId(actualTask.getPrimaryObjRef().getId()); // get only new ID expectedTask.getPrimaryObjRef().setId(actualTask.getPrimaryObjRef().getId()); // get only new ID
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).getWorkbasket(expectedTask.getWorkbasketId()); verify(workbasketServiceMock, times(1)).getWorkbasketByKey(expectedTask.getWorkbasketKey());
verify(workbasketServiceMock, times(1)).checkAuthorization(expectedTask.getWorkbasketId(), verify(workbasketServiceMock, times(1)).checkAuthorization(expectedTask.getWorkbasketKey(),
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
verify(taskanaEngineMock, times(1)).getClassificationService(); verify(taskanaEngineMock, times(1)).getClassificationService();
verify(classificationServiceMock, times(1)).getClassification(classification.getKey(), verify(classificationServiceMock, times(1)).getClassification(classification.getKey(),
classification.getDomain()); wb.getDomain());
verify(objectReferenceMapperMock, times(1)).findByObjectReference(expectedObjectReference); verify(objectReferenceMapperMock, times(1)).findByObjectReference(expectedObjectReference);
verify(objectReferenceMapperMock, times(1)).insert(expectedObjectReference); verify(objectReferenceMapperMock, times(1)).insert(expectedObjectReference);
verify(taskMapperMock, times(1)).insert(expectedTask); verify(taskMapperMock, times(1)).insert(expectedTask);
@ -226,7 +234,7 @@ public class TaskServiceImplTest {
assertNotNull(actualTask.getCreated()); assertNotNull(actualTask.getCreated());
assertNotNull(actualTask.getModified()); assertNotNull(actualTask.getModified());
assertNull(actualTask.getCompleted()); assertNull(actualTask.getCompleted());
assertThat(actualTask.getWorkbasketId(), equalTo(expectedTask.getWorkbasketId())); assertThat(actualTask.getWorkbasketKey(), equalTo(expectedTask.getWorkbasketKey()));
assertThat(actualTask.getName(), equalTo(expectedTask.getName())); assertThat(actualTask.getName(), equalTo(expectedTask.getName()));
assertThat(actualTask.getState(), equalTo(TaskState.READY)); assertThat(actualTask.getState(), equalTo(TaskState.READY));
assertThat(actualTask.getPrimaryObjRef(), equalTo(expectedObjectReference)); assertThat(actualTask.getPrimaryObjRef(), equalTo(expectedObjectReference));
@ -235,8 +243,9 @@ public class TaskServiceImplTest {
@Test @Test
public void testCreateTaskWithPlanned() public void testCreateTaskWithPlanned()
throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException,
TaskAlreadyExistException, TaskNotFoundException { TaskAlreadyExistException, TaskNotFoundException, InvalidWorkbasketException {
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
ObjectReference expectedObjectReference = new ObjectReference(); ObjectReference expectedObjectReference = new ObjectReference();
expectedObjectReference.setId("1"); expectedObjectReference.setId("1");
expectedObjectReference.setType("DUMMY"); expectedObjectReference.setType("DUMMY");
@ -245,14 +254,15 @@ public class TaskServiceImplTest {
classification.setCategory("MANUAL"); classification.setCategory("MANUAL");
WorkbasketImpl wb = new WorkbasketImpl(); WorkbasketImpl wb = new WorkbasketImpl();
wb.setId("workbasketId"); wb.setId("workbasketId");
wb.setKey("workbasketKey");
wb.setName("workbasket"); wb.setName("workbasket");
TaskImpl task = new TaskImpl(); TaskImpl task = new TaskImpl();
task.setWorkbasketId(wb.getId()); task.setWorkbasketKey(wb.getKey());
task.setClassification(classification); task.setClassification(classification);
task.setPrimaryObjRef(expectedObjectReference); task.setPrimaryObjRef(expectedObjectReference);
task.setDescription("simply awesome task"); task.setDescription("simply awesome task");
doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(task.getId()); doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(task.getId());
doReturn(wb).when(workbasketServiceMock).getWorkbasket(wb.getId()); doReturn(wb).when(workbasketServiceMock).getWorkbasketByKey(wb.getKey());
doReturn(classification).when(classificationServiceMock).getClassification(classification.getKey(), doReturn(classification).when(classificationServiceMock).getClassification(classification.getKey(),
classification.getDomain()); classification.getDomain());
doReturn(expectedObjectReference).when(objectReferenceMapperMock) doReturn(expectedObjectReference).when(objectReferenceMapperMock)
@ -262,7 +272,7 @@ public class TaskServiceImplTest {
cutSpy.createTask(task); cutSpy.createTask(task);
TaskImpl task2 = new TaskImpl(); TaskImpl task2 = new TaskImpl();
task2.setWorkbasketId(wb.getId()); task2.setWorkbasketKey(wb.getKey());
task2.setClassification(classification); task2.setClassification(classification);
task2.setPrimaryObjRef(expectedObjectReference); task2.setPrimaryObjRef(expectedObjectReference);
task2.setPlanned(Timestamp.valueOf(LocalDateTime.now().minusHours(1))); task2.setPlanned(Timestamp.valueOf(LocalDateTime.now().minusHours(1)));
@ -271,8 +281,8 @@ public class TaskServiceImplTest {
cutSpy.createTask(task2); cutSpy.createTask(task2);
verify(taskanaEngineImpl, times(2)).openConnection(); verify(taskanaEngineImpl, times(2)).openConnection();
verify(workbasketServiceMock, times(2)).getWorkbasket(any());
verify(workbasketServiceMock, times(2)).checkAuthorization(any(), any()); verify(workbasketServiceMock, times(2)).checkAuthorization(any(), any());
verify(workbasketServiceMock, times(2)).getWorkbasketByKey(any());
verify(taskanaEngineMock, times(2)).getClassificationService(); verify(taskanaEngineMock, times(2)).getClassificationService();
verify(classificationServiceMock, times(2)).getClassification(any(), any()); verify(classificationServiceMock, times(2)).getClassification(any(), any());
verify(objectReferenceMapperMock, times(2)).findByObjectReference(expectedObjectReference); verify(objectReferenceMapperMock, times(2)).findByObjectReference(expectedObjectReference);
@ -288,7 +298,7 @@ public class TaskServiceImplTest {
assertNotNull(task.getModified()); assertNotNull(task.getModified());
assertNull(task.getCompleted()); assertNull(task.getCompleted());
assertNull(task.getDue()); assertNull(task.getDue());
assertThat(task.getWorkbasketId(), equalTo(task2.getWorkbasketId())); assertThat(task.getWorkbasketKey(), equalTo(task2.getWorkbasketKey()));
assertThat(task.getName(), equalTo(classification.getName())); assertThat(task.getName(), equalTo(classification.getName()));
assertThat(task.getState(), equalTo(TaskState.READY)); assertThat(task.getState(), equalTo(TaskState.READY));
assertThat(task.getPrimaryObjRef(), equalTo(expectedObjectReference)); assertThat(task.getPrimaryObjRef(), equalTo(expectedObjectReference));
@ -299,7 +309,8 @@ public class TaskServiceImplTest {
@Test(expected = TaskAlreadyExistException.class) @Test(expected = TaskAlreadyExistException.class)
public void testCreateTaskThrowingAlreadyExistException() throws WorkbasketNotFoundException, public void testCreateTaskThrowingAlreadyExistException() throws WorkbasketNotFoundException,
ClassificationNotFoundException, NotAuthorizedException, TaskAlreadyExistException, TaskNotFoundException { ClassificationNotFoundException, NotAuthorizedException, TaskAlreadyExistException, TaskNotFoundException,
InvalidWorkbasketException {
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
TaskImpl task = createUnitTestTask("12", "Task Name", "1"); TaskImpl task = createUnitTestTask("12", "Task Name", "1");
doReturn(task).when(cutSpy).getTaskById(task.getId()); doReturn(task).when(cutSpy).getTaskById(task.getId());
@ -319,18 +330,18 @@ public class TaskServiceImplTest {
@Test(expected = NotAuthorizedException.class) @Test(expected = NotAuthorizedException.class)
public void testCreateThrowingAuthorizedOnWorkbasket() public void testCreateThrowingAuthorizedOnWorkbasket()
throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException,
TaskAlreadyExistException, TaskNotFoundException { TaskAlreadyExistException, TaskNotFoundException, InvalidWorkbasketException {
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
TaskImpl task = createUnitTestTask("", "dummyTask", "1"); TaskImpl task = createUnitTestTask("", "dummyTask", "1");
doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(task.getId()); doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(task.getId());
doThrow(NotAuthorizedException.class).when(workbasketServiceMock).checkAuthorization(task.getWorkbasketId(), doThrow(NotAuthorizedException.class).when(workbasketServiceMock).checkAuthorization(task.getWorkbasketKey(),
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
try { try {
cutSpy.createTask(task); cutSpy.createTask(task);
} catch (NotAuthorizedException e) { } catch (NotAuthorizedException e) {
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).getWorkbasket(task.getWorkbasketId()); verify(workbasketServiceMock, times(1)).getWorkbasketByKey(task.getWorkbasketKey());
verify(workbasketServiceMock, times(1)).checkAuthorization(task.getWorkbasketId(), verify(workbasketServiceMock, times(1)).checkAuthorization(task.getWorkbasketKey(),
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl, verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
@ -343,16 +354,16 @@ public class TaskServiceImplTest {
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
public void testCreateThrowsWorkbasketNotFoundException() public void testCreateThrowsWorkbasketNotFoundException()
throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException,
TaskAlreadyExistException, TaskNotFoundException { InvalidWorkbasketException, TaskAlreadyExistException, TaskNotFoundException {
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
TaskImpl task = createUnitTestTask("", "dumma-task", "1"); TaskImpl task = createUnitTestTask("", "dumma-task", "1");
doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(task.getId()); doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(task.getId());
doThrow(WorkbasketNotFoundException.class).when(workbasketServiceMock).getWorkbasket(any()); doThrow(WorkbasketNotFoundException.class).when(workbasketServiceMock).getWorkbasketByKey(any());
try { try {
cutSpy.createTask(task); cutSpy.createTask(task);
} catch (WorkbasketNotFoundException e) { } catch (WorkbasketNotFoundException e) {
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).getWorkbasket(task.getWorkbasketId()); verify(workbasketServiceMock, times(1)).getWorkbasketByKey(task.getWorkbasketKey());
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl, verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
taskMapperMock, objectReferenceMapperMock, workbasketServiceMock, taskMapperMock, objectReferenceMapperMock, workbasketServiceMock,
@ -593,29 +604,31 @@ public class TaskServiceImplTest {
@Test @Test
public void testTransferTaskToDestinationWorkbasketWithoutSecurity() public void testTransferTaskToDestinationWorkbasketWithoutSecurity()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException,
ClassificationAlreadyExistException { ClassificationAlreadyExistException, InvalidWorkbasketException {
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
TaskImpl task = createUnitTestTask("1", "Unit Test Task 1", "1"); Workbasket destinationWorkbasket = createWorkbasket("2", "k1");
WorkbasketImpl destinationWorkbasket = createWorkbasket("2"); TaskImpl task = createUnitTestTask("1", "Unit Test Task 1", "k1");
task.setRead(true); task.setRead(true);
doReturn(destinationWorkbasket).when(workbasketServiceMock).getWorkbasket(destinationWorkbasket.getId()); doReturn(destinationWorkbasket).when(workbasketServiceMock).getWorkbasketByKey(destinationWorkbasket.getKey());
doReturn(taskanaEngineConfigurationMock).when(taskanaEngineMock).getConfiguration(); doReturn(taskanaEngineConfigurationMock).when(taskanaEngineMock).getConfiguration();
doReturn(false).when(taskanaEngineConfigurationMock).isSecurityEnabled(); doReturn(false).when(taskanaEngineConfigurationMock).isSecurityEnabled();
doReturn(task).when(cutSpy).getTaskById(task.getId()); doReturn(task).when(cutSpy).getTaskById(task.getId());
doNothing().when(taskMapperMock).update(any()); doNothing().when(taskMapperMock).update(any());
doNothing().when(workbasketServiceMock).checkAuthorization(destinationWorkbasket.getId(), doNothing().when(workbasketServiceMock).checkAuthorization(destinationWorkbasket.getKey(),
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
doNothing().when(workbasketServiceMock).checkAuthorization(task.getId(), WorkbasketAuthorization.TRANSFER); doNothing().when(workbasketServiceMock).checkAuthorization(task.getWorkbasketKey(),
WorkbasketAuthorization.TRANSFER);
Task actualTask = cutSpy.transfer(task.getId(), destinationWorkbasket.getId()); Task actualTask = cutSpy.transfer(task.getId(), destinationWorkbasket.getKey());
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasket.getId(), verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasket.getKey(),
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
verify(workbasketServiceMock, times(1)).checkAuthorization(task.getId(), WorkbasketAuthorization.TRANSFER); verify(workbasketServiceMock, times(1)).checkAuthorization(task.getWorkbasketKey(),
WorkbasketAuthorization.TRANSFER);
verify(taskanaEngineMock, times(1)).getConfiguration(); verify(taskanaEngineMock, times(1)).getConfiguration();
verify(taskanaEngineConfigurationMock, times(1)).isSecurityEnabled(); verify(taskanaEngineConfigurationMock, times(1)).isSecurityEnabled();
verify(workbasketServiceMock, times(1)).getWorkbasket(destinationWorkbasket.getId()); verify(workbasketServiceMock, times(1)).getWorkbasketByKey(destinationWorkbasket.getKey());
verify(taskMapperMock, times(1)).update(any()); verify(taskMapperMock, times(1)).update(any());
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl, verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
@ -623,31 +636,33 @@ public class TaskServiceImplTest {
assertThat(actualTask.isRead(), equalTo(false)); assertThat(actualTask.isRead(), equalTo(false));
assertThat(actualTask.isTransferred(), equalTo(true)); assertThat(actualTask.isTransferred(), equalTo(true));
assertThat(actualTask.getWorkbasketId(), equalTo(destinationWorkbasket.getId())); assertThat(actualTask.getWorkbasketKey(), equalTo(destinationWorkbasket.getKey()));
} }
@Test @Test
public void testTransferTaskToDestinationWorkbasketUsingSecurityTrue() public void testTransferTaskToDestinationWorkbasketUsingSecurityTrue()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException,
ClassificationAlreadyExistException { ClassificationAlreadyExistException, InvalidWorkbasketException {
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
TaskImpl task = createUnitTestTask("1", "Unit Test Task 1", "1"); Workbasket destinationWorkbasket = createWorkbasket("2", "k2");
WorkbasketImpl destinationWorkbasket = createWorkbasket("2"); TaskImpl task = createUnitTestTask("1", "Unit Test Task 1", "k1");
task.setRead(true); task.setRead(true);
doReturn(taskanaEngineConfigurationMock).when(taskanaEngineMock).getConfiguration(); doReturn(taskanaEngineConfigurationMock).when(taskanaEngineMock).getConfiguration();
doReturn(true).when(taskanaEngineConfigurationMock).isSecurityEnabled(); doReturn(true).when(taskanaEngineConfigurationMock).isSecurityEnabled();
doReturn(task).when(cutSpy).getTaskById(task.getId()); doReturn(task).when(cutSpy).getTaskById(task.getId());
doNothing().when(taskMapperMock).update(any()); doNothing().when(taskMapperMock).update(any());
doNothing().when(workbasketServiceMock).checkAuthorization(destinationWorkbasket.getId(), doNothing().when(workbasketServiceMock).checkAuthorization(destinationWorkbasket.getKey(),
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
doNothing().when(workbasketServiceMock).checkAuthorization(task.getId(), WorkbasketAuthorization.TRANSFER); doNothing().when(workbasketServiceMock).checkAuthorization(task.getWorkbasketKey(),
WorkbasketAuthorization.TRANSFER);
Task actualTask = cutSpy.transfer(task.getId(), destinationWorkbasket.getId()); Task actualTask = cutSpy.transfer(task.getId(), destinationWorkbasket.getKey());
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasket.getId(), verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasket.getKey(),
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
verify(workbasketServiceMock, times(1)).checkAuthorization(task.getId(), WorkbasketAuthorization.TRANSFER); verify(workbasketServiceMock, times(1)).checkAuthorization("k1",
WorkbasketAuthorization.TRANSFER);
verify(taskanaEngineMock, times(1)).getConfiguration(); verify(taskanaEngineMock, times(1)).getConfiguration();
verify(taskanaEngineConfigurationMock, times(1)).isSecurityEnabled(); verify(taskanaEngineConfigurationMock, times(1)).isSecurityEnabled();
verify(taskMapperMock, times(1)).update(any()); verify(taskMapperMock, times(1)).update(any());
@ -657,26 +672,25 @@ public class TaskServiceImplTest {
assertThat(actualTask.isRead(), equalTo(false)); assertThat(actualTask.isRead(), equalTo(false));
assertThat(actualTask.isTransferred(), equalTo(true)); assertThat(actualTask.isTransferred(), equalTo(true));
assertThat(actualTask.getWorkbasketId(), equalTo(destinationWorkbasket.getId())); assertThat(actualTask.getWorkbasketKey(), equalTo(destinationWorkbasket.getKey()));
} }
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
public void testTransferDestinationWorkbasketDoesNotExist() public void testTransferDestinationWorkbasketDoesNotExist()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, throws Exception {
ClassificationAlreadyExistException {
String destinationWorkbasketId = "2"; String destinationWorkbasketKey = "2";
TaskImpl task = createUnitTestTask("1", "Unit Test Task 1", "1"); Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
doThrow(WorkbasketNotFoundException.class).when(workbasketServiceMock) doThrow(WorkbasketNotFoundException.class).when(workbasketServiceMock)
.checkAuthorization(destinationWorkbasketId, WorkbasketAuthorization.APPEND); .checkAuthorization(destinationWorkbasketKey, WorkbasketAuthorization.APPEND);
doReturn(task).when(cutSpy).getTaskById(task.getId()); doReturn(task).when(cutSpy).getTaskById(task.getId());
try { try {
cutSpy.transfer(task.getId(), destinationWorkbasketId); cutSpy.transfer(task.getId(), destinationWorkbasketKey);
} catch (Exception e) { } catch (Exception e) {
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasketId, verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasketKey,
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl, verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
@ -687,10 +701,9 @@ public class TaskServiceImplTest {
@Test(expected = TaskNotFoundException.class) @Test(expected = TaskNotFoundException.class)
public void testTransferTaskDoesNotExist() public void testTransferTaskDoesNotExist()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, throws Exception {
ClassificationAlreadyExistException {
TaskImpl task = createUnitTestTask("1", "Unit Test Task 1", "1"); Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(task.getId()); doThrow(TaskNotFoundException.class).when(cutSpy).getTaskById(task.getId());
@ -707,20 +720,19 @@ public class TaskServiceImplTest {
@Test(expected = NotAuthorizedException.class) @Test(expected = NotAuthorizedException.class)
public void testTransferNotAuthorizationOnWorkbasketAppend() public void testTransferNotAuthorizationOnWorkbasketAppend()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, throws Exception {
ClassificationAlreadyExistException { String destinationWorkbasketKey = "2";
String destinationWorkbasketId = "2"; Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
TaskImpl task = createUnitTestTask("1", "Unit Test Task 1", "1");
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
doReturn(task).when(cutSpy).getTaskById(task.getId()); doReturn(task).when(cutSpy).getTaskById(task.getId());
doThrow(NotAuthorizedException.class).when(workbasketServiceMock).checkAuthorization(destinationWorkbasketId, doThrow(NotAuthorizedException.class).when(workbasketServiceMock).checkAuthorization(destinationWorkbasketKey,
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
try { try {
cutSpy.transfer(task.getId(), destinationWorkbasketId); cutSpy.transfer(task.getId(), destinationWorkbasketKey);
} catch (Exception e) { } catch (Exception e) {
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasketId, verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasketKey,
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl, verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
@ -731,24 +743,24 @@ public class TaskServiceImplTest {
@Test(expected = NotAuthorizedException.class) @Test(expected = NotAuthorizedException.class)
public void testTransferNotAuthorizationOnWorkbasketTransfer() public void testTransferNotAuthorizationOnWorkbasketTransfer()
throws TaskNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, throws Exception {
ClassificationAlreadyExistException { String destinationWorkbasketKey = "2";
String destinationWorkbasketId = "2"; Task task = createUnitTestTask("1", "Unit Test Task 1", "1");
TaskImpl task = createUnitTestTask("1", "Unit Test Task 1", "1");
TaskServiceImpl cutSpy = Mockito.spy(cut); TaskServiceImpl cutSpy = Mockito.spy(cut);
doReturn(task).when(cutSpy).getTaskById(task.getId()); doReturn(task).when(cutSpy).getTaskById(task.getId());
doNothing().when(workbasketServiceMock).checkAuthorization(destinationWorkbasketId, doNothing().when(workbasketServiceMock).checkAuthorization(destinationWorkbasketKey,
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
doThrow(NotAuthorizedException.class).when(workbasketServiceMock).checkAuthorization(task.getWorkbasketId(), doThrow(NotAuthorizedException.class).when(workbasketServiceMock).checkAuthorization(task.getWorkbasketKey(),
WorkbasketAuthorization.TRANSFER); WorkbasketAuthorization.TRANSFER);
try { try {
cutSpy.transfer(task.getId(), destinationWorkbasketId); cutSpy.transfer(task.getId(), destinationWorkbasketKey);
} catch (Exception e) { } catch (Exception e) {
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasketId, verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasketKey,
WorkbasketAuthorization.APPEND); WorkbasketAuthorization.APPEND);
verify(workbasketServiceMock, times(1)).checkAuthorization(task.getId(), WorkbasketAuthorization.TRANSFER); verify(workbasketServiceMock, times(1)).checkAuthorization(task.getWorkbasketKey(),
WorkbasketAuthorization.TRANSFER);
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl, verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
taskMapperMock, objectReferenceMapperMock, workbasketServiceMock); taskMapperMock, objectReferenceMapperMock, workbasketServiceMock);
@ -795,7 +807,7 @@ public class TaskServiceImplTest {
@Test @Test
public void testGetTaskByIdWithExistingTask() throws TaskNotFoundException, ClassificationAlreadyExistException { public void testGetTaskByIdWithExistingTask() throws TaskNotFoundException, ClassificationAlreadyExistException {
TaskImpl expectedTask = createUnitTestTask("1", "DUMMY-TASK", "1"); Task expectedTask = createUnitTestTask("1", "DUMMY-TASK", "1");
doReturn(expectedTask).when(taskMapperMock).findById(expectedTask.getId()); doReturn(expectedTask).when(taskMapperMock).findById(expectedTask.getId());
Task actualTask = cut.getTaskById(expectedTask.getId()); Task actualTask = cut.getTaskById(expectedTask.getId());
@ -810,7 +822,7 @@ public class TaskServiceImplTest {
@Test(expected = TaskNotFoundException.class) @Test(expected = TaskNotFoundException.class)
public void testGetTaskByIdWhereTaskDoesNotExist() throws Exception { public void testGetTaskByIdWhereTaskDoesNotExist() throws Exception {
TaskImpl task = createUnitTestTask("1", "DUMMY-TASK", "1"); Task task = createUnitTestTask("1", "DUMMY-TASK", "1");
doThrow(TaskNotFoundException.class).when(taskMapperMock).findById(task.getId()); doThrow(TaskNotFoundException.class).when(taskMapperMock).findById(task.getId());
try { try {
@ -826,43 +838,45 @@ public class TaskServiceImplTest {
} }
@Test @Test
public void testGetTaskSummariesByWorkbasketIdWithInternalException() throws WorkbasketNotFoundException { public void testGetTaskSummariesByWorkbasketIdWithInternalException()
throws WorkbasketNotFoundException, InvalidWorkbasketException {
// given - set behaviour and expected result // given - set behaviour and expected result
String workbasketId = "1"; String workbasketKey = "1";
List<TaskSummary> expectedResultList = new ArrayList<>(); List<TaskSummary> expectedResultList = new ArrayList<>();
doNothing().when(taskanaEngineImpl).openConnection(); doNothing().when(taskanaEngineImpl).openConnection();
doThrow(new IllegalArgumentException("Invalid ID: " + workbasketId)).when(taskMapperMock) doThrow(new IllegalArgumentException("Invalid ID: " + workbasketKey)).when(taskMapperMock)
.findTaskSummariesByWorkbasketId(workbasketId); .findTaskSummariesByWorkbasketKey(workbasketKey);
doNothing().when(taskanaEngineImpl).returnConnection(); doNothing().when(taskanaEngineImpl).returnConnection();
doReturn(new WorkbasketImpl()).when(workbasketServiceMock).getWorkbasket(any()); doReturn(new WorkbasketImpl()).when(workbasketServiceMock).getWorkbasket(any());
// when - make the call // when - make the call
List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketId(workbasketId); List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketKey(workbasketKey);
// then - verify external communications and assert result // then - verify external communications and assert result
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(taskMapperMock, times(1)).findTaskSummariesByWorkbasketId(workbasketId); verify(taskMapperMock, times(1)).findTaskSummariesByWorkbasketKey(workbasketKey);
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
verify(workbasketServiceMock, times(1)).getWorkbasket(any()); verify(workbasketServiceMock, times(1)).getWorkbasketByKey(any());
verifyNoMoreInteractions(taskMapperMock, taskanaEngineImpl, workbasketServiceMock); verifyNoMoreInteractions(taskMapperMock, taskanaEngineImpl, workbasketServiceMock);
assertThat(actualResultList, equalTo(expectedResultList)); assertThat(actualResultList, equalTo(expectedResultList));
} }
@Test @Test
public void testGetTaskSummariesByWorkbasketIdGettingResults() throws WorkbasketNotFoundException { public void testGetTaskSummariesByWorkbasketIdGettingResults()
String workbasketId = "1"; throws WorkbasketNotFoundException, InvalidWorkbasketException {
String workbasketKey = "1";
List<TaskSummary> expectedResultList = Arrays.asList(new TaskSummary(), new TaskSummary()); List<TaskSummary> expectedResultList = Arrays.asList(new TaskSummary(), new TaskSummary());
doNothing().when(taskanaEngineImpl).openConnection(); doNothing().when(taskanaEngineImpl).openConnection();
doNothing().when(taskanaEngineImpl).returnConnection(); doNothing().when(taskanaEngineImpl).returnConnection();
doReturn(new WorkbasketImpl()).when(workbasketServiceMock).getWorkbasket(any()); doReturn(new WorkbasketImpl()).when(workbasketServiceMock).getWorkbasketByKey(any());
doReturn(expectedResultList).when(taskMapperMock).findTaskSummariesByWorkbasketId(workbasketId); doReturn(expectedResultList).when(taskMapperMock).findTaskSummariesByWorkbasketKey(workbasketKey);
List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketId(workbasketId); List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketKey(workbasketKey);
verify(workbasketServiceMock, times(1)).getWorkbasket(any()); verify(workbasketServiceMock, times(1)).getWorkbasketByKey(any());
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(taskMapperMock, times(1)).findTaskSummariesByWorkbasketId(workbasketId); verify(taskMapperMock, times(1)).findTaskSummariesByWorkbasketKey(workbasketKey);
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
verifyNoMoreInteractions(taskMapperMock, taskanaEngineImpl, workbasketServiceMock); verifyNoMoreInteractions(taskMapperMock, taskanaEngineImpl, workbasketServiceMock);
assertThat(actualResultList, equalTo(expectedResultList)); assertThat(actualResultList, equalTo(expectedResultList));
@ -870,31 +884,32 @@ public class TaskServiceImplTest {
} }
@Test @Test
public void testGetTaskSummariesByWorkbasketIdGettingNull() throws WorkbasketNotFoundException { public void testGetTaskSummariesByWorkbasketIdGettingNull()
String workbasketId = "1"; throws WorkbasketNotFoundException, InvalidWorkbasketException {
String workbasketKey = "1";
List<TaskSummary> expectedResultList = new ArrayList<>(); List<TaskSummary> expectedResultList = new ArrayList<>();
doNothing().when(taskanaEngineImpl).openConnection(); doNothing().when(taskanaEngineImpl).openConnection();
doNothing().when(taskanaEngineImpl).returnConnection(); doNothing().when(taskanaEngineImpl).returnConnection();
doReturn(null).when(taskMapperMock).findTaskSummariesByWorkbasketId(workbasketId); doReturn(null).when(taskMapperMock).findTaskSummariesByWorkbasketKey(workbasketKey);
doReturn(new WorkbasketImpl()).when(workbasketServiceMock).getWorkbasket(any()); doReturn(new WorkbasketImpl()).when(workbasketServiceMock).getWorkbasketByKey(any());
List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketId(workbasketId); List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketKey(workbasketKey);
verify(taskanaEngineImpl, times(1)).openConnection(); verify(taskanaEngineImpl, times(1)).openConnection();
verify(taskMapperMock, times(1)).findTaskSummariesByWorkbasketId(workbasketId); verify(taskMapperMock, times(1)).findTaskSummariesByWorkbasketKey(workbasketKey);
verify(taskanaEngineImpl, times(1)).returnConnection(); verify(taskanaEngineImpl, times(1)).returnConnection();
verify(workbasketServiceMock, times(1)).getWorkbasket(any()); verify(workbasketServiceMock, times(1)).getWorkbasketByKey(any());
verifyNoMoreInteractions(taskMapperMock, taskanaEngineImpl, workbasketServiceMock); verifyNoMoreInteractions(taskMapperMock, taskanaEngineImpl, workbasketServiceMock);
assertThat(actualResultList, equalTo(expectedResultList)); assertThat(actualResultList, equalTo(expectedResultList));
assertThat(actualResultList.size(), equalTo(expectedResultList.size())); assertThat(actualResultList.size(), equalTo(expectedResultList.size()));
} }
private TaskImpl createUnitTestTask(String taskId, String taskName, String workbasketId) { private TaskImpl createUnitTestTask(String id, String name, String workbasketKey) {
TaskImpl task = new TaskImpl(); TaskImpl task = new TaskImpl();
task.setId(taskId); task.setId(id);
task.setName(taskName); task.setName(name);
task.setWorkbasketId(workbasketId); task.setWorkbasketKey(workbasketKey);
Timestamp now = new Timestamp(System.currentTimeMillis()); Timestamp now = new Timestamp(System.currentTimeMillis());
task.setCreated(now); task.setCreated(now);
task.setModified(now); task.setModified(now);
@ -905,9 +920,10 @@ public class TaskServiceImplTest {
return task; return task;
} }
private WorkbasketImpl createWorkbasket(String id) { private WorkbasketImpl createWorkbasket(String id, String key) {
WorkbasketImpl workbasket = new WorkbasketImpl(); WorkbasketImpl workbasket = new WorkbasketImpl();
workbasket.setId(id); workbasket.setId(id);
workbasket.setKey(key);
workbasket.setName("Workbasket " + id); workbasket.setName("Workbasket " + id);
return workbasket; return workbasket;
} }

View File

@ -0,0 +1,30 @@
package pro.taskana.impl;
import org.apache.ibatis.session.SqlSession;
/**
* Utility class to enable unit tests to access mappers directly.
*
* @author bbr
*/
public class TaskanaEngineProxyForTest {
TaskanaEngineImpl engine;
public TaskanaEngineProxyForTest(TaskanaEngineImpl taskanaEngine) {
engine = taskanaEngine;
}
public SqlSession getSqlSession() {
return engine.sessionManager;
}
public void openConnection() {
engine.openConnection();
}
public void returnConnection() {
engine.returnConnection();
}
}

View File

@ -20,16 +20,19 @@ import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.Workbasket; import pro.taskana.Workbasket;
import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketType;
import pro.taskana.model.mappings.DistributionTargetMapper; import pro.taskana.model.mappings.DistributionTargetMapper;
import pro.taskana.model.mappings.WorkbasketAccessMapper; import pro.taskana.model.mappings.WorkbasketAccessMapper;
import pro.taskana.model.mappings.WorkbasketMapper; import pro.taskana.model.mappings.WorkbasketMapper;
/** /**
* Unit Test for workbasketServiceImpl. * Unit Test for workbasketServiceImpl.
*
* @author EH * @author EH
*/ */
@RunWith(MockitoJUnitRunner.class) @RunWith(MockitoJUnitRunner.class)
@ -44,14 +47,19 @@ public class WorkbasketServiceImplTest {
@Mock @Mock
WorkbasketMapper workbasketMapper; WorkbasketMapper workbasketMapper;
@Mock @Mock
DistributionTargetMapper distributionTargetMapper; DistributionTargetMapper distributionTargetMapper;
@Mock @Mock
WorkbasketAccessMapper workbasketAccessMapper; WorkbasketAccessMapper workbasketAccessMapper;
@Mock @Mock
TaskanaEngineImpl taskanaEngine; TaskanaEngineImpl taskanaEngine;
@Mock @Mock
TaskanaEngineImpl taskanaEngineImpl; TaskanaEngineImpl taskanaEngineImpl;
@Mock @Mock
TaskanaEngineConfiguration taskanaEngineConfiguration; TaskanaEngineConfiguration taskanaEngineConfiguration;
@ -59,19 +67,19 @@ public class WorkbasketServiceImplTest {
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
} }
@Test
public void should_ReturnWorkbasket_when_WorkbasketIdExists() throws WorkbasketNotFoundException { @Test(expected = InvalidWorkbasketException.class)
public void should_throw_InvalidWorkbasketException_when_empty_Workbasket_is_found()
throws WorkbasketNotFoundException, InvalidWorkbasketException {
when(workbasketMapper.findById(any())).thenReturn(new WorkbasketImpl()); when(workbasketMapper.findById(any())).thenReturn(new WorkbasketImpl());
Workbasket workbasket = workbasketServiceImpl.getWorkbasket("fail"); Workbasket workbasket = workbasketServiceImpl.getWorkbasket("fail");
Assert.assertNull(workbasket);
verify(workbasketMapper).findById(any());
Assert.assertNotNull(workbasket);
} }
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
public void should_ThrowWorkbasketNotFoundException_when_WorkbasketIdDoesNotExist() public void should_ThrowWorkbasketNotFoundException_when_WorkbasketIdDoesNotExist()
throws WorkbasketNotFoundException { throws WorkbasketNotFoundException, InvalidWorkbasketException {
workbasketServiceImpl.getWorkbasket("fail"); workbasketServiceImpl.getWorkbasket("fail");
} }
@ -99,11 +107,16 @@ public class WorkbasketServiceImplTest {
} }
@Test @Test
public void should_InitializeAndStoreWorkbasket_when_WorkbasketIsCreated() throws NotAuthorizedException { public void should_InitializeAndStoreWorkbasket_when_WorkbasketIsCreated()
throws NotAuthorizedException, InvalidWorkbasketException, WorkbasketNotFoundException {
doNothing().when(workbasketMapper).insert(any()); doNothing().when(workbasketMapper).insert(any());
WorkbasketImpl workbasket = new WorkbasketImpl(); WorkbasketImpl workbasket = new WorkbasketImpl();
workbasket.setId("1"); workbasket.setId("1");
workbasket.setKey("myKey");
workbasket.setName("workbasket");
workbasket.setType(WorkbasketType.PERSONAL);
workbasket.setDomain("generali");
workbasketServiceImpl.createWorkbasket(workbasket); workbasketServiceImpl.createWorkbasket(workbasket);
Assert.assertEquals("1", workbasket.getId()); Assert.assertEquals("1", workbasket.getId());
@ -115,23 +128,43 @@ public class WorkbasketServiceImplTest {
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Test @Test
public void should_InitializeAndStoreWorkbasket_when_WorkbasketWithDistributionTargetsIsCreated() public void should_InitializeAndStoreWorkbasket_when_WorkbasketWithDistributionTargetsIsCreated()
throws NotAuthorizedException { throws NotAuthorizedException, InvalidWorkbasketException, WorkbasketNotFoundException {
doNothing().when(workbasketMapper).insert(any()); doNothing().when(workbasketMapper).insert(any());
doNothing().when(distributionTargetMapper).insert(any(), any()); doNothing().when(distributionTargetMapper).insert(any(), any());
WorkbasketImpl workbasket = new WorkbasketImpl(); WorkbasketImpl workbasket = new WorkbasketImpl();
workbasket.setId("1"); workbasket.setId("1");
workbasket.setKey("myKey1");
WorkbasketImpl workbasket1 = new WorkbasketImpl(); WorkbasketImpl workbasket1 = new WorkbasketImpl();
workbasket1.setId("2"); workbasket1.setId("2");
WorkbasketImpl workbasket2 = new WorkbasketImpl(); WorkbasketImpl workbasket2 = new WorkbasketImpl();
workbasket1.setKey("myKey2");
workbasket1.setName("workbasket2");
workbasket1.setType(WorkbasketType.PERSONAL);
workbasket1.setDomain("generali");
workbasketServiceImpl.createWorkbasket(workbasket1);
when(workbasketMapper.findById("2")).thenReturn(workbasket1);
workbasket2.setId("3"); workbasket2.setId("3");
workbasket2.setKey("myKey3");
workbasket2.setName("workbasket3");
workbasket2.setType(WorkbasketType.PERSONAL);
workbasket2.setDomain("generali");
workbasketServiceImpl.createWorkbasket(workbasket2);
when(workbasketMapper.findById("3")).thenReturn(workbasket2);
workbasket.setDistributionTargets(new ArrayList<Workbasket>() { workbasket.setDistributionTargets(new ArrayList<Workbasket>() {
{ {
add(workbasket1); add(workbasket1);
add(workbasket2); add(workbasket2);
} }
}); });
workbasket.setKey("myKey");
workbasket.setName("workbasket");
workbasket.setType(WorkbasketType.PERSONAL);
workbasket.setDomain("generali");
workbasketServiceImpl.createWorkbasket(workbasket); workbasketServiceImpl.createWorkbasket(workbasket);
Assert.assertEquals("1", workbasket.getId()); Assert.assertEquals("1", workbasket.getId());
@ -143,7 +176,7 @@ public class WorkbasketServiceImplTest {
@Test @Test
public void should_ReturnUpdatedWorkbasket_when_ExistingWorkbasketDescriptionIsChanged() public void should_ReturnUpdatedWorkbasket_when_ExistingWorkbasketDescriptionIsChanged()
throws NotAuthorizedException { throws NotAuthorizedException, InvalidWorkbasketException, WorkbasketNotFoundException {
doNothing().when(workbasketMapper).insert(any()); doNothing().when(workbasketMapper).insert(any());
WorkbasketImpl workbasket = new WorkbasketImpl(); WorkbasketImpl workbasket = new WorkbasketImpl();
@ -151,6 +184,9 @@ public class WorkbasketServiceImplTest {
workbasket.setDescription("TestDescription"); workbasket.setDescription("TestDescription");
workbasket.setName("Cool New WorkintheBasket"); workbasket.setName("Cool New WorkintheBasket");
workbasket.setOwner("Arthur Dent"); workbasket.setOwner("Arthur Dent");
workbasket.setKey("myKey");
workbasket.setType(WorkbasketType.PERSONAL);
workbasket.setDomain("generali");
workbasketServiceImpl.createWorkbasket(workbasket); workbasketServiceImpl.createWorkbasket(workbasket);
doNothing().when(workbasketMapper).update(any()); doNothing().when(workbasketMapper).update(any());
@ -163,18 +199,30 @@ public class WorkbasketServiceImplTest {
@SuppressWarnings("serial") @SuppressWarnings("serial")
@Test @Test
public void should_ReturnUpdatedWorkbasket_when_ExistingWorkbasketDistributionTargetIsChanged() public void should_ReturnUpdatedWorkbasket_when_ExistingWorkbasketDistributionTargetIsChanged()
throws NotAuthorizedException { throws NotAuthorizedException, InvalidWorkbasketException, WorkbasketNotFoundException {
doNothing().when(workbasketMapper).insert(any()); doNothing().when(workbasketMapper).insert(any());
WorkbasketImpl workbasket = new WorkbasketImpl(); WorkbasketImpl workbasket = new WorkbasketImpl();
workbasket.setId("0"); workbasket.setId("0");
WorkbasketImpl workbasket1 = new WorkbasketImpl(); WorkbasketImpl workbasket1 = new WorkbasketImpl();
workbasket1.setId("1"); workbasket1.setId("1");
workbasket1.setKey("myKey1");
workbasket1.setName("workbasket1");
workbasket1.setType(WorkbasketType.PERSONAL);
workbasket1.setDomain("generali");
workbasketServiceImpl.createWorkbasket(workbasket1);
when(workbasketMapper.findById("1")).thenReturn(workbasket1);
workbasket.setDistributionTargets(new ArrayList<Workbasket>() { workbasket.setDistributionTargets(new ArrayList<Workbasket>() {
{ {
add(workbasket1); add(workbasket1);
} }
}); });
workbasket.setKey("myKey0");
workbasket.setName("workbasket0");
workbasket.setType(WorkbasketType.PERSONAL);
workbasket.setDomain("generali");
workbasketServiceImpl.createWorkbasket(workbasket); workbasketServiceImpl.createWorkbasket(workbasket);
doNothing().when(workbasketMapper).update(any()); doNothing().when(workbasketMapper).update(any());
@ -192,16 +240,43 @@ public class WorkbasketServiceImplTest {
WorkbasketImpl workbasket0 = new WorkbasketImpl(); WorkbasketImpl workbasket0 = new WorkbasketImpl();
workbasket0.setId("0"); workbasket0.setId("0");
workbasket0.setKey("myKey0");
workbasket0.setName("workbasket0");
workbasket0.setType(WorkbasketType.PERSONAL);
workbasket0.setDomain("generali");
workbasketServiceImpl.createWorkbasket(workbasket0);
when(workbasketMapper.findById("0")).thenReturn(workbasket0);
WorkbasketImpl workbasket1 = new WorkbasketImpl(); WorkbasketImpl workbasket1 = new WorkbasketImpl();
workbasket1.setKey("myKey1");
workbasket1.setName("workbasket1");
workbasket1.setType(WorkbasketType.PERSONAL);
workbasket1.setDomain("generali");
workbasket1.setId("1"); workbasket1.setId("1");
workbasketServiceImpl.createWorkbasket(workbasket1);
when(workbasketMapper.findById("1")).thenReturn(workbasket1);
WorkbasketImpl workbasket2 = new WorkbasketImpl(); WorkbasketImpl workbasket2 = new WorkbasketImpl();
workbasket2.setId("2"); workbasket2.setId("2");
workbasket2.setKey("myKey2");
workbasket2.setName("workbasket2");
workbasket2.setType(WorkbasketType.PERSONAL);
workbasket2.setDomain("generali");
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0);
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1);
workbasketServiceImpl.createWorkbasket(workbasket2); workbasketServiceImpl.createWorkbasket(workbasket2);
WorkbasketImpl workbasket3 = new WorkbasketImpl(); WorkbasketImpl workbasket3 = new WorkbasketImpl();
workbasket3.setId("3"); workbasket3.setId("3");
workbasket3.setKey("myKey3");
workbasket3.setName("workbasket3");
workbasket3.setType(WorkbasketType.PERSONAL);
workbasket3.setDomain("generali");
workbasketServiceImpl.createWorkbasket(workbasket3);
when(workbasketMapper.findById("3")).thenReturn(workbasket3);
workbasket2.getDistributionTargets().clear(); workbasket2.getDistributionTargets().clear();
workbasket2.getDistributionTargets().add(workbasket3); workbasket2.getDistributionTargets().add(workbasket3);
Thread.sleep(SLEEP_TIME); Thread.sleep(SLEEP_TIME);
@ -220,20 +295,20 @@ public class WorkbasketServiceImplTest {
Assert.assertEquals("3", distributionTargets.get(0).getId()); Assert.assertEquals("3", distributionTargets.get(0).getId());
Assert.assertNotEquals(workbasketServiceImpl.getWorkbasket("2").getCreated(), Assert.assertNotEquals(workbasketServiceImpl.getWorkbasket("2").getCreated(),
workbasketServiceImpl.getWorkbasket("2").getModified()); workbasketServiceImpl.getWorkbasket("2").getModified());
Assert.assertEquals(workbasketServiceImpl.getWorkbasket("1").getCreated(), Assert.assertEquals(workbasketServiceImpl.getWorkbasket("1").getCreated(),
workbasketServiceImpl.getWorkbasket("1").getModified()); workbasketServiceImpl.getWorkbasket("1").getModified());
Assert.assertEquals(workbasketServiceImpl.getWorkbasket("3").getCreated(), Assert.assertEquals(workbasketServiceImpl.getWorkbasket("3").getCreated(),
workbasketServiceImpl.getWorkbasket("3").getModified()); workbasketServiceImpl.getWorkbasket("3").getModified());
} }
@Test @Test
public void should_ReturnWorkbasketAuthorization_when_NewWorkbasketAccessItemIsCreated() public void should_ReturnWorkbasketAuthorization_when_NewWorkbasketAccessItemIsCreated()
throws NotAuthorizedException { throws NotAuthorizedException {
doNothing().when(workbasketAccessMapper).insert(any()); doNothing().when(workbasketAccessMapper).insert(any());
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setWorkbasketId("1"); accessItem.setWorkbasketKey("1");
accessItem.setAccessId("Arthur Dent"); accessItem.setAccessId("Arthur Dent");
accessItem.setPermOpen(true); accessItem.setPermOpen(true);
accessItem.setPermRead(true); accessItem.setPermRead(true);
@ -244,11 +319,11 @@ public class WorkbasketServiceImplTest {
@Test @Test
public void should_ReturnWorkbasketAuthorization_when_WorkbasketAccessItemIsUpdated() public void should_ReturnWorkbasketAuthorization_when_WorkbasketAccessItemIsUpdated()
throws NotAuthorizedException { throws NotAuthorizedException {
doNothing().when(workbasketAccessMapper).insert(any()); doNothing().when(workbasketAccessMapper).insert(any());
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setWorkbasketId("1"); accessItem.setWorkbasketKey("1");
accessItem.setAccessId("Arthur Dent"); accessItem.setAccessId("Arthur Dent");
accessItem.setPermOpen(true); accessItem.setPermOpen(true);
accessItem.setPermRead(true); accessItem.setPermRead(true);
@ -278,11 +353,12 @@ public class WorkbasketServiceImplTest {
when(taskanaEngine.getConfiguration().isSecurityEnabled()).thenReturn(true); when(taskanaEngine.getConfiguration().isSecurityEnabled()).thenReturn(true);
when(workbasketAccessMapper.findByWorkbasketAndAccessIdAndAuthorizations(any(), any(), any())) when(workbasketAccessMapper.findByWorkbasketAndAccessIdAndAuthorizations(any(), any(), any()))
.thenReturn(new ArrayList<WorkbasketAccessItem>() { .thenReturn(new ArrayList<WorkbasketAccessItem>() {
{
add(new WorkbasketAccessItem()); {
} add(new WorkbasketAccessItem());
}); }
});
workbasketServiceImpl.checkAuthorization("1", WorkbasketAuthorization.READ); workbasketServiceImpl.checkAuthorization("1", WorkbasketAuthorization.READ);

View File

@ -34,6 +34,7 @@ import pro.taskana.WorkbasketService;
import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationAlreadyExistException; import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
@ -51,6 +52,7 @@ import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.TaskState; import pro.taskana.model.TaskState;
import pro.taskana.model.TaskSummary; import pro.taskana.model.TaskSummary;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketType;
import pro.taskana.security.CurrentUserContext; import pro.taskana.security.CurrentUserContext;
import pro.taskana.security.JAASRunner; import pro.taskana.security.JAASRunner;
import pro.taskana.security.WithAccessId; import pro.taskana.security.WithAccessId;
@ -64,17 +66,11 @@ import pro.taskana.security.WithAccessId;
public class TaskServiceImplIntAutocommitTest { public class TaskServiceImplIntAutocommitTest {
private DataSource dataSource; private DataSource dataSource;
private TaskServiceImpl taskServiceImpl; private TaskServiceImpl taskServiceImpl;
private TaskanaEngineConfiguration taskanaEngineConfiguration; private TaskanaEngineConfiguration taskanaEngineConfiguration;
private TaskanaEngine taskanaEngine; private TaskanaEngine taskanaEngine;
private TaskanaEngineImpl taskanaEngineImpl; private TaskanaEngineImpl taskanaEngineImpl;
private ClassificationService classificationService; private ClassificationService classificationService;
private WorkbasketService workbasketService; private WorkbasketService workbasketService;
@BeforeClass @BeforeClass
@ -102,9 +98,12 @@ public class TaskServiceImplIntAutocommitTest {
@Test @Test
public void testStart() throws FileNotFoundException, SQLException, TaskNotFoundException, public void testStart() throws FileNotFoundException, SQLException, TaskNotFoundException,
WorkbasketNotFoundException, NotAuthorizedException, ClassificationNotFoundException, WorkbasketNotFoundException, NotAuthorizedException, ClassificationNotFoundException,
ClassificationAlreadyExistException, TaskAlreadyExistException { ClassificationAlreadyExistException, TaskAlreadyExistException, InvalidWorkbasketException {
Workbasket wb = workbasketService.newWorkbasket(); Workbasket wb = workbasketService.newWorkbasket();
wb.setKey("workbasket");
wb.setName("workbasket"); wb.setName("workbasket");
wb.setType(WorkbasketType.GROUP);
wb.setDomain("novatec");
taskanaEngine.getWorkbasketService().createWorkbasket(wb); taskanaEngine.getWorkbasketService().createWorkbasket(wb);
Classification classification = classificationService.newClassification(); Classification classification = classificationService.newClassification();
classification.setKey("TEST"); classification.setKey("TEST");
@ -112,7 +111,8 @@ public class TaskServiceImplIntAutocommitTest {
Task task = taskServiceImpl.newTask(); Task task = taskServiceImpl.newTask();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId(wb.getId()); task.setWorkbasketKey(wb.getKey());
task.setClassification(classification); task.setClassification(classification);
task = taskServiceImpl.createTask(task); task = taskServiceImpl.createTask(task);
@ -128,9 +128,12 @@ public class TaskServiceImplIntAutocommitTest {
public void testStartTransactionFail() public void testStartTransactionFail()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException,
WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException,
TaskAlreadyExistException { TaskAlreadyExistException, InvalidWorkbasketException {
Workbasket wb = workbasketService.newWorkbasket(); Workbasket wb = workbasketService.newWorkbasket();
wb.setName("sdf"); wb.setName("sdf");
wb.setType(WorkbasketType.GROUP);
wb.setDomain("novatec");
wb.setKey("wb1k1");
taskanaEngine.getWorkbasketService().createWorkbasket(wb); taskanaEngine.getWorkbasketService().createWorkbasket(wb);
Classification classification = classificationService.newClassification(); Classification classification = classificationService.newClassification();
classification.setKey("TEST"); classification.setKey("TEST");
@ -138,7 +141,7 @@ public class TaskServiceImplIntAutocommitTest {
Task task = taskServiceImpl.newTask(); Task task = taskServiceImpl.newTask();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId(wb.getId()); task.setWorkbasketKey(wb.getKey());
task.setClassification(classification); task.setClassification(classification);
taskServiceImpl.createTask(task); taskServiceImpl.createTask(task);
taskServiceImpl.getTaskById(task.getId()); taskServiceImpl.getTaskById(task.getId());
@ -152,17 +155,25 @@ public class TaskServiceImplIntAutocommitTest {
public void testCreateTaskInTaskanaWithDefaultDb() public void testCreateTaskInTaskanaWithDefaultDb()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException,
WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException,
TaskAlreadyExistException { TaskAlreadyExistException, InvalidWorkbasketException {
TaskanaEngineConfiguration taskanaEngineConfiguration = new TaskanaEngineConfiguration(null, false, false);
TaskanaEngine te = taskanaEngineConfiguration.buildTaskanaEngine();
((TaskanaEngineImpl) te).setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
TaskServiceImpl taskServiceImpl = (TaskServiceImpl) te.getTaskService();
Workbasket wb = workbasketService.newWorkbasket(); Workbasket wb = workbasketService.newWorkbasket();
wb.setKey("workbasket");
wb.setName("workbasket"); wb.setName("workbasket");
wb = taskanaEngine.getWorkbasketService().createWorkbasket(wb); wb.setType(WorkbasketType.GROUP);
Classification classification = classificationService.newClassification(); wb.setDomain("novatec");
te.getWorkbasketService().createWorkbasket(wb);
Classification classification = te.getClassificationService().newClassification();
classification.setKey("TEST"); classification.setKey("TEST");
taskanaEngine.getClassificationService().createClassification(classification); te.getClassificationService().createClassification(classification);
Task task = taskServiceImpl.newTask(); Task task = taskServiceImpl.newTask();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId(wb.getId()); task.setWorkbasketKey(wb.getKey());
task.setClassification(classification); task.setClassification(classification);
task = taskServiceImpl.createTask(task); task = taskServiceImpl.createTask(task);
@ -173,9 +184,12 @@ public class TaskServiceImplIntAutocommitTest {
@Test @Test
public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException, public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException,
WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException,
TaskAlreadyExistException { TaskAlreadyExistException, InvalidWorkbasketException {
Workbasket wb = workbasketService.newWorkbasket(); Workbasket wb = workbasketService.newWorkbasket();
wb.setKey("key");
wb.setName("workbasket"); wb.setName("workbasket");
wb.setType(WorkbasketType.GROUP);
wb.setDomain("novatec");
taskanaEngine.getWorkbasketService().createWorkbasket(wb); taskanaEngine.getWorkbasketService().createWorkbasket(wb);
Classification classification = classificationService.newClassification(); Classification classification = classificationService.newClassification();
classification.setKey("TEST"); classification.setKey("TEST");
@ -183,7 +197,7 @@ public class TaskServiceImplIntAutocommitTest {
Task task = taskServiceImpl.newTask(); Task task = taskServiceImpl.newTask();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId(wb.getId()); task.setWorkbasketKey(wb.getKey());
task.setClassification(classification); task.setClassification(classification);
taskServiceImpl.createTask(task); taskServiceImpl.createTask(task);
@ -209,7 +223,7 @@ public class TaskServiceImplIntAutocommitTest {
.descriptionLike("test") .descriptionLike("test")
.priority(1, 2, 2) .priority(1, 2, 2)
.state(TaskState.CLAIMED) .state(TaskState.CLAIMED)
.workbasketId("asd", "asdasdasd") .workbasketKeyIn("asd", "asdasdasd")
.owner("test", "test2", "bla") .owner("test", "test2", "bla")
.customFields("test") .customFields("test")
.classification(classificationQuery) .classification(classificationQuery)
@ -222,7 +236,10 @@ public class TaskServiceImplIntAutocommitTest {
@Test @Test
public void shouldReturnTaskSummaryListWithValues() throws Exception { public void shouldReturnTaskSummaryListWithValues() throws Exception {
Workbasket dummyWorkbasket = workbasketService.newWorkbasket(); Workbasket dummyWorkbasket = workbasketService.newWorkbasket();
dummyWorkbasket.setKey("Dummy-Key");
dummyWorkbasket.setName("Dummy-Basket"); dummyWorkbasket.setName("Dummy-Basket");
dummyWorkbasket.setType(WorkbasketType.GROUP);
dummyWorkbasket.setDomain("novatec");
dummyWorkbasket = workbasketService.createWorkbasket(dummyWorkbasket); dummyWorkbasket = workbasketService.createWorkbasket(dummyWorkbasket);
Classification dummyClassification = classificationService.newClassification(); Classification dummyClassification = classificationService.newClassification();
@ -234,44 +251,48 @@ public class TaskServiceImplIntAutocommitTest {
dummyTask.setId(null); dummyTask.setId(null);
dummyTask.setName("Dummy-Task"); dummyTask.setName("Dummy-Task");
dummyTask.setClassification(dummyClassification); dummyTask.setClassification(dummyClassification);
dummyTask.setWorkbasketId(dummyWorkbasket.getId()); dummyTask.setWorkbasketKey(dummyWorkbasket.getKey());
dummyTask = (TaskImpl) taskServiceImpl.createTask(dummyTask); dummyTask = (TaskImpl) taskServiceImpl.createTask(dummyTask);
List<TaskSummary> expectedTaskSumamries = new ArrayList<>(); List<TaskSummary> expectedTaskSumamries = new ArrayList<>();
TaskSummary taskSummary = new TaskSummary(); TaskSummary taskSummary = new TaskSummary();
taskSummary.setTaskId(dummyTask.getId()); taskSummary.setTaskId(dummyTask.getId());
taskSummary.setTaskName(dummyTask.getName()); taskSummary.setTaskName(dummyTask.getName());
taskSummary.setWorkbasketId(dummyWorkbasket.getId()); taskSummary.setWorkbasketKey(dummyWorkbasket.getKey());
taskSummary.setWorkbasketName(dummyWorkbasket.getName()); taskSummary.setWorkbasketName(dummyWorkbasket.getName());
taskSummary.setClassificationKey(dummyClassification.getKey()); taskSummary.setClassificationKey(dummyClassification.getKey());
taskSummary.setClassificationName(dummyClassification.getName()); taskSummary.setClassificationName(dummyClassification.getName());
expectedTaskSumamries.add(taskSummary); expectedTaskSumamries.add(taskSummary);
List<TaskSummary> actualTaskSumamryResult = taskServiceImpl List<TaskSummary> actualTaskSumamryResult = taskServiceImpl
.getTaskSummariesByWorkbasketId(dummyWorkbasket.getId()); .getTaskSummariesByWorkbasketKey(dummyWorkbasket.getKey());
assertThat(actualTaskSumamryResult.size(), equalTo(expectedTaskSumamries.size())); assertThat(actualTaskSumamryResult.size(), equalTo(expectedTaskSumamries.size()));
} }
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
public void shouldThrowWorkbasketNotFoundExceptionByNullParameter() throws WorkbasketNotFoundException { public void shouldThrowWorkbasketNotFoundExceptionByNullParameter()
taskServiceImpl.getTaskSummariesByWorkbasketId(null); throws WorkbasketNotFoundException, InvalidWorkbasketException {
taskServiceImpl.getTaskSummariesByWorkbasketKey(null);
} }
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
public void shouldThrowWorkbasketNotFoundExceptionByInvalidWorkbasketParameter() public void shouldThrowWorkbasketNotFoundExceptionByInvalidWorkbasketParameter()
throws WorkbasketNotFoundException { throws WorkbasketNotFoundException, InvalidWorkbasketException {
WorkbasketImpl wb = (WorkbasketImpl) workbasketService.newWorkbasket(); WorkbasketImpl wb = (WorkbasketImpl) workbasketService.newWorkbasket();
wb.setKey("key");
wb.setName("wb"); wb.setName("wb");
wb.setType(WorkbasketType.GROUP);
wb.setDomain("novatec");
wb = (WorkbasketImpl) workbasketService.createWorkbasket(wb); wb = (WorkbasketImpl) workbasketService.createWorkbasket(wb);
wb.setId(wb.getId() + " - 1"); taskServiceImpl.getTaskSummariesByWorkbasketKey("1");
taskServiceImpl.getTaskSummariesByWorkbasketId(wb.getId());
} }
@Test @Test
public void shouldTransferTaskToOtherWorkbasket() public void shouldTransferTaskToOtherWorkbasket()
throws WorkbasketNotFoundException, ClassificationNotFoundException, NotAuthorizedException, throws WorkbasketNotFoundException, ClassificationNotFoundException, NotAuthorizedException,
ClassificationAlreadyExistException, TaskNotFoundException, InterruptedException, TaskAlreadyExistException { ClassificationAlreadyExistException, TaskNotFoundException, InterruptedException, TaskAlreadyExistException,
InvalidWorkbasketException {
Workbasket sourceWB; Workbasket sourceWB;
Workbasket destinationWB; Workbasket destinationWB;
WorkbasketImpl wb; WorkbasketImpl wb;
@ -284,12 +305,18 @@ public class TaskServiceImplIntAutocommitTest {
wb = (WorkbasketImpl) workbasketService.newWorkbasket(); wb = (WorkbasketImpl) workbasketService.newWorkbasket();
wb.setName("Basic-Workbasket"); wb.setName("Basic-Workbasket");
wb.setDescription("Just used as base WB for Task here"); wb.setDescription("Just used as base WB for Task here");
wb.setKey("key1");
wb.setDomain("domain");
wb.setType(WorkbasketType.GROUP);
wb.setOwner("The Tester ID"); wb.setOwner("The Tester ID");
sourceWB = workbasketService.createWorkbasket(wb); sourceWB = workbasketService.createWorkbasket(wb);
// Destination Workbasket // Destination Workbasket
wb = (WorkbasketImpl) workbasketService.newWorkbasket(); wb = (WorkbasketImpl) workbasketService.newWorkbasket();
wb.setName("Desination-WorkBasket"); wb.setName("Desination-WorkBasket");
wb.setKey("k1");
wb.setDomain("domain");
wb.setType(WorkbasketType.CLEARANCE);
wb.setDescription("Destination WB where Task should be transfered to"); wb.setDescription("Destination WB where Task should be transfered to");
wb.setOwner("The Tester ID"); wb.setOwner("The Tester ID");
destinationWB = workbasketService.createWorkbasket(wb); destinationWB = workbasketService.createWorkbasket(wb);
@ -306,7 +333,7 @@ public class TaskServiceImplIntAutocommitTest {
task = (TaskImpl) taskServiceImpl.newTask(); task = (TaskImpl) taskServiceImpl.newTask();
task.setName("Task Name"); task.setName("Task Name");
task.setDescription("Task used for transfer Test"); task.setDescription("Task used for transfer Test");
task.setWorkbasketId(sourceWB.getId()); task.setWorkbasketKey(sourceWB.getKey());
task.setRead(true); task.setRead(true);
task.setTransferred(false); task.setTransferred(false);
task.setModified(null); task.setModified(null);
@ -314,10 +341,10 @@ public class TaskServiceImplIntAutocommitTest {
task = (TaskImpl) taskServiceImpl.createTask(task); task = (TaskImpl) taskServiceImpl.createTask(task);
Thread.sleep(sleepTime); // Sleep for modification-timestamp Thread.sleep(sleepTime); // Sleep for modification-timestamp
resultTask = taskServiceImpl.transfer(task.getId(), destinationWB.getId()); resultTask = taskServiceImpl.transfer(task.getId(), destinationWB.getKey());
assertThat(resultTask.isRead(), equalTo(false)); assertThat(resultTask.isRead(), equalTo(false));
assertThat(resultTask.isTransferred(), equalTo(true)); assertThat(resultTask.isTransferred(), equalTo(true));
assertThat(resultTask.getWorkbasketId(), equalTo(destinationWB.getId())); assertThat(resultTask.getWorkbasketKey(), equalTo(destinationWB.getKey()));
assertThat(resultTask.getModified(), not(equalTo(null))); assertThat(resultTask.getModified(), not(equalTo(null)));
assertThat(resultTask.getModified(), not(equalTo(task.getModified()))); assertThat(resultTask.getModified(), not(equalTo(task.getModified())));
assertThat(resultTask.getCreated(), not(equalTo(null))); assertThat(resultTask.getCreated(), not(equalTo(null)));
@ -326,7 +353,7 @@ public class TaskServiceImplIntAutocommitTest {
@Test(expected = TaskNotFoundException.class) @Test(expected = TaskNotFoundException.class)
public void shouldNotTransferAnyTask() public void shouldNotTransferAnyTask()
throws WorkbasketNotFoundException, NotAuthorizedException, TaskNotFoundException { throws WorkbasketNotFoundException, NotAuthorizedException, TaskNotFoundException, InvalidWorkbasketException {
taskServiceImpl.transfer(UUID.randomUUID() + "_X", "1"); taskServiceImpl.transfer(UUID.randomUUID() + "_X", "1");
} }
@ -334,7 +361,7 @@ public class TaskServiceImplIntAutocommitTest {
@Test @Test
public void shouldNotTransferByFailingSecurity() throws WorkbasketNotFoundException, public void shouldNotTransferByFailingSecurity() throws WorkbasketNotFoundException,
ClassificationNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException, SQLException, ClassificationNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException, SQLException,
TaskNotFoundException, TaskAlreadyExistException { TaskNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException {
final String user = CurrentUserContext.getUserid(); final String user = CurrentUserContext.getUserid();
// Set up Security for this Test // Set up Security for this Test
@ -358,6 +385,9 @@ public class TaskServiceImplIntAutocommitTest {
wb.setName("BASE WB"); wb.setName("BASE WB");
wb.setDescription("Normal base WB"); wb.setDescription("Normal base WB");
wb.setOwner(user); wb.setOwner(user);
wb.setKey("k5");
wb.setDomain("d1");
wb.setType(WorkbasketType.TOPIC);
wb = (WorkbasketImpl) workbasketService.createWorkbasket(wb); wb = (WorkbasketImpl) workbasketService.createWorkbasket(wb);
createWorkbasketWithSecurity(wb, wb.getOwner(), true, true, true, true); createWorkbasketWithSecurity(wb, wb.getOwner(), true, true, true, true);
@ -365,6 +395,9 @@ public class TaskServiceImplIntAutocommitTest {
wbNoAppend.setName("Test-Security-WorkBasket-APPEND"); wbNoAppend.setName("Test-Security-WorkBasket-APPEND");
wbNoAppend.setDescription("Workbasket without permission APPEND on Task"); wbNoAppend.setDescription("Workbasket without permission APPEND on Task");
wbNoAppend.setOwner(user); wbNoAppend.setOwner(user);
wbNoAppend.setDomain("d2");
wbNoAppend.setType(WorkbasketType.PERSONAL);
wbNoAppend.setKey("key77");
wbNoAppend = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoAppend); wbNoAppend = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoAppend);
createWorkbasketWithSecurity(wbNoAppend, wbNoAppend.getOwner(), true, true, false, true); createWorkbasketWithSecurity(wbNoAppend, wbNoAppend.getOwner(), true, true, false, true);
@ -372,43 +405,46 @@ public class TaskServiceImplIntAutocommitTest {
wbNoTransfer.setName("Test-Security-WorkBasket-TRANSFER"); wbNoTransfer.setName("Test-Security-WorkBasket-TRANSFER");
wbNoTransfer.setDescription("Workbasket without permission TRANSFER on Task"); wbNoTransfer.setDescription("Workbasket without permission TRANSFER on Task");
wbNoTransfer.setOwner(user); wbNoTransfer.setOwner(user);
wbNoTransfer.setDomain("d3");
wbNoTransfer.setType(WorkbasketType.CLEARANCE);
wbNoTransfer.setKey("k99");
wbNoTransfer = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoTransfer); wbNoTransfer = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoTransfer);
createWorkbasketWithSecurity(wbNoTransfer, wbNoTransfer.getOwner(), true, true, true, false); createWorkbasketWithSecurity(wbNoTransfer, wbNoTransfer.getOwner(), true, true, true, false);
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(); TaskImpl task = (TaskImpl) taskServiceImpl.newTask();
task.setName("Task Name"); task.setName("Task Name");
task.setDescription("Task used for transfer Test"); task.setDescription("Task used for transfer Test");
task.setWorkbasketId(wb.getId()); task.setWorkbasketKey(wb.getKey());
task.setOwner(user); task.setOwner(user);
task.setClassification(classification); task.setClassification(classification);
task = (TaskImpl) taskServiceImpl.createTask(task); task = (TaskImpl) taskServiceImpl.createTask(task);
// Check failing with missing APPEND // Check failing with missing APPEND
try { try {
task = (TaskImpl) taskServiceImpl.transfer(task.getId(), wbNoAppend.getId()); task = (TaskImpl) taskServiceImpl.transfer(task.getId(), wbNoAppend.getKey());
fail("Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB."); fail("Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB.");
} catch (NotAuthorizedException e) { } catch (NotAuthorizedException e) {
if (!e.getMessage().contains("APPEND")) { if (!e.getMessage().contains("APPEND")) {
fail("Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB."); fail("Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB.");
} }
assertThat(task.isTransferred(), equalTo(false)); assertThat(task.isTransferred(), equalTo(false));
assertThat(task.getWorkbasketId(), not(equalTo(wbNoAppend.getId()))); assertThat(task.getWorkbasketKey(), not(equalTo(wbNoAppend.getKey())));
assertThat(task.getWorkbasketId(), equalTo(wb.getId())); assertThat(task.getWorkbasketKey(), equalTo(wb.getKey()));
} }
// Check failing with missing TRANSFER // Check failing with missing TRANSFER
task.setId(""); task.setId("");
task.setWorkbasketId(wbNoTransfer.getId()); task.setWorkbasketKey(wbNoTransfer.getKey());
task = (TaskImpl) taskServiceImpl.createTask(task); task = (TaskImpl) taskServiceImpl.createTask(task);
try { try {
task = (TaskImpl) taskServiceImpl.transfer(task.getId(), wb.getId()); task = (TaskImpl) taskServiceImpl.transfer(task.getId(), wb.getKey());
fail("Transfer Task should be FAILD, because there are no TRANSFER-Rights on current WB."); fail("Transfer Task should be FAILD, because there are no TRANSFER-Rights on current WB.");
} catch (NotAuthorizedException e) { } catch (NotAuthorizedException e) {
if (!e.getMessage().contains("TRANSFER")) { if (!e.getMessage().contains("TRANSFER")) {
fail("Transfer Task should be FAILD, because there are no APPEND-Rights on current WB."); fail("Transfer Task should be FAILD, because there are no APPEND-Rights on current WB.");
} }
assertThat(task.isTransferred(), equalTo(false)); assertThat(task.isTransferred(), equalTo(false));
assertThat(task.getWorkbasketId(), not(equalTo(wbNoAppend.getId()))); assertThat(task.getWorkbasketKey(), not(equalTo(wbNoAppend.getKey())));
} }
} }
@ -416,7 +452,7 @@ public class TaskServiceImplIntAutocommitTest {
boolean permRead, boolean permAppend, boolean permTransfer) { boolean permRead, boolean permAppend, boolean permTransfer) {
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setId(IdGenerator.generateWithPrefix("WAI")); accessItem.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem.setWorkbasketId(wb.getId()); accessItem.setWorkbasketKey(wb.getKey());
accessItem.setAccessId(accessId); accessItem.setAccessId(accessId);
accessItem.setPermOpen(permOpen); accessItem.setPermOpen(permOpen);
accessItem.setPermRead(permRead); accessItem.setPermRead(permRead);

View File

@ -37,6 +37,7 @@ import pro.taskana.WorkbasketService;
import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationAlreadyExistException; import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
@ -56,6 +57,7 @@ import pro.taskana.model.ClassificationImpl;
import pro.taskana.model.ObjectReference; import pro.taskana.model.ObjectReference;
import pro.taskana.model.TaskState; import pro.taskana.model.TaskState;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketType;
import pro.taskana.security.CurrentUserContext; import pro.taskana.security.CurrentUserContext;
import pro.taskana.security.JAASRunner; import pro.taskana.security.JAASRunner;
import pro.taskana.security.WithAccessId; import pro.taskana.security.WithAccessId;
@ -108,7 +110,7 @@ public class TaskServiceImplIntExplicitTest {
public void testStartTransactionFail() public void testStartTransactionFail()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException,
WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException,
TaskAlreadyExistException { TaskAlreadyExistException, InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
@ -117,6 +119,9 @@ public class TaskServiceImplIntExplicitTest {
WorkbasketImpl workbasket = (WorkbasketImpl) workbasketService.newWorkbasket(); WorkbasketImpl workbasket = (WorkbasketImpl) workbasketService.newWorkbasket();
workbasket.setName("workbasket"); workbasket.setName("workbasket");
workbasket.setId("1"); // set id manually for authorization tests workbasket.setId("1"); // set id manually for authorization tests
workbasket.setKey("k1");
workbasket.setType(WorkbasketType.GROUP);
workbasket.setDomain("novatec");
Classification classification = classificationService.newClassification(); Classification classification = classificationService.newClassification();
classification.setKey("TEST"); classification.setKey("TEST");
taskanaEngine.getWorkbasketService().createWorkbasket(workbasket); taskanaEngine.getWorkbasketService().createWorkbasket(workbasket);
@ -124,7 +129,7 @@ public class TaskServiceImplIntExplicitTest {
connection.commit(); connection.commit();
Task task = taskServiceImpl.newTask(); Task task = taskServiceImpl.newTask();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId(workbasket.getId()); task.setWorkbasketKey(workbasket.getKey());
task.setClassification(classification); task.setClassification(classification);
task = taskServiceImpl.createTask(task); task = taskServiceImpl.createTask(task);
connection.commit(); connection.commit();
@ -141,7 +146,7 @@ public class TaskServiceImplIntExplicitTest {
public void testCreateTask() public void testCreateTask()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException,
WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException,
TaskAlreadyExistException { TaskAlreadyExistException, InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
@ -149,6 +154,15 @@ public class TaskServiceImplIntExplicitTest {
Task task = this.generateDummyTask(); Task task = this.generateDummyTask();
connection.commit(); connection.commit();
WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem.setWorkbasketKey("wb");
accessItem.setAccessId("Elena");
accessItem.setPermAppend(true);
accessItem.setPermOpen(true);
workbasketService.createWorkbasketAuthorization(accessItem);
task = taskServiceImpl.createTask(task); task = taskServiceImpl.createTask(task);
connection.commit(); // needed so that the change is visible in the other session connection.commit(); // needed so that the change is visible in the other session
@ -163,7 +177,7 @@ public class TaskServiceImplIntExplicitTest {
public void testCreateTaskInTaskanaWithDefaultDb() public void testCreateTaskInTaskanaWithDefaultDb()
throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException, throws FileNotFoundException, SQLException, TaskNotFoundException, NotAuthorizedException,
WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException,
TaskAlreadyExistException { TaskAlreadyExistException, InvalidWorkbasketException {
DataSource ds = TaskanaEngineConfiguration.createDefaultDataSource(); DataSource ds = TaskanaEngineConfiguration.createDefaultDataSource();
TaskanaEngineConfiguration taskanaEngineConfiguration = new TaskanaEngineConfiguration(ds, false, false); TaskanaEngineConfiguration taskanaEngineConfiguration = new TaskanaEngineConfiguration(ds, false, false);
TaskanaEngine te = taskanaEngineConfiguration.buildTaskanaEngine(); TaskanaEngine te = taskanaEngineConfiguration.buildTaskanaEngine();
@ -175,15 +189,19 @@ public class TaskServiceImplIntExplicitTest {
Workbasket workbasket = workbasketService.newWorkbasket(); Workbasket workbasket = workbasketService.newWorkbasket();
workbasket.setName("workbasket"); workbasket.setName("workbasket");
workbasket.setKey("K99");
workbasket.setName("workbasket99");
workbasket.setType(WorkbasketType.GROUP);
workbasket.setDomain("novatec");
workBasketServiceImpl.createWorkbasket(workbasket);
Classification classification = classificationService.newClassification(); Classification classification = classificationService.newClassification();
classification.setKey("TEST"); classification.setKey("TEST");
workbasket.setName("workbasket99"); workbasket.setName("workbasket99");
workBasketServiceImpl.createWorkbasket(workbasket);
classificationServiceImpl.createClassification(classification); classificationServiceImpl.createClassification(classification);
Task task = taskServiceImpl.newTask(); Task task = taskServiceImpl.newTask();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId(workbasket.getId()); task.setWorkbasketKey(workbasket.getKey());
task.setClassification(classification); task.setClassification(classification);
task = taskServiceImpl.createTask(task); task = taskServiceImpl.createTask(task);
@ -197,7 +215,7 @@ public class TaskServiceImplIntExplicitTest {
@Test @Test
public void testCreateTaskWithPlannedAndName() throws SQLException, NotAuthorizedException, public void testCreateTaskWithPlannedAndName() throws SQLException, NotAuthorizedException,
WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException,
TaskAlreadyExistException { TaskAlreadyExistException, InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
@ -217,20 +235,34 @@ public class TaskServiceImplIntExplicitTest {
objectReference.setValue("4444"); objectReference.setValue("4444");
objectReference.setType("type"); objectReference.setType("type");
WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem.setWorkbasketKey("wb");
accessItem.setAccessId("Elena");
accessItem.setPermAppend(true);
accessItem.setPermOpen(true);
workbasketService.createWorkbasketAuthorization(accessItem);
Timestamp tomorrow = Timestamp.valueOf(LocalDateTime.now().plusDays(1)); Timestamp tomorrow = Timestamp.valueOf(LocalDateTime.now().plusDays(1));
Workbasket wb = workbasketService.newWorkbasket();
wb.setDomain("novatec");
wb.setName("wbk1");
wb.setType(WorkbasketType.PERSONAL);
wb.setKey("k1");
workbasketService.createWorkbasket(wb);
Task task = this.generateDummyTask(); Task task = this.generateDummyTask();
task.setClassification(classification); task.setClassification(classification);
task.setName("Name"); task.setName("Name");
task.setPrimaryObjRef(objectReference); task.setPrimaryObjRef(objectReference);
task.setPlanned(tomorrow); task.setPlanned(tomorrow);
Task resultTask = taskServiceImpl.createTask(task); Task resultTask = taskServiceImpl.createTask(task);
Assert.assertNotEquals(resultTask.getPlanned(), resultTask.getCreated()); Assert.assertNotEquals(resultTask.getPlanned(), resultTask.getCreated());
Assert.assertNotNull(resultTask.getDue()); Assert.assertNotNull(resultTask.getDue());
Task task2 = taskServiceImpl.newTask(); Task task2 = taskServiceImpl.newTask();
task2.setWorkbasketId(task.getWorkbasketId()); task2.setWorkbasketKey(task.getWorkbasketKey());
task2.setClassification(classification); task2.setClassification(classification);
task2.setPrimaryObjRef(objectReference); task2.setPrimaryObjRef(objectReference);
task2.setDescription("desc"); task2.setDescription("desc");
@ -248,14 +280,14 @@ public class TaskServiceImplIntExplicitTest {
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
public void createTaskShouldThrowWorkbasketNotFoundException() public void createTaskShouldThrowWorkbasketNotFoundException()
throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, SQLException, throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, SQLException,
ClassificationAlreadyExistException, TaskAlreadyExistException { ClassificationAlreadyExistException, TaskAlreadyExistException, InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
generateSampleAccessItems(); generateSampleAccessItems();
Task test = this.generateDummyTask(); Task test = this.generateDummyTask();
test.setWorkbasketId("2"); test.setWorkbasketKey("2");
taskServiceImpl.createTask(test); taskServiceImpl.createTask(test);
} }
@ -263,7 +295,7 @@ public class TaskServiceImplIntExplicitTest {
@Test(expected = ClassificationNotFoundException.class) @Test(expected = ClassificationNotFoundException.class)
public void createManualTaskShouldThrowClassificationNotFoundException() public void createManualTaskShouldThrowClassificationNotFoundException()
throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, SQLException, throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, SQLException,
ClassificationAlreadyExistException, TaskAlreadyExistException { ClassificationAlreadyExistException, TaskAlreadyExistException, InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
@ -271,14 +303,23 @@ public class TaskServiceImplIntExplicitTest {
Task test = this.generateDummyTask(); Task test = this.generateDummyTask();
test.setClassification(new ClassificationImpl()); test.setClassification(new ClassificationImpl());
WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem.setWorkbasketKey("wb");
accessItem.setAccessId("Elena");
accessItem.setPermAppend(true);
accessItem.setPermOpen(true);
workbasketService.createWorkbasketAuthorization(accessItem);
taskServiceImpl.createTask(test); taskServiceImpl.createTask(test);
} }
@WithAccessId(userName = "Elena", groupNames = { "DummyGroup" }) @WithAccessId(userName = "Elena", groupNames = {"DummyGroup"})
@Test @Test
public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException, public void should_ReturnList_when_BuilderIsUsed() throws SQLException, NotAuthorizedException,
WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException,
TaskAlreadyExistException { TaskAlreadyExistException, InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
@ -288,13 +329,16 @@ public class TaskServiceImplIntExplicitTest {
workbasket.setName("workbasket"); workbasket.setName("workbasket");
Classification classification = classificationService.newClassification(); Classification classification = classificationService.newClassification();
classification.setKey("TEST"); classification.setKey("TEST");
classificationService.createClassification(classification);
workbasket.setId("1"); // set id manually for authorization tests workbasket.setId("1"); // set id manually for authorization tests
taskanaEngine.getWorkbasketService().createWorkbasket(workbasket); workbasket.setKey("k1");
taskanaEngine.getClassificationService().createClassification(classification); workbasket.setType(WorkbasketType.GROUP);
workbasket.setDomain("novatec");
workbasketService.createWorkbasket(workbasket);
Task task = taskServiceImpl.newTask(); Task task = taskServiceImpl.newTask();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId(workbasket.getId()); task.setWorkbasketKey(workbasket.getKey());
task.setClassification(classification); task.setClassification(classification);
task = taskServiceImpl.createTask(task); task = taskServiceImpl.createTask(task);
@ -320,7 +364,7 @@ public class TaskServiceImplIntExplicitTest {
.descriptionLike("test") .descriptionLike("test")
.priority(1, 2, 2) .priority(1, 2, 2)
.state(TaskState.CLAIMED) .state(TaskState.CLAIMED)
.workbasketId("1", "2") .workbasketKeyIn("k1", "k2")
.owner("test", "test2", "bla") .owner("test", "test2", "bla")
.customFields("test") .customFields("test")
.classification(classificationQuery) .classification(classificationQuery)
@ -336,7 +380,7 @@ public class TaskServiceImplIntExplicitTest {
public void shouldTransferTaskToOtherWorkbasket() public void shouldTransferTaskToOtherWorkbasket()
throws WorkbasketNotFoundException, ClassificationNotFoundException, NotAuthorizedException, throws WorkbasketNotFoundException, ClassificationNotFoundException, NotAuthorizedException,
ClassificationAlreadyExistException, TaskNotFoundException, InterruptedException, TaskAlreadyExistException, ClassificationAlreadyExistException, TaskNotFoundException, InterruptedException, TaskAlreadyExistException,
SQLException { SQLException, InvalidWorkbasketException {
Workbasket sourceWB; Workbasket sourceWB;
Workbasket destinationWB; Workbasket destinationWB;
WorkbasketImpl wb; WorkbasketImpl wb;
@ -353,7 +397,11 @@ public class TaskServiceImplIntExplicitTest {
wb.setName("Basic-Workbasket"); wb.setName("Basic-Workbasket");
wb.setDescription("Just used as base WB for Task here"); wb.setDescription("Just used as base WB for Task here");
wb.setOwner(user); wb.setOwner(user);
wb.setDomain("domain");
wb.setKey("sourceWbKey");
wb.setType(WorkbasketType.PERSONAL);
sourceWB = workbasketService.createWorkbasket(wb); sourceWB = workbasketService.createWorkbasket(wb);
createWorkbasketWithSecurity(wb, wb.getOwner(), false, false, false, false); createWorkbasketWithSecurity(wb, wb.getOwner(), false, false, false, false);
createWorkbasketWithSecurity(sourceWB, sourceWB.getOwner(), false, false, true, true); createWorkbasketWithSecurity(sourceWB, sourceWB.getOwner(), false, false, true, true);
@ -362,6 +410,9 @@ public class TaskServiceImplIntExplicitTest {
wb.setName("Desination-WorkBasket"); wb.setName("Desination-WorkBasket");
wb.setDescription("Destination WB where Task should be transfered to"); wb.setDescription("Destination WB where Task should be transfered to");
wb.setOwner(user); wb.setOwner(user);
wb.setDomain("dd11");
wb.setType(WorkbasketType.TOPIC);
wb.setKey("wb2Key");
destinationWB = workbasketService.createWorkbasket(wb); destinationWB = workbasketService.createWorkbasket(wb);
createWorkbasketWithSecurity(destinationWB, destinationWB.getOwner(), false, false, true, true); createWorkbasketWithSecurity(destinationWB, destinationWB.getOwner(), false, false, true, true);
@ -377,7 +428,7 @@ public class TaskServiceImplIntExplicitTest {
task = (TaskImpl) taskServiceImpl.newTask(); task = (TaskImpl) taskServiceImpl.newTask();
task.setName("Task Name"); task.setName("Task Name");
task.setDescription("Task used for transfer Test"); task.setDescription("Task used for transfer Test");
task.setWorkbasketId(sourceWB.getId()); task.setWorkbasketKey(sourceWB.getKey());
task.setRead(true); task.setRead(true);
task.setTransferred(false); task.setTransferred(false);
task.setModified(null); task.setModified(null);
@ -387,11 +438,11 @@ public class TaskServiceImplIntExplicitTest {
Thread.sleep(sleepTime); // Sleep for modification-timestamp Thread.sleep(sleepTime); // Sleep for modification-timestamp
connection.commit(); connection.commit();
resultTask = taskServiceImpl.transfer(task.getId(), destinationWB.getId()); resultTask = taskServiceImpl.transfer(task.getId(), destinationWB.getKey());
connection.commit(); connection.commit();
assertThat(resultTask.isRead(), equalTo(false)); assertThat(resultTask.isRead(), equalTo(false));
assertThat(resultTask.isTransferred(), equalTo(true)); assertThat(resultTask.isTransferred(), equalTo(true));
assertThat(resultTask.getWorkbasketId(), equalTo(destinationWB.getId())); assertThat(resultTask.getWorkbasketKey(), equalTo(destinationWB.getKey()));
assertThat(resultTask.getModified(), not(equalTo(null))); assertThat(resultTask.getModified(), not(equalTo(null)));
assertThat(resultTask.getModified(), not(equalTo(task.getModified()))); assertThat(resultTask.getModified(), not(equalTo(task.getModified())));
assertThat(resultTask.getCreated(), not(equalTo(null))); assertThat(resultTask.getCreated(), not(equalTo(null)));
@ -400,7 +451,8 @@ public class TaskServiceImplIntExplicitTest {
@Test(expected = TaskNotFoundException.class) @Test(expected = TaskNotFoundException.class)
public void shouldNotTransferAnyTask() public void shouldNotTransferAnyTask()
throws WorkbasketNotFoundException, NotAuthorizedException, TaskNotFoundException, SQLException { throws WorkbasketNotFoundException, NotAuthorizedException, TaskNotFoundException, SQLException,
InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
taskServiceImpl.transfer(UUID.randomUUID() + "_X", "1"); taskServiceImpl.transfer(UUID.randomUUID() + "_X", "1");
@ -410,7 +462,7 @@ public class TaskServiceImplIntExplicitTest {
@Test @Test
public void shouldNotTransferByFailingSecurity() throws WorkbasketNotFoundException, public void shouldNotTransferByFailingSecurity() throws WorkbasketNotFoundException,
ClassificationNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException, SQLException, ClassificationNotFoundException, NotAuthorizedException, ClassificationAlreadyExistException, SQLException,
TaskNotFoundException, TaskAlreadyExistException { TaskNotFoundException, TaskAlreadyExistException, InvalidWorkbasketException {
final String user = "User"; final String user = "User";
// Set up Security for this Test // Set up Security for this Test
@ -434,6 +486,9 @@ public class TaskServiceImplIntExplicitTest {
wb.setName("BASE WB"); wb.setName("BASE WB");
wb.setDescription("Normal base WB"); wb.setDescription("Normal base WB");
wb.setOwner(user); wb.setOwner(user);
wb.setKey("wbKey1");
wb.setDomain("myDomain");
wb.setType(WorkbasketType.GROUP);
wb = (WorkbasketImpl) workbasketService.createWorkbasket(wb); wb = (WorkbasketImpl) workbasketService.createWorkbasket(wb);
createWorkbasketWithSecurity(wb, wb.getOwner(), true, true, true, true); createWorkbasketWithSecurity(wb, wb.getOwner(), true, true, true, true);
@ -441,6 +496,9 @@ public class TaskServiceImplIntExplicitTest {
wbNoAppend.setName("Test-Security-WorkBasket-APPEND"); wbNoAppend.setName("Test-Security-WorkBasket-APPEND");
wbNoAppend.setDescription("Workbasket without permission APPEND on Task"); wbNoAppend.setDescription("Workbasket without permission APPEND on Task");
wbNoAppend.setOwner(user); wbNoAppend.setOwner(user);
wbNoAppend.setKey("keyNoAppend");
wbNoAppend.setDomain("anotherDomain");
wbNoAppend.setType(WorkbasketType.CLEARANCE);
wbNoAppend = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoAppend); wbNoAppend = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoAppend);
createWorkbasketWithSecurity(wbNoAppend, wbNoAppend.getOwner(), true, true, false, true); createWorkbasketWithSecurity(wbNoAppend, wbNoAppend.getOwner(), true, true, false, true);
@ -448,50 +506,57 @@ public class TaskServiceImplIntExplicitTest {
wbNoTransfer.setName("Test-Security-WorkBasket-TRANSFER"); wbNoTransfer.setName("Test-Security-WorkBasket-TRANSFER");
wbNoTransfer.setDescription("Workbasket without permission TRANSFER on Task"); wbNoTransfer.setDescription("Workbasket without permission TRANSFER on Task");
wbNoTransfer.setOwner(user); wbNoTransfer.setOwner(user);
wbNoTransfer.setKey("keyNoTransfer");
wbNoTransfer.setDomain("domNoTrans");
wbNoTransfer.setType(WorkbasketType.GROUP);
wbNoTransfer = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoTransfer); wbNoTransfer = (WorkbasketImpl) workbasketService.createWorkbasket(wbNoTransfer);
createWorkbasketWithSecurity(wbNoTransfer, wbNoTransfer.getOwner(), true, true, true, false); createWorkbasketWithSecurity(wbNoTransfer, wbNoTransfer.getOwner(), true, true, true, false);
TaskImpl task = (TaskImpl) taskServiceImpl.newTask(); TaskImpl task = (TaskImpl) taskServiceImpl.newTask();
task.setName("Task Name"); task.setName("Task Name");
task.setDescription("Task used for transfer Test"); task.setDescription("Task used for transfer Test");
task.setWorkbasketId(wb.getId()); task.setWorkbasketKey(wb.getKey());
task.setOwner(user); task.setOwner(user);
task.setClassification(classification); task.setClassification(classification);
task = (TaskImpl) taskServiceImpl.createTask(task); task = (TaskImpl) taskServiceImpl.createTask(task);
// Check failing with missing APPEND // Check failing with missing APPEND
try { try {
task = (TaskImpl) taskServiceImpl.transfer(task.getId(), wbNoAppend.getId()); task = (TaskImpl) taskServiceImpl.transfer(task.getId(), wbNoAppend.getKey());
fail("Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB."); fail("Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB.");
} catch (NotAuthorizedException e) { } catch (NotAuthorizedException e) {
if (!e.getMessage().contains("APPEND")) { if (!e.getMessage().contains("APPEND")) {
fail("Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB."); fail("Transfer Task should be FAILD, because there are no APPEND-Rights on destination WB.");
} }
assertThat(task.isTransferred(), equalTo(false)); assertThat(task.isTransferred(), equalTo(false));
assertThat(task.getWorkbasketId(), not(equalTo(wbNoAppend.getId()))); assertThat(task.getWorkbasketKey(), not(equalTo(wbNoAppend.getKey())));
assertThat(task.getWorkbasketId(), equalTo(wb.getId())); assertThat(task.getWorkbasketKey(), equalTo(wb.getKey()));
} }
// Check failing with missing TRANSFER // Check failing with missing TRANSFER
task.setId(""); task.setId("");
task.setWorkbasketId(wbNoTransfer.getId()); task.setWorkbasketKey(wbNoTransfer.getKey());
task = (TaskImpl) taskServiceImpl.createTask(task); task = (TaskImpl) taskServiceImpl.createTask(task);
try { try {
task = (TaskImpl) taskServiceImpl.transfer(task.getId(), wb.getId()); task = (TaskImpl) taskServiceImpl.transfer(task.getId(), wb.getKey());
fail("Transfer Task should be FAILD, because there are no TRANSFER-Rights on current WB."); fail("Transfer Task should be FAILD, because there are no TRANSFER-Rights on current WB.");
} catch (NotAuthorizedException e) { } catch (NotAuthorizedException e) {
if (!e.getMessage().contains("TRANSFER")) { if (!e.getMessage().contains("TRANSFER")) {
fail("Transfer Task should be FAILD, because there are no APPEND-Rights on current WB."); fail("Transfer Task should be FAILD, because there are no APPEND-Rights on current WB.");
} }
assertThat(task.isTransferred(), equalTo(false)); assertThat(task.isTransferred(), equalTo(false));
assertThat(task.getWorkbasketId(), not(equalTo(wbNoAppend.getId()))); assertThat(task.getWorkbasketKey(), not(equalTo(wbNoAppend.getKey())));
} }
} }
private Task generateDummyTask() throws ClassificationAlreadyExistException { private Task generateDummyTask()
throws ClassificationAlreadyExistException, InvalidWorkbasketException, WorkbasketNotFoundException {
WorkbasketImpl workbasket = (WorkbasketImpl) workbasketService.newWorkbasket(); WorkbasketImpl workbasket = (WorkbasketImpl) workbasketService.newWorkbasket();
workbasket.setKey("wb");
workbasket.setName("wb"); workbasket.setName("wb");
workbasket.setId("1"); // set id manually for authorization tests workbasket.setId("1"); // set id manually for authorization tests
workbasket.setType(WorkbasketType.GROUP);
workbasket.setDomain("novatec");
taskanaEngine.getWorkbasketService().createWorkbasket(workbasket); taskanaEngine.getWorkbasketService().createWorkbasket(workbasket);
Classification classification = classificationService.newClassification(); Classification classification = classificationService.newClassification();
@ -499,7 +564,7 @@ public class TaskServiceImplIntExplicitTest {
taskanaEngine.getClassificationService().createClassification(classification); taskanaEngine.getClassificationService().createClassification(classification);
Task task = taskServiceImpl.newTask(); Task task = taskServiceImpl.newTask();
task.setWorkbasketId(workbasket.getId()); task.setWorkbasketKey(workbasket.getKey());
task.setClassification(classification); task.setClassification(classification);
return task; return task;
} }
@ -507,7 +572,7 @@ public class TaskServiceImplIntExplicitTest {
private void generateSampleAccessItems() { private void generateSampleAccessItems() {
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setId(IdGenerator.generateWithPrefix("WAI")); accessItem.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem.setWorkbasketId("1"); accessItem.setWorkbasketKey("k1");
accessItem.setAccessId("Elena"); accessItem.setAccessId("Elena");
accessItem.setPermAppend(true); accessItem.setPermAppend(true);
accessItem.setPermOpen(true); accessItem.setPermOpen(true);
@ -515,7 +580,7 @@ public class TaskServiceImplIntExplicitTest {
WorkbasketAccessItem accessItem2 = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem2 = new WorkbasketAccessItem();
accessItem2.setId(IdGenerator.generateWithPrefix("WAI")); accessItem2.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem2.setWorkbasketId("2"); accessItem2.setWorkbasketKey("k2");
accessItem2.setAccessId("DummyGroup"); accessItem2.setAccessId("DummyGroup");
accessItem2.setPermOpen(true); accessItem2.setPermOpen(true);
workbasketService.createWorkbasketAuthorization(accessItem2); workbasketService.createWorkbasketAuthorization(accessItem2);
@ -525,7 +590,7 @@ public class TaskServiceImplIntExplicitTest {
boolean permRead, boolean permAppend, boolean permTransfer) { boolean permRead, boolean permAppend, boolean permTransfer) {
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setId(IdGenerator.generateWithPrefix("WAI")); accessItem.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem.setWorkbasketId(wb.getId()); accessItem.setWorkbasketKey(wb.getKey());
accessItem.setAccessId(accessId); accessItem.setAccessId(accessId);
accessItem.setPermOpen(permOpen); accessItem.setPermOpen(permOpen);
accessItem.setPermRead(permRead); accessItem.setPermRead(permRead);

View File

@ -1,5 +1,7 @@
package pro.taskana.impl.integration; package pro.taskana.impl.integration;
import static org.junit.Assert.assertTrue;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.security.Principal; import java.security.Principal;
import java.security.PrivilegedActionException; import java.security.PrivilegedActionException;
@ -14,6 +16,7 @@ import javax.security.auth.Subject;
import javax.security.auth.login.LoginException; import javax.security.auth.login.LoginException;
import javax.sql.DataSource; import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSession;
import org.h2.store.fs.FileUtils; import org.h2.store.fs.FileUtils;
import org.junit.AfterClass; import org.junit.AfterClass;
import org.junit.Assert; import org.junit.Assert;
@ -29,40 +32,56 @@ import pro.taskana.WorkbasketService;
import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.TaskanaEngineProxyForTest;
import pro.taskana.impl.WorkbasketImpl; import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.impl.configuration.DBCleaner; import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest; import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.impl.util.IdGenerator; import pro.taskana.impl.util.IdGenerator;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketType;
import pro.taskana.model.mappings.WorkbasketMapper;
import pro.taskana.security.GroupPrincipal; import pro.taskana.security.GroupPrincipal;
import pro.taskana.security.UserPrincipal; import pro.taskana.security.UserPrincipal;
/** /**
* Integration Test for workbasketServiceImpl with connection management mode AUTOCOMMIT. * Integration Test for workbasketServiceImpl with connection management mode AUTOCOMMIT.
*
* @author EH * @author EH
*/ */
public class WorkbasketServiceImplIntAutocommitTest { public class WorkbasketServiceImplIntAutocommitTest {
private static final int SLEEP_TIME = 100; private static final int SLEEP_TIME = 100;
private static final int THREE = 3; private static final int THREE = 3;
private static final int DIFF1 = 200000; private static final long ONE_DAY = 24 * 3600 * 1000;
private static final int DIFF2 = 400000;
private static final long TEN_DAYS = 10 * ONE_DAY;
private static final long FIFTEEN_DAYS = 15 * ONE_DAY;
private static final long TWENTY_DAYS = 2 * TEN_DAYS;
static int counter = 0; static int counter = 0;
private DataSource dataSource; private DataSource dataSource;
private TaskanaEngineConfiguration taskanaEngineConfiguration; private TaskanaEngineConfiguration taskanaEngineConfiguration;
private TaskanaEngine taskanaEngine; private TaskanaEngine taskanaEngine;
private TaskanaEngineImpl taskanaEngineImpl; private TaskanaEngineImpl taskanaEngineImpl;
private WorkbasketService workBasketService; private WorkbasketService workBasketService;
private Date workBasketsCreated;
@BeforeClass @BeforeClass
public static void resetDb() throws SQLException { public static void resetDb() throws SQLException {
DataSource ds = TaskanaEngineConfigurationTest.getDataSource(); DataSource ds = TaskanaEngineConfigurationTest.getDataSource();
@ -83,77 +102,113 @@ public class WorkbasketServiceImplIntAutocommitTest {
} }
@Test @Test
public void testInsertWorkbasket() throws NotAuthorizedException { public void testInsertWorkbasket()
throws NotAuthorizedException, InvalidWorkbasketException, WorkbasketNotFoundException {
int before = workBasketService.getWorkbaskets().size(); int before = workBasketService.getWorkbaskets().size();
WorkbasketImpl workbasket = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket = (WorkbasketImpl) workBasketService.newWorkbasket();
String id1 = IdGenerator.generateWithPrefix("TWB"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket.setId(id1); workbasket.setId(id1);
workbasket.setKey("key");
workbasket.setName("Megabasket"); workbasket.setName("Megabasket");
workbasket.setType(WorkbasketType.GROUP);
workbasket.setDomain("novatec");
workBasketService.createWorkbasket(workbasket); workBasketService.createWorkbasket(workbasket);
Assert.assertEquals(before + 1, workBasketService.getWorkbaskets().size()); Assert.assertEquals(before + 1, workBasketService.getWorkbaskets().size());
} }
@Test @Test
public void testSelectAllWorkbaskets() throws NotAuthorizedException { public void testSelectAllWorkbaskets()
throws NotAuthorizedException, InvalidWorkbasketException, WorkbasketNotFoundException {
int before = workBasketService.getWorkbaskets().size(); int before = workBasketService.getWorkbaskets().size();
WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id0 = IdGenerator.generateWithPrefix("TWB"); String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0); workbasket0.setId(id0);
workbasket0.setKey("key0");
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
workbasket0.setType(WorkbasketType.PERSONAL);
workbasket0.setDomain("novatec");
workBasketService.createWorkbasket(workbasket0); workBasketService.createWorkbasket(workbasket0);
WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id1 = IdGenerator.generateWithPrefix("TWB"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1); workbasket1.setId(id1);
workbasket1.setKey("key1");
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
workbasket1.setType(WorkbasketType.GROUP);
workbasket1.setDomain("novatec");
workBasketService.createWorkbasket(workbasket1); workBasketService.createWorkbasket(workbasket1);
WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id2 = IdGenerator.generateWithPrefix("TWB"); String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2); workbasket2.setId(id2);
workbasket2.setKey("key2");
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2.setType(WorkbasketType.GROUP);
workbasket2.setDomain("novatec");
workBasketService.createWorkbasket(workbasket2); workBasketService.createWorkbasket(workbasket2);
Assert.assertEquals(before + THREE, workBasketService.getWorkbaskets().size()); Assert.assertEquals(before + THREE, workBasketService.getWorkbaskets().size());
} }
@Test @Test
public void testSelectWorkbasket() throws WorkbasketNotFoundException, NotAuthorizedException { public void testSelectWorkbasket()
throws WorkbasketNotFoundException, NotAuthorizedException, InvalidWorkbasketException {
WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id0 = IdGenerator.generateWithPrefix("TWB"); String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0); workbasket0.setId(id0);
workbasket0.setKey("key0");
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
workbasket0.setType(WorkbasketType.GROUP);
workbasket0.setDomain("novatec");
workBasketService.createWorkbasket(workbasket0); workBasketService.createWorkbasket(workbasket0);
WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id1 = IdGenerator.generateWithPrefix("TWB"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1); workbasket1.setId(id1);
workbasket1.setKey("key1");
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
workbasket1.setType(WorkbasketType.GROUP);
workbasket1.setDomain("novatec");
workBasketService.createWorkbasket(workbasket1); workBasketService.createWorkbasket(workbasket1);
WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id2 = IdGenerator.generateWithPrefix("TWB"); String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2); workbasket2.setId(id2);
workbasket2.setKey("key2");
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2.setType(WorkbasketType.GROUP);
workbasket2.setDomain("novatec");
workBasketService.createWorkbasket(workbasket2); workBasketService.createWorkbasket(workbasket2);
Workbasket foundWorkbasket = workBasketService.getWorkbasket(id2); Workbasket foundWorkbasket = workBasketService.getWorkbasket(id2);
Assert.assertEquals(id2, foundWorkbasket.getId()); Assert.assertEquals(id2, foundWorkbasket.getId());
} }
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
public void testGetWorkbasketFail() throws WorkbasketNotFoundException { public void testGetWorkbasketFail() throws WorkbasketNotFoundException, InvalidWorkbasketException {
workBasketService.getWorkbasket("fail"); workBasketService.getWorkbasket("fail");
} }
@Test @Test
public void testSelectWorkbasketWithDistribution() throws WorkbasketNotFoundException, NotAuthorizedException { public void testSelectWorkbasketWithDistribution()
throws WorkbasketNotFoundException, NotAuthorizedException, InvalidWorkbasketException {
WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id0 = IdGenerator.generateWithPrefix("TWB"); String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0); workbasket0.setId(id0);
workbasket0.setKey("key0");
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket();
workbasket0.setType(WorkbasketType.GROUP);
workbasket0.setDomain("novatec");
workBasketService.createWorkbasket(workbasket0);
String id1 = IdGenerator.generateWithPrefix("TWB"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1); workbasket1.setId(id1);
workbasket1.setKey("key1");
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket();
workbasket1.setType(WorkbasketType.GROUP);
workbasket1.setDomain("novatec");
workBasketService.createWorkbasket(workbasket1);
String id2 = IdGenerator.generateWithPrefix("TWB"); String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2); workbasket2.setId(id2);
workbasket2.setKey("key2");
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2.setType(WorkbasketType.GROUP);
workbasket2.setDomain("novatec");
workbasket2.setDistributionTargets(new ArrayList<>()); workbasket2.setDistributionTargets(new ArrayList<>());
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0);
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1);
@ -168,15 +223,26 @@ public class WorkbasketServiceImplIntAutocommitTest {
WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id0 = IdGenerator.generateWithPrefix("TWB"); String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0); workbasket0.setId(id0);
workbasket0.setKey("key0");
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket();
workbasket0.setType(WorkbasketType.GROUP);
workbasket0.setDomain("novatec");
workBasketService.createWorkbasket(workbasket0);
String id1 = IdGenerator.generateWithPrefix("TWB"); String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1); workbasket1.setId(id1);
workbasket1.setKey("key1");
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket();
workbasket1.setType(WorkbasketType.GROUP);
workbasket1.setDomain("novatec");
workBasketService.createWorkbasket(workbasket1);
String id2 = IdGenerator.generateWithPrefix("TWB"); String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2); workbasket2.setId(id2);
workbasket2.setKey("key2");
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2.setType(WorkbasketType.GROUP);
workbasket2.setDomain("novatec");
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0);
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1);
workBasketService.createWorkbasket(workbasket2); workBasketService.createWorkbasket(workbasket2);
@ -184,7 +250,11 @@ public class WorkbasketServiceImplIntAutocommitTest {
WorkbasketImpl workbasket3 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl workbasket3 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id3 = IdGenerator.generateWithPrefix("TWB"); String id3 = IdGenerator.generateWithPrefix("TWB");
workbasket3.setId(id3); workbasket3.setId(id3);
workbasket3.setKey("key3");
workbasket3.setName("hm ... irgend ein basket"); workbasket3.setName("hm ... irgend ein basket");
workbasket3.setType(WorkbasketType.GROUP);
workbasket3.setDomain("novatec");
workBasketService.createWorkbasket(workbasket3);
workbasket2.getDistributionTargets().clear(); workbasket2.getDistributionTargets().clear();
workbasket2.getDistributionTargets().add(workbasket3); workbasket2.getDistributionTargets().add(workbasket3);
Thread.sleep(SLEEP_TIME); Thread.sleep(SLEEP_TIME);
@ -196,18 +266,17 @@ public class WorkbasketServiceImplIntAutocommitTest {
Assert.assertEquals(1, distributionTargets.size()); Assert.assertEquals(1, distributionTargets.size());
Assert.assertEquals(id3, distributionTargets.get(0).getId()); Assert.assertEquals(id3, distributionTargets.get(0).getId());
Assert.assertNotEquals(workBasketService.getWorkbasket(id2).getCreated(), Assert.assertNotEquals(workBasketService.getWorkbasket(id2).getCreated(),
workBasketService.getWorkbasket(id2).getModified()); workBasketService.getWorkbasket(id2).getModified());
Assert.assertEquals(workBasketService.getWorkbasket(id1).getCreated(), Assert.assertEquals(workBasketService.getWorkbasket(id1).getCreated(),
workBasketService.getWorkbasket(id1).getModified()); workBasketService.getWorkbasket(id1).getModified());
Assert.assertEquals(workBasketService.getWorkbasket(id3).getCreated(), Assert.assertEquals(workBasketService.getWorkbasket(id3).getCreated(),
workBasketService.getWorkbasket(id3).getModified()); workBasketService.getWorkbasket(id3).getModified());
} }
@Test @Test
public void testInsertWorkbasketAccessUser() throws NotAuthorizedException { public void testInsertWorkbasketAccessUser() throws NotAuthorizedException {
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
String id1 = IdGenerator.generateWithPrefix("TWB"); accessItem.setWorkbasketKey("k1");
accessItem.setWorkbasketId(id1);
accessItem.setAccessId("Arthur Dent"); accessItem.setAccessId("Arthur Dent");
accessItem.setPermOpen(true); accessItem.setPermOpen(true);
accessItem.setPermRead(true); accessItem.setPermRead(true);
@ -219,8 +288,7 @@ public class WorkbasketServiceImplIntAutocommitTest {
@Test @Test
public void testUpdateWorkbasketAccessUser() throws NotAuthorizedException { public void testUpdateWorkbasketAccessUser() throws NotAuthorizedException {
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
String id1 = IdGenerator.generateWithPrefix("TWB"); accessItem.setWorkbasketKey("k2");
accessItem.setWorkbasketId(id1);
accessItem.setAccessId("Arthur Dent"); accessItem.setAccessId("Arthur Dent");
accessItem.setPermOpen(true); accessItem.setPermOpen(true);
accessItem.setPermRead(true); accessItem.setPermRead(true);
@ -232,37 +300,88 @@ public class WorkbasketServiceImplIntAutocommitTest {
workBasketService.updateWorkbasketAuthorization(accessItem); workBasketService.updateWorkbasketAuthorization(accessItem);
Assert.assertEquals("Zaphod Beeblebrox", Assert.assertEquals("Zaphod Beeblebrox",
workBasketService.getWorkbasketAuthorization(accessItem.getId()).getAccessId()); workBasketService.getWorkbasketAuthorization(accessItem.getId()).getAccessId());
} }
@Test @Test
public void testWorkbasketQuery() throws NotAuthorizedException, InvalidArgumentException { public void testWorkbasketQuery()
throws NotAuthorizedException, InvalidArgumentException, InvalidWorkbasketException,
WorkbasketNotFoundException {
generateSampleDataForQuery(); generateSampleDataForQuery();
WorkbasketQuery query1 = workBasketService.createWorkbasketQuery().access(WorkbasketAuthorization.OPEN, "Bernd").name("Basket1"); Date tomorrow = new Date(workBasketsCreated.getTime() + ONE_DAY);
Date yesterday = new Date(workBasketsCreated.getTime() - ONE_DAY);
Date tenDaysAgo = new Date(workBasketsCreated.getTime() - TEN_DAYS);
Date fifteenDaysAgo = new Date(workBasketsCreated.getTime() - FIFTEEN_DAYS);
Date twentyDaysAgo = new Date(workBasketsCreated.getTime() - TWENTY_DAYS);
Date thirtyDaysAgo = new Date(workBasketsCreated.getTime() - THREE * TEN_DAYS);
WorkbasketQuery query1 = workBasketService.createWorkbasketQuery()
.access(WorkbasketAuthorization.OPEN, "Bernd")
.nameIn("Basket1");
List<Workbasket> result1 = query1.list(); List<Workbasket> result1 = query1.list();
int numDistTargets = 1 + 1 + 1;
Assert.assertEquals(1, result1.size()); Assert.assertEquals(1, result1.size());
Assert.assertEquals(numDistTargets, result1.get(0).getDistributionTargets().size()); Assert.assertEquals(THREE, result1.get(0).getDistributionTargets().size());
WorkbasketQuery query2 = workBasketService.createWorkbasketQuery().access(WorkbasketAuthorization.OPEN, "Bernd", "Konstantin"); WorkbasketQuery query2 = workBasketService.createWorkbasketQuery().access(WorkbasketAuthorization.OPEN, "Bernd",
"Konstantin");
List<Workbasket> result2 = query2.list(); List<Workbasket> result2 = query2.list();
Assert.assertEquals(1, result2.size()); Assert.assertEquals(1, result2.size());
WorkbasketQuery query3 = workBasketService.createWorkbasketQuery().access(WorkbasketAuthorization.CUSTOM_5, "Bernd", "Konstantin"); WorkbasketQuery query3 = workBasketService.createWorkbasketQuery().access(WorkbasketAuthorization.CUSTOM_5,
"Bernd", "Konstantin");
List<Workbasket> result3 = query3.list(); List<Workbasket> result3 = query3.list();
Assert.assertEquals(0, result3.size()); Assert.assertEquals(0, result3.size());
WorkbasketQuery query4 = workBasketService.createWorkbasketQuery().access(WorkbasketAuthorization.CUSTOM_1, "Bernd"); WorkbasketQuery query4 = workBasketService.createWorkbasketQuery().access(WorkbasketAuthorization.CUSTOM_1,
"Bernd");
List<Workbasket> result4 = query4.list(); List<Workbasket> result4 = query4.list();
Assert.assertEquals(0, result4.size()); Assert.assertEquals(0, result4.size());
WorkbasketQuery query0 = workBasketService.createWorkbasketQuery()
.createdBefore(tomorrow)
.createdAfter(yesterday)
.nameIn("Basket1", "Basket2", "Basket3");
List<Workbasket> result0 = query0.list();
assertTrue(result0.size() == THREE);
for (Workbasket workbasket : result0) {
String name = workbasket.getName();
assertTrue("Basket1".equals(name) || "Basket2".equals(name) || "Basket3".equals(name));
}
WorkbasketQuery query5 = workBasketService.createWorkbasketQuery()
.modifiedAfter(thirtyDaysAgo)
.modifiedBefore(tenDaysAgo);
List<Workbasket> result5 = query5.list();
assertTrue(result5.size() == 2);
for (Workbasket workbasket : result5) {
String name = workbasket.getName();
assertTrue("Basket2".equals(name) || "Basket3".equals(name));
}
WorkbasketQuery query6 = workBasketService.createWorkbasketQuery()
.modifiedAfter(twentyDaysAgo)
.domainIn("novatec", "consulting");
List<Workbasket> result6 = query6.list();
assertTrue(result6.size() == 1);
assertTrue("Basket2".equals(result6.get(0).getName()));
WorkbasketQuery query7 = workBasketService.createWorkbasketQuery()
.typeIn(WorkbasketType.GROUP, WorkbasketType.CLEARANCE);
List<Workbasket> result7 = query7.list();
assertTrue(result7.size() == 2);
for (Workbasket workbasket : result7) {
String name = workbasket.getName();
assertTrue("Basket2".equals(name) || "Basket3".equals(name));
}
} }
@Test @Test
public void testGetWorkbasketsForCurrentUserAndPermission() throws NotAuthorizedException { public void testGetWorkbasketsForCurrentUserAndPermission()
throws NotAuthorizedException, InvalidWorkbasketException, WorkbasketNotFoundException {
generateSampleDataForQuery(); generateSampleDataForQuery();
String userName = "eberhardt"; String userName = "eberhardt";
@ -276,17 +395,17 @@ public class WorkbasketServiceImplIntAutocommitTest {
Assert.assertTrue(2 == getWorkbasketsForPrincipalesAndPermissions(userName, groupNames, authorizations)); Assert.assertTrue(2 == getWorkbasketsForPrincipalesAndPermissions(userName, groupNames, authorizations));
authorizations.add(WorkbasketAuthorization.CUSTOM_4); authorizations.add(WorkbasketAuthorization.CUSTOM_4);
Assert.assertTrue(0 == getWorkbasketsForPrincipalesAndPermissions(userName, groupNames, authorizations)); Assert.assertTrue(0 == getWorkbasketsForPrincipalesAndPermissions(userName, groupNames, authorizations));
userName = "Holger"; userName = "Holger";
authorizations = new ArrayList<WorkbasketAuthorization>(); authorizations = new ArrayList<WorkbasketAuthorization>();
authorizations.add(WorkbasketAuthorization.APPEND); authorizations.add(WorkbasketAuthorization.APPEND);
Assert.assertTrue(1 == getWorkbasketsForPrincipalesAndPermissions(userName, groupNames, authorizations)); Assert.assertTrue(1 == getWorkbasketsForPrincipalesAndPermissions(userName, groupNames, authorizations));
} }
private int getWorkbasketsForPrincipalesAndPermissions(String userName, String[] groupNames, private int getWorkbasketsForPrincipalesAndPermissions(String userName, String[] groupNames,
List<WorkbasketAuthorization> authorizations) throws NotAuthorizedException { List<WorkbasketAuthorization> authorizations) throws NotAuthorizedException {
Subject subject = new Subject(); Subject subject = new Subject();
List<Principal> principalList = new ArrayList<>(); List<Principal> principalList = new ArrayList<>();
principalList.add(new UserPrincipal(userName)); principalList.add(new UserPrincipal(userName));
@ -298,7 +417,10 @@ public class WorkbasketServiceImplIntAutocommitTest {
int result = -1; int result = -1;
try { try {
result = Subject.doAs(subject, new PrivilegedExceptionAction<Integer>() { result = Subject.doAs(subject, new PrivilegedExceptionAction<Integer>() {
public Integer run() throws TaskNotFoundException, FileNotFoundException, NotAuthorizedException, SQLException, WorkbasketNotFoundException, ClassificationNotFoundException {
@Override
public Integer run() throws TaskNotFoundException, FileNotFoundException, NotAuthorizedException,
SQLException, WorkbasketNotFoundException, ClassificationNotFoundException {
List<Workbasket> wbsResult = workBasketService.getWorkbaskets(authorizations); List<Workbasket> wbsResult = workBasketService.getWorkbaskets(authorizations);
return wbsResult.size(); return wbsResult.size();
} }
@ -313,45 +435,55 @@ public class WorkbasketServiceImplIntAutocommitTest {
return result; return result;
} }
public void generateSampleDataForQuery() { public void generateSampleDataForQuery() throws InvalidWorkbasketException, WorkbasketNotFoundException {
Date now = new Date(); workBasketsCreated = new Date();
WorkbasketImpl basket2 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl basket2 = (WorkbasketImpl) workBasketService.newWorkbasket();
basket2.setCreated(new Timestamp(now.getTime() - DIFF2));
basket2.setId("2"); basket2.setId("2");
basket2.setKey("k2");
basket2.setName("Basket2"); basket2.setName("Basket2");
basket2.setOwner("Eberhardt"); basket2.setOwner("Eberhardt");
workBasketService.createWorkbasket(basket2); basket2.setType(WorkbasketType.GROUP);
basket2.setDomain("novatec");
basket2 = (WorkbasketImpl) workBasketService.createWorkbasket(basket2);
WorkbasketImpl basket3 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl basket3 = (WorkbasketImpl) workBasketService.newWorkbasket();
basket3.setCreated(new Timestamp(now.getTime() - DIFF1));
basket3.setId("3"); basket3.setId("3");
basket3.setKey("k3");
basket3.setName("Basket3"); basket3.setName("Basket3");
basket3.setOwner("Konstantin"); basket3.setOwner("Konstantin");
workBasketService.createWorkbasket(basket3); basket3.setType(WorkbasketType.CLEARANCE);
basket3.setDomain("consulting");
basket3 = (WorkbasketImpl) workBasketService.createWorkbasket(basket3);
WorkbasketImpl basket4 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl basket4 = (WorkbasketImpl) workBasketService.newWorkbasket();
basket4.setCreated(new Timestamp(now.getTime() - DIFF1));
basket4.setId("4"); basket4.setId("4");
basket4.setKey("k4");
basket4.setName("Basket4"); basket4.setName("Basket4");
basket4.setOwner("Holger"); basket4.setOwner("Holger");
workBasketService.createWorkbasket(basket4); basket4.setType(WorkbasketType.TOPIC);
basket4.setDomain("develop");
basket4 = (WorkbasketImpl) workBasketService.createWorkbasket(basket4);
WorkbasketImpl basket1 = (WorkbasketImpl) workBasketService.newWorkbasket(); WorkbasketImpl basket1 = (WorkbasketImpl) workBasketService.newWorkbasket();
basket1.setCreated(new Timestamp(now.getTime() - DIFF1));
basket1.setId("1"); basket1.setId("1");
basket1.setKey("k1");
basket1.setName("Basket1"); basket1.setName("Basket1");
basket1.setOwner("Holger"); basket1.setOwner("Holger");
basket1.setType(WorkbasketType.PERSONAL);
basket1.setDomain("");
List<Workbasket> distTargets = new ArrayList<Workbasket>(); List<Workbasket> distTargets = new ArrayList<Workbasket>();
distTargets.add(basket2); distTargets.add(basket2);
distTargets.add(basket3); distTargets.add(basket3);
distTargets.add(basket4); distTargets.add(basket4);
basket1.setDistributionTargets(distTargets); basket1.setDistributionTargets(distTargets);
workBasketService.createWorkbasket(basket1); basket1 = (WorkbasketImpl) workBasketService.createWorkbasket(basket1);
updateModifiedTimestamps(basket2, basket3, basket4, basket1);
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
accessItem.setId(IdGenerator.generateWithPrefix("WAI")); accessItem.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem.setWorkbasketId("1"); accessItem.setWorkbasketKey("k1");
accessItem.setAccessId("Bernd"); accessItem.setAccessId("Bernd");
accessItem.setPermOpen(true); accessItem.setPermOpen(true);
accessItem.setPermRead(true); accessItem.setPermRead(true);
@ -359,7 +491,7 @@ public class WorkbasketServiceImplIntAutocommitTest {
WorkbasketAccessItem accessItem2 = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem2 = new WorkbasketAccessItem();
accessItem2.setId(IdGenerator.generateWithPrefix("WAI")); accessItem2.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem2.setWorkbasketId("2"); accessItem2.setWorkbasketKey("k2");
accessItem2.setAccessId("Eberhardt"); accessItem2.setAccessId("Eberhardt");
accessItem2.setPermTransfer(true); accessItem2.setPermTransfer(true);
accessItem2.setPermCustom1(true); accessItem2.setPermCustom1(true);
@ -367,7 +499,7 @@ public class WorkbasketServiceImplIntAutocommitTest {
WorkbasketAccessItem accessItem3 = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem3 = new WorkbasketAccessItem();
accessItem3.setId(IdGenerator.generateWithPrefix("WAI")); accessItem3.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem3.setWorkbasketId("3"); accessItem3.setWorkbasketKey("k3");
accessItem3.setAccessId("group2"); accessItem3.setAccessId("group2");
accessItem3.setPermCustom4(true); accessItem3.setPermCustom4(true);
accessItem3.setPermCustom1(true); accessItem3.setPermCustom1(true);
@ -375,7 +507,7 @@ public class WorkbasketServiceImplIntAutocommitTest {
WorkbasketAccessItem accessItem4 = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem4 = new WorkbasketAccessItem();
accessItem4.setId(IdGenerator.generateWithPrefix("WAI")); accessItem4.setId(IdGenerator.generateWithPrefix("WAI"));
accessItem4.setWorkbasketId("1"); accessItem4.setWorkbasketKey("k4");
accessItem4.setAccessId("group3"); accessItem4.setAccessId("group3");
accessItem4.setPermOpen(true); accessItem4.setPermOpen(true);
accessItem4.setPermRead(true); accessItem4.setPermRead(true);
@ -384,6 +516,31 @@ public class WorkbasketServiceImplIntAutocommitTest {
} }
private void updateModifiedTimestamps(Workbasket basket2, Workbasket basket3, Workbasket basket4,
Workbasket basket1) {
// created and modified timestamps are set by WorkbasketServiceImpl to 'now' when the workbasket is created
// in order to create timestamps distict from the current time, we must use the mapper directly to bypass
// WorkbasketServiceImpl
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest(taskanaEngineImpl);
SqlSession session = engineProxy.getSqlSession();
WorkbasketMapper mapper = session.getMapper(WorkbasketMapper.class);
WorkbasketImpl wb1 = (WorkbasketImpl) basket1;
WorkbasketImpl wb2 = (WorkbasketImpl) basket2;
WorkbasketImpl wb3 = (WorkbasketImpl) basket3;
WorkbasketImpl wb4 = (WorkbasketImpl) basket4;
engineProxy.openConnection();
wb1.setModified(new Timestamp(workBasketsCreated.getTime() - TEN_DAYS));
mapper.update(wb1);
wb2.setModified(new Timestamp(workBasketsCreated.getTime() - FIFTEEN_DAYS));
mapper.update(wb2);
wb3.setModified(new Timestamp(workBasketsCreated.getTime() - TWENTY_DAYS));
mapper.update(wb3);
wb4.setModified(new Timestamp(workBasketsCreated.getTime() - (2 * FIFTEEN_DAYS)));
mapper.update(wb4);
engineProxy.returnConnection();
}
@AfterClass @AfterClass
public static void cleanUpClass() { public static void cleanUpClass() {
FileUtils.deleteRecursive("~/data", true); FileUtils.deleteRecursive("~/data", true);

View File

@ -22,30 +22,38 @@ import pro.taskana.TaskanaEngine.ConnectionManagementMode;
import pro.taskana.Workbasket; import pro.taskana.Workbasket;
import pro.taskana.WorkbasketService; import pro.taskana.WorkbasketService;
import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.TaskanaEngineImpl; import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.impl.configuration.DBCleaner; import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest; import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.impl.util.IdGenerator; import pro.taskana.impl.util.IdGenerator;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketType;
/** /**
* Integration Test for workbasketServiceImpl with connection mode EXPLICIT. * Integration Test for workbasketServiceImpl with connection mode EXPLICIT.
* @author bbr
* *
* @author bbr
*/ */
public class WorkbasketServiceImplIntExplicitTest { public class WorkbasketServiceImplIntExplicitTest {
private static final int SLEEP_TIME = 100; private static final int SLEEP_TIME = 100;
private static final int THREE = 3; private static final int THREE = 3;
static int counter = 0; static int counter = 0;
private DataSource dataSource; private DataSource dataSource;
private TaskanaEngineConfiguration taskanaEngineConfiguration; private TaskanaEngineConfiguration taskanaEngineConfiguration;
private TaskanaEngine taskanaEngine; private TaskanaEngine taskanaEngine;
private TaskanaEngineImpl taskanaEngineImpl; private TaskanaEngineImpl taskanaEngineImpl;
private WorkbasketService workBasketService; private WorkbasketService workBasketService;
@BeforeClass @BeforeClass
@ -67,53 +75,90 @@ public class WorkbasketServiceImplIntExplicitTest {
} }
@Test @Test
public void testInsertWorkbasket() throws NotAuthorizedException, SQLException { public void testInsertWorkbasket()
throws NotAuthorizedException, SQLException, InvalidWorkbasketException, WorkbasketNotFoundException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
workBasketService = taskanaEngine.getWorkbasketService(); workBasketService = taskanaEngine.getWorkbasketService();
int before = workBasketService.getWorkbaskets().size(); int before = workBasketService.getWorkbaskets().size();
Workbasket workbasket = workBasketService.newWorkbasket(); WorkbasketImpl workbasket = (WorkbasketImpl) workBasketService.newWorkbasket();
String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket.setId(id1);
workbasket.setKey("key");
workbasket.setName("Megabasket"); workbasket.setName("Megabasket");
workbasket = workBasketService.createWorkbasket(workbasket); workbasket.setType(WorkbasketType.GROUP);
workbasket.setDomain("novatec");
workBasketService.createWorkbasket(workbasket);
Assert.assertEquals(before + 1, workBasketService.getWorkbaskets().size()); Assert.assertEquals(before + 1, workBasketService.getWorkbaskets().size());
taskanaEngineImpl.closeConnection(); taskanaEngineImpl.closeConnection();
} }
@Test @Test
public void testSelectAllWorkbaskets() throws NotAuthorizedException, SQLException { public void testSelectAllWorkbaskets()
throws NotAuthorizedException, SQLException, InvalidWorkbasketException, WorkbasketNotFoundException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
workBasketService = taskanaEngine.getWorkbasketService(); workBasketService = taskanaEngine.getWorkbasketService();
int before = workBasketService.getWorkbaskets().size(); int before = workBasketService.getWorkbaskets().size();
Workbasket workbasket0 = workBasketService.newWorkbasket(); WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0);
workbasket0.setKey("key0");
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
workbasket0 = workBasketService.createWorkbasket(workbasket0); workbasket0.setType(WorkbasketType.GROUP);
Workbasket workbasket1 = workBasketService.newWorkbasket(); workbasket0.setDomain("novatec");
workBasketService.createWorkbasket(workbasket0);
WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1);
workbasket1.setKey("key1");
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
workbasket1 = workBasketService.createWorkbasket(workbasket1); workbasket1.setType(WorkbasketType.GROUP);
Workbasket workbasket2 = workBasketService.newWorkbasket(); workbasket1.setDomain("novatec");
workbasket1 = (WorkbasketImpl) workBasketService.createWorkbasket(workbasket1);
WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2);
workbasket2.setKey("key2");
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2 = workBasketService.createWorkbasket(workbasket2); workbasket2.setType(WorkbasketType.GROUP);
workbasket2.setDomain("novatec");
workBasketService.createWorkbasket(workbasket2);
Assert.assertEquals(before + THREE, workBasketService.getWorkbaskets().size()); Assert.assertEquals(before + THREE, workBasketService.getWorkbaskets().size());
connection.commit(); connection.commit();
taskanaEngineImpl.closeConnection(); taskanaEngineImpl.closeConnection();
} }
@Test @Test
public void testSelectWorkbasket() throws WorkbasketNotFoundException, NotAuthorizedException, SQLException { public void testSelectWorkbasket()
throws WorkbasketNotFoundException, NotAuthorizedException, SQLException, InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
workBasketService = taskanaEngine.getWorkbasketService(); workBasketService = taskanaEngine.getWorkbasketService();
Workbasket workbasket0 = workBasketService.newWorkbasket(); WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0);
workbasket0.setKey("key0");
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
workbasket0 = workBasketService.createWorkbasket(workbasket0); workbasket0.setType(WorkbasketType.GROUP);
Workbasket workbasket1 = workBasketService.newWorkbasket(); workbasket0.setDomain("novatec");
workbasket0 = (WorkbasketImpl) workBasketService.createWorkbasket(workbasket0);
WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1);
workbasket1.setKey("key1");
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
workbasket1 = workBasketService.createWorkbasket(workbasket1); workbasket1.setType(WorkbasketType.GROUP);
Workbasket workbasket2 = workBasketService.newWorkbasket(); workbasket1.setDomain("novatec");
workbasket1 = (WorkbasketImpl) workBasketService.createWorkbasket(workbasket1);
WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2);
workbasket2.setKey("key2");
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2 = workBasketService.createWorkbasket(workbasket2); workbasket2.setType(WorkbasketType.GROUP);
String id2 = workbasket2.getId(); workbasket2.setDomain("novatec");
workbasket2 = (WorkbasketImpl) workBasketService.createWorkbasket(workbasket2);
Workbasket foundWorkbasket = workBasketService.getWorkbasket(id2); Workbasket foundWorkbasket = workBasketService.getWorkbasket(id2);
Assert.assertEquals(id2, foundWorkbasket.getId()); Assert.assertEquals(id2, foundWorkbasket.getId());
connection.commit(); connection.commit();
@ -121,7 +166,7 @@ public class WorkbasketServiceImplIntExplicitTest {
} }
@Test(expected = WorkbasketNotFoundException.class) @Test(expected = WorkbasketNotFoundException.class)
public void testGetWorkbasketFail() throws WorkbasketNotFoundException, SQLException { public void testGetWorkbasketFail() throws WorkbasketNotFoundException, SQLException, InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
workBasketService = taskanaEngine.getWorkbasketService(); workBasketService = taskanaEngine.getWorkbasketService();
@ -131,23 +176,40 @@ public class WorkbasketServiceImplIntExplicitTest {
} }
@Test @Test
public void testSelectWorkbasketWithDistribution() throws WorkbasketNotFoundException, NotAuthorizedException, SQLException { public void testSelectWorkbasketWithDistribution()
throws WorkbasketNotFoundException, NotAuthorizedException, SQLException, InvalidWorkbasketException {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
workBasketService = taskanaEngine.getWorkbasketService(); workBasketService = taskanaEngine.getWorkbasketService();
Workbasket workbasket0 = workBasketService.newWorkbasket(); WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0);
workbasket0.setKey("key0");
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
workbasket0 = workBasketService.createWorkbasket(workbasket0); workbasket0.setType(WorkbasketType.GROUP);
Workbasket workbasket1 = workBasketService.newWorkbasket(); workbasket0.setDomain("novatec");
workbasket0 = (WorkbasketImpl) workBasketService.createWorkbasket(workbasket0);
WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1);
workbasket1.setKey("key1");
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
workbasket1 = workBasketService.createWorkbasket(workbasket1); workbasket1.setDomain("D2");
Workbasket workbasket2 = workBasketService.newWorkbasket(); workbasket1.setType(WorkbasketType.GROUP);
workBasketService.createWorkbasket(workbasket1);
WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket();
workbasket1.setType(WorkbasketType.GROUP);
workbasket1.setDomain("novatec");
String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2);
workbasket2.setKey("key2");
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2.setType(WorkbasketType.GROUP);
workbasket2.setDomain("novatec");
workbasket2.setDistributionTargets(new ArrayList<>()); workbasket2.setDistributionTargets(new ArrayList<>());
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0);
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1);
workbasket2 = workBasketService.createWorkbasket(workbasket2); workBasketService.createWorkbasket(workbasket2);
String id2 = workbasket2.getId();
Workbasket foundWorkbasket = workBasketService.getWorkbasket(id2); Workbasket foundWorkbasket = workBasketService.getWorkbasket(id2);
Assert.assertEquals(id2, foundWorkbasket.getId()); Assert.assertEquals(id2, foundWorkbasket.getId());
Assert.assertEquals(2, foundWorkbasket.getDistributionTargets().size()); Assert.assertEquals(2, foundWorkbasket.getDistributionTargets().size());
@ -159,40 +221,56 @@ public class WorkbasketServiceImplIntExplicitTest {
Connection connection = dataSource.getConnection(); Connection connection = dataSource.getConnection();
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
workBasketService = taskanaEngine.getWorkbasketService(); workBasketService = taskanaEngine.getWorkbasketService();
Workbasket workbasket0 = workBasketService.newWorkbasket(); WorkbasketImpl workbasket0 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id0 = IdGenerator.generateWithPrefix("TWB");
workbasket0.setId(id0);
workbasket0.setKey("key0");
workbasket0.setName("Superbasket"); workbasket0.setName("Superbasket");
workbasket0 = workBasketService.createWorkbasket(workbasket0); workbasket0.setType(WorkbasketType.GROUP);
Workbasket workbasket1 = workBasketService.newWorkbasket(); workbasket0.setDomain("novatec");
workBasketService.createWorkbasket(workbasket0);
WorkbasketImpl workbasket1 = (WorkbasketImpl) workBasketService.newWorkbasket();
workbasket0.setType(WorkbasketType.GROUP);
workbasket0.setDomain("novatec");
String id1 = IdGenerator.generateWithPrefix("TWB");
workbasket1.setId(id1);
workbasket1.setKey("key1");
workbasket1.setName("Megabasket"); workbasket1.setName("Megabasket");
workbasket1 = workBasketService.createWorkbasket(workbasket1); workbasket1.setType(WorkbasketType.GROUP);
String id1 = workbasket1.getId(); workbasket1.setDomain("novatec");
Workbasket workbasket2 = workBasketService.newWorkbasket(); workBasketService.createWorkbasket(workbasket1);
WorkbasketImpl workbasket2 = (WorkbasketImpl) workBasketService.newWorkbasket();
String id2 = IdGenerator.generateWithPrefix("TWB");
workbasket2.setId(id2);
workbasket2.setKey("key2");
workbasket2.setName("Hyperbasket"); workbasket2.setName("Hyperbasket");
workbasket2.setDistributionTargets(new ArrayList<>()); workbasket2.setDistributionTargets(new ArrayList<>());
workbasket2.setType(WorkbasketType.GROUP);
workbasket2.setDomain("novatec");
workbasket2.getDistributionTargets().add(workbasket0); workbasket2.getDistributionTargets().add(workbasket0);
workbasket2.getDistributionTargets().add(workbasket1); workbasket2.getDistributionTargets().add(workbasket1);
workbasket2 = workBasketService.createWorkbasket(workbasket2); workBasketService.createWorkbasket(workbasket2);
String id2 = workbasket2.getId();
Workbasket workbasket3 = workBasketService.newWorkbasket(); Workbasket workbasket3 = workBasketService.newWorkbasket();
workbasket3.setKey("key3");
workbasket3.setName("hm ... irgend ein basket"); workbasket3.setName("hm ... irgend ein basket");
workbasket3.setType(WorkbasketType.GROUP);
workbasket3.setDomain("novatec");
workbasket3 = workBasketService.createWorkbasket(workbasket3); workbasket3 = workBasketService.createWorkbasket(workbasket3);
String id3 = workbasket3.getId();
workbasket2.getDistributionTargets().clear(); workbasket2.getDistributionTargets().clear();
workbasket2.getDistributionTargets().add(workbasket3); workbasket2.getDistributionTargets().add(workbasket3);
Thread.sleep(SLEEP_TIME); Thread.sleep(SLEEP_TIME);
workbasket2 = workBasketService.updateWorkbasket(workbasket2); workBasketService.updateWorkbasket(workbasket2);
Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId()); Workbasket foundBasket = workBasketService.getWorkbasket(workbasket2.getId());
List<Workbasket> distributionTargets = foundBasket.getDistributionTargets(); List<Workbasket> distributionTargets = foundBasket.getDistributionTargets();
Assert.assertEquals(1, distributionTargets.size()); Assert.assertEquals(1, distributionTargets.size());
Assert.assertEquals(id3, distributionTargets.get(0).getId()); Assert.assertEquals(workbasket3.getId(), distributionTargets.get(0).getId());
Assert.assertNotEquals(workBasketService.getWorkbasket(id2).getCreated(), Assert.assertNotEquals(workBasketService.getWorkbasket(id2).getCreated(),
workBasketService.getWorkbasket(id2).getModified()); workBasketService.getWorkbasket(id2).getModified());
Assert.assertEquals(workBasketService.getWorkbasket(id1).getCreated(), Assert.assertEquals(workBasketService.getWorkbasket(id1).getCreated(),
workBasketService.getWorkbasket(id1).getModified()); workBasketService.getWorkbasket(id1).getModified());
Assert.assertEquals(workBasketService.getWorkbasket(id3).getCreated(),
workBasketService.getWorkbasket(id3).getModified());
connection.commit(); connection.commit();
} }
@ -202,8 +280,7 @@ public class WorkbasketServiceImplIntExplicitTest {
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
workBasketService = taskanaEngine.getWorkbasketService(); workBasketService = taskanaEngine.getWorkbasketService();
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
String id1 = IdGenerator.generateWithPrefix("TWB"); accessItem.setWorkbasketKey("Key1");
accessItem.setWorkbasketId(id1);
accessItem.setAccessId("Arthur Dent"); accessItem.setAccessId("Arthur Dent");
accessItem.setPermOpen(true); accessItem.setPermOpen(true);
accessItem.setPermRead(true); accessItem.setPermRead(true);
@ -219,8 +296,7 @@ public class WorkbasketServiceImplIntExplicitTest {
taskanaEngineImpl.setConnection(connection); taskanaEngineImpl.setConnection(connection);
workBasketService = taskanaEngine.getWorkbasketService(); workBasketService = taskanaEngine.getWorkbasketService();
WorkbasketAccessItem accessItem = new WorkbasketAccessItem(); WorkbasketAccessItem accessItem = new WorkbasketAccessItem();
String id1 = IdGenerator.generateWithPrefix("TWB"); accessItem.setWorkbasketKey("key2");
accessItem.setWorkbasketId(id1);
accessItem.setAccessId("Arthur Dent"); accessItem.setAccessId("Arthur Dent");
accessItem.setPermOpen(true); accessItem.setPermOpen(true);
accessItem.setPermRead(true); accessItem.setPermRead(true);
@ -232,9 +308,9 @@ public class WorkbasketServiceImplIntExplicitTest {
workBasketService.updateWorkbasketAuthorization(accessItem); workBasketService.updateWorkbasketAuthorization(accessItem);
Assert.assertEquals("Zaphod Beeblebrox", Assert.assertEquals("Zaphod Beeblebrox",
workBasketService.getWorkbasketAuthorization(accessItem.getId()).getAccessId()); workBasketService.getWorkbasketAuthorization(accessItem.getId()).getAccessId());
connection.commit(); connection.commit();
} }
@After @After
public void cleanUp() { public void cleanUp() {

View File

@ -13,7 +13,6 @@ import org.junit.runners.model.FrameworkMethod;
import org.junit.runners.model.InitializationError; import org.junit.runners.model.InitializationError;
import org.junit.runners.model.Statement; import org.junit.runners.model.Statement;
/** /**
* Runner for integration tests that enables JAAS subject. * Runner for integration tests that enables JAAS subject.
*/ */
@ -30,7 +29,7 @@ public class JAASRunner extends BlockJUnit4ClassRunner {
List<Principal> principalList = new ArrayList<>(); List<Principal> principalList = new ArrayList<>();
if (test != null) { if (test != null) {
WithAccessId withAccessId = method.getMethod().getAnnotation(WithAccessId.class); WithAccessId withAccessId = method.getMethod().getAnnotation(WithAccessId.class);
if (withAccessId != null) { if (withAccessId != null) {
if (withAccessId.userName() != null) { if (withAccessId.userName() != null) {
principalList.add(new UserPrincipal(withAccessId.userName())); principalList.add(new UserPrincipal(withAccessId.userName()));
@ -51,13 +50,18 @@ public class JAASRunner extends BlockJUnit4ClassRunner {
public void evaluate() throws Throwable { public void evaluate() throws Throwable {
try { try {
Subject.doAs(subject, new PrivilegedExceptionAction<Object>() { Subject.doAs(subject, new PrivilegedExceptionAction<Object>() {
@Override @Override
public Object run() throws Exception { public Object run() throws Exception {
try { try {
base.evaluate(); base.evaluate();
} catch (Throwable e) { } catch (Throwable e) {
throw (Exception) e; if (e instanceof Exception) {
throw (Exception) e;
} else {
throw new Exception(e);
}
} }
return null; return null;
} }

View File

@ -9,6 +9,7 @@ import org.springframework.transaction.annotation.Transactional;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidOwnerException; import pro.taskana.exceptions.InvalidOwnerException;
import pro.taskana.exceptions.InvalidStateException; import pro.taskana.exceptions.InvalidStateException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
@ -23,11 +24,12 @@ public class ExampleBootstrap {
@PostConstruct @PostConstruct
public void test() throws TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException, public void test() throws TaskNotFoundException, NotAuthorizedException, WorkbasketNotFoundException,
ClassificationNotFoundException, InvalidStateException, InvalidOwnerException, TaskAlreadyExistException { ClassificationNotFoundException, InvalidStateException, InvalidOwnerException, InvalidWorkbasketException,
TaskAlreadyExistException {
System.out.println("---------------------------> Start App"); System.out.println("---------------------------> Start App");
Task task = taskService.newTask(); Task task = taskService.newTask();
task.setName("Spring example task"); task.setName("Spring example task");
task.setWorkbasketId("1"); task.setWorkbasketKey("1");
task = taskService.createTask(task); task = taskService.createTask(task);
System.out.println("---------------------------> Task started: " + task.getId()); System.out.println("---------------------------> Task started: " + task.getId());
taskService.claim(task.getId()); taskService.claim(task.getId());

View File

@ -5,6 +5,7 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.TaskAlreadyExistException; import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
@ -21,11 +22,12 @@ public class TaskanaComponent {
} }
public void triggerRollback() throws NotAuthorizedException, WorkbasketNotFoundException, public void triggerRollback() throws NotAuthorizedException, WorkbasketNotFoundException,
ClassificationNotFoundException, TaskAlreadyExistException { ClassificationNotFoundException, InvalidWorkbasketException, TaskAlreadyExistException {
Task task = taskService.newTask(); Task task = taskService.newTask();
task.setName("Unit Test Task"); task.setName("Unit Test Task");
task.setWorkbasketId("1"); task.setWorkbasketKey("1");
task = taskService.createTask(task); task = taskService.createTask(task);
throw new RuntimeException(); throw new RuntimeException();
} }
} }

View File

@ -31,7 +31,7 @@ import pro.taskana.model.TaskSummary;
import pro.taskana.rest.query.TaskFilter; import pro.taskana.rest.query.TaskFilter;
@RestController @RestController
@RequestMapping(path = "/v1/tasks", produces = { MediaType.APPLICATION_JSON_VALUE }) @RequestMapping(path = "/v1/tasks", produces = {MediaType.APPLICATION_JSON_VALUE})
public class TaskController { public class TaskController {
private static final Logger logger = LoggerFactory.getLogger(TaskController.class); private static final Logger logger = LoggerFactory.getLogger(TaskController.class);
@ -44,7 +44,7 @@ public class TaskController {
@RequestMapping @RequestMapping
public ResponseEntity<List<Task>> getTasks(@RequestParam MultiValueMap<String, String> params) public ResponseEntity<List<Task>> getTasks(@RequestParam MultiValueMap<String, String> params)
throws LoginException { throws LoginException {
try { try {
if (params.keySet().size() == 0) { if (params.keySet().size() == 0) {
// get all // get all
@ -68,11 +68,12 @@ public class TaskController {
} }
} }
@RequestMapping(value = "/workbasket/{workbasketId}/state/{taskState}") @RequestMapping(value = "/workbasket/{workbasketKey}/state/{taskState}")
public ResponseEntity<List<Task>> getTasksByWorkbasketIdAndState( public ResponseEntity<List<Task>> getTasksByWorkbasketIdAndState(
@PathVariable(value = "workbasketId") String workbasketId, @PathVariable(value = "taskState") TaskState taskState) { @PathVariable(value = "workbasketKey") String workbasketKey,
@PathVariable(value = "taskState") TaskState taskState) {
try { try {
List<Task> taskList = taskService.getTasksByWorkbasketIdAndState(workbasketId, taskState); List<Task> taskList = taskService.getTasksByWorkbasketKeyAndState(workbasketKey, taskState);
return ResponseEntity.status(HttpStatus.OK).body(taskList); return ResponseEntity.status(HttpStatus.OK).body(taskList);
} catch (WorkbasketNotFoundException e) { } catch (WorkbasketNotFoundException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
@ -99,7 +100,7 @@ public class TaskController {
} catch (InvalidOwnerException e) { } catch (InvalidOwnerException e) {
logger.error("The given Task could not be claimed. Reason: {}", e); logger.error("The given Task could not be claimed. Reason: {}", e);
return ResponseEntity.status(HttpStatus.CONFLICT).build(); return ResponseEntity.status(HttpStatus.CONFLICT).build();
} }
} }
@RequestMapping(method = RequestMethod.POST, value = "/{taskId}/complete") @RequestMapping(method = RequestMethod.POST, value = "/{taskId}/complete")
@ -110,7 +111,7 @@ public class TaskController {
return ResponseEntity.status(HttpStatus.OK).body(updatedTask); return ResponseEntity.status(HttpStatus.OK).body(updatedTask);
} catch (TaskNotFoundException e) { } catch (TaskNotFoundException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
} catch(InvalidStateException | InvalidOwnerException e) { } catch (InvalidStateException | InvalidOwnerException e) {
return ResponseEntity.status(HttpStatus.PRECONDITION_FAILED).build(); return ResponseEntity.status(HttpStatus.PRECONDITION_FAILED).build();
} }
} }
@ -137,13 +138,14 @@ public class TaskController {
} }
} }
@RequestMapping(value = "/workbasket/{workbasketId}", method = RequestMethod.GET) @RequestMapping(value = "/workbasket/{workbasketKey}", method = RequestMethod.GET)
public ResponseEntity<List<TaskSummary>> getTasksummariesByWorkbasketId(@PathVariable(value="workbasketId") String workbasketId) { public ResponseEntity<List<TaskSummary>> getTasksummariesByWorkbasketId(
@PathVariable(value = "workbasketKey") String workbasketKey) {
List<TaskSummary> taskSummaries = null; List<TaskSummary> taskSummaries = null;
try { try {
taskSummaries = taskService.getTaskSummariesByWorkbasketId(workbasketId); taskSummaries = taskService.getTaskSummariesByWorkbasketKey(workbasketKey);
return ResponseEntity.status(HttpStatus.OK).body(taskSummaries); return ResponseEntity.status(HttpStatus.OK).body(taskSummaries);
} catch(Exception ex) { } catch (Exception ex) {
if (taskSummaries == null) { if (taskSummaries == null) {
taskSummaries = Collections.emptyList(); taskSummaries = Collections.emptyList();
} }

View File

@ -19,96 +19,110 @@ import org.springframework.web.bind.annotation.RestController;
import pro.taskana.Workbasket; import pro.taskana.Workbasket;
import pro.taskana.WorkbasketService; import pro.taskana.WorkbasketService;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.WorkbasketAccessItem; import pro.taskana.model.WorkbasketAccessItem;
import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.WorkbasketAuthorization;
@RestController @RestController
@RequestMapping(path = "/v1/workbaskets", produces = { MediaType.APPLICATION_JSON_VALUE }) @RequestMapping(path = "/v1/workbaskets", produces = {MediaType.APPLICATION_JSON_VALUE})
public class WorkbasketController { public class WorkbasketController {
@Autowired @Autowired
private WorkbasketService workbasketService; private WorkbasketService workbasketService;
@GetMapping
public List<Workbasket> getWorkbaskets(@RequestParam MultiValueMap<String, String> params) {
if (params.containsKey("requiredPermission")) {
List<WorkbasketAuthorization> authorizations = new ArrayList<>();
params.get("requiredPermission").stream().forEach(item -> {
for (String authorization : Arrays.asList(item.split(","))) {
switch (authorization) {
case "READ":
authorizations.add(WorkbasketAuthorization.READ);
break;
case "OPEN":
authorizations.add(WorkbasketAuthorization.OPEN);
break;
case "APPEND":
authorizations.add(WorkbasketAuthorization.APPEND);
break;
case "TRANSFER":
authorizations.add(WorkbasketAuthorization.TRANSFER);
break;
case "DISTRIBUTE":
authorizations.add(WorkbasketAuthorization.DISTRIBUTE);
break;
}
}
});
return workbasketService.getWorkbaskets(authorizations);
} else {
return workbasketService.getWorkbaskets();
}
}
@RequestMapping(value = "/{workbasketid}") @GetMapping
public ResponseEntity<Workbasket> getWorkbasketById(@PathVariable(value = "workbasketid") String workbasketId) { public List<Workbasket> getWorkbaskets(@RequestParam MultiValueMap<String, String> params) {
try { if (params.containsKey("requiredPermission")) {
Workbasket workbasket = workbasketService.getWorkbasket(workbasketId); List<WorkbasketAuthorization> authorizations = new ArrayList<>();
return new ResponseEntity<>(workbasket, HttpStatus.OK); params.get("requiredPermission").stream().forEach(item -> {
} catch (WorkbasketNotFoundException e) { for (String authorization : Arrays.asList(item.split(","))) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND); switch (authorization) {
} case "READ":
} authorizations.add(WorkbasketAuthorization.READ);
break;
@RequestMapping(method = RequestMethod.POST) case "OPEN":
public ResponseEntity<?> createWorkbasket(@RequestBody Workbasket workbasket) { authorizations.add(WorkbasketAuthorization.OPEN);
Workbasket createdWorkbasket = workbasketService.createWorkbasket(workbasket); break;
return new ResponseEntity<>(createdWorkbasket, HttpStatus.CREATED); case "APPEND":
} authorizations.add(WorkbasketAuthorization.APPEND);
break;
case "TRANSFER":
authorizations.add(WorkbasketAuthorization.TRANSFER);
break;
case "DISTRIBUTE":
authorizations.add(WorkbasketAuthorization.DISTRIBUTE);
break;
}
}
});
return workbasketService.getWorkbaskets(authorizations);
} else {
return workbasketService.getWorkbaskets();
}
}
@RequestMapping(value = "/{workbasketid}", method = RequestMethod.PUT) @RequestMapping(value = "/{workbasketid}")
public ResponseEntity<?> updateWorkbasket(@PathVariable(value = "workbasketid") String workbasketId, public ResponseEntity<Workbasket> getWorkbasketById(@PathVariable(value = "workbasketid") String workbasketId) {
@RequestBody Workbasket workbasket) { try {
try { Workbasket workbasket = workbasketService.getWorkbasket(workbasketId);
Workbasket updatedWorkbasket = workbasketService.updateWorkbasket(workbasket); return new ResponseEntity<>(workbasket, HttpStatus.OK);
return new ResponseEntity<>(updatedWorkbasket, HttpStatus.OK); } catch (WorkbasketNotFoundException e) {
} catch (NotAuthorizedException e) { return new ResponseEntity<>(HttpStatus.NOT_FOUND);
return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); } catch (InvalidWorkbasketException e) {
} return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
} }
}
@RequestMapping(value = "/{workbasketid}/authorizations", method = RequestMethod.GET) @RequestMapping(method = RequestMethod.POST)
public List<WorkbasketAccessItem> getWorkbasketAuthorizations( public ResponseEntity<?> createWorkbasket(@RequestBody Workbasket workbasket) {
@PathVariable(value = "workbasketid") String workbasketId) { Workbasket createdWorkbasket;
return workbasketService.getWorkbasketAuthorizations(workbasketId); try {
} createdWorkbasket = workbasketService.createWorkbasket(workbasket);
} catch (InvalidWorkbasketException e) {
return new ResponseEntity<>(HttpStatus.CONFLICT);
} catch (WorkbasketNotFoundException e) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
return new ResponseEntity<>(createdWorkbasket, HttpStatus.CREATED);
}
@RequestMapping(value = "/authorizations", method = RequestMethod.POST) @RequestMapping(value = "/{workbasketkey}", method = RequestMethod.PUT)
public WorkbasketAccessItem createWorkbasketAuthorization(@RequestBody WorkbasketAccessItem workbasketAccessItem) { public ResponseEntity<?> updateWorkbasket(@PathVariable(value = "workbasketkey") String workbasketKey,
return workbasketService.createWorkbasketAuthorization(workbasketAccessItem); @RequestBody Workbasket workbasket) {
} try {
Workbasket updatedWorkbasket = workbasketService.updateWorkbasket(workbasket);
return new ResponseEntity<>(updatedWorkbasket, HttpStatus.OK);
} catch (InvalidWorkbasketException e) {
return new ResponseEntity<>(HttpStatus.CONFLICT);
} catch (WorkbasketNotFoundException e) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
} catch (NotAuthorizedException e) {
return new ResponseEntity<>(HttpStatus.CONFLICT);
}
}
@RequestMapping(value = "/authorizations/{authid}", method = RequestMethod.PUT) @RequestMapping(value = "/{workbasketid}/authorizations", method = RequestMethod.GET)
public WorkbasketAccessItem updateWorkbasketAuthorization(@PathVariable(value = "authid") String authId, public List<WorkbasketAccessItem> getWorkbasketAuthorizations(
@RequestBody WorkbasketAccessItem workbasketAccessItem) { @PathVariable(value = "workbasketid") String workbasketId) {
return workbasketService.updateWorkbasketAuthorization(workbasketAccessItem); return workbasketService.getWorkbasketAuthorizations(workbasketId);
} }
@RequestMapping(value = "/authorizations/{authid}", method = RequestMethod.DELETE) @RequestMapping(value = "/authorizations", method = RequestMethod.POST)
public ResponseEntity<?> deleteWorkbasketAuthorization(@PathVariable(value = "authid") String authId) { public WorkbasketAccessItem createWorkbasketAuthorization(@RequestBody WorkbasketAccessItem workbasketAccessItem) {
workbasketService.deleteWorkbasketAuthorization(authId); return workbasketService.createWorkbasketAuthorization(workbasketAccessItem);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build(); }
}
@RequestMapping(value = "/authorizations/{authid}", method = RequestMethod.PUT)
public WorkbasketAccessItem updateWorkbasketAuthorization(@PathVariable(value = "authid") String authId,
@RequestBody WorkbasketAccessItem workbasketAccessItem) {
return workbasketService.updateWorkbasketAuthorization(workbasketAccessItem);
}
@RequestMapping(value = "/authorizations/{authid}", method = RequestMethod.DELETE)
public ResponseEntity<?> deleteWorkbasketAuthorization(@PathVariable(value = "authid") String authId) {
workbasketService.deleteWorkbasketAuthorization(authId);
return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
}
} }

View File

@ -29,7 +29,7 @@ public class TaskFilter {
private static final String DESCRIPTION = "description"; private static final String DESCRIPTION = "description";
private static final String NAME = "name"; private static final String NAME = "name";
private static final String OWNER = "owner"; private static final String OWNER = "owner";
private static final String WORKBASKET_ID = "workbasketId"; private static final String WORKBASKET_KEY = "workbasketKey";
private static final String CUSTOM = "custom"; private static final String CUSTOM = "custom";
private static final String IS_TRANSFERRED = "isTransferred"; private static final String IS_TRANSFERRED = "isTransferred";
private static final String IS_READ = "isRead"; private static final String IS_READ = "isRead";
@ -116,9 +116,9 @@ public class TaskFilter {
} }
taskQuery.classification(classificationQuery); taskQuery.classification(classificationQuery);
} }
if (params.containsKey(WORKBASKET_ID)) { if (params.containsKey(WORKBASKET_KEY)) {
String[] workbaskets = extractCommaSeperatedFields(params.get(WORKBASKET_ID)); String[] workbaskets = extractCommaSeperatedFields(params.get(WORKBASKET_KEY));
taskQuery.workbasketId(workbaskets); taskQuery.workbasketKeyIn(workbaskets);
} }
if (params.containsKey(OWNER)) { if (params.containsKey(OWNER)) {
String[] owners = extractCommaSeperatedFields(params.get(OWNER)); String[] owners = extractCommaSeperatedFields(params.get(OWNER));
@ -186,15 +186,15 @@ public class TaskFilter {
params.get(STATE).stream().forEach(item -> { params.get(STATE).stream().forEach(item -> {
Arrays.asList(item.split(COMMA)).stream().forEach(state -> { Arrays.asList(item.split(COMMA)).stream().forEach(state -> {
switch (state) { switch (state) {
case READY: case READY:
states.add(TaskState.READY); states.add(TaskState.READY);
break; break;
case COMPLETED: case COMPLETED:
states.add(TaskState.COMPLETED); states.add(TaskState.COMPLETED);
break; break;
case CLAIMED: case CLAIMED:
states.add(TaskState.CLAIMED); states.add(TaskState.CLAIMED);
break; break;
} }
}); });
}); });

View File

@ -17,41 +17,45 @@ import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import pro.taskana.Workbasket; import pro.taskana.Workbasket;
import pro.taskana.WorkbasketService; import pro.taskana.WorkbasketService;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
/** /**
* This class deserializes the string list to real workbaskets * This class deserializes the string list to real workbaskets
*/ */
public class DistributionTargetDeserializer extends StdDeserializer<List<Workbasket>> { public class DistributionTargetDeserializer extends StdDeserializer<List<Workbasket>> {
private static final long serialVersionUID = 4226950057149602129L;
private static final Logger logger = LoggerFactory.getLogger(DistributionTargetDeserializer.class); private static final long serialVersionUID = 4226950057149602129L;
@Autowired private static final Logger logger = LoggerFactory.getLogger(DistributionTargetDeserializer.class);
private WorkbasketService workbasketService;
public DistributionTargetDeserializer() { @Autowired
this(null); private WorkbasketService workbasketService;
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
public DistributionTargetDeserializer(Class<?> vc) { public DistributionTargetDeserializer() {
super(vc); this(null);
} SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
@Override public DistributionTargetDeserializer(Class<?> vc) {
public List<Workbasket> deserialize(JsonParser jsonparser, DeserializationContext context) super(vc);
throws IOException, JsonProcessingException { }
List<Workbasket> distributionTargets = new ArrayList<Workbasket>();
while (jsonparser.nextToken() != JsonToken.END_ARRAY) { @Override
String id = jsonparser.getText(); public List<Workbasket> deserialize(JsonParser jsonparser, DeserializationContext context)
try { throws IOException, JsonProcessingException {
distributionTargets.add(workbasketService.getWorkbasket(id)); List<Workbasket> distributionTargets = new ArrayList<Workbasket>();
} catch (WorkbasketNotFoundException e) { while (jsonparser.nextToken() != JsonToken.END_ARRAY) {
logger.error("The workbasket with the id '" + id + "' is not found in database."); String id = jsonparser.getText();
} try {
} distributionTargets.add(workbasketService.getWorkbasket(id));
return distributionTargets; } catch (WorkbasketNotFoundException e) {
} logger.error("The workbasket with the id '" + id + "' is not found in database.");
} catch (InvalidWorkbasketException e) {
logger.error("The workbasket with the id '" + id + "' misses some required properties. Exception = {}.",
e);
}
}
return distributionTargets;
}
} }

View File

@ -1,16 +1,16 @@
INSERT INTO TASK VALUES('1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, 'Task1', 'Lorem ipsum dolor sit amet.', 1, 'READY', '1', '1', 'BPI1', 'PBPI1', 'Stefan', '1', true, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, 'Task1', 'Lorem ipsum dolor sit amet.', 1, 'READY', '1', 'key1', 'BPI1', 'PBPI1', 'Stefan', '1', true, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('2', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task2', 'Lorem ipsum dolor sit amet. ', 1, 'READY', '2', '1', 'BPI2', 'PBPI2', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('2', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task2', 'Lorem ipsum dolor sit amet. ', 1, 'READY', '2', 'key1', 'BPI2', 'PBPI2', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('3', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task3', 'Lorem ipsum dolor sit amet. ', 1, 'CLAIMED', '3', '1', 'BPI3', 'PBPI3', 'Stefan', '3', true, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('3', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task3', 'Lorem ipsum dolor sit amet. ', 1, 'CLAIMED', '3', 'key1', 'BPI3', 'PBPI3', 'Stefan', '3', true, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('4', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task4', 'Lorem ipsum dolor sit amet.', 1, 'CLAIMED', '4', '1', 'BPI4', 'PBPI4', 'Frank', '1', false, true, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('4', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task4', 'Lorem ipsum dolor sit amet.', 1, 'CLAIMED', '4', 'key1', 'BPI4', 'PBPI4', 'Frank', '1', false, true, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('5', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task5', 'Lorem ipsum dolor sit amet. ', 1, 'COMPLETED', '15', '1', 'BPI5', 'PBPI5', 'Stefan', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('5', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task5', 'Lorem ipsum dolor sit amet. ', 1, 'COMPLETED', '15', 'key1', 'BPI5', 'PBPI5', 'Stefan', '2', false, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('6', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task6', 'Lorem ipsum dolor sit amet.', 1, 'COMPLETED', '16', '1', 'BPI6', 'PBPI6', 'Frank', '3', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('6', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task6', 'Lorem ipsum dolor sit amet.', 1, 'COMPLETED', '16', 'key1', 'BPI6', 'PBPI6', 'Frank', '3', false, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('7', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task7', 'Lorem ipsum dolor sit amet.', 1, 'READY', '13', '2', 'BPI7', 'PBPI7', 'Stefan', '1', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('7', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task7', 'Lorem ipsum dolor sit amet.', 1, 'READY', '13', 'key2', 'BPI7', 'PBPI7', 'Stefan', '1', false, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('8', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task8', 'Lorem ipsum dolor sit amet. ', 1, 'READY', '14', '2', 'BPI8', 'PBPI8', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('8', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task8', 'Lorem ipsum dolor sit amet. ', 1, 'READY', '14', 'key2', 'BPI8', 'PBPI8', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('9', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task9', 'Lorem ipsum dolor sit amet. ', 1, 'CLAIMED', '1', '2', 'BPI9', 'PBPI9', 'Stefan', '3', true, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('9', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task9', 'Lorem ipsum dolor sit amet. ', 1, 'CLAIMED', '1', 'key2', 'BPI9', 'PBPI9', 'Stefan', '3', true, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('10', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task10', 'Lorem ipsum dolor sit amet.', 1, 'CLAIMED', '2', '2', 'BPI10', 'PBPI10', 'Frank', '1', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('10', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task10', 'Lorem ipsum dolor sit amet.', 1, 'CLAIMED', '2', 'key2', 'BPI10', 'PBPI10', 'Frank', '1', false, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('11', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task11', 'Lorem ipsum dolor sit amet. ', 1, 'COMPLETED', '3', '2', 'BPI11', 'PBPI11', 'Stefan', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('11', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task11', 'Lorem ipsum dolor sit amet. ', 1, 'COMPLETED', '3', 'key2', 'BPI11', 'PBPI11', 'Stefan', '2', false, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('12', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task12', 'Lorem ipsum dolor sit amet.', 1, 'COMPLETED', '4', '2', 'BPI12', 'PBPI12', 'Frank', '3', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('12', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task12', 'Lorem ipsum dolor sit amet.', 1, 'COMPLETED', '4', 'key2', 'BPI12', 'PBPI12', 'Frank', '3', false, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('13', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task12', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus massa turpis, pellentesque ut libero sit aet, malesuada suscipit dolor. Sed volutpat euismod felis sit amet molestie. Fusce ornare purus dui. ', 1, 'READY', '13', '2', 'BPI13', 'PBPI13', 'Frank', '1', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('13', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task12', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus massa turpis, pellentesque ut libero sit aet, malesuada suscipit dolor. Sed volutpat euismod felis sit amet molestie. Fusce ornare purus dui. ', 1, 'READY', '13', 'key2', 'BPI13', 'PBPI13', 'Frank', '1', false, false, null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO TASK VALUES('14', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task6', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sagittis vulputate nibh ut malesuada. Etiam ac dictum tellus, nec cursus nunc. Curabitur velit eros, feugiat volutpat laoreet vitae, cursus eu dui. Nulla ut purus sem. Vivamus aliquet odio vitae erat cursus, vitae mattis urna mollis. Nam quam tellus, auctor id volutpat congue, viverra vitae ante. Duis nisi dolor, elementum et mattis at, maximus id velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis eu condimentum risus. Praesent libero velit, facilisis sit amet maximus non, scelerisque ullamcorper leo. Ut sit amet iaculis eros. Mauris sagittis nibh lacus, at facilisis magna suscipit at. Aliquam finibus tempor odio id commodo. Vivamus aliquam, justo id porta imperdiet, mi.', 1, 'READY', '14', '1', 'BPI14', 'PBPI14', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null); INSERT INTO TASK VALUES('14', CURRENT_TIMESTAMP, null, null, CURRENT_TIMESTAMP, null, CURRENT_TIMESTAMP, 'Task6', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sagittis vulputate nibh ut malesuada. Etiam ac dictum tellus, nec cursus nunc. Curabitur velit eros, feugiat volutpat laoreet vitae, cursus eu dui. Nulla ut purus sem. Vivamus aliquet odio vitae erat cursus, vitae mattis urna mollis. Nam quam tellus, auctor id volutpat congue, viverra vitae ante. Duis nisi dolor, elementum et mattis at, maximus id velit. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis eu condimentum risus. Praesent libero velit, facilisis sit amet maximus non, scelerisque ullamcorper leo. Ut sit amet iaculis eros. Mauris sagittis nibh lacus, at facilisis magna suscipit at. Aliquam finibus tempor odio id commodo. Vivamus aliquam, justo id porta imperdiet, mi.', 1, 'READY', '14', 'key1', 'BPI14', 'PBPI14', 'Frank', '2', false, false, null, null, null, null, null, null, null, null, null, null, null);

View File

@ -1,3 +1,3 @@
INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('1', '1', 'Elena', true, true, true, true, true, false, false, false, false, false, false, false, false); INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('1', 'key1', 'Elena', true, true, true, true, true, false, false, false, false, false, false, false, false);
INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('2', '2', 'Max', true, true, true, true, true, true, true, true, true, false, false, false, false); INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('2', 'key2', 'Max', true, true, true, true, true, true, true, true, true, false, false, false, false);
INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('3', '3', 'Simone', true, true, true, true, true, true, true, true, true, true, true, true, true); INSERT INTO WORKBASKET_ACCESS_LIST VALUES ('3', 'key3', 'Simone', true, true, true, true, true, true, true, true, true, true, true, true, true);

View File

@ -1,3 +1,3 @@
INSERT INTO WORKBASKET VALUES ('1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'Basket1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Peter'); INSERT INTO WORKBASKET VALUES ('1', 'key1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'Basket1', 'domain1', 'GROUP', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Peter', '', '', '', '', '', '', '', '' );
INSERT INTO WORKBASKET VALUES ('2', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'Basket2', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Susanne'); INSERT INTO WORKBASKET VALUES ('2', 'key2', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'Basket2', 'domain2', 'CLEARANCE', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Susanne', '', '', '', '', '', '', '', '');
INSERT INTO WORKBASKET VALUES ('3', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'Basket3', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Max'); INSERT INTO WORKBASKET VALUES ('3', 'key3', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'Basket3', 'domain3', 'TOPIC', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'Max', '', '', '', '', '', '', '', '');

View File

@ -1,5 +1,5 @@
export class Workbasket { export class Workbasket {
id: string; key: string;
created: string; created: string;
modified: string; modified: string;
name: string; name: string;

View File

@ -2,6 +2,6 @@ import { Injectable } from '@angular/core';
@Injectable() @Injectable()
export class DataService { export class DataService {
workbasketId: string; workbasketKey: string;
workbasketName: string; workbasketName: string;
} }

View File

@ -16,9 +16,9 @@ export class RestConnectorService {
.map(res => res.json()); .map(res => res.json());
} }
findTaskWithWorkbaskets(basketName: string): Observable<Task[]> { findTaskWithWorkbaskets(basketKey: string): Observable<Task[]> {
return this.http.get(environment.taskanaRestUrl + '/v1/tasks?workbasketid=' return this.http.get(environment.taskanaRestUrl + '/v1/tasks?workbasketkey='
+ basketName + '&state=READY&state=CLAIMED', this.createAuthorizationHeader()) + basketKey + '&state=READY&state=CLAIMED', this.createAuthorizationHeader())
.map(res => res.json()); .map(res => res.json());
} }
@ -37,9 +37,9 @@ export class RestConnectorService {
.map(res => res.json()); .map(res => res.json());
} }
transferTask(taskId: string, workbasketId: string) { transferTask(taskId: string, workbasketKey: string) {
return this.http.post(environment.taskanaRestUrl + '/v1/tasks/' + taskId return this.http.post(environment.taskanaRestUrl + '/v1/tasks/' + taskId
+ '/transfer/' + workbasketId, '', this.createAuthorizationHeader()) + '/transfer/' + workbasketKey, '', this.createAuthorizationHeader())
.map(res => res.json()); .map(res => res.json());
} }

View File

@ -17,7 +17,7 @@ export class TaskComponent implements OnInit {
link: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl('https://duckduckgo.com/?q='); link: SafeResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl('https://duckduckgo.com/?q=');
autoCompleteData: string[] = new Array; autoCompleteData: string[] = new Array;
workbasket: string = null; workbasket: string = null;
workbasketId: string; workbasketKey: string;
workbaskets: Workbasket[]; workbaskets: Workbasket[];
private sub: any; private sub: any;
@ -35,7 +35,7 @@ export class TaskComponent implements OnInit {
this.restConnectorService.getAllWorkBaskets().subscribe( w => { this.restConnectorService.getAllWorkBaskets().subscribe( w => {
this.workbaskets = w; this.workbaskets = w;
this.workbaskets.forEach(workbasket => { this.workbaskets.forEach(workbasket => {
if (workbasket.id !== this.task.workbasket) { if (workbasket.key !== this.task.workbasket) {
this.autoCompleteData.push(workbasket.name); this.autoCompleteData.push(workbasket.name);
} }
}); });
@ -47,10 +47,10 @@ export class TaskComponent implements OnInit {
if (this.workbasket) { if (this.workbasket) {
this.workbaskets.forEach(workbasket => { this.workbaskets.forEach(workbasket => {
if (workbasket.name === this.workbasket) { if (workbasket.name === this.workbasket) {
this.workbasketId = workbasket.id; this.workbasketKey = workbasket.key;
} }
}); });
this.restConnectorService.transferTask(this.task.id, this.workbasketId).subscribe( this.restConnectorService.transferTask(this.task.id, this.workbasketKey).subscribe(
task => {this.task = task}); task => {this.task = task});
this.router.navigate(['tasks/']); this.router.navigate(['tasks/']);
} }

View File

@ -15,7 +15,7 @@ export class SelectorComponent implements OnInit {
autoCompleteData: string[] = new Array; autoCompleteData: string[] = new Array;
result: string; result: string;
resultId: string; resultKey: string;
workbaskets: Workbasket[]; workbaskets: Workbasket[];
constructor(private restConnectorService: RestConnectorService, private dataService: DataService) { } constructor(private restConnectorService: RestConnectorService, private dataService: DataService) { }
@ -27,8 +27,8 @@ export class SelectorComponent implements OnInit {
this.autoCompleteData.push(workbasket.name); this.autoCompleteData.push(workbasket.name);
}); });
}); });
if (this.dataService.workbasketId) { if (this.dataService.workbasketKey) {
this.getTasks(this.dataService.workbasketId); this.getTasks(this.dataService.workbasketKey);
this.result = this.dataService.workbasketName; this.result = this.dataService.workbasketName;
} }
} }
@ -37,17 +37,17 @@ export class SelectorComponent implements OnInit {
if (this.workbaskets) { if (this.workbaskets) {
this.workbaskets.forEach(workbasket => { this.workbaskets.forEach(workbasket => {
if (workbasket.name === this.result) { if (workbasket.name === this.result) {
this.resultId = workbasket.id; this.resultKey = workbasket.key;
} }
}); });
this.getTasks(this.resultId); this.getTasks(this.resultKey);
this.dataService.workbasketId = this.resultId; this.dataService.workbasketKey = this.resultKey;
this.dataService.workbasketName = this.result; this.dataService.workbasketName = this.result;
} }
} }
getTasks(id: string) { getTasks(workbasketKey: string) {
this.restConnectorService.findTaskWithWorkbaskets(id).subscribe( this.restConnectorService.findTaskWithWorkbaskets(workbasketKey).subscribe(
tasks2 => {this.tasks.next(tasks2)}); tasks2 => {this.tasks.next(tasks2)});
} }
} }