From 091ed6b95f9ac673ad7d91210981750450185fd6 Mon Sep 17 00:00:00 2001 From: Marcel Lengl <52546181+LenglBoy@users.noreply.github.com> Date: Mon, 19 Feb 2018 10:37:05 +0100 Subject: [PATCH] TSK-282: Add parentId to Classification-Summary. Changed parent_KEY to ID. --- .../main/java/pro/taskana/Classification.java | 14 ++--- .../java/pro/taskana/ClassificationQuery.java | 8 +-- .../pro/taskana/ClassificationSummary.java | 7 +++ .../pro/taskana/impl/ClassificationImpl.java | 15 ++--- .../taskana/impl/ClassificationQueryImpl.java | 14 ++--- .../impl/ClassificationServiceImpl.java | 14 +++-- .../impl/ClassificationSummaryImpl.java | 21 ++++++- .../mappings/ClassificationMapper.java | 35 ++++++----- .../pro/taskana/mappings/QueryMapper.java | 9 +-- .../src/main/resources/sql/taskana-schema.sql | 2 +- .../QueryClassificationAccTest.java | 9 +-- .../UpdateClassificationAccTest.java | 4 +- .../impl/ClassificationQueryImplTest.java | 6 +- .../impl/ClassificationServiceImplTest.java | 6 +- .../taskana/impl/TestClassificationQuery.java | 6 +- ...ificationServiceImplIntAutoCommitTest.java | 16 ++--- ...ssificationServiceImplIntExplicitTest.java | 18 +++--- .../src/test/resources/sql/classification.sql | 61 +++++++++--------- .../resources/sql/monitor-sample-data.sql | 12 ++-- .../sql/sample-data/classification.sql | 63 ++++++++++--------- 20 files changed, 187 insertions(+), 153 deletions(-) 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 5bf9fef3f..5d1b80e21 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/Classification.java +++ b/lib/taskana-core/src/main/java/pro/taskana/Classification.java @@ -18,21 +18,19 @@ public interface Classification { String getKey(); /** - * Used to get the ID of the parent classification. There will be no value if the current classification is a - * parent-classification. + * Used to get the ID of the parent classification. * * @return unique ID or null if parent itself. */ - String getParentClassificationKey(); + String getParentId(); /** - * 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. + * Set/Change a reference to the current parent classification via ID. EMPTY if there is no parent. * - * @param parentClassificationKey - * The key of the parent classification. + * @param parentId + * The ID of the parent classification. */ - void setParentClassificationKey(String parentClassificationKey); + void setParentId(String parentId); /** * @return category of this classification. 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 353ff656f..cd5d8f464 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java +++ b/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java @@ -15,13 +15,13 @@ public interface ClassificationQuery extends BaseQuery { ClassificationQuery keyIn(String... key); /** - * Add your parentClassificationKey to your query. + * Add your parentIds to your query. * - * @param parentClassificationKey - * as String + * @param parentId + * as an array of Strings * @return the query */ - ClassificationQuery parentClassificationKeyIn(String... parentClassificationKey); + ClassificationQuery parentIdIn(String... parentId); /** * Add your category to your query. diff --git a/lib/taskana-core/src/main/java/pro/taskana/ClassificationSummary.java b/lib/taskana-core/src/main/java/pro/taskana/ClassificationSummary.java index 7f84046a5..16501edc1 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationSummary.java +++ b/lib/taskana-core/src/main/java/pro/taskana/ClassificationSummary.java @@ -47,4 +47,11 @@ public interface ClassificationSummary { * @return classificationName */ String getName(); + + /** + * Gets the ID of the parent classification. + * + * @return parentId + */ + String getParentId(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationImpl.java index 04a00d834..9706b08c2 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationImpl.java @@ -13,7 +13,7 @@ public class ClassificationImpl implements Classification { private String id; private String key; - private String parentClassificationKey; + private String parentId; private String category; private String type; private String domain; @@ -55,13 +55,13 @@ public class ClassificationImpl implements Classification { } @Override - public String getParentClassificationKey() { - return parentClassificationKey; + public String getParentId() { + return parentId; } @Override - public void setParentClassificationKey(String parentClassificationKey) { - this.parentClassificationKey = parentClassificationKey; + public void setParentId(String parentId) { + this.parentId = parentId; } @Override @@ -255,6 +255,7 @@ public class ClassificationImpl implements Classification { summary.setKey(this.key); summary.setName(this.name); summary.setType(this.type); + summary.setParentId(this.parentId); return summary; } @@ -265,8 +266,8 @@ public class ClassificationImpl implements Classification { builder.append(id); builder.append(", key="); builder.append(key); - builder.append(", parentClassificationId="); - builder.append(parentClassificationKey); + builder.append(", parentId="); + builder.append(parentId); builder.append(", category="); builder.append(category); builder.append(", type="); 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 087cec2bd..27c46675d 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 @@ -27,7 +27,7 @@ public class ClassificationQueryImpl implements ClassificationQuery { private static final Logger LOGGER = LoggerFactory.getLogger(ClassificationQueryImpl.class); private TaskanaEngineImpl taskanaEngineImpl; private String[] key; - private String[] parentClassificationKey; + private String[] parentId; private String[] category; private String[] type; private String[] domain; @@ -69,8 +69,8 @@ public class ClassificationQueryImpl implements ClassificationQuery { } @Override - public ClassificationQuery parentClassificationKeyIn(String... parentClassificationKey) { - this.parentClassificationKey = parentClassificationKey; + public ClassificationQuery parentIdIn(String... parentId) { + this.parentId = parentId; return this; } @@ -318,8 +318,8 @@ public class ClassificationQueryImpl implements ClassificationQuery { return key; } - public String[] getParentClassificationKey() { - return parentClassificationKey; + public String[] getparentId() { + return parentId; } public String[] getCategory() { @@ -457,8 +457,8 @@ public class ClassificationQueryImpl implements ClassificationQuery { StringBuilder builder = new StringBuilder(); builder.append("ClassificationQueryImpl [key="); builder.append(Arrays.toString(key)); - builder.append(", parentClassificationKey="); - builder.append(Arrays.toString(parentClassificationKey)); + builder.append(", parentId="); + builder.append(Arrays.toString(parentId)); 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 f53f80c06..c151f0a22 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 @@ -51,7 +51,7 @@ public class ClassificationServiceImpl implements ClassificationService { try { taskanaEngineImpl.openConnection(); rootClassificationSumamries = this.createClassificationQuery() - .parentClassificationKeyIn("") + .parentIdIn("") .list(); rootClassificationSumamries = this.populateChildClassifications(rootClassificationSumamries); return rootClassificationSumamries; @@ -78,7 +78,7 @@ public class ClassificationServiceImpl implements ClassificationService { List children = new ArrayList<>(); for (ClassificationSummary classification : classificationSumamries) { List childClassifications = this.createClassificationQuery() - .parentClassificationKeyIn(classification.getKey()) + .parentIdIn(classification.getId()) .list(); children.addAll(populateChildClassifications(childClassifications)); } @@ -232,8 +232,8 @@ public class ClassificationServiceImpl implements ClassificationService { throw new IllegalStateException("Classification must contain a key"); } - if (classification.getParentClassificationKey() == null) { - classification.setParentClassificationKey(""); + if (classification.getParentId() == null) { + classification.setParentId(""); } if (classification.getDomain() == null) { @@ -318,7 +318,8 @@ public class ClassificationServiceImpl implements ClassificationService { throws ClassificationInUseException, ClassificationNotFoundException { try { taskanaEngineImpl.openConnection(); - if (this.classificationMapper.findByKeyAndDomain(classificationKey, domain) == null) { + Classification classification = this.classificationMapper.findByKeyAndDomain(classificationKey, domain); + if (classification == null) { throw new ClassificationNotFoundException( "The classification " + classificationKey + "wasn't found in the domain " + domain); } @@ -348,7 +349,8 @@ public class ClassificationServiceImpl implements ClassificationService { throw new SystemException("ClassificationQuery unexpectedly returned NotauthorizedException."); } - List childKeys = this.classificationMapper.getChildrenOfClassification(classificationKey, domain); + List childKeys = this.classificationMapper + .getChildrenOfClassification(classification.getId()); for (String key : childKeys) { this.deleteClassification(key, domain); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationSummaryImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationSummaryImpl.java index 87ae455e6..4fe5e7080 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationSummaryImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationSummaryImpl.java @@ -13,9 +13,9 @@ public class ClassificationSummaryImpl implements ClassificationSummary { private String type; private String domain; private String name; + private String parentId; ClassificationSummaryImpl() { - } @Override @@ -72,6 +72,15 @@ public class ClassificationSummaryImpl implements ClassificationSummary { this.name = name; } + @Override + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + @Override public int hashCode() { final int prime = 31; @@ -81,6 +90,7 @@ public class ClassificationSummaryImpl implements ClassificationSummary { result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((key == null) ? 0 : key.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); + result = prime * result + ((parentId == null) ? 0 : parentId.hashCode()); result = prime * result + ((type == null) ? 0 : type.hashCode()); return result; } @@ -132,6 +142,13 @@ public class ClassificationSummaryImpl implements ClassificationSummary { } else if (!name.equals(other.name)) { return false; } + if (parentId == null) { + if (other.parentId != null) { + return false; + } + } else if (!parentId.equals(other.parentId)) { + return false; + } if (type == null) { if (other.type != null) { return false; @@ -157,6 +174,8 @@ public class ClassificationSummaryImpl implements ClassificationSummary { builder.append(domain); builder.append(", name="); builder.append(name); + builder.append(", parentId="); + builder.append(parentId); builder.append("]"); return builder.toString(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/ClassificationMapper.java b/lib/taskana-core/src/main/java/pro/taskana/mappings/ClassificationMapper.java index e736d344d..c359e2d20 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/mappings/ClassificationMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/mappings/ClassificationMapper.java @@ -18,13 +18,13 @@ import pro.taskana.impl.ClassificationSummaryImpl; */ public interface ClassificationMapper { - @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 " + @Select("SELECT ID, KEY, PARENT_ID, 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 " + "FROM CLASSIFICATION " + "WHERE KEY = #{key}" + "AND DOMAIN = #{domain}") @Results({@Result(property = "id", column = "ID"), @Result(property = "key", column = "KEY"), - @Result(property = "parentClassificationKey", column = "PARENT_CLASSIFICATION_KEY"), + @Result(property = "parentId", column = "PARENT_ID"), @Result(property = "category", column = "CATEGORY"), @Result(property = "type", column = "TYPE"), @Result(property = "domain", column = "DOMAIN"), @@ -45,20 +45,21 @@ public interface ClassificationMapper { @Result(property = "custom8", column = "CUSTOM_8")}) ClassificationImpl findByKeyAndDomain(@Param("key") String key, @Param("domain") String domain); - @Insert("INSERT INTO CLASSIFICATION (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) VALUES (#{classification.id}, #{classification.key}, #{classification.parentClassificationKey}, #{classification.category}, #{classification.type}, #{classification.domain}, #{classification.isValidInDomain}, #{classification.created}, #{classification.name}, #{classification.description}, #{classification.priority}, #{classification.serviceLevel}, #{classification.applicationEntryPoint}, #{classification.custom1}, #{classification.custom2}, #{classification.custom3}, #{classification.custom4}, #{classification.custom5}, #{classification.custom6}, #{classification.custom7}, #{classification.custom8})") + @Insert("INSERT INTO CLASSIFICATION (ID, KEY, PARENT_ID, 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) VALUES (#{classification.id}, #{classification.key}, #{classification.parentId}, #{classification.category}, #{classification.type}, #{classification.domain}, #{classification.isValidInDomain}, #{classification.created}, #{classification.name}, #{classification.description}, #{classification.priority}, #{classification.serviceLevel}, #{classification.applicationEntryPoint}, #{classification.custom1}, #{classification.custom2}, #{classification.custom3}, #{classification.custom4}, #{classification.custom5}, #{classification.custom6}, #{classification.custom7}, #{classification.custom8})") 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}, 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} WHERE ID = #{classification.id}") + value = "UPDATE CLASSIFICATION SET KEY = #{classification.key}, PARENT_ID = #{classification.parentId}, 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} WHERE ID = #{classification.id}") void update(@Param("classification") ClassificationImpl classification); @Delete("DELETE FROM CLASSIFICATION " - + "WHERE KEY = #{classificationKey}" - + "AND DOMAIN = #{domain}") - void deleteClassificationInDomain(@Param("classificationKey") String classificationKey, @Param("domain") String domain); + + "WHERE KEY = #{classificationKey}" + + "AND DOMAIN = #{domain}") + void deleteClassificationInDomain(@Param("classificationKey") String classificationKey, + @Param("domain") String domain); @Select("") + + "SELECT DOMAIN " + + "FROM CLASSIFICATION " + + "WHERE KEY = #{classification_key} " + + "") List getDomainsForClassification(@Param("classification_key") String classificationKey); @Select("SELECT KEY " - + "FROM CLASSIFICATION " - + "WHERE PARENT_CLASSIFICATION_KEY = #{classification_key} " - + "AND DOMAIN = #{domain}") - List getChildrenOfClassification(@Param("classification_key") String classificationKey, @Param("domain") String domain); + + "FROM CLASSIFICATION " + + "WHERE PARENT_ID = #{parentId}") + List getChildrenOfClassification(@Param("parentId") String parentId); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java b/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java index 82d756cdf..2e678db99 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java +++ b/lib/taskana-core/src/main/java/pro/taskana/mappings/QueryMapper.java @@ -130,11 +130,11 @@ public interface QueryMapper { @Result(property = "custom10", column = "CUSTOM_10")}) List queryTasks(TaskQueryImpl taskQuery); - @Select("