diff --git a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java index d5507741a..d990944ab 100644 --- a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java +++ b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java @@ -37,6 +37,7 @@ public class TaskanaRestTest { workbasket.setName("wb"); taskanaEjb.getWorkbasketService().createWorkbasket(workbasket); Classification classification = classificationService.newClassification(); + classification.setKey("TEST"); taskanaEjb.getClassificationService().createClassification(classification); Task task = new Task(); diff --git a/lib/taskana-core/src/main/java/pro/taskana/Classification.java b/lib/taskana-core/src/main/java/pro/taskana/Classification.java index 6998f6b5e..ae4fef425 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/Classification.java +++ b/lib/taskana-core/src/main/java/pro/taskana/Classification.java @@ -37,8 +37,8 @@ public interface Classification { * Set/Change a reference to the current parent classification via ID. If this field would be set to NULL the * classification will become a parent-classification itself. * - * @param parentClassificationId - * TODO + * @param parentClassificationKey + * The key of the parent classification. */ void setParentClassificationKey(String parentClassificationKey); @@ -176,6 +176,9 @@ public interface Classification { /** * Set the logical name of the associated application entry point. + * + * @param applicationEntryPoint + * TODO */ void setApplicationEntryPoint(String applicationEntryPoint); diff --git a/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java b/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java index 56d29de1a..e732b6896 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java +++ b/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java @@ -8,12 +8,20 @@ import java.util.Date; public interface ClassificationQuery extends BaseQuery { /** - * Add your parentClassification to your query. - * @param parentClassificationId + * Add your key to your query. + * @param key + * as String + * @return the query + */ + ClassificationQuery key(String... key); + + /** + * Add your parentClassificationKey to your query. + * @param parentClassificationKey * as String * @return the query */ - ClassificationQuery parentClassification(String... parentClassificationId); + ClassificationQuery parentClassificationKey(String... parentClassificationKey); /** * Add your category to your query. @@ -85,6 +93,13 @@ public interface ClassificationQuery extends BaseQuery { */ ClassificationQuery serviceLevel(String... serviceLevel); + /** + * Add your applicationEntryPoint to your query. + * @param applicationEntryPoint TODO + * @return the query + */ + ClassificationQuery applicationEntryPoint(String... applicationEntryPoint); + /** * Add your customFields to your query. * @param customFields TODO diff --git a/lib/taskana-core/src/main/java/pro/taskana/ClassificationService.java b/lib/taskana-core/src/main/java/pro/taskana/ClassificationService.java index 9fdf6e784..b0e956134 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationService.java +++ b/lib/taskana-core/src/main/java/pro/taskana/ClassificationService.java @@ -19,23 +19,23 @@ public interface ClassificationService { List getClassificationTree() throws NotAuthorizedException; /** - * Get all Classifications with the given id. + * Get all Classifications with the given key. * Returns also older and domain-specific versions of the classification. * - * @param id TODO + * @param key TODO * @param domain TODO * @return List with all versions of the Classification */ - List getAllClassificationsWithId(String id, String domain); + List getAllClassificationsWithKey(String key, String domain); /** - * Get the Classification for id and domain. - * @param id TODO + * Get the Classification for key and domain. If there's no specification for the given domain, it returns the root domain. + * @param key TODO * @param domain TODO - * @return If exist: domain-specific classification, else default classification + * @return If exist: domain-specific classification, else root classification * @throws ClassificationNotFoundException TODO */ - Classification getClassification(String id, String domain) throws ClassificationNotFoundException; + Classification getClassification(String key, String domain) throws ClassificationNotFoundException; /** * Persist a new classification. If the classification does diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java index 06f689d9a..3192f7eaa 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationQueryImpl.java @@ -22,7 +22,8 @@ public class ClassificationQueryImpl implements ClassificationQuery { private static final String LINK_TO_MAPPER = "pro.taskana.model.mappings.QueryMapper.queryClassification"; private static final Logger LOGGER = LoggerFactory.getLogger(ClassificationQueryImpl.class); private TaskanaEngineImpl taskanaEngineImpl; - private String[] parentClassificationId; + private String[] key; + private String[] parentClassificationKey; private String[] category; private String[] type; private String[] domain; @@ -36,13 +37,23 @@ public class ClassificationQueryImpl implements ClassificationQuery { private Date[] validFrom; private Date[] validUntil; + + private String[] applicationEntryPoint; + + public ClassificationQueryImpl(TaskanaEngine taskanaEngine) { this.taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine; } @Override - public ClassificationQuery parentClassification(String... parentClassificationId) { - this.parentClassificationId = parentClassificationId; + public ClassificationQuery key(String... key) { + this.key = key; + return this; + } + + @Override + public ClassificationQuery parentClassificationKey(String... parentClassificationKey) { + this.parentClassificationKey = parentClassificationKey; return this; } @@ -100,6 +111,12 @@ public class ClassificationQueryImpl implements ClassificationQuery { return this; } + @Override + public ClassificationQuery applicationEntryPoint(String... applicationEntryPoint) { + this.applicationEntryPoint = applicationEntryPoint; + return this; + } + @Override public ClassificationQuery customFields(String... customFields) { this.customFields = customFields; @@ -167,12 +184,20 @@ public class ClassificationQueryImpl implements ClassificationQuery { } } - public String[] getParentClassificationId() { - return parentClassificationId; + public String[] getKey() { + return key; } - public void setParentClassificationId(String[] parentClassificationId) { - this.parentClassificationId = parentClassificationId; + public void setKey(String[] key) { + this.key = key; + } + + public String[] getParentClassificationKey() { + return parentClassificationKey; + } + + public void setParentClassificationKey(String[] parentClassificationKey) { + this.parentClassificationKey = parentClassificationKey; } public String[] getCategory() { @@ -247,6 +272,14 @@ public class ClassificationQueryImpl implements ClassificationQuery { this.created = created; } + public String[] getApplicationEntryPoint() { + return applicationEntryPoint; + } + + public void setApplicationEntryPoint(String[] applicationEntryPoint) { + this.applicationEntryPoint = applicationEntryPoint; + } + public String[] getCustomFields() { return customFields; } @@ -276,8 +309,8 @@ public class ClassificationQueryImpl implements ClassificationQuery { StringBuilder builder = new StringBuilder(); builder.append("ClassificationQueryImpl [taskanaEngineImpl="); builder.append(taskanaEngineImpl); - builder.append(", parentClassificationId="); - builder.append(Arrays.toString(parentClassificationId)); + builder.append(", parentClassificationKey="); + builder.append(Arrays.toString(parentClassificationKey)); builder.append(", category="); builder.append(Arrays.toString(category)); builder.append(", type="); diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java index c2a11aeb1..781f8d3dd 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java @@ -5,6 +5,7 @@ import java.time.Duration; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,7 +51,7 @@ public class ClassificationServiceImpl implements ClassificationService { taskanaEngineImpl.openConnection(); List rootClassifications; rootClassifications = this.createClassificationQuery() - .parentClassification("") + .parentClassificationKey("") .validUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL) .list(); rootClassifications = this.populateChildClassifications(rootClassifications); @@ -72,7 +73,7 @@ public class ClassificationServiceImpl implements ClassificationService { List children = new ArrayList<>(); for (Classification classification : classifications) { List childClassifications = this.createClassificationQuery() - .parentClassification(classification.getId()) + .parentClassificationKey(classification.getKey()) .validUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL) .list(); children.addAll(populateChildClassifications(childClassifications)); @@ -87,13 +88,15 @@ public class ClassificationServiceImpl implements ClassificationService { @Override public void createClassification(Classification classification) throws ClassificationAlreadyExistException { LOGGER.debug("entry to createClassification(classification = {})", classification); + Date date = Date.valueOf(LocalDate.now()); try { taskanaEngineImpl.openConnection(); ClassificationImpl classificationImpl = (ClassificationImpl) classification; - this.setDefaultValues(classificationImpl); + classificationImpl.setCreated(date); + this.validateClassification(classificationImpl); Classification oldClassification; try { - oldClassification = this.getClassification(classificationImpl.getId(), classificationImpl.getDomain()); + oldClassification = this.getClassification(classificationImpl.getKey(), classificationImpl.getDomain()); } catch (ClassificationNotFoundException e) { oldClassification = null; } @@ -107,7 +110,7 @@ public class ClassificationServiceImpl implements ClassificationService { LOGGER.debug("Method createClassification created classification {}.", classification); } } else { - throw new ClassificationAlreadyExistException(classificationImpl.getId()); + throw new ClassificationAlreadyExistException(classificationImpl.getKey()); } } finally { taskanaEngineImpl.returnConnection(); @@ -121,32 +124,21 @@ public class ClassificationServiceImpl implements ClassificationService { try { taskanaEngineImpl.openConnection(); ClassificationImpl classificationImpl = (ClassificationImpl) classification; - this.setDefaultValues(classificationImpl); + this.validateClassification(classificationImpl); ClassificationImpl oldClassification = null; try { - oldClassification = (ClassificationImpl) this.getClassification(classificationImpl.getId(), - classificationImpl.getDomain()); + oldClassification = (ClassificationImpl) this.getClassification(classificationImpl.getKey(), classificationImpl.getDomain()); LOGGER.debug("Method updateClassification() inserted classification {}.", classificationImpl); - if (oldClassification == null) { - throw new ClassificationNotFoundException( - "Classification not found. ID: " + classificationImpl.getId()); - } // ! If you update an classification twice the same day, // the older version is valid from today until yesterday. if (!oldClassification.getDomain().equals(classificationImpl.getDomain())) { - classificationImpl.setCreated(Date.valueOf(LocalDate.now())); - classificationMapper.insert(classificationImpl); - LOGGER.debug("Method updateClassification() inserted classification {}.", classification); + addClassificationToDomain(classificationImpl); } else { - oldClassification.setValidUntil(Date.valueOf(LocalDate.now().minusDays(1))); - classificationMapper.update(oldClassification); - classificationMapper.insert(classificationImpl); - LOGGER.debug("Method updateClassification() updated old classification {} and inserted new {}.", - oldClassification, classificationImpl); + updateExistingClassification(oldClassification, classificationImpl); } } catch (ClassificationNotFoundException e) { - classificationImpl.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); + classificationImpl.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); //TODO classificationImpl.setCreated(Date.valueOf(LocalDate.now())); classificationMapper.insert(classificationImpl); LOGGER.debug("Method updateClassification() inserted classification {}.", classificationImpl); @@ -157,7 +149,13 @@ public class ClassificationServiceImpl implements ClassificationService { } } - private void setDefaultValues(ClassificationImpl classification) { + /** + * Fill missing values and validate classification before saving the classification. + * @param classification + */ + private void validateClassification(ClassificationImpl classification) throws IllegalStateException { + classification.setId(UUID.randomUUID().toString()); + classification.setValidFrom(Date.valueOf(LocalDate.now())); classification.setValidUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL); @@ -173,8 +171,8 @@ public class ClassificationServiceImpl implements ClassificationService { } } - if (classification.getId() == null) { - classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); + if (classification.getKey() == null) { + throw new IllegalStateException("Classification must contain a key"); } if (classification.getParentClassificationKey() == null) { @@ -186,13 +184,36 @@ public class ClassificationServiceImpl implements ClassificationService { } } + /** + * Add a new Classification if this Classification Key is not yet specified for this domain. + * @param classification + */ + private void addClassificationToDomain(ClassificationImpl classification) { + classification.setCreated(Date.valueOf(LocalDate.now())); + classificationMapper.insert(classification); + LOGGER.debug("Method updateClassification() inserted classification {}.", classification); + } + + /** + * Set the validUntil-Date of the oldClassification to yesterday and inserts the new Classification. + * @param oldClassification + * @param newClassification + */ + private void updateExistingClassification(ClassificationImpl oldClassification, ClassificationImpl newClassification) { + oldClassification.setValidUntil(Date.valueOf(LocalDate.now().minusDays(1))); + classificationMapper.update(oldClassification); + classificationMapper.insert(newClassification); + LOGGER.debug("Method updateClassification() updated old classification {} and inserted new {}.", + oldClassification, newClassification); + } + @Override - public List getAllClassificationsWithId(String id, String domain) { - LOGGER.debug("entry to getAllClassificationsWithId(id = {}, domain = {})", id, domain); + public List getAllClassificationsWithKey(String key, String domain) { + LOGGER.debug("entry to getAllClassificationsWithKey(key = {}, domain = {})", key, domain); List result = null; try { taskanaEngineImpl.openConnection(); - List classifications = classificationMapper.getAllClassificationsWithId(id, domain); + List classifications = classificationMapper.getAllClassificationsWithKey(key, domain); List results = new ArrayList<>(); classifications.stream().forEach(c -> results.add((Classification) c)); return results; @@ -200,27 +221,27 @@ public class ClassificationServiceImpl implements ClassificationService { taskanaEngineImpl.returnConnection(); if (LOGGER.isDebugEnabled()) { int numberOfResultObjects = result == null ? 0 : result.size(); - LOGGER.debug("exit from getAllClassificationsWithId(). Returning {} resulting Objects: {} ", + LOGGER.debug("exit from getAllClassificationsWithKey(). Returning {} resulting Objects: {} ", numberOfResultObjects, LoggerUtils.listToString(result)); } } } @Override - public Classification getClassification(String id, String domain) throws ClassificationNotFoundException { - if (id == null) { + public Classification getClassification(String key, String domain) throws ClassificationNotFoundException { + if (key == null) { throw new ClassificationNotFoundException(null); } - LOGGER.debug("entry to getClassification(id = {}, domain = {})", id, domain); + LOGGER.debug("entry to getClassification(key = {}, domain = {})", key, domain); Classification result = null; try { taskanaEngineImpl.openConnection(); - result = classificationMapper.findByIdAndDomain(id, domain, CURRENT_CLASSIFICATIONS_VALID_UNTIL); + result = classificationMapper.findByKeyAndDomain(key, domain, CURRENT_CLASSIFICATIONS_VALID_UNTIL); if (result == null) { - result = classificationMapper.findByIdAndDomain(id, "", CURRENT_CLASSIFICATIONS_VALID_UNTIL); + result = classificationMapper.findByKeyAndDomain(key, "", CURRENT_CLASSIFICATIONS_VALID_UNTIL); } if (result == null) { - throw new ClassificationNotFoundException(id); + throw new ClassificationNotFoundException(key); } return result; @@ -237,10 +258,7 @@ public class ClassificationServiceImpl implements ClassificationService { @Override public Classification newClassification() { - Date date = Date.valueOf(LocalDate.now()); ClassificationImpl classification = new ClassificationImpl(); - this.setDefaultValues(classification); - classification.setCreated(date); return classification; } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java index 6da9bf98a..ed5ee39f9 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/TaskServiceImpl.java @@ -147,7 +147,7 @@ public class TaskServiceImpl implements TaskService { if (classification == null) { throw new ClassificationNotFoundException(null); } - taskanaEngine.getClassificationService().getClassification(classification.getId(), ""); + taskanaEngine.getClassificationService().getClassification(classification.getKey(), ""); standardSettings(task); diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/ClassificationImpl.java b/lib/taskana-core/src/main/java/pro/taskana/model/ClassificationImpl.java index c43864857..6902f5e89 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/ClassificationImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/ClassificationImpl.java @@ -284,6 +284,8 @@ public class ClassificationImpl implements Classification { StringBuilder builder = new StringBuilder(); builder.append("Classification [id="); builder.append(id); + builder.append(", key="); + builder.append(key); builder.append(", parentClassificationId="); builder.append(parentClassificationKey); builder.append(", category="); @@ -304,6 +306,8 @@ public class ClassificationImpl implements Classification { builder.append(priority); builder.append(", serviceLevel="); builder.append(serviceLevel); + builder.append(", applicationEntryPoint="); + builder.append(applicationEntryPoint); builder.append(", custom1="); builder.append(custom1); builder.append(", custom2="); diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/TaskSummary.java b/lib/taskana-core/src/main/java/pro/taskana/model/TaskSummary.java index c94915ef5..73e7c2dbe 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/TaskSummary.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/TaskSummary.java @@ -10,7 +10,7 @@ public class TaskSummary { private String taskName; private String workbasketId; private String workbasketName; - private String classificationId; + private String classificationKey; private String classificationName; public String getTaskId() { @@ -37,11 +37,11 @@ public class TaskSummary { public void setWorkbasketName(String workbasketName) { this.workbasketName = workbasketName; } - public String getClassificationId() { - return classificationId; + public String getClassificationKey() { + return classificationKey; } - public void setClassificationId(String classificationId) { - this.classificationId = classificationId; + public void setClassificationKey(String classificationKey) { + this.classificationKey = classificationKey; } public String getClassificationName() { return classificationName; @@ -54,7 +54,7 @@ public class TaskSummary { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((classificationId == null) ? 0 : classificationId.hashCode()); + result = prime * result + ((classificationKey == null) ? 0 : classificationKey.hashCode()); result = prime * result + ((classificationName == null) ? 0 : classificationName.hashCode()); result = prime * result + ((taskId == null) ? 0 : taskId.hashCode()); result = prime * result + ((taskName == null) ? 0 : taskName.hashCode()); @@ -75,11 +75,11 @@ public class TaskSummary { return false; } TaskSummary other = (TaskSummary) obj; - if (classificationId == null) { - if (other.classificationId != null) { + if (classificationKey == null) { + if (other.classificationKey != null) { return false; } - } else if (!classificationId.equals(other.classificationId)) { + } else if (!classificationKey.equals(other.classificationKey)) { return false; } if (classificationName == null) { @@ -123,7 +123,7 @@ public class TaskSummary { @Override public String toString() { return "TaskSummary [taskId=" + taskId + ", taskName=" + taskName + ", workbasketId=" + workbasketId - + ", workbasketName=" + workbasketName + ", classificationId=" + classificationId + + ", workbasketName=" + workbasketName + ", classificationKey=" + classificationKey + ", classificationName=" + classificationName + "]"; } } diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/ClassificationMapper.java b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/ClassificationMapper.java index 878aa90b6..21f99cdc7 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/ClassificationMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/ClassificationMapper.java @@ -19,9 +19,39 @@ public interface ClassificationMapper { String VALID_UNTIL = "9999-12-31"; + @Select("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 " + + "WHERE KEY = #{key}" + + "AND DOMAIN = ''" + + "AND VALID_UNTIL = VALID_UNTIL") + @Results({ @Result(property = "id", column = "ID"), + @Result(property = "key", column = "KEY"), + @Result(property = "parentClassificationKey", column = "PARENT_CLASSIFICATION_KEY"), + @Result(property = "category", column = "CATEGORY"), + @Result(property = "type", column = "TYPE"), + @Result(property = "domain", column = "DOMAIN"), + @Result(property = "isValidInDomain", column = "VALID_IN_DOMAIN"), + @Result(property = "created", column = "CREATED"), + @Result(property = "name", column = "NAME"), + @Result(property = "description", column = "DESCRIPTION"), + @Result(property = "priority", column = "PRIORITY"), + @Result(property = "serviceLevel", column = "SERVICE_LEVEL"), + @Result(property = "applicationEntryPoint", column = "APPLICATION_ENTRY_POINT"), + @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 = "validFrom", column = "VALID_FROM"), + @Result(property = "validUntil", column = "VALID_UNTIL") }) + ClassificationImpl findByKeyRootDomain(@Param("key") String key); + @Select("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 " - + "WHERE ID = #{id}" + + "WHERE KEY = #{key}" + "AND DOMAIN = #{domain}" + "AND VALID_UNTIL = #{valid_until}") @Results({ @Result(property = "id", column = "ID"), @@ -47,13 +77,12 @@ public interface ClassificationMapper { @Result(property = "custom8", column = "CUSTOM_8"), @Result(property = "validFrom", column = "VALID_FROM"), @Result(property = "validUntil", column = "VALID_UNTIL") }) - ClassificationImpl findByIdAndDomain(@Param("id") String id, @Param("domain") String domain, - @Param("valid_until") Date validUntil); + ClassificationImpl findByKeyAndDomain(@Param("key") String key, @Param("domain") String domain, + @Param("valid_until") Date validUntil); @Select("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 " - + "WHERE ID = #{id} " - + "AND VALID_UNTIL = '" + VALID_UNTIL + "'") + + "WHERE ID = #{id} ") @Results({ @Result(property = "id", column = "ID"), @Result(property = "key", column = "KEY"), @Result(property = "parentClassificationKey", column = "PARENT_CLASSIFICATION_KEY"), @@ -83,13 +112,13 @@ public interface ClassificationMapper { void insert(@Param("classification") ClassificationImpl classification); @Update( - value = "UPDATE CLASSIFICATION SET KEY = #{classification.key}, PARENT_CLASSIFICATION_KEY = #{classification.parentClassificationKey}, CATEGORY = #{classification.category}, TYPE = #{classification.type}, NAME = #{classification.name}, DESCRIPTION = #{classification.description}, PRIORITY = #{classification.priority}, SERVICE_LEVEL = #{classification.serviceLevel}, APPLICATION_ENTRY_POINT = #{classification.applicationEntryPoint}, DOMAIN = #{classification.domain}, VALID_IN_DOMAIN = #{classification.isValidInDomain}, CUSTOM_1 = #{classification.custom1}, CUSTOM_2 = #{classification.custom2}, CUSTOM_3 = #{classification.custom3}, CUSTOM_4 = #{classification.custom4}, CUSTOM_5 = #{classification.custom5}, CUSTOM_6 = #{classification.custom6}, CUSTOM_7 = #{classification.custom7}, CUSTOM_8 = #{classification.custom8}, VALID_FROM = #{classification.validFrom}, VALID_UNTIL = #{classification.validUntil} WHERE ID = #{classification.id}") + value = "UPDATE CLASSIFICATION SET KEY = #{classification.key}, PARENT_CLASSIFICATION_KEY = #{classification.parentClassificationKey}, CATEGORY = #{classification.category}, TYPE = #{classification.type}, NAME = #{classification.name}, DESCRIPTION = #{classification.description}, PRIORITY = #{classification.priority}, SERVICE_LEVEL = #{classification.serviceLevel}, DOMAIN = #{classification.domain}, VALID_IN_DOMAIN = #{classification.isValidInDomain}, APPLICATION_ENTRY_POINT = #{classification.applicationEntryPoint}, CUSTOM_1 = #{classification.custom1}, CUSTOM_2 = #{classification.custom2}, CUSTOM_3 = #{classification.custom3}, CUSTOM_4 = #{classification.custom4}, CUSTOM_5 = #{classification.custom5}, CUSTOM_6 = #{classification.custom6}, CUSTOM_7 = #{classification.custom7}, CUSTOM_8 = #{classification.custom8}, VALID_FROM = #{classification.validFrom}, VALID_UNTIL = #{classification.validUntil} WHERE ID = #{classification.id}") void update(@Param("classification") ClassificationImpl classification); @Select("") @@ -116,5 +145,5 @@ public interface ClassificationMapper { @Result(property = "custom8", column = "CUSTOM_8"), @Result(property = "validFrom", column = "VALID_FROM"), @Result(property = "validUntil", column = "VALID_UNTIL") }) - List getAllClassificationsWithId(@Param("id") String id, @Param("domain") String domain); + List getAllClassificationsWithKey(@Param("key") String key, @Param("domain") String domain); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java index 1a1f18e5a..8464cb920 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/mappings/QueryMapper.java @@ -23,13 +23,13 @@ import pro.taskana.model.Workbasket; public interface QueryMapper { String OBJECTREFERENCEMAPPER_FINDBYID = "pro.taskana.model.mappings.ObjectReferenceMapper.findById"; - String CLASSIFICATION_FINDBYIDANDDOMAIN = "pro.taskana.model.mappings.ClassificationMapper.findByIdAndDomain"; + String CLASSIFICATION_FINDBYIDANDDOMAIN = "pro.taskana.model.mappings.ClassificationMapper.findByKeyAndDomain"; String CLASSIFICATION_FINDBYID = "pro.taskana.model.mappings.ClassificationMapper.findById"; - @Select("