From 2e473c54bd6c76d37674d45cce81975c6f51259d Mon Sep 17 00:00:00 2001 From: Marcel Lengl <52546181+LenglBoy@users.noreply.github.com> Date: Thu, 7 Dec 2017 13:18:17 +0100 Subject: [PATCH 1/2] TSK-61: Classification-Interface created, changed pulic reachable code to Classification not Impl, ClassificationServiceImplsTest improved --- .../java/pro/taskana/TaskanaRestTest.java | 22 +- .../main/java/pro/taskana/Classification.java | 249 +++++++++++++ .../java/pro/taskana/ClassificationQuery.java | 2 - .../pro/taskana/ClassificationService.java | 23 +- .../ClassificationAlreadyExistException.java | 14 + .../ClassificationNotFoundException.java | 1 + .../taskana/exceptions/TaskanaException.java | 2 + .../exceptions/TaskanaRuntimeException.java | 2 + .../taskana/impl/ClassificationQueryImpl.java | 10 +- .../impl/ClassificationServiceImpl.java | 126 ++++--- .../pro/taskana/impl/TaskServiceImpl.java | 28 +- ...ification.java => ClassificationImpl.java} | 49 ++- .../src/main/java/pro/taskana/model/Task.java | 2 + .../model/mappings/ClassificationMapper.java | 12 +- .../taskana/model/mappings/QueryMapper.java | 8 +- .../taskana/model/mappings/TaskMapper.java | 4 +- .../impl/ClassificationQueryImplTest.java | 5 +- .../impl/ClassificationServiceImplTest.java | 339 +++++++++++------- .../pro/taskana/impl/TaskServiceImplTest.java | 85 +++-- .../taskana/impl/TestClassificationQuery.java | 17 +- ...ificationServiceImplIntAutoCommitTest.java | 149 ++++---- ...ssificationServiceImplIntExplicitTest.java | 158 ++++---- .../SummaryServiceImplIntAutoCommitTest.java | 36 +- .../TaskServiceImplIntAutocommitTest.java | 55 +-- .../TaskServiceImplIntExplicitTest.java | 92 +++-- .../java/pro/taskana/TaskanaComponent.java | 2 +- .../rest/ClassificationController.java | 15 +- 27 files changed, 1022 insertions(+), 485 deletions(-) create mode 100644 lib/taskana-core/src/main/java/pro/taskana/Classification.java create mode 100644 lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationAlreadyExistException.java rename lib/taskana-core/src/main/java/pro/taskana/model/{Classification.java => ClassificationImpl.java} (87%) 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 8a23bed7e..c889906c7 100644 --- a/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java +++ b/lib/taskana-cdi/src/test/java/pro/taskana/TaskanaRestTest.java @@ -1,19 +1,25 @@ package pro.taskana; +import javax.ejb.EJB; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Response; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import pro.taskana.exceptions.ClassificationAlreadyExistException; import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException; -import pro.taskana.model.Classification; +import pro.taskana.model.ClassificationImpl; import pro.taskana.model.Task; import pro.taskana.model.Workbasket; -import javax.ejb.EJB; -import javax.ws.rs.*; -import javax.ws.rs.core.Response; - @Path("/test") public class TaskanaRestTest { @@ -23,12 +29,12 @@ public class TaskanaRestTest { private TaskanaEjb taskanaEjb; @GET - public Response startTask() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException { + public Response startTask() throws NotAuthorizedException, WorkbasketNotFoundException, ClassificationNotFoundException, ClassificationAlreadyExistException { Workbasket workbasket = new Workbasket(); workbasket.setName("wb"); taskanaEjb.getWorkbasketService().createWorkbasket(workbasket); - Classification classification = new Classification(); - taskanaEjb.getClassificationService().addClassification(classification); + Classification classification = (Classification) new ClassificationImpl(); + taskanaEjb.getClassificationService().createClassification(classification); Task task = new Task(); task.setClassification(classification); diff --git a/lib/taskana-core/src/main/java/pro/taskana/Classification.java b/lib/taskana-core/src/main/java/pro/taskana/Classification.java new file mode 100644 index 000000000..d246974d5 --- /dev/null +++ b/lib/taskana-core/src/main/java/pro/taskana/Classification.java @@ -0,0 +1,249 @@ +package pro.taskana; + +import java.sql.Date; + +/** + * Interface used to specify the Classification-Model. + */ +public interface Classification { + + /** + * @return unique classification ID + */ + String getId(); + + /** + * Set/Change the classification-ID. Only ID+Domain need to be unique. + * @param id + */ + void setId(String id); + + /** + * Used to get the ID of the parent classification. + * There will be no value if the current classification is + * a parent-classification. + * @return unique ID or null if parent itself. + */ + String getParentClassificationId(); + + /** + * 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 + */ + void setParentClassificationId(String parentClassificationId); + + /** + * @return category of this classification. + */ + String getCategory(); + + /** + * Set/Change the category of this classification. + * @param category + */ + void setCategory(String category); + + /** + * Get the type of the current classification. + * @return type + */ + String getType(); + + /** + * Set/Change the current type of the classification. + * @param type + */ + void setType(String type); + + /** + * Get the current domain-name of this + * classification. + * @return domain name + */ + String getDomain(); + + /** + * Set/Change the domain of this classification. + * @param domain name + */ + void setDomain(String domain); + + /** + * Get a flag if the classification if currently valid + * in the used domain. + * @return isValidInDomain - flag + */ + Boolean getIsValidInDomain(); + + /** + * Set/Change the flag which marks the classification as + * valid/invalid in the currently used domain. + * @param isValidInDomain - flag + */ + void setIsValidInDomain(Boolean isValidInDomain); + + /** + * Get the Date when this classification was as created. + * @return created as date + */ + Date getCreated(); + + /** + * Get the classification name. + * @return name + */ + String getName(); + + /** + * Set/Change the classification name. + * @param name + */ + void setName(String name); + + /** + * Get the description of a classification. + * @return description + */ + String getDescription(); + + /** + * Set/Change the classification description. + * @param description + */ + void setDescription(String description); + + /** + * Get the current classification priority (numeric). + * @return priority + */ + int getPriority(); + + /** + * Set/Change the numeric priority of a classification. + * @param priority + */ + void setPriority(int priority); + + /** + * Get the current service level. + * @return serviceLevel + */ + String getServiceLevel(); + + /** + * Set/Change the security level. + * @param serviceLevel + */ + void setServiceLevel(String serviceLevel); + + /** + * Get the 1. custom-attribute. + * @return custom1 + */ + String getCustom1(); + + /** + * Set/Change the 1. custom-attribute. + * @param custom1 + */ + void setCustom1(String custom1); + + /** + * Get the 2. custom-attribute. + * @return custom2 + */ + String getCustom2(); + + /** + * Set/Change the 2. custom-attribute. + * @param custom2 + */ + void setCustom2(String custom2); + + /** + * Get the 3. custom-attribute. + * @return custom3 + */ + String getCustom3(); + + /** + * Set/Change the 3. custom-attribute. + * @param custom3 + */ + void setCustom3(String custom3); + + /** + * Get the 4. custom-attribute. + * @return custom4 + */ + String getCustom4(); + + /** + * Set/Change the 4. custom-attribute. + * @param custom4 + */ + void setCustom4(String custom4); + + /** + * Get the 5. custom-attribute. + * @return custom5 + */ + String getCustom5(); + + /** + * Set/Change the 5. custom-attribute. + * @param custom5 + */ + void setCustom5(String custom5); + + /** + * Get the 6. custom-attribute. + * @return custom6 + */ + String getCustom6(); + + + /** + * Set/Change the 6. custom-attribute. + * @param custom6 + */ + void setCustom6(String custom6); + + /** + * Get the 7. custom-attribute. + * @return custom7 + */ + String getCustom7(); + + /** + * Set/Change the 7. custom-attribute. + * @param custom7 + */ + void setCustom7(String custom7); + + /** + * Get the 8. custom-attribute. + * @return custom8 + */ + String getCustom8(); + + /** + * Set/Change the 8. custom-attribute. + * @param custom8 + */ + void setCustom8(String custom8); + + /** + * Get the sql-date since/when the classification is valid from. + * @return validFrom + */ + Date getValidFrom(); + + /** + * Get the sql-date until the classification is valid. + * @return validUntil + */ + Date getValidUntil(); +} 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 cad92b77d..3f65037b6 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java +++ b/lib/taskana-core/src/main/java/pro/taskana/ClassificationQuery.java @@ -1,7 +1,5 @@ package pro.taskana; -import pro.taskana.model.Classification; - import java.util.Date; /** 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 2e3b8cd5e..9646f7db0 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/ClassificationService.java +++ b/lib/taskana-core/src/main/java/pro/taskana/ClassificationService.java @@ -1,10 +1,10 @@ package pro.taskana; +import java.util.List; + +import pro.taskana.exceptions.ClassificationAlreadyExistException; import pro.taskana.exceptions.ClassificationNotFoundException; import pro.taskana.exceptions.NotAuthorizedException; -import pro.taskana.model.Classification; - -import java.util.List; /** * This class manages the classifications. @@ -35,22 +35,33 @@ public interface ClassificationService { Classification getClassification(String id, String domain) throws ClassificationNotFoundException; /** - * Insert a new Classification. + * Persist a new classification. If the classification does + * already exist in a domain, it will just be updated. * @param classification * the classification to insert + * @throws ClassificationAlreadyExistException + * when the classification does already exists with same ID+domain. */ - void addClassification(Classification classification); + void createClassification(Classification classification) throws ClassificationAlreadyExistException; /** * Update a Classification. * @param classification * the Classification to update + * @throws ClassificationNotFoundException when the classification does not exist already. */ - void updateClassification(Classification classification); + void updateClassification(Classification classification) throws ClassificationNotFoundException; /** * This method provides a query builder for quering the database. * @return a {@link ClassificationQuery} */ ClassificationQuery createClassificationQuery(); + + /** + * Creating a new {@link Classification} with unchangeable default values. + * It will be only generated and is not persisted until CREATE-call. + * @return classification to specify + */ + Classification newClassification(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationAlreadyExistException.java b/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationAlreadyExistException.java new file mode 100644 index 000000000..6da38e653 --- /dev/null +++ b/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationAlreadyExistException.java @@ -0,0 +1,14 @@ +package pro.taskana.exceptions; + +/** + * This Exception will be thrown, when a classification does already exits, + * but wanted to create with same ID+domain. + */ +public class ClassificationAlreadyExistException extends NotFoundException { + + private static final long serialVersionUID = 4716611657569005013L; + + public ClassificationAlreadyExistException(String classificationId) { + super(classificationId); + } +} diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationNotFoundException.java b/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationNotFoundException.java index dc8317a90..39a7d6b37 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationNotFoundException.java +++ b/lib/taskana-core/src/main/java/pro/taskana/exceptions/ClassificationNotFoundException.java @@ -1,6 +1,7 @@ package pro.taskana.exceptions; /** +<<<<<<< HEAD * This exception will be thrown if a specific task is not in the database. */ @SuppressWarnings("serial") diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaException.java b/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaException.java index 8058fbdd0..c44284f91 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaException.java +++ b/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaException.java @@ -7,6 +7,8 @@ package pro.taskana.exceptions; */ public class TaskanaException extends Exception { + private static final long serialVersionUID = 123234345123412L; + public TaskanaException() { super(); } diff --git a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaRuntimeException.java b/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaRuntimeException.java index 6ad0aedbb..17ea33056 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaRuntimeException.java +++ b/lib/taskana-core/src/main/java/pro/taskana/exceptions/TaskanaRuntimeException.java @@ -7,6 +7,8 @@ package pro.taskana.exceptions; */ public class TaskanaRuntimeException extends RuntimeException { + private static final long serialVersionUID = 1511142769801824L; + public TaskanaRuntimeException() { super(); } 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 21ab1d351..06f689d9a 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 @@ -1,17 +1,17 @@ package pro.taskana.impl; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + import org.apache.ibatis.session.RowBounds; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import pro.taskana.Classification; import pro.taskana.ClassificationQuery; import pro.taskana.TaskanaEngine; import pro.taskana.impl.util.LoggerUtils; -import pro.taskana.model.Classification; - -import java.util.Arrays; -import java.util.Date; -import java.util.List; /** * Implementation of ClassificationQuery interface. 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 6b76a6ed1..ae3fa9acd 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 @@ -1,23 +1,26 @@ package pro.taskana.impl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import pro.taskana.ClassificationQuery; -import pro.taskana.ClassificationService; -import pro.taskana.TaskanaEngine; -import pro.taskana.exceptions.ClassificationNotFoundException; -import pro.taskana.exceptions.NotAuthorizedException; -import pro.taskana.impl.util.IdGenerator; -import pro.taskana.impl.util.LoggerUtils; -import pro.taskana.model.Classification; -import pro.taskana.model.mappings.ClassificationMapper; - import java.sql.Date; import java.time.Duration; import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import pro.taskana.Classification; +import pro.taskana.ClassificationQuery; +import pro.taskana.ClassificationService; +import pro.taskana.TaskanaEngine; +import pro.taskana.exceptions.ClassificationAlreadyExistException; +import pro.taskana.exceptions.ClassificationNotFoundException; +import pro.taskana.exceptions.NotAuthorizedException; +import pro.taskana.impl.util.IdGenerator; +import pro.taskana.impl.util.LoggerUtils; +import pro.taskana.model.ClassificationImpl; +import pro.taskana.model.mappings.ClassificationMapper; + /** * This is the implementation of ClassificationService. */ @@ -45,8 +48,8 @@ public class ClassificationServiceImpl implements ClassificationService { taskanaEngineImpl.openConnection(); List rootClassifications; rootClassifications = this.createClassificationQuery().parentClassification("").validUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL).list(); - result = this.populateChildClassifications(rootClassifications); - return result; + rootClassifications = this.populateChildClassifications(rootClassifications); + return rootClassifications; } finally { taskanaEngineImpl.returnConnection(); if (LOGGER.isDebugEnabled()) { @@ -72,17 +75,30 @@ public class ClassificationServiceImpl implements ClassificationService { } @Override - public void addClassification(Classification classification) { - LOGGER.debug("entry to addClassification(classification = {})", classification); - try { + public void createClassification(Classification classification) throws ClassificationAlreadyExistException { + LOGGER.debug("entry to createClassification(classification = {})", classification); + try { taskanaEngineImpl.openConnection(); - classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); - classification.setCreated(Date.valueOf(LocalDate.now())); - - this.setDefaultValues(classification); - - classificationMapper.insert(classification); - LOGGER.debug("Method addClassification added classification {}.", classification); + ClassificationImpl classificationImpl = (ClassificationImpl) classification; + this.setDefaultValues(classificationImpl); + Classification oldClassification; + try { + oldClassification = this.getClassification(classificationImpl.getId(), classificationImpl.getDomain()); + } catch (ClassificationNotFoundException e) { + oldClassification = null; + } + if (oldClassification == null) { + classificationImpl.setCreated(classificationImpl.getValidFrom()); + classificationMapper.insert(classificationImpl); + LOGGER.debug("Method createClassification created classification {}.", classification); + if (classificationImpl.getDomain() != "") { + classificationImpl.setDomain(""); + classificationMapper.insert(classificationImpl); + LOGGER.debug("Method createClassification created classification {}.", classification); + } + } else { + throw new ClassificationAlreadyExistException(classificationImpl.getId()); + } } finally { taskanaEngineImpl.returnConnection(); LOGGER.debug("exit from addClassification()"); @@ -94,41 +110,48 @@ public class ClassificationServiceImpl implements ClassificationService { LOGGER.debug("entry to updateClassification(Classification = {})", classification); try { taskanaEngineImpl.openConnection(); - this.setDefaultValues(classification); + ClassificationImpl classificationImpl = (ClassificationImpl) classification; + this.setDefaultValues(classificationImpl); - Classification oldClassification = null; + ClassificationImpl oldClassification = null; try { - oldClassification = this.getClassification(classification.getId(), classification.getDomain()); - LOGGER.debug("Method updateClassification() inserted classification {}.", classification); - + oldClassification = (ClassificationImpl) this.getClassification(classificationImpl.getId(), 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(classification.getDomain())) { - classification.setCreated(Date.valueOf(LocalDate.now())); - classificationMapper.insert(classification); + if (!oldClassification.getDomain().equals(classificationImpl.getDomain())) { + classificationImpl.setCreated(Date.valueOf(LocalDate.now())); + classificationMapper.insert(classificationImpl); LOGGER.debug("Method updateClassification() inserted classification {}.", classification); } else { oldClassification.setValidUntil(Date.valueOf(LocalDate.now().minusDays(1))); classificationMapper.update(oldClassification); - classificationMapper.insert(classification); - LOGGER.debug("Method updateClassification() updated old classification {} and inserted new {}.", oldClassification, classification); + classificationMapper.insert(classificationImpl); + LOGGER.debug("Method updateClassification() updated old classification {} and inserted new {}.", oldClassification, classificationImpl); } } catch (ClassificationNotFoundException e) { - classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); - classification.setCreated(Date.valueOf(LocalDate.now())); - classificationMapper.insert(classification); - LOGGER.debug("Method updateClassification() inserted classification {}.", classification); - } + classificationImpl.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); + classificationImpl.setCreated(Date.valueOf(LocalDate.now())); + classificationMapper.insert(classificationImpl); + LOGGER.debug("Method updateClassification() inserted classification {}.", classificationImpl); + } } finally { taskanaEngineImpl.returnConnection(); LOGGER.debug("exit from updateClassification()."); } } - private void setDefaultValues(Classification classification) { + private void setDefaultValues(ClassificationImpl classification) { classification.setValidFrom(Date.valueOf(LocalDate.now())); classification.setValidUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL); - classification.setValidInDomain(true); + + if (classification.getIsValidInDomain() == null) { + classification.setIsValidInDomain(true); + } + if (classification.getServiceLevel() != null) { try { Duration.parse(classification.getServiceLevel()); @@ -137,6 +160,10 @@ public class ClassificationServiceImpl implements ClassificationService { } } + if (classification.getId() == null) { + classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); + } + if (classification.getParentClassificationId() == classification.getId()) { throw new IllegalArgumentException("A classification can't be a parent to itself"); } @@ -144,10 +171,10 @@ public class ClassificationServiceImpl implements ClassificationService { if (classification.getParentClassificationId() == null) { classification.setParentClassificationId(""); } + if (classification.getDomain() == null) { classification.setDomain(""); } - } @Override @@ -156,8 +183,10 @@ public class ClassificationServiceImpl implements ClassificationService { List result = null; try { taskanaEngineImpl.openConnection(); - result = classificationMapper.getAllClassificationsWithId(id, domain); - return result; + List classifications = classificationMapper.getAllClassificationsWithId(id, domain); + List results = new ArrayList<>(); + classifications.stream().forEach(c -> results.add((Classification) c)); + return results; } finally { taskanaEngineImpl.returnConnection(); if (LOGGER.isDebugEnabled()) { @@ -195,4 +224,13 @@ public class ClassificationServiceImpl implements ClassificationService { public ClassificationQuery createClassificationQuery() { return new ClassificationQueryImpl(taskanaEngine); } + + @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 302c2538d..9d461b0fb 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 @@ -1,7 +1,17 @@ package pro.taskana.impl; +import java.sql.Date; +import java.sql.Timestamp; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import pro.taskana.Classification; import pro.taskana.TaskQuery; import pro.taskana.TaskService; import pro.taskana.TaskanaEngine; @@ -11,18 +21,16 @@ import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.impl.util.IdGenerator; import pro.taskana.impl.util.LoggerUtils; -import pro.taskana.model.*; +import pro.taskana.model.DueWorkbasketCounter; +import pro.taskana.model.ObjectReference; +import pro.taskana.model.Task; +import pro.taskana.model.TaskState; +import pro.taskana.model.TaskStateCounter; +import pro.taskana.model.Workbasket; +import pro.taskana.model.WorkbasketAuthorization; import pro.taskana.model.mappings.ObjectReferenceMapper; import pro.taskana.model.mappings.TaskMapper; -import java.sql.Date; -import java.sql.Timestamp; -import java.time.Duration; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; - /** * This is the implementation of TaskService. */ @@ -107,7 +115,7 @@ public class TaskServiceImpl implements TaskService { taskanaEngineImpl.openConnection(); Workbasket wb = taskanaEngine.getWorkbasketService().getWorkbasket(task.getWorkbasketId()); taskanaEngine.getWorkbasketService().checkAuthorization(task.getWorkbasketId(), WorkbasketAuthorization.APPEND); - + task.setWorkbasketId(wb.getId()); Classification classification = task.getClassification(); if (classification == null) { throw new ClassificationNotFoundException(null); diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/Classification.java b/lib/taskana-core/src/main/java/pro/taskana/model/ClassificationImpl.java similarity index 87% rename from lib/taskana-core/src/main/java/pro/taskana/model/Classification.java rename to lib/taskana-core/src/main/java/pro/taskana/model/ClassificationImpl.java index 8f3e8154e..f384d9c89 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/Classification.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/ClassificationImpl.java @@ -2,10 +2,12 @@ package pro.taskana.model; import java.sql.Date; +import pro.taskana.Classification; + /** * Classification entity. */ -public class Classification { +public class ClassificationImpl implements Classification { private String id; private String parentClassificationId; @@ -29,6 +31,7 @@ public class Classification { private Date validFrom; private Date validUntil; + @Override public String getId() { return id; } @@ -37,46 +40,56 @@ public class Classification { this.id = id; } + @Override public String getParentClassificationId() { return parentClassificationId; } + @Override public void setParentClassificationId(String parentClassificationId) { this.parentClassificationId = parentClassificationId; } + @Override public String getType() { return type; } + @Override public void setType(String type) { this.type = type; } + @Override public String getCategory() { return category; } + @Override public void setCategory(String category) { this.category = category; } + @Override public String getDomain() { return this.domain; } + @Override public void setDomain(String domain) { this.domain = domain; } - public Boolean getValidInDomain() { + @Override + public Boolean getIsValidInDomain() { return isValidInDomain; } - public void setValidInDomain(Boolean validInDomain) { - isValidInDomain = validInDomain; + public void setIsValidInDomain(Boolean isValidInDomain) { + this.isValidInDomain = isValidInDomain; } + @Override public Date getCreated() { return created; } @@ -85,102 +98,127 @@ public class Classification { this.created = created; } + @Override public String getName() { return name; } + @Override public void setName(String name) { this.name = name; } + @Override public String getDescription() { return description; } + @Override public void setDescription(String description) { this.description = description; } + @Override public int getPriority() { return priority; } + @Override public void setPriority(int priority) { this.priority = priority; } + @Override public String getServiceLevel() { return serviceLevel; } + @Override public void setServiceLevel(String serviceLevel) { this.serviceLevel = serviceLevel; } + @Override public String getCustom1() { return custom1; } + @Override public void setCustom1(String custom1) { this.custom1 = custom1; } + @Override public String getCustom2() { return custom2; } + @Override public void setCustom2(String custom2) { this.custom2 = custom2; } + @Override public String getCustom3() { return custom3; } + @Override public void setCustom3(String custom3) { this.custom3 = custom3; } + @Override public String getCustom4() { return custom4; } + @Override public void setCustom4(String custom4) { this.custom4 = custom4; } + @Override public String getCustom5() { return custom5; } + @Override public void setCustom5(String custom5) { this.custom5 = custom5; } + @Override public String getCustom6() { return custom6; } + @Override public void setCustom6(String custom6) { this.custom6 = custom6; } + @Override public String getCustom7() { return custom7; } + @Override public void setCustom7(String custom7) { this.custom7 = custom7; } + @Override public String getCustom8() { return custom8; } + @Override public void setCustom8(String custom8) { this.custom8 = custom8; } + @Override public Date getValidFrom() { return validFrom; } @@ -189,6 +227,7 @@ public class Classification { this.validFrom = validFrom; } + @Override public Date getValidUntil() { return validUntil; } @@ -245,6 +284,4 @@ public class Classification { builder.append("]"); return builder.toString(); } - - } diff --git a/lib/taskana-core/src/main/java/pro/taskana/model/Task.java b/lib/taskana-core/src/main/java/pro/taskana/model/Task.java index 1be29eb6c..3c046bc1a 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/model/Task.java +++ b/lib/taskana-core/src/main/java/pro/taskana/model/Task.java @@ -4,6 +4,8 @@ import java.sql.Timestamp; import java.util.Collections; import java.util.Map; +import pro.taskana.Classification; + /** * Task entity. */ 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 71a33f0df..fdcbcc985 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 @@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; -import pro.taskana.model.Classification; +import pro.taskana.model.ClassificationImpl; /** * This class is the mybatis mapping of classifications. @@ -45,7 +45,7 @@ public interface ClassificationMapper { @Result(property = "custom8", column = "CUSTOM_8"), @Result(property = "validFrom", column = "VALID_FROM"), @Result(property = "validUntil", column = "VALID_UNTIL")}) - Classification findByIdAndDomain(@Param("id") String id, @Param("domain") String domain, @Param("valid_until")Date validUntil); + ClassificationImpl findByIdAndDomain(@Param("id") String id, @Param("domain") String domain, @Param("valid_until")Date validUntil); @Select("SELECT ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, DOMAIN, VALID_IN_DOMAIN, CREATED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, VALID_FROM, VALID_UNTIL " + "FROM CLASSIFICATION " @@ -72,13 +72,13 @@ public interface ClassificationMapper { @Result(property = "custom8", column = "CUSTOM_8"), @Result(property = "validFrom", column = "VALID_FROM"), @Result(property = "validUntil", column = "VALID_UNTIL")}) - Classification findById(@Param("id") String id); + ClassificationImpl findById(@Param("id") String id); @Insert("INSERT INTO CLASSIFICATION (ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, DOMAIN, VALID_IN_DOMAIN, CREATED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, VALID_FROM, VALID_UNTIL) VALUES (#{classification.id}, #{classification.parentClassificationId}, #{classification.category}, #{classification.type}, #{classification.domain}, #{classification.isValidInDomain}, #{classification.created}, #{classification.name}, #{classification.description}, #{classification.priority}, #{classification.serviceLevel}, #{classification.custom1}, #{classification.custom2}, #{classification.custom3}, #{classification.custom4}, #{classification.custom5}, #{classification.custom6}, #{classification.custom7}, #{classification.custom8}, #{classification.validFrom}, #{classification.validUntil})") - void insert(@Param("classification") Classification classification); + void insert(@Param("classification") ClassificationImpl classification); @Update(value = "UPDATE CLASSIFICATION SET PARENT_CLASSIFICATION_ID = #{classification.parentClassificationId}, 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}, 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") Classification classification); + void update(@Param("classification") ClassificationImpl classification); @Select("