Update ClassificationController, QueryMapper and Tests to actual ClassificationSchema

This commit is contained in:
BVier 2017-09-19 12:15:26 +02:00
parent 70f391398f
commit 9a97bd20fc
14 changed files with 687 additions and 373 deletions

View File

@ -1,5 +1,6 @@
package org.taskana;
import org.taskana.exceptions.NotAuthorizedException;
import org.taskana.model.Classification;
import org.taskana.persistence.ClassificationQuery;
@ -11,28 +12,19 @@ import java.util.List;
public interface ClassificationService {
/**
* Get all available Classifications.
* Get all available Classifications as a tree.
* @return The List of all Classifications
*/
List<Classification> selectClassifications();
List<Classification> getClassificationTree() throws NotAuthorizedException;
/**
* Get all Classifications with given parent.
* @param parentId
* the ID of the parent Classification
* @return
*/
List<Classification> selectClassificationsByParentId(String parentId);
/**
* Get a Classification for a given id.
* Returns just the DEFAULT Classification!!!
* Better use selectClassificationByIdAndDomain.
* Get all Classifications with the given id.
* Returns also older and domain-specific versions of the classification.
*
* @param id
* @return the requested Default-Classification
* @return List with all versions of the Classification
*/
Classification selectClassificationById(String id);
List<Classification> getAllClassificationsWithId(String id, String domain);
/**
* Get the Classification for id and domain.
@ -40,45 +32,14 @@ public interface ClassificationService {
* @param domain
* @return If exist: domain-specific classification, else default classification
*/
Classification selectClassificationByIdAndDomain(String id, String domain);
/**
* Get all Classifications from a domain.
* @param domain
* @return
*/
List<Classification> selectClassificationByDomain(String domain);
/**
* Get all Classifications from a domain with a specific type.
* @param domain
* @param type
* @return
*/
List<Classification> selectClassificationByDomainAndType(String domain, String type);
/**
* Get all Classifications from a category for a domain.
* @param domain
* @param category
* @return
*/
List<Classification> selectClassificationByDomainAndCategory(String domain, String category);
/**
* Get all Classifications from a category and a type.
* @param category
* @param type
* @return
*/
List<Classification> selectClassificationByCategoryAndType(String category, String type);
Classification getClassification(String id, String domain);
/**
* Insert a new Classification.
* @param classification
* the classification to insert
*/
void insertClassification(Classification classification);
void addClassification(Classification classification);
/**
* Update a Classification.

View File

@ -2,6 +2,7 @@ package org.taskana.impl;
import org.taskana.ClassificationService;
import org.taskana.TaskanaEngine;
import org.taskana.exceptions.NotAuthorizedException;
import org.taskana.impl.persistence.ClassificationQueryImpl;
import org.taskana.impl.util.IdGenerator;
import org.taskana.model.Classification;
@ -11,6 +12,7 @@ import org.taskana.persistence.ClassificationQuery;
import java.sql.Date;
import java.time.Duration;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
/**
@ -20,6 +22,8 @@ public class ClassificationServiceImpl implements ClassificationService {
private static final String ID_PREFIX_CLASSIFICATION = "CLI";
public static final Date CURRENT_CLASSIFICATIONS_VALID_UNTIL = Date.valueOf("9999-12-31");
private ClassificationMapper classificationMapper;
private TaskanaEngine taskanaEngine;
@ -30,112 +34,98 @@ public class ClassificationServiceImpl implements ClassificationService {
}
@Override
public List<Classification> selectClassifications() {
final List<Classification> rootClassifications = classificationMapper.findByParentId("");
populateChildClassifications(rootClassifications);
return rootClassifications;
public List<Classification> getClassificationTree() throws NotAuthorizedException {
List<Classification> rootClassifications;
rootClassifications = this.createClassificationQuery().parentClassification("").validUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL).list();
return this.populateChildClassifications(rootClassifications);
}
private void populateChildClassifications(final List<Classification> classifications) {
private List<Classification> populateChildClassifications(List<Classification> classifications) throws NotAuthorizedException {
List<Classification> children = new ArrayList<>();
for (Classification classification : classifications) {
List<Classification> childClassifications = classificationMapper.findByParentId(classification.getId());
classification.setChildren(childClassifications);
populateChildClassifications(childClassifications);
List<Classification> childClassifications = this.createClassificationQuery().parentClassification(classification.getId()).validUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL).list();
children.addAll(populateChildClassifications(childClassifications));
}
classifications.addAll(children);
return classifications;
}
@Override
public List<Classification> selectClassificationsByParentId(String parentId) {
return classificationMapper.findByParentId(parentId);
}
@Override
public void insertClassification(Classification classification) {
public void addClassification(Classification classification) {
classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION));
classification.setCreated(Date.valueOf(LocalDate.now()));
classification.setValidFrom(Date.valueOf(LocalDate.now()));
classification.setValidUntil(Date.valueOf("9999-12-31"));
this.checkServiceLevel(classification);
if (classification.getDomain() == null) {
classification.setDomain("");
}
this.setDefaultValues(classification);
classificationMapper.insert(classification);
}
@Override
public void updateClassification(Classification classification) {
this.checkServiceLevel(classification);
Date today = Date.valueOf(LocalDate.now());
this.setDefaultValues(classification);
Classification oldClassification = classificationMapper.findByIdAndDomain(classification.getId(), classification.getDomain());
Classification oldClassification = this.getClassification(classification.getId(), classification.getDomain());
if (oldClassification != null) {
if (oldClassification.getValidFrom().equals(today)) {
// if we would insert a new Classification, oldClassification gets a negative Duration
classificationMapper.update(classification);
} else {
oldClassification.setValidUntil(Date.valueOf(LocalDate.now().minusDays(1)));
classificationMapper.update(oldClassification);
if (oldClassification == null) {
classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION));
classification.setCreated(Date.valueOf(LocalDate.now()));
classificationMapper.insert(classification);
return;
}
classification.setValidFrom(today);
classification.setValidUntil(Date.valueOf("9999-12-31"));
classificationMapper.insert(classification);
}
// ! 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);
} else {
if (classificationMapper.findByIdAndDomain(classification.getId(), "").equals(null)) {
throw new IllegalArgumentException("There is no Default-Classification with this ID!");
} else {
classification.setValidFrom(today);
classification.setValidUntil(Date.valueOf("9999-12-31"));
classificationMapper.insert(classification);
}
oldClassification.setValidUntil(Date.valueOf(LocalDate.now().minusDays(1)));
classificationMapper.update(oldClassification);
classificationMapper.insert(classification);
}
}
@Override
public Classification selectClassificationById(String id) {
return classificationMapper.findByIdAndDomain(id, "");
}
@Override
public Classification selectClassificationByIdAndDomain(String id, String domain) {
Classification classification = classificationMapper.findByIdAndDomain(id, domain);
if (classification.equals(null)) {
return classificationMapper.findByIdAndDomain(id, "");
} else {
return classification;
}
}
@Override
public List<Classification> selectClassificationByDomain(String domain) {
return classificationMapper.findByDomain(domain);
}
@Override
public List<Classification> selectClassificationByDomainAndType(String domain, String type) {
return classificationMapper.getClassificationByDomainAndType(domain, type);
}
@Override
public List<Classification> selectClassificationByDomainAndCategory(String domain, String category) {
return classificationMapper.getClassificationByDomainAndCategory(domain, category);
}
@Override
public List<Classification> selectClassificationByCategoryAndType(String category, String type) {
return classificationMapper.getClassificationByCategoryAndType(category, type);
}
private void checkServiceLevel(Classification classification) {
private void setDefaultValues(Classification classification) {
classification.setValidFrom(Date.valueOf(LocalDate.now()));
classification.setValidUntil(CURRENT_CLASSIFICATIONS_VALID_UNTIL);
classification.setValidInDomain(true);
if (classification.getServiceLevel() != null) {
try {
Duration.parse(classification.getServiceLevel());
} catch (Exception e) {
throw new IllegalArgumentException("Invalid timestamp. Please use the format 'PddDThhHmmM'");
throw new IllegalArgumentException("Invalid duration. Please use the format defined by ISO 8601");
}
}
if (classification.getParentClassificationId() == classification.getId()) {
throw new IllegalArgumentException("A classification can't be a parent to itself");
}
if (classification.getParentClassificationId() == null) {
classification.setParentClassificationId("");
}
if (classification.getDomain() == null) {
classification.setDomain("");
}
}
@Override
public List<Classification> getAllClassificationsWithId(String id, String domain) {
return classificationMapper.getAllClassificationsWithId(id, domain);
}
@Override
public Classification getClassification(String id, String domain) {
Classification classification = classificationMapper.findByIdAndDomain(id, domain, CURRENT_CLASSIFICATIONS_VALID_UNTIL);
if (classification == null) {
return classificationMapper.findByIdAndDomain(id, "", CURRENT_CLASSIFICATIONS_VALID_UNTIL);
} else {
return classification;
}
}
@Override

View File

@ -1,13 +1,14 @@
package org.taskana.impl.persistence;
import java.util.List;
import org.apache.ibatis.session.RowBounds;
import org.taskana.TaskanaEngine;
import org.taskana.impl.TaskanaEngineImpl;
import org.taskana.model.Classification;
import org.taskana.persistence.ClassificationQuery;
import java.util.Date;
import java.util.List;
/**
* Implementation of ClassificationQuery interface.
* @author EH
@ -20,10 +21,16 @@ public class ClassificationQueryImpl implements ClassificationQuery {
private String[] parentClassificationId;
private String[] category;
private String[] type;
private String[] domain;
private Boolean validInDomain;
private Date[] created;
private String[] name;
private String description;
private int[] priority;
private String[] serviceLevel;
private String[] customFields;
private Date[] validFrom;
private Date[] validUntil;
public ClassificationQueryImpl(TaskanaEngine taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
@ -53,6 +60,24 @@ public class ClassificationQueryImpl implements ClassificationQuery {
return this;
}
@Override
public ClassificationQuery domain(String... domain) {
this.domain = domain;
return this;
}
@Override
public ClassificationQuery validInDomain(Boolean validInDomain) {
this.validInDomain = validInDomain;
return this;
}
@Override
public ClassificationQuery created(Date... created) {
this.created = created;
return this;
}
@Override
public ClassificationQuery name(String... name) {
this.name = name;
@ -77,6 +102,24 @@ public class ClassificationQueryImpl implements ClassificationQuery {
return this;
}
@Override
public ClassificationQuery customFields(String... customFields) {
this.customFields = customFields;
return this;
}
@Override
public ClassificationQuery validFrom(Date... validFrom) {
this.validFrom = validFrom;
return this;
}
@Override
public ClassificationQuery validUntil(Date... validUntil) {
this.validUntil = validUntil;
return this;
}
@Override
public List<Classification> list() {
return taskanaEngine.getSession().selectList(LINK_TO_MAPPER, this);
@ -156,4 +199,52 @@ public class ClassificationQueryImpl implements ClassificationQuery {
public void setServiceLevel(String[] serviceLevel) {
this.serviceLevel = serviceLevel;
}
public String[] getDomain() {
return domain;
}
public void setDomain(String[] domain) {
this.domain = domain;
}
public Boolean getValidInDomain() {
return validInDomain;
}
public void setValidInDomain(Boolean validInDomain) {
this.validInDomain = validInDomain;
}
public Date[] getCreated() {
return created;
}
public void setCreated(Date[] created) {
this.created = created;
}
public String[] getCustomFields() {
return customFields;
}
public void setCustomFields(String[] customFields) {
this.customFields = customFields;
}
public Date[] getValidFrom() {
return validFrom;
}
public void setValidFrom(Date[] validFrom) {
this.validFrom = validFrom;
}
public Date[] getValidUntil() {
return validUntil;
}
public void setValidUntil(Date[] validUntil) {
this.validUntil = validUntil;
}
}

View File

@ -1,8 +1,6 @@
package org.taskana.model;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
/**
* Classification entity.
@ -21,7 +19,6 @@ public class Classification {
private String description;
private int priority;
private String serviceLevel; // PddDThhHmmM
private List<Classification> children = new ArrayList<>();
private String custom1;
private String custom2;
private String custom3;
@ -129,18 +126,6 @@ public class Classification {
this.serviceLevel = serviceLevel;
}
public List<Classification> getChildren() {
return children;
}
public void addChild(Classification child) {
children.add(child);
}
public void setChildren(List<Classification> children) {
this.children = children;
}
public String getCustom1() {
return custom1;
}

View File

@ -3,6 +3,7 @@ package org.taskana.model.mappings;
import org.apache.ibatis.annotations.*;
import org.taskana.model.Classification;
import java.sql.Date;
import java.util.List;
/**
@ -10,66 +11,11 @@ import java.util.List;
*/
public interface ClassificationMapper {
@Select("SELECT ID, TENANT_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 "
+ "ORDER BY ID")
@Results({@Result(property = "id", column = "ID"),
@Result(property = "tenantId", column = "TENANT_ID"),
@Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"),
@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 = "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")})
List<Classification> findAll();
@Select("SELECT ID, TENANT_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 "
+ "WHERE PARENT_CLASSIFICATION_ID = #{parentClassificationId} "
+ "ORDER BY ID")
@Results({@Result(property = "id", column = "ID"),
@Result(property = "tenantId", column = "TENANT_ID"),
@Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"),
@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 = "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")})
List<Classification> findByParentId(@Param("parentClassificationId") String parentId);
@Select("SELECT ID, TENANT_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 "
+ "WHERE ID = #{id}"
+ "AND DOMAIN = #{domain}")
+ "AND DOMAIN = #{domain}"
+ "AND VALID_UNTIL = #{valid_until}")
@Results({@Result(property = "id", column = "ID"),
@Result(property = "tenantId", column = "TENANT_ID"),
@Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"),
@ -92,18 +38,21 @@ 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);
Classification findByIdAndDomain(@Param("id") String id, @Param("domain") String domain, @Param("valid_until")Date validUntil);
@Insert("INSERT INTO CLASSIFICATION (ID, TENANT_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.tenantId}, #{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);
@Update(value = "UPDATE CLASSIFICATION SET TENANT_ID = #{classification.tenantId}, 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}")
@Update(value = "UPDATE CLASSIFICATION SET TENANT_ID = #{classification.tenantId}, 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);
@Select("SELECT ID, TENANT_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"
@Select("<script>"
+ "SELECT * "
+ "FROM CLASSIFICATION "
+ "WHERE DOMAIN = #{domain}"
+ "ORDER BY ID")
+ "WHERE ID = #{id} "
+ "AND DOMAIN = #{domain}"
+ "ORDER BY VALID_FROM DESC"
+ "</script>")
@Results({@Result(property = "id", column = "ID"),
@Result(property = "tenantId", column = "TENANT_ID"),
@Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"),
@ -126,31 +75,7 @@ public interface ClassificationMapper {
@Result(property = "custom8", column = "CUSTOM_8"),
@Result(property = "validFrom", column = "VALID_FROM"),
@Result(property = "validUntil", column = "VALID_UNTIL")})
List<Classification> findByDomain(@Param("domain") String domain);
@Select("<script>"
+ "SELECT * "
+ "FROM CLASSIFICATION "
+ "WHERE DOMAIN = #{domain} "
+ "AND CATEGORY = #{category} "
+ "</script>")
List<Classification> getClassificationByDomainAndCategory(@Param("domain") String domain, @Param("category") String category);
@Select("<script>"
+ "SELECT * "
+ "FROM CLASSIFICATION "
+ "WHERE DOMAIN = #{domain} "
+ "AND TYPE = #{type} "
+ "</script>")
List<Classification> getClassificationByDomainAndType(@Param("domain") String domain, @Param("type") String type);
@Select("<script>"
+ "SELECT * "
+ "FROM CLASSIFICATION "
+ "WHERE CATEGORY = #{category} "
+ "AND TYPE = #{type} "
+ "</script>")
List<Classification> getClassificationByCategoryAndType(@Param("category") String category, @Param("type") String type);
List<Classification> getAllClassificationsWithId(@Param("id") String id, @Param("domain") String domain);
}

View File

@ -43,10 +43,16 @@ public interface QueryMapper {
+ "<if test='classificationQuery.parentClassificationId != null'>AND c.PARENT_CLASSIFICATION_ID IN(<foreach item='item' collection='classificationQuery.parentClassificationId' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.category != null'>AND c.CATEGORY IN(<foreach item='item' collection='classificationQuery.category' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.type != null'>AND c.TYPE IN(<foreach item='item' collection='classificationQuery.type' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.domain != null'>AND c.DOMAIN IN(<foreach item='item' collection='classificationQuery.domain' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.validInDomain != null'>AND c.VALID_IN_DOMAIN like #{classificationQuery.validInDomain}</if> "
+ "<if test='classificationQuery.created != null'>AND c.CREATED IN(<foreach item='item' collection='classificationQuery.created' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.name != null'>AND c.NAME IN(<foreach item='item' collection='classificationQuery.name' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.description != null'>AND c.DESCRIPTION like #{classificationQuery.description}</if> "
+ "<if test='classificationQuery.priority != null'>AND c.PRIORITY IN(<foreach item='item' collection='classificationQuery.priority' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.serviceLevel != null'>AND c.SERVICE_LEVEL IN(<foreach item='item' collection='classificationQuery.serviceLevel' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.customFields != null'>AND (c.CUSTOM_1 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_2 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_3 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_4 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_5 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_6 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_7 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>) OR c.CUSTOM_8 IN(<foreach item='item' collection='classificationQuery.customFields' separator=',' >#{item}</foreach>))</if> "
+ "<if test='classificationQuery.validFrom != null'>AND c.VALID_FROM IN(<foreach item='item' collection='classificationQuery.validFrom' separator=',' >#{item}</foreach>)</if> "
+ "<if test='classificationQuery.validUntil != null'>AND c.VALID_UNTIL IN(<foreach item='item' collection='classificationQuery.validUntil' separator=',' >#{item}</foreach>)</if> "
+ "</if>"
// Object Reference Query
+ "<if test='objectReferenceQuery != null'>"
@ -64,7 +70,6 @@ public interface QueryMapper {
@Result(property = "created", column = "CREATED"),
@Result(property = "claimed", column = "CLAIMED"),
@Result(property = "completed", column = "COMPLETED"),
@Result(property = "modified", column = "MODIFIED"),
@Result(property = "planned", column = "PLANNED"),
@Result(property = "due", column = "DUE"),
@Result(property = "name", column = "NAME"),
@ -89,17 +94,23 @@ public interface QueryMapper {
@Result(property = "custom10", column = "CUSTOM_10") })
List<Task> queryTasks(TaskQueryImpl taskQuery);
@Select("<script>SELECT ID, TENANT_ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, CREATED, MODIFIED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL "
@Select("<script>SELECT ID, TENANT_ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, CREATED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL "
+ "FROM CLASSIFICATION "
+ "<where>"
+ "<if test='tenantId != null'>TENANT_ID = #{tenantId}</if> "
+ "<if test='parentClassificationId != null'>AND PARENT_CLASSIFICATION_ID IN(<foreach item='item' collection='parentClassificationId' separator=',' >#{item}</foreach>)</if> "
+ "<if test='category != null'>AND CATEGORY IN(<foreach item='item' collection='category' separator=',' >#{item}</foreach>)</if> "
+ "<if test='type != null'>AND TYPE IN(<foreach item='item' collection='type' separator=',' >#{item}</foreach>)</if> "
+ "<if test='domain != null'>AND DOMAIN IN(<foreach item='item' collection='domain' separator=',' >#{item}</foreach>)</if> "
+ "<if test='validInDomain != null'>AND VALID_IN_DOMAIN like #{validInDomain}</if> "
+ "<if test='created != null'>AND CREATED IN(<foreach item='item' collection='created' separator=',' >#{item}</foreach>)</if> "
+ "<if test='name != null'>AND NAME IN(<foreach item='item' collection='name' separator=',' >#{item}</foreach>)</if> "
+ "<if test='description != null'>AND DESCRIPTION like #{description}</if> "
+ "<if test='priority != null'>AND PRIORITY IN(<foreach item='item' collection='.priority' separator=',' >#{item}</foreach>)</if> "
+ "<if test='priority != null'>AND PRIORITY IN(<foreach item='item' collection='priority' separator=',' >#{item}</foreach>)</if> "
+ "<if test='serviceLevel != null'>AND SERVICE_LEVEL IN(<foreach item='item' collection='serviceLevel' separator=',' >#{item}</foreach>)</if> "
+ "<if test='customFields != null'>AND (CUSTOM_1 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_2 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_3 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_4 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_5 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_6 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_7 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>) OR CUSTOM_8 IN(<foreach item='item' collection='customFields' separator=',' >#{item}</foreach>))</if> "
+ "<if test='validFrom != null'>AND VALID_FROM IN(<foreach item='item' collection='validFrom' separator=',' >#{item}</foreach>)</if> "
+ "<if test='validUntil != null'>AND VALID_UNTIL IN(<foreach item='item' collection='validUntil' separator=',' >#{item}</foreach>)</if> "
+ "</where>"
+ "</script>")
@Results({ @Result(property = "id", column = "ID"),
@ -108,7 +119,6 @@ public interface QueryMapper {
@Result(property = "category", column = "CATEGORY"),
@Result(property = "type", column = "TYPE"),
@Result(property = "created", column = "CREATED"),
@Result(property = "modified", column = "MODIFIED"),
@Result(property = "name", column = "NAME"),
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "priority", column = "PRIORITY"),

View File

@ -2,10 +2,13 @@ package org.taskana.persistence;
import org.taskana.model.Classification;
import java.util.Date;
/**
* ClassificationQuery for generating dynamic sql.
*/
public interface ClassificationQuery extends BaseQuery<Classification> {
/**
* Add your tenant id to your query.
* @param tenantId
@ -38,6 +41,27 @@ public interface ClassificationQuery extends BaseQuery<Classification> {
*/
ClassificationQuery type(String... type);
/**
* Add your domain to your query.
* @param domain
* @return
*/
ClassificationQuery domain(String... domain);
/**
* Add to your query if the Classification shall be valid in its domain.
* @param validInDomain
* @return
*/
ClassificationQuery validInDomain(Boolean validInDomain);
/**
* Add your created-Dates to your query.
* @param created
* @return
*/
ClassificationQuery created(Date... created);
/**
* Add your name to your query.
* @param name
@ -71,4 +95,24 @@ public interface ClassificationQuery extends BaseQuery<Classification> {
*/
ClassificationQuery serviceLevel(String... serviceLevel);
/**
* Add your customFields to your query.
* @param customFields
* @return
*/
ClassificationQuery customFields(String... customFields);
/**
* Define after which date the classifications should be valid.
* @param validFrom
* @return
*/
ClassificationQuery validFrom(Date... validFrom);
/**
* Define until which date the classifications should be valid.
* @param validUntil
* @return
*/
ClassificationQuery validUntil(Date... validUntil);
}

View File

@ -5,7 +5,7 @@ CREATE TABLE TASKANA_SCHEMA_VERSION(
);
INSERT INTO TASKANA_SCHEMA_VERSION VALUES ('1', '0.0.1');
CREATE TABLE TASK(
CREATE TABLE TASK (
ID CHAR(40) NOT NULL,
TENANT_ID VARCHAR(32) NULL,
CREATED TIMESTAMP NULL,
@ -59,11 +59,11 @@ CREATE TABLE DISTRIBUTION_TARGETS(
CREATE TABLE CLASSIFICATION(
ID CHAR(40) NOT NULL,
TENANT_ID VARCHAR(32) NULL,
PARENT_CLASSIFICATION_ID VARCHAR(255),
PARENT_CLASSIFICATION_ID VARCHAR(255) NOT NULL,
CATEGORY VARCHAR(255),
TYPE VARCHAR(255),
DOMAIN VARCHAR(255) NOT NULL,
VALID_IN_DOMAIN BOOLEAN NULL,
VALID_IN_DOMAIN BOOLEAN NOT NULL,
CREATED DATE NULL,
NAME VARCHAR(255) NULL,
DESCRIPTION VARCHAR(255) NULL,
@ -77,9 +77,8 @@ CREATE TABLE CLASSIFICATION(
CUSTOM_6 VARCHAR(255) NULL,
CUSTOM_7 VARCHAR(255) NULL,
CUSTOM_8 VARCHAR(255) NULL,
VALID_FROM DATE NULL,
VALID_UNTIL DATE NULL,
PRIMARY KEY (ID)
VALID_FROM DATE NOT NULL,
VALID_UNTIL DATE NOT NULL,
);
CREATE TABLE WORKBASKET_ACCESS_LIST(

View File

@ -5,7 +5,10 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import org.taskana.exceptions.NotAuthorizedException;
import org.taskana.impl.persistence.TestClassificationQuery;
import org.taskana.model.Classification;
import org.taskana.model.mappings.ClassificationMapper;
@ -24,121 +27,50 @@ import static org.mockito.Mockito.*;
@RunWith(MockitoJUnitRunner.class)
public class ClassificationServiceImplTest {
@Spy
@InjectMocks
ClassificationServiceImpl classificationService;
@Mock
ClassificationMapper classificationMapper;
@Test
public void testInsertClassification() {
public void testAddClassification() {
doNothing().when(classificationMapper).insert(any());
Classification classification = new Classification();
classification.setId("0");
classificationService.insertClassification(classification);
classificationService.addClassification(classification);
when(classificationMapper.findByIdAndDomain(any(), any())).thenReturn(classification);
when(classificationMapper.findByIdAndDomain(any(), any(), any())).thenReturn(classification);
Assert.assertNotNull(classificationService.selectClassificationById(classification.getId()));
Assert.assertNotNull(classificationService.getClassification(classification.getId(), ""));
}
@Test
public void testFindAllClassifications() {
doNothing().when(classificationMapper).insert(any());
Classification classification0 = new Classification();
classification0.setId("0");
classification0.setParentClassificationId("");
classificationService.insertClassification(classification0);
Classification classification1 = new Classification();
classification1.setId("1");
classification1.setParentClassificationId("");
classificationService.insertClassification(classification1);
List<Classification> classifications = new ArrayList<>();
classifications.add(classification0);
when(classificationMapper.findByParentId("")).thenReturn(classifications);
verify(classificationMapper, atLeast(2)).insert(any());
Assert.assertEquals(1, classificationService.selectClassifications().size());
}
@Test
public void testFindByParentClassification() {
doNothing().when(classificationMapper).insert(any());
Classification classification0 = new Classification();
classification0.setId("0");
classification0.setParentClassificationId("0");
classificationService.insertClassification(classification0);
Classification classification1 = new Classification();
classification1.setId("1");
classification1.setParentClassificationId("0");
classificationService.insertClassification(classification1);
List<Classification> classifications = new ArrayList<>();
classifications.add(classification0);
classifications.add(classification1);
when(classificationMapper.findByParentId(any())).thenReturn(classifications);
verify(classificationMapper, times(2)).insert(any());
Assert.assertEquals(2, classificationService.selectClassificationsByParentId("0").size());
}
@Test
public void testModifiedClassificationSameDay() {
doNothing().when(classificationMapper).insert(any());
doNothing().when(classificationMapper).update(any());
Classification classification = new Classification();
classificationService.insertClassification(classification);
when(classificationMapper.findByIdAndDomain(any(), eq(""))).thenReturn(classification);
when(classificationMapper.findByIdAndDomain(any(), eq("testDomain"))).thenReturn(null);
//Same day, same domain
Classification classification2 = classification;
classification2.setDescription("TEST EVERYTHING");
classificationService.updateClassification(classification2);
//Same day, different domain
Classification classification3 = classification;
classification3.setDomain("testDomain");
classificationService.updateClassification(classification3);
verify(classificationMapper, times(1)).update(any());
verify(classificationMapper, times(2)).insert(any()); // insert classification, insert classification 3
Assert.assertEquals(classification.getValidFrom(), Date.valueOf(LocalDate.now()));
Assert.assertEquals(classification.getValidUntil(), classification3.getValidUntil());
}
@Test
public void testModifiedClassificationDifferentDates() {
public void testModifiedClassification() {
doNothing().when(classificationMapper).insert(any());
doNothing().when(classificationMapper).update(any());
int insert = 0;
Classification classification = new Classification();
classificationService.insertClassification(classification);
classification.setId("0");
classificationService.addClassification(classification);
insert++;
classification.setValidFrom(Date.valueOf(LocalDate.now().minusDays(1)));
when(classificationMapper.findByIdAndDomain(any(), eq(""))).thenReturn(classification);
when(classificationMapper.findByIdAndDomain(any(), eq("testDomain"))).thenReturn(null);
when(classificationMapper.findByIdAndDomain(any(), any(), any())).thenReturn(classification);
//Different day, same domain
Classification classification2 = classification;
//same domain
Classification classification2 = new Classification();
classification2.setId(classification.getId());
classification2.setDescription("TEST EVERYTHING");
classificationService.updateClassification(classification2);
insert++;
//Different day, different domain
Classification classification3 = classification;
//different domain
Classification classification3 = new Classification();
classification3.setId(classification.getId());
classification3.setDomain("testDomain");
classificationService.updateClassification(classification3);
@ -147,7 +79,60 @@ public class ClassificationServiceImplTest {
verify(classificationMapper, times(1)).update(any()); // update when same domain
verify(classificationMapper, times(insert)).insert(any()); // insert all classifications
Assert.assertEquals(classification.getValidFrom(), Date.valueOf(LocalDate.now()));
Assert.assertEquals(classification.getValidUntil(), Date.valueOf(LocalDate.now().minusDays(1)));
Assert.assertEquals(classification2.getValidUntil(), classification3.getValidUntil());
}
@Test
public void testFindAllClassifications() throws NotAuthorizedException {
doNothing().when(classificationMapper).insert(any());
// insert Classifications
Classification classification0 = new Classification();
classificationService.addClassification(classification0);
Classification classification1 = new Classification();
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classification2.setParentClassificationId(classification0.getId());
classificationService.addClassification(classification2);
//update Classification1
Classification classification11 = new Classification();
classification11.setId(classification1.getId());
when(classificationMapper.findByIdAndDomain(any(), any(), any())).thenReturn(classification1);
classificationService.updateClassification(classification11);
List<Classification> classifications = new ArrayList<>();
classifications.add(classification0);
classifications.add(classification1);
classifications.add(classification2);
classifications.add(classification11);
doReturn(new TestClassificationQuery(classifications)).when(classificationService).createClassificationQuery();
List<Classification> classificationList = classificationService.getClassificationTree();
verify(classificationMapper, atLeast(2)).insert(any());
Assert.assertEquals(2 + 1, classificationList.size());
}
@Test
public void testClassificationQuery() throws NotAuthorizedException {
doNothing().when(classificationMapper).insert(any());
Classification classification = new Classification();
classification.setDescription("DESC");
classificationService.addClassification(classification);
Classification classification1 = new Classification();
classification1.setDescription("ABC");
classificationService.addClassification(classification1);
List<Classification> classifications = new ArrayList<>();
classifications.add(classification);
classifications.add(classification1);
doReturn(new TestClassificationQuery(classifications)).when(classificationService).createClassificationQuery();
List<Classification> classificationDESC = classificationService.createClassificationQuery().descriptionLike("DESC").list();
Assert.assertEquals(1, classificationDESC.size());
}
}

View File

@ -1,12 +1,15 @@
package org.taskana.impl.integration;
import org.h2.jdbcx.JdbcDataSource;
import org.h2.store.fs.FileUtils;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.taskana.ClassificationService;
import org.taskana.TaskanaEngine;
import org.taskana.configuration.TaskanaEngineConfiguration;
import org.taskana.exceptions.NotAuthorizedException;
import org.taskana.model.Classification;
import javax.security.auth.login.LoginException;
@ -14,6 +17,7 @@ import java.io.FileNotFoundException;
import java.sql.Date;
import java.sql.SQLException;
import java.time.LocalDate;
import java.util.List;
/**
* Integration Test for ClassificationServiceImpl.
@ -38,45 +42,29 @@ public class ClassificationServiceImplIntTest {
@Test
public void testInsertClassification() {
Classification classification = new Classification();
classification.setId("0");
classificationService.insertClassification(classification);
classificationService.addClassification(classification);
Assert.assertNotNull(classificationService.selectClassificationById(classification.getId()));
Assert.assertNotNull(classificationService.getClassification(classification.getId(), ""));
}
@Test
public void testFindAllClassifications() {
public void testFindAllClassifications() throws NotAuthorizedException {
Classification classification0 = new Classification();
classification0.setId("0");
classification0.setParentClassificationId("");
classificationService.insertClassification(classification0);
classificationService.addClassification(classification0);
Classification classification1 = new Classification();
classification1.setId("1");
classification1.setParentClassificationId("");
classificationService.insertClassification(classification1);
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classification2.setParentClassificationId(classification0.getId());
classificationService.addClassification(classification2);
Assert.assertEquals(2, classificationService.selectClassifications().size());
}
@Test
public void testFindByParentClassification() {
Classification classification0 = new Classification();
classification0.setId("0");
classification0.setParentClassificationId("0");
classificationService.insertClassification(classification0);
Classification classification1 = new Classification();
classification1.setId("1");
classification1.setParentClassificationId("0");
classificationService.insertClassification(classification1);
Assert.assertEquals(2, classificationService.selectClassificationsByParentId("0").size());
Assert.assertEquals(2 + 1, classificationService.getClassificationTree().size());
}
@Test
public void testModifiedClassification() {
Classification classification = new Classification();
classificationService.insertClassification(classification);
classificationService.addClassification(classification);
classification.setDescription("TEST SOMETHING");
classificationService.updateClassification(classification);
@ -84,22 +72,188 @@ public class ClassificationServiceImplIntTest {
}
@Test
public void testFindByDomainAndCategory() {
public void testInsertAndClassificationMapper() throws NotAuthorizedException {
Classification classification = new Classification();
classificationService.addClassification(classification);
Date today = Date.valueOf(LocalDate.now());
List<Classification> list = classificationService.createClassificationQuery().validInDomain(Boolean.TRUE).created(today).validFrom(today).validUntil(Date.valueOf("9999-12-31")).list();
Assert.assertEquals(1, list.size());
}
@Test
public void testUpdateAndClassificationMapper() throws NotAuthorizedException {
Classification classification = new Classification();
classificationService.addClassification(classification);
System.out.println(classification.getId());
classification.setDescription("description");
classificationService.updateClassification(classification);
List<Classification> list = classificationService.createClassificationQuery().validUntil(Date.valueOf("9999-12-31")).list();
Assert.assertEquals(1, list.size());
list = classificationService.createClassificationQuery().validInDomain(true).list();
Assert.assertEquals(2, list.size());
classification.setDomain("domain");
classificationService.updateClassification(classification);
System.out.println(classification.getId());
list = classificationService.createClassificationQuery().validUntil(Date.valueOf("9999-12-31")).list();
Assert.assertEquals(2, list.size());
System.out.println(classification.getParentClassificationId());
list = classificationService.getClassificationTree();
Assert.assertEquals(2, list.size());
}
@Test
public void testFindWithClassificationMapperDomainAndCategory() throws NotAuthorizedException {
Classification classification1 = new Classification();
classification1.setDomain("domain1");
classification1.setCategory("category1");
classificationService.insertClassification(classification1);
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classification2.setDomain("domain2");
classification2.setCategory("category1");
classificationService.insertClassification(classification2);
classificationService.addClassification(classification2);
Classification classification3 = new Classification();
classification3.setDomain("domain1");
classification3.setCategory("category2");
classificationService.insertClassification(classification3);
classificationService.addClassification(classification3);
int sizeOfReturn = classificationService.selectClassificationByDomainAndCategory("domain1", "category1").size();
Assert.assertEquals(sizeOfReturn, 1);
List<Classification> list = classificationService.createClassificationQuery().category("category1").domain("domain1").list();
Assert.assertEquals(1, list.size());
list = classificationService.createClassificationQuery().domain("domain1", "domain3").list();
Assert.assertEquals(2, list.size());
}
@Test
public void testFindWithClassificationMapperTenantCustomAndCategory() throws NotAuthorizedException {
Classification classification1 = new Classification();
classification1.setTenantId("tenant1");
classification1.setCategory("category1");
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classification2.setTenantId("tenant1");
classification2.setCustom1("custom1");
classification2.setCategory("category1");
classificationService.addClassification(classification2);
Classification classification3 = new Classification();
classification3.setCustom1("custom2");
classification3.setCustom2("custom1");
classification3.setCategory("category2");
classificationService.addClassification(classification3);
Classification classification4 = new Classification();
classification4.setTenantId("tenant2");
classification4.setCustom8("custom2");
classification4.setCategory("category1");
classificationService.addClassification(classification4);
List<Classification> list = classificationService.createClassificationQuery().tenantId("tenant1").customFields("custom1").list();
Assert.assertEquals(1, list.size());
list = classificationService.createClassificationQuery().customFields("custom2").list();
Assert.assertEquals(2, list.size());
list = classificationService.createClassificationQuery().tenantId("tenant1").category("category1").list();
Assert.assertEquals(2, list.size());
}
@Test
public void testFindWithClassificationMapperPriorityTypeAndParent() throws NotAuthorizedException {
Classification classification = new Classification();
classification.setPriority(Integer.decode("5"));
classification.setType("type1");
classificationService.addClassification(classification);
Classification classification1 = new Classification();
classification1.setPriority(Integer.decode("3"));
classification1.setType("type1");
classification1.setParentClassificationId(classification.getId());
classificationService.addClassification(classification1);
Classification classification2 = new Classification();
classification2.setPriority(Integer.decode("5"));
classification2.setType("type2");
classification2.setParentClassificationId(classification.getId());
classificationService.addClassification(classification2);
Classification classification3 = new Classification();
classification3.setPriority(Integer.decode("5"));
classification3.setType("type1");
classification3.setParentClassificationId(classification1.getId());
classificationService.addClassification(classification3);
List<Classification> list = classificationService.createClassificationQuery().parentClassification(classification.getId()).list();
Assert.assertEquals(2, list.size());
list = classificationService.createClassificationQuery().type("type1").priority(Integer.decode("5")).list();
Assert.assertEquals(2, list.size());
list = classificationService.createClassificationQuery().priority(Integer.decode("5")).type("type1").parentClassification(classification1.getId()).list();
Assert.assertEquals(1, list.size());
}
@Test
public void testFindWithClassificationMapperServiceLevelNameAndDescription() throws NotAuthorizedException {
int all = 0;
Classification classification = new Classification();
classification.setServiceLevel("P1D");
classification.setName("name1");
classification.setDescription("desc");
classificationService.addClassification(classification);
all++;
Classification classification1 = new Classification();
classification1.setServiceLevel("P1DT1H");
classification1.setName("name1");
classification1.setDescription("desc");
classificationService.addClassification(classification1);
all++;
Classification classification2 = new Classification();
classification2.setServiceLevel("P1D");
classification2.setName("name");
classification2.setDescription("desc");
classificationService.addClassification(classification2);
all++;
Classification classification3 = new Classification();
classification3.setName("name1");
classification3.setDescription("description");
classificationService.addClassification(classification3);
all++;
List<Classification> list = classificationService.createClassificationQuery().name("name").list();
Assert.assertEquals(1, list.size());
list = classificationService.createClassificationQuery().serviceLevel("P1D").descriptionLike("desc").list();
Assert.assertEquals(2, list.size());
list = classificationService.createClassificationQuery().serviceLevel("P1DT1H").name("name").list();
Assert.assertEquals(0, list.size());
list = classificationService.createClassificationQuery().descriptionLike("desc%").list();
Assert.assertEquals(all, list.size());
}
@Test
public void testDefaultSettingsWithClassificationMapper() throws NotAuthorizedException {
Classification classification = new Classification();
Classification classification1 = new Classification();
classificationService.addClassification(classification);
classificationService.addClassification(classification1);
classification1.setParentClassificationId(classification.getId());
classificationService.updateClassification(classification1);
List<Classification>
list = classificationService.createClassificationQuery().parentClassification("").list();
Assert.assertEquals(2, list.size());
list = classificationService.createClassificationQuery().validUntil(Date.valueOf("9999-12-31")).list();
Assert.assertEquals(2, list.size());
List<Classification> listAll = classificationService.createClassificationQuery().list();
list = classificationService.createClassificationQuery().validFrom(Date.valueOf(LocalDate.now())).list();
Assert.assertEquals(listAll.size(), list.size());
list = classificationService.createClassificationQuery().validInDomain(true).list();
Assert.assertEquals(listAll.size(), list.size());
list = classificationService.createClassificationQuery().created(Date.valueOf(LocalDate.now())).list();
Assert.assertEquals(listAll.size(), list.size());
list = classificationService.createClassificationQuery().domain("domain1").validInDomain(false).list();
Assert.assertEquals(0, list.size());
list = classificationService.createClassificationQuery().validFrom(Date.valueOf((LocalDate.now()))).validUntil(Date.valueOf(LocalDate.now().minusDays(1))).list();
Assert.assertEquals(1, list.size());
}
@AfterClass
public static void cleanUp() {
FileUtils.deleteRecursive("~/data", true);
}
}

View File

@ -1,10 +1,8 @@
package org.taskana.impl.integration;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.List;
import org.h2.jdbcx.JdbcDataSource;
import org.h2.store.fs.FileUtils;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Test;
import org.taskana.TaskanaEngine;
@ -20,6 +18,10 @@ import org.taskana.model.TaskState;
import org.taskana.persistence.ClassificationQuery;
import org.taskana.persistence.ObjectReferenceQuery;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.List;
/**
* Integration Test for TaskServiceImpl transactions.
* @author EH
@ -123,4 +125,8 @@ public class TaskServiceImplTransactionTest {
}
@AfterClass
public static void cleanUp() {
FileUtils.deleteRecursive("~/data", true);
}
}

View File

@ -1,13 +1,8 @@
package org.taskana.impl.integration;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.security.auth.login.LoginException;
import org.h2.jdbcx.JdbcDataSource;
import org.h2.store.fs.FileUtils;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@ -19,6 +14,12 @@ import org.taskana.exceptions.WorkbasketNotFoundException;
import org.taskana.model.Workbasket;
import org.taskana.model.WorkbasketAccessItem;
import javax.security.auth.login.LoginException;
import java.io.FileNotFoundException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* Integration Test for workbasketServiceImpl.
@ -181,4 +182,8 @@ public class WorkbasketServiceImplIntTest {
workbasketServiceImpl.getWorkbasketAuthorization(accessItem.getId()).getUserId());
}
@AfterClass
public static void cleanUp() {
FileUtils.deleteRecursive("~/data", true);
}
}

View File

@ -0,0 +1,149 @@
package org.taskana.impl.persistence;
import org.taskana.exceptions.NotAuthorizedException;
import org.taskana.model.Classification;
import org.taskana.persistence.ClassificationQuery;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Created by BV on 26.10.2017.
*/
public class TestClassificationQuery implements ClassificationQuery {
private List<Classification> classifications;
private String[] parentId;
private Date[] validUntil;
private String description;
public TestClassificationQuery(List<Classification> classifications) {
this.classifications = classifications;
}
@Override
public ClassificationQuery tenantId(String tenantId) {
return this;
}
@Override
public ClassificationQuery parentClassification(String... parentClassificationId) {
parentId = parentClassificationId;
return this;
}
@Override
public ClassificationQuery category(String... category) {
return this;
}
@Override
public ClassificationQuery type(String... type) {
return this;
}
@Override
public ClassificationQuery domain(String... domain) {
return this;
}
@Override
public ClassificationQuery validInDomain(Boolean validInDomain) {
return this;
}
@Override
public ClassificationQuery created(Date... created) {
return this;
}
@Override
public ClassificationQuery name(String... name) {
return this;
}
@Override
public ClassificationQuery descriptionLike(String description) {
this.description = description;
return this;
}
@Override
public ClassificationQuery priority(int... priorities) {
return this;
}
@Override
public ClassificationQuery serviceLevel(String... serviceLevel) {
return this;
}
@Override
public ClassificationQuery customFields(String... customFields) {
return this;
}
@Override
public ClassificationQuery validFrom(Date... validFrom) {
return this;
}
@Override
public ClassificationQuery validUntil(Date... validUntil) {
this.validUntil = validUntil;
return this;
}
@Override
public List<Classification> list() throws NotAuthorizedException {
List<Classification> returnedClassifications = new ArrayList<>();
returnedClassifications.addAll(classifications);
for (Classification classification : classifications) {
if (this.validUntil != null) {
boolean validDate = false;
for (Date valid : validUntil) {
if (!classification.getValidUntil().before(valid)) {
validDate = true;
}
}
if (!validDate) {
returnedClassifications.remove(classification);
}
}
if (this.parentId != null) {
Boolean classificationWithParent = false;
if (classification.getParentClassificationId() != null) {
for (String parent : this.parentId) {
if (parent.equals(classification.getParentClassificationId())) {
classificationWithParent = true;
}
}
}
if (!classificationWithParent) {
returnedClassifications.remove(classification);
}
}
if (this.description != null) {
if (classification.getDescription() != description) {
returnedClassifications.remove(classification);
}
}
}
return returnedClassifications;
}
@Override
public List<Classification> list(int offset, int limit) throws NotAuthorizedException {
return null;
}
@Override
public Classification single() throws NotAuthorizedException {
return null;
}
}

View File

@ -21,19 +21,29 @@ public class ClassificationController {
private ClassificationService classificationService;
@RequestMapping
public List<Classification> getClassifications() {
return classificationService.selectClassifications();
public ResponseEntity<List<Classification>> getClassifications() {
try {
List<Classification> classificationTree = classificationService.getClassificationTree();
return ResponseEntity.status(HttpStatus.CREATED).body(classificationTree);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
}
}
@RequestMapping(value = "/{classificationId}")
public Classification getClassification(@PathVariable String classificationId) {
return classificationService.selectClassificationById(classificationId);
return classificationService.getClassification(classificationId, "");
}
@RequestMapping(value = "/{classificationId}/{domain}")
public Classification getClassification(@PathVariable String classificationId, @PathVariable String domain) {
return classificationService.getClassification(classificationId, domain);
}
@RequestMapping(method = RequestMethod.POST)
public ResponseEntity<Classification> createClassification(@RequestBody Classification classification) {
try {
classificationService.insertClassification(classification);
classificationService.addClassification(classification);
return ResponseEntity.status(HttpStatus.CREATED).body(classification);
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();