Merge pull request #27 from BVier/master

Add Customs and Domain (with functionalities) to Classification
This commit is contained in:
Holger Hagen 2017-08-02 11:16:44 +02:00 committed by GitHub
commit 639ddb591d
9 changed files with 452 additions and 93 deletions

View File

@ -1,10 +1,10 @@
package org.taskana; package org.taskana;
import java.util.List;
import org.taskana.model.Classification; import org.taskana.model.Classification;
import org.taskana.persistence.ClassificationQuery; import org.taskana.persistence.ClassificationQuery;
import java.util.List;
/** /**
* This class manages the classifications. * This class manages the classifications.
*/ */
@ -26,11 +26,53 @@ public interface ClassificationService {
/** /**
* Get a Classification for a given id. * Get a Classification for a given id.
* Returns just the DEFAULT Classification!!!
* Better use selectClassificationByIdAndDomain.
*
* @param id * @param id
* @return the requested Classification * @return the requested Default-Classification
*/ */
Classification selectClassificationById(String id); Classification selectClassificationById(String id);
/**
* Get the Classification for id and domain.
* @param id
* @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);
/** /**
* Insert a new Classification. * Insert a new Classification.
* @param classification * @param classification

View File

@ -1,10 +1,5 @@
package org.taskana.impl; package org.taskana.impl;
import java.sql.Date;
import java.time.Duration;
import java.time.LocalDate;
import java.util.List;
import org.taskana.ClassificationService; import org.taskana.ClassificationService;
import org.taskana.TaskanaEngine; import org.taskana.TaskanaEngine;
import org.taskana.impl.persistence.ClassificationQueryImpl; import org.taskana.impl.persistence.ClassificationQueryImpl;
@ -13,6 +8,11 @@ import org.taskana.model.Classification;
import org.taskana.model.mappings.ClassificationMapper; import org.taskana.model.mappings.ClassificationMapper;
import org.taskana.persistence.ClassificationQuery; import org.taskana.persistence.ClassificationQuery;
import java.sql.Date;
import java.time.Duration;
import java.time.LocalDate;
import java.util.List;
/** /**
* This is the implementation of ClassificationService. * This is the implementation of ClassificationService.
*/ */
@ -53,23 +53,79 @@ public class ClassificationServiceImpl implements ClassificationService {
public void insertClassification(Classification classification) { public void insertClassification(Classification classification) {
classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION)); classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION));
classification.setCreated(Date.valueOf(LocalDate.now())); classification.setCreated(Date.valueOf(LocalDate.now()));
classification.setModified(Date.valueOf(LocalDate.now())); classification.setValidFrom(Date.valueOf(LocalDate.now()));
classification.setValidUntil(Date.valueOf("9999-12-31"));
this.checkServiceLevel(classification); this.checkServiceLevel(classification);
if (classification.getDomain() == null) {
classification.setDomain("");
}
classificationMapper.insert(classification); classificationMapper.insert(classification);
} }
@Override @Override
public void updateClassification(Classification classification) { public void updateClassification(Classification classification) {
classification.setModified(Date.valueOf(LocalDate.now()));
this.checkServiceLevel(classification); this.checkServiceLevel(classification);
Date today = Date.valueOf(LocalDate.now());
classificationMapper.update(classification); Classification oldClassification = classificationMapper.findByIdAndDomain(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);
classification.setValidFrom(today);
classification.setValidUntil(Date.valueOf("9999-12-31"));
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);
}
}
} }
@Override @Override
public Classification selectClassificationById(String id) { public Classification selectClassificationById(String id) {
return classificationMapper.findById(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 checkServiceLevel(Classification classification) {
@ -86,4 +142,5 @@ public class ClassificationServiceImpl implements ClassificationService {
public ClassificationQuery createClassificationQuery() { public ClassificationQuery createClassificationQuery() {
return new ClassificationQueryImpl(taskanaEngine); return new ClassificationQueryImpl(taskanaEngine);
} }
} }

View File

@ -14,13 +14,24 @@ public class Classification {
private String parentClassificationId; private String parentClassificationId;
private String category; private String category;
private String type; private String type;
private String domain;
private Boolean isValidInDomain;
private Date created; private Date created;
private Date modified;
private String name; private String name;
private String description; private String description;
private int priority; private int priority;
private String serviceLevel; // PddDThhHmmM private String serviceLevel; // PddDThhHmmM
private List<Classification> children = new ArrayList<>(); private List<Classification> children = new ArrayList<>();
private String custom1;
private String custom2;
private String custom3;
private String custom4;
private String custom5;
private String custom6;
private String custom7;
private String custom8;
private Date validFrom;
private Date validUntil;
public String getId() { public String getId() {
return id; return id;
@ -62,6 +73,22 @@ public class Classification {
this.category = category; this.category = category;
} }
public String getDomain() {
return this.domain;
}
public void setDomain(String domain) {
this.domain = domain;
}
public Boolean getValidInDomain() {
return isValidInDomain;
}
public void setValidInDomain(Boolean validInDomain) {
isValidInDomain = validInDomain;
}
public Date getCreated() { public Date getCreated() {
return created; return created;
} }
@ -70,14 +97,6 @@ public class Classification {
this.created = created; this.created = created;
} }
public Date getModified() {
return modified;
}
public void setModified(Date modified) {
this.modified = modified;
}
public String getName() { public String getName() {
return name; return name;
} }
@ -122,4 +141,84 @@ public class Classification {
this.children = children; this.children = children;
} }
public String getCustom1() {
return custom1;
}
public void setCustom1(String custom1) {
this.custom1 = custom1;
}
public String getCustom2() {
return custom2;
}
public void setCustom2(String custom2) {
this.custom2 = custom2;
}
public String getCustom3() {
return custom3;
}
public void setCustom3(String custom3) {
this.custom3 = custom3;
}
public String getCustom4() {
return custom4;
}
public void setCustom4(String custom4) {
this.custom4 = custom4;
}
public String getCustom5() {
return custom5;
}
public void setCustom5(String custom5) {
this.custom5 = custom5;
}
public String getCustom6() {
return custom6;
}
public void setCustom6(String custom6) {
this.custom6 = custom6;
}
public String getCustom7() {
return custom7;
}
public void setCustom7(String custom7) {
this.custom7 = custom7;
}
public String getCustom8() {
return custom8;
}
public void setCustom8(String custom8) {
this.custom8 = custom8;
}
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

@ -10,58 +10,147 @@ import java.util.List;
*/ */
public interface ClassificationMapper { public interface ClassificationMapper {
@Select("SELECT ID, TENANT_ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, CREATED, MODIFIED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL " @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 " + "FROM CLASSIFICATION "
+ "ORDER BY ID") + "ORDER BY ID")
@Results({ @Result(property = "id", column = "ID"), @Results({@Result(property = "id", column = "ID"),
@Result(property = "tenantId", column = "TENANT_ID"), @Result(property = "tenantId", column = "TENANT_ID"),
@Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"), @Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"),
@Result(property = "category", column = "CATEGORY"), @Result(property = "category", column = "CATEGORY"),
@Result(property = "type", column = "TYPE"), @Result(property = "type", column = "TYPE"),
@Result(property = "created", column = "CREATED"), @Result(property = "domain", column = "DOMAIN"),
@Result(property = "modified", column = "MODIFIED"), @Result(property = "isValidInDomain", column = "VALID_IN_DOMAIN"),
@Result(property = "name", column = "NAME"), @Result(property = "created", column = "CREATED"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "name", column = "NAME"),
@Result(property = "priority", column = "PRIORITY"), @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "serviceLevel", column = "SERVICE_LEVEL") }) @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(); List<Classification> findAll();
@Select("SELECT ID, TENANT_ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, CREATED, MODIFIED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL " @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 " + "FROM CLASSIFICATION "
+ "WHERE PARENT_CLASSIFICATION_ID = #{parentClassificationId} " + "WHERE PARENT_CLASSIFICATION_ID = #{parentClassificationId} "
+ "ORDER BY ID") + "ORDER BY ID")
@Results({ @Result(property = "id", column = "ID"), @Results({@Result(property = "id", column = "ID"),
@Result(property = "tenantId", column = "TENANT_ID"), @Result(property = "tenantId", column = "TENANT_ID"),
@Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"), @Result(property = "parentClassificationId", column = "PARENT_CLASSIFICATION_ID"),
@Result(property = "category", column = "CATEGORY"), @Result(property = "category", column = "CATEGORY"),
@Result(property = "type", column = "TYPE"), @Result(property = "type", column = "TYPE"),
@Result(property = "created", column = "CREATED"), @Result(property = "domain", column = "DOMAIN"),
@Result(property = "modified", column = "MODIFIED"), @Result(property = "isValidInDomain", column = "VALID_IN_DOMAIN"),
@Result(property = "name", column = "NAME"), @Result(property = "created", column = "CREATED"),
@Result(property = "description", column = "DESCRIPTION"), @Result(property = "name", column = "NAME"),
@Result(property = "priority", column = "PRIORITY"), @Result(property = "description", column = "DESCRIPTION"),
@Result(property = "serviceLevel", column = "SERVICE_LEVEL") }) @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); List<Classification> findByParentId(@Param("parentClassificationId") String parentId);
@Select("SELECT ID, TENANT_ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, CREATED, MODIFIED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL "
+ "FROM CLASSIFICATION "
+ "WHERE ID = #{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 = "created", column = "CREATED"),
@Result(property = "modified", column = "MODIFIED"),
@Result(property = "name", column = "NAME"),
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "priority", column = "PRIORITY"),
@Result(property = "serviceLevel", column = "SERVICE_LEVEL") })
Classification findById(@Param("id") String id);
@Insert("INSERT INTO CLASSIFICATION (ID, TENANT_ID, PARENT_CLASSIFICATION_ID, CATEGORY, TYPE, CREATED, NAME, DESCRIPTION, PRIORITY, SERVICE_LEVEL) VALUES (#{classification.id}, #{classification.tenantId}, #{classification.parentClassificationId}, #{classification.category}, #{classification.type}, #{classification.created}, #{classification.name}, #{classification.description}, #{classification.priority}, #{classification.serviceLevel})") @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}")
@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")})
Classification findByIdAndDomain(@Param("id") String id, @Param("domain") String domain);
@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); 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}, MODIFIED = #{classification.modified} 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); 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"
+ "FROM CLASSIFICATION "
+ "WHERE DOMAIN = #{domain}"
+ "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> 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);
} }

