diff --git a/lib/taskana-core/src/main/java/org/taskana/ClassificationService.java b/lib/taskana-core/src/main/java/org/taskana/ClassificationService.java index d183a5720..7c62a342b 100644 --- a/lib/taskana-core/src/main/java/org/taskana/ClassificationService.java +++ b/lib/taskana-core/src/main/java/org/taskana/ClassificationService.java @@ -1,9 +1,9 @@ package org.taskana; -import org.taskana.model.Classification; - import java.util.List; +import org.taskana.model.Classification; + public interface ClassificationService { /** @@ -25,7 +25,7 @@ public interface ClassificationService { /** * Get a Classification for a given id * - * @param id + * @param id * @return the requested Classification */ public Classification selectClassificationById(String id); diff --git a/lib/taskana-core/src/main/java/org/taskana/TaskService.java b/lib/taskana-core/src/main/java/org/taskana/TaskService.java index 76e1fd00d..55b63d4c6 100644 --- a/lib/taskana-core/src/main/java/org/taskana/TaskService.java +++ b/lib/taskana-core/src/main/java/org/taskana/TaskService.java @@ -7,8 +7,8 @@ import org.taskana.exceptions.TaskNotFoundException; import org.taskana.exceptions.WorkbasketNotFoundException; import org.taskana.model.DueWorkbasketCounter; import org.taskana.model.Task; -import org.taskana.model.TaskStateCounter; import org.taskana.model.TaskState; +import org.taskana.model.TaskStateCounter; public interface TaskService { diff --git a/lib/taskana-core/src/main/java/org/taskana/impl/ClassificationServiceImpl.java b/lib/taskana-core/src/main/java/org/taskana/impl/ClassificationServiceImpl.java index ac385ffba..96e0ac6d8 100644 --- a/lib/taskana-core/src/main/java/org/taskana/impl/ClassificationServiceImpl.java +++ b/lib/taskana-core/src/main/java/org/taskana/impl/ClassificationServiceImpl.java @@ -1,18 +1,21 @@ package org.taskana.impl; +import java.sql.Date; +import java.time.Duration; +import java.time.LocalDate; +import java.util.List; + import org.taskana.ClassificationService; +import org.taskana.impl.util.IdGenerator; import org.taskana.model.Classification; import org.taskana.model.mappings.ClassificationMapper; -import java.sql.Date; -import java.time.LocalDate; -import java.util.List; -import java.util.UUID; - public class ClassificationServiceImpl implements ClassificationService { + + private static final String ID_PREFIX_CLASSIFICATION = "CLI"; private ClassificationMapper classificationMapper; - + public ClassificationServiceImpl(ClassificationMapper classificationMapper) { super(); this.classificationMapper = classificationMapper; @@ -40,7 +43,7 @@ public class ClassificationServiceImpl implements ClassificationService { @Override public void insertClassification(Classification classification) { - classification.setId(UUID.randomUUID().toString()); + classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); classification.setCreated(Date.valueOf(LocalDate.now())); classification.setModified(Date.valueOf(LocalDate.now())); this.checkServiceLevel(classification); @@ -61,11 +64,11 @@ public class ClassificationServiceImpl implements ClassificationService { return classificationMapper.findById(id); } - private void checkServiceLevel(Classification classification){ - if(classification.getServiceLevel()!= null){ + private void checkServiceLevel(Classification classification) { + if (classification.getServiceLevel() != null) { try { - java.time.Duration.parse(classification.getServiceLevel()); - } catch (Exception e){ + Duration.parse(classification.getServiceLevel()); + } catch (Exception e) { throw new IllegalArgumentException("Invalid timestamp. Please use the format 'PddDThhHmmM'"); } } diff --git a/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java index 367e79255..c2f1eb0eb 100644 --- a/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/org/taskana/impl/TaskServiceImpl.java @@ -5,7 +5,6 @@ import java.sql.Timestamp; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; -import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,6 +13,7 @@ import org.taskana.TaskanaEngine; import org.taskana.exceptions.NotAuthorizedException; import org.taskana.exceptions.TaskNotFoundException; import org.taskana.exceptions.WorkbasketNotFoundException; +import org.taskana.impl.util.IdGenerator; import org.taskana.model.DueWorkbasketCounter; import org.taskana.model.ObjectReference; import org.taskana.model.Task; @@ -26,6 +26,9 @@ import org.taskana.model.mappings.TaskMapper; public class TaskServiceImpl implements TaskService { private static final Logger logger = LoggerFactory.getLogger(TaskServiceImpl.class); + + private static final String ID_PREFIX_OBJECTR_EFERENCE = "ORI"; + private static final String ID_PREFIX_TASK = "TKI"; private TaskanaEngine taskanaEngine; private TaskMapper taskMapper; @@ -74,25 +77,25 @@ public class TaskServiceImpl implements TaskService { taskanaEngine.getWorkbasketService().checkAuthorization(task.getWorkbasketId(), WorkbasketAuthorization.APPEND); Timestamp now = new Timestamp(System.currentTimeMillis()); - task.setId(UUID.randomUUID().toString()); + task.setId(IdGenerator.generateWithPrefix(ID_PREFIX_TASK)); task.setState(TaskState.READY); task.setCreated(now); task.setModified(now); task.setRead(false); task.setTransferred(false); - + // insert ObjectReference if needed. if (task.getPrimaryObjRef() != null) { ObjectReference objectReference = this.objectReferenceMapper.findByObjectReference(task.getPrimaryObjRef()); if (objectReference == null) { objectReference = task.getPrimaryObjRef(); - objectReference.setId(UUID.randomUUID().toString()); + objectReference.setId(IdGenerator.generateWithPrefix(ID_PREFIX_OBJECTR_EFERENCE)); this.objectReferenceMapper.insert(objectReference); } task.setPrimaryObjRef(objectReference); } this.taskMapper.insert(task); - + logger.debug("Task '{}' created.", task.getId()); return task; } @@ -157,7 +160,7 @@ public class TaskServiceImpl implements TaskService { // transfer requires TRANSFER in source and APPEND on destination // workbasket taskanaEngine.getWorkbasketService().checkAuthorization(destinationWorkbasketId, WorkbasketAuthorization.APPEND); - taskanaEngine.getWorkbasketService().checkAuthorization(task.getWorkbasketId(), WorkbasketAuthorization.TRANSFER); + taskanaEngine.getWorkbasketService().checkAuthorization(task.getWorkbasketId(), WorkbasketAuthorization.TRANSFER); // if security is disabled, the implicit existance check on the // destination workbasket has been skipped and needs to be performed @@ -173,7 +176,7 @@ public class TaskServiceImpl implements TaskService { task.setWorkbasketId(destinationWorkbasketId); task.setModified(Timestamp.valueOf(LocalDateTime.now())); taskMapper.update(task); - + return getTaskById(taskId); } diff --git a/lib/taskana-core/src/main/java/org/taskana/impl/WorkbasketServiceImpl.java b/lib/taskana-core/src/main/java/org/taskana/impl/WorkbasketServiceImpl.java index a23d6e06b..6ca217c00 100644 --- a/lib/taskana-core/src/main/java/org/taskana/impl/WorkbasketServiceImpl.java +++ b/lib/taskana-core/src/main/java/org/taskana/impl/WorkbasketServiceImpl.java @@ -2,7 +2,6 @@ package org.taskana.impl; import java.sql.Timestamp; import java.util.List; -import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,6 +9,7 @@ import org.taskana.TaskanaEngine; import org.taskana.WorkbasketService; import org.taskana.exceptions.NotAuthorizedException; import org.taskana.exceptions.WorkbasketNotFoundException; +import org.taskana.impl.util.IdGenerator; import org.taskana.model.Workbasket; import org.taskana.model.WorkbasketAccessItem; import org.taskana.model.WorkbasketAuthorization; @@ -21,6 +21,9 @@ import org.taskana.security.CurrentUserContext; public class WorkbasketServiceImpl implements WorkbasketService { private static final Logger logger = LoggerFactory.getLogger(WorkbasketServiceImpl.class); + + private static final String ID_PREFIX_WORKBASKET = "WBI"; + private static final String ID_PREFIX_WORKBASKET_AUTHORIZATION = "WAI"; private TaskanaEngine taskanaEngine; @@ -64,7 +67,7 @@ public class WorkbasketServiceImpl implements WorkbasketService { workbasket.setCreated(now); workbasket.setModified(now); if (workbasket.getId() == null || workbasket.getId().isEmpty()) { - workbasket.setId(UUID.randomUUID().toString()); + workbasket.setId(IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET)); } workbasketMapper.insert(workbasket); logger.debug("Workbasket '{}' created", workbasket.getId()); @@ -106,7 +109,7 @@ public class WorkbasketServiceImpl implements WorkbasketService { @Override public WorkbasketAccessItem createWorkbasketAuthorization(WorkbasketAccessItem workbasketAccessItem) { - workbasketAccessItem.setId(UUID.randomUUID().toString()); + workbasketAccessItem.setId(IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_AUTHORIZATION)); workbasketAccessMapper.insert(workbasketAccessItem); return workbasketAccessItem; } diff --git a/lib/taskana-core/src/main/java/org/taskana/impl/util/IdGenerator.java b/lib/taskana-core/src/main/java/org/taskana/impl/util/IdGenerator.java new file mode 100644 index 000000000..58a87e235 --- /dev/null +++ b/lib/taskana-core/src/main/java/org/taskana/impl/util/IdGenerator.java @@ -0,0 +1,13 @@ +package org.taskana.impl.util; + +import java.util.UUID; + +public class IdGenerator { + + private static final String SEPERATOR = ":"; + + public static String generateWithPrefix(String prefix) { + return new StringBuilder().append(prefix).append(SEPERATOR).append(UUID.randomUUID().toString()).toString(); + } + +} diff --git a/lib/taskana-core/src/main/resources/sql/taskana-schema.sql b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql index dfe1775fa..6c26f7050 100644 --- a/lib/taskana-core/src/main/resources/sql/taskana-schema.sql +++ b/lib/taskana-core/src/main/resources/sql/taskana-schema.sql @@ -1,13 +1,13 @@ CREATE TABLE TASKANA_SCHEMA_VERSION( - ID VARCHAR(36) NOT NULL, + ID CHAR(40) NOT NULL, VERSION VARCHAR(255) NOT NULL, PRIMARY KEY (ID) ); INSERT INTO TASKANA_SCHEMA_VERSION VALUES ('1', '0.0.1'); CREATE TABLE TASK( - ID VARCHAR(36) NOT NULL, - TENANT_ID VARCHAR(36) NULL, + ID CHAR(40) NOT NULL, + TENANT_ID VARCHAR(32) NULL, CREATED TIMESTAMP NULL, CLAIMED TIMESTAMP NULL, COMPLETED TIMESTAMP NULL, @@ -19,17 +19,17 @@ CREATE TABLE TASK( PRIORITY INT NULL, STATE VARCHAR(20) NULL, TYPE VARCHAR(255) NULL, - WORKBASKETID VARCHAR(36) NULL, + WORKBASKETID CHAR(40) NULL, OWNER VARCHAR(255) NULL, - PRIMARY_OBJ_REF_ID varchar(36) NULL, + PRIMARY_OBJ_REF_ID CHAR(40) NULL, IS_READ BOOLEAN NOT NULL, IS_TRANSFERRED BOOLEAN NOT NULL, PRIMARY KEY (ID) ); CREATE TABLE WORKBASKET( - ID VARCHAR(36) NOT NULL, - TENANT_ID VARCHAR(36) NULL, + ID CHAR(40) NOT NULL, + TENANT_ID VARCHAR(32) NULL, CREATED TIMESTAMP NULL, MODIFIED TIMESTAMP NULL, NAME VARCHAR(255) NOT NULL, @@ -40,14 +40,14 @@ CREATE TABLE WORKBASKET( ); CREATE TABLE DISTRIBUTION_TARGETS( - SOURCE_ID VARCHAR(36) NOT NULL, - TARGET_ID VARCHAR(36) NOT NULL, + SOURCE_ID CHAR(40) NOT NULL, + TARGET_ID CHAR(40) NOT NULL, PRIMARY KEY (SOURCE_ID, TARGET_ID) ); CREATE TABLE CLASSIFICATION( - ID VARCHAR(36) NOT NULL, - TENANT_ID VARCHAR(36) NULL, + ID CHAR(40) NOT NULL, + TENANT_ID VARCHAR(32) NULL, PARENT_CLASSIFICATION_ID VARCHAR(255), CATEGORY VARCHAR(255), TYPE VARCHAR(255), @@ -61,8 +61,8 @@ CREATE TABLE CLASSIFICATION( ); CREATE TABLE WORKBASKET_ACCESS_LIST( - ID VARCHAR(36) NOT NULL, - WORKBASKET_ID VARCHAR(36) NOT NULL, + ID CHAR(40) NOT NULL, + WORKBASKET_ID CHAR(40) NOT NULL, USER_ID VARCHAR(255) NULL, GROUP_ID VARCHAR(255) NULL, READ BOOLEAN NOT NULL, @@ -72,3 +72,13 @@ CREATE TABLE WORKBASKET_ACCESS_LIST( DISTRIBUTE BOOLEAN NOT NULL, PRIMARY KEY (ID) ); + +CREATE TABLE OBJECT_REFERENCE( + ID CHAR(40) NOT NULL, + TENANT_ID VARCHAR(32) NULL, + COMPANY VARCHAR(32) NOT NULL, + SYSTEM VARCHAR(32) NOT NULL, + SYSTEM_INSTANCE VARCHAR(32) NOT NULL, + TYPE VARCHAR(32) NOT NULL, + VALUE VARCHAR(128) NOT NULL +);