View File

@ -1,7 +1,5 @@
package org.taskana.model.mappings; package org.taskana.model.mappings;
import java.util.List;
import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Results;
@ -13,13 +11,15 @@ import org.taskana.model.Classification;
import org.taskana.model.ObjectReference; import org.taskana.model.ObjectReference;
import org.taskana.model.Task; import org.taskana.model.Task;
import java.util.List;
/** /**
* This class provides a mapper for all queries. * This class provides a mapper for all queries.
*/ */
public interface QueryMapper { public interface QueryMapper {
String OBJECTREFERENCEMAPPER_FINDBYID = "org.taskana.model.mappings.ObjectReferenceMapper.findById"; String OBJECTREFERENCEMAPPER_FINDBYID = "org.taskana.model.mappings.ObjectReferenceMapper.findById";
String CLASSIFICATION_FINDBYID = "org.taskana.model.mappings.ClassificationMapper.findById"; String CLASSIFICATION_FINDBYID = "org.taskana.model.mappings.ClassificationMapper.findByIdAndDomain";
@Select("<script>SELECT t.ID, t.TENANT_ID, t.CREATED, t.CLAIMED, t.COMPLETED, t.MODIFIED, t.PLANNED, t.DUE, t.NAME, t.DESCRIPTION, t.PRIORITY, t.STATE, t.CLASSIFICATION_ID, t.WORKBASKETID, t.OWNER, t.PRIMARY_OBJ_REF_ID, t.IS_READ, t.IS_TRANSFERRED, t.CUSTOM_1, t.CUSTOM_2, t.CUSTOM_3, t.CUSTOM_4, t.CUSTOM_5, t.CUSTOM_6, t.CUSTOM_7, t.CUSTOM_8, t.CUSTOM_9, t.CUSTOM_10 " @Select("<script>SELECT t.ID, t.TENANT_ID, t.CREATED, t.CLAIMED, t.COMPLETED, t.MODIFIED, t.PLANNED, t.DUE, t.NAME, t.DESCRIPTION, t.PRIORITY, t.STATE, t.CLASSIFICATION_ID, t.WORKBASKETID, t.OWNER, t.PRIMARY_OBJ_REF_ID, t.IS_READ, t.IS_TRANSFERRED, t.CUSTOM_1, t.CUSTOM_2, t.CUSTOM_3, t.CUSTOM_4, t.CUSTOM_5, t.CUSTOM_6, t.CUSTOM_7, t.CUSTOM_8, t.CUSTOM_9, t.CUSTOM_10 "
+ "FROM TASK t " + "FROM TASK t "

View File

@ -1,34 +1,21 @@
package org.taskana.model.mappings; package org.taskana.model.mappings;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;
import org.taskana.impl.persistence.MapTypeHandler;
import org.taskana.model.*;
import java.sql.Date; import java.sql.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.type.JdbcType;
import org.taskana.impl.persistence.MapTypeHandler;
import org.taskana.model.Classification;
import org.taskana.model.DueWorkbasketCounter;
import org.taskana.model.ObjectReference;
import org.taskana.model.Task;
import org.taskana.model.TaskState;
import org.taskana.model.TaskStateCounter;
/** /**
* This class is the mybatis mapping of task. * This class is the mybatis mapping of task.
*/ */
public interface TaskMapper { public interface TaskMapper {
String OBJECTREFERENCEMAPPER_FINDBYID = "org.taskana.model.mappings.ObjectReferenceMapper.findById"; String OBJECTREFERENCEMAPPER_FINDBYID = "org.taskana.model.mappings.ObjectReferenceMapper.findById";
String CLASSIFICATION_FINDBYID = "org.taskana.model.mappings.ClassificationMapper.findById"; String CLASSIFICATION_FINDBYID = "org.taskana.model.mappings.ClassificationMapper.findByIdAndDomain";
@Select("SELECT ID, TENANT_ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 " @Select("SELECT ID, TENANT_ID, CREATED, CLAIMED, COMPLETED, MODIFIED, PLANNED, DUE, NAME, DESCRIPTION, PRIORITY, STATE, CLASSIFICATION_ID, WORKBASKETID, OWNER, PRIMARY_OBJ_REF_ID, IS_READ, IS_TRANSFERRED, CUSTOM_ATTRIBUTES, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, CUSTOM_5, CUSTOM_6, CUSTOM_7, CUSTOM_8, CUSTOM_9, CUSTOM_10 "
+ "FROM TASK " + "FROM TASK "

View File

@ -62,12 +62,23 @@ CREATE TABLE CLASSIFICATION(
PARENT_CLASSIFICATION_ID VARCHAR(255), PARENT_CLASSIFICATION_ID VARCHAR(255),
CATEGORY VARCHAR(255), CATEGORY VARCHAR(255),
TYPE VARCHAR(255), TYPE VARCHAR(255),
DOMAIN VARCHAR(255) NOT NULL,
VALID_IN_DOMAIN BOOLEAN NULL,
CREATED DATE NULL, CREATED DATE NULL,
MODIFIED DATE NULL,
NAME VARCHAR(255) NULL, NAME VARCHAR(255) NULL,
DESCRIPTION VARCHAR(255) NULL, DESCRIPTION VARCHAR(255) NULL,
PRIORITY INT NULL, PRIORITY INT NULL,
SERVICE_LEVEL VARCHAR(255) NULL, SERVICE_LEVEL VARCHAR(255) NULL,
CUSTOM_1 VARCHAR(255) NULL,
CUSTOM_2 VARCHAR(255) NULL,
CUSTOM_3 VARCHAR(255) NULL,
CUSTOM_4 VARCHAR(255) NULL,
CUSTOM_5 VARCHAR(255) NULL,
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) PRIMARY KEY (ID)
); );

View File

@ -9,6 +9,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import org.taskana.model.Classification; import org.taskana.model.Classification;
import org.taskana.model.mappings.ClassificationMapper; import org.taskana.model.mappings.ClassificationMapper;
import java.sql.Date;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -37,7 +38,7 @@ public class ClassificationServiceImplTest {
classification.setId("0"); classification.setId("0");
classificationService.insertClassification(classification); classificationService.insertClassification(classification);
when(classificationMapper.findById(any())).thenReturn(classification); when(classificationMapper.findByIdAndDomain(any(), any())).thenReturn(classification);
Assert.assertNotNull(classificationService.selectClassificationById(classification.getId())); Assert.assertNotNull(classificationService.selectClassificationById(classification.getId()));
} }
@ -81,21 +82,72 @@ public class ClassificationServiceImplTest {
classifications.add(classification1); classifications.add(classification1);
when(classificationMapper.findByParentId(any())).thenReturn(classifications); when(classificationMapper.findByParentId(any())).thenReturn(classifications);
verify(classificationMapper, atLeast(2)).insert(any()); verify(classificationMapper, times(2)).insert(any());
Assert.assertEquals(2, classificationService.selectClassificationsByParentId("0").size()); Assert.assertEquals(2, classificationService.selectClassificationsByParentId("0").size());
} }
@Test @Test
public void testModifiedClassification() { public void testModifiedClassificationSameDay() {
doNothing().when(classificationMapper).insert(any()); doNothing().when(classificationMapper).insert(any());
doNothing().when(classificationMapper).update(any()); doNothing().when(classificationMapper).update(any());
Classification classification = new Classification(); Classification classification = new Classification();
classificationService.insertClassification(classification); classificationService.insertClassification(classification);
classification.setDescription("TEST EVERYTHING");
classificationService.updateClassification(classification);
Assert.assertEquals(classification.getModified().toString(), LocalDate.now().toString()); 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() {
doNothing().when(classificationMapper).insert(any());
doNothing().when(classificationMapper).update(any());
int insert = 0;
Classification classification = new Classification();
classificationService.insertClassification(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);
//Different day, same domain
Classification classification2 = classification;
classification2.setDescription("TEST EVERYTHING");
classificationService.updateClassification(classification2);
insert++;
//Different day, different domain
Classification classification3 = classification;
classification3.setId(classification.getId());
classification3.setDomain("testDomain");
classificationService.updateClassification(classification3);
insert++;
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(classification2.getValidUntil(), classification3.getValidUntil());
} }
} }

View File

@ -11,6 +11,7 @@ import org.taskana.model.Classification;
import javax.security.auth.login.LoginException; import javax.security.auth.login.LoginException;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.sql.Date;
import java.sql.SQLException; import java.sql.SQLException;
import java.time.LocalDate; import java.time.LocalDate;
@ -73,11 +74,32 @@ public class ClassificationServiceImplIntTest {
@Test @Test
public void testModifiedClassification() { public void testModifiedClassification() {
Classification classification = new Classification(); Classification classification = new Classification();
classificationService.insertClassification(classification); classificationService.insertClassification(classification);
classification.setDescription("TEST EVERYTHING"); classification.setDescription("TEST SOMETHING");
classificationService.updateClassification(classification); classificationService.updateClassification(classification);
Assert.assertEquals(classification.getModified().toString(), LocalDate.now().toString()); Assert.assertEquals(classification.getValidFrom(), Date.valueOf(LocalDate.now()));
} }
@Test
public void testFindByDomainAndCategory() {
Classification classification1 = new Classification();
classification1.setDomain("domain1");
classification1.setCategory("category1");
classificationService.insertClassification(classification1);
Classification classification2 = new Classification();
classification2.setDomain("domain2");
classification2.setCategory("category1");
classificationService.insertClassification(classification2);
Classification classification3 = new Classification();
classification3.setDomain("domain1");
classification3.setCategory("category2");
classificationService.insertClassification(classification3);
int sizeOfReturn = classificationService.selectClassificationByDomainAndCategory("domain1", "category1").size();
Assert.assertEquals(sizeOfReturn, 1);
}
} }