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

View File

@ -1,10 +1,5 @@
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.TaskanaEngine;
import org.taskana.impl.persistence.ClassificationQueryImpl;
@ -13,6 +8,11 @@ import org.taskana.model.Classification;
import org.taskana.model.mappings.ClassificationMapper;
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.
*/
@ -53,23 +53,79 @@ public class ClassificationServiceImpl implements ClassificationService {
public void insertClassification(Classification classification) {
classification.setId(IdGenerator.generateWithPrefix(ID_PREFIX_CLASSIFICATION));
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);
if (classification.getDomain() == null) {
classification.setDomain("");
}
classificationMapper.insert(classification);
}
@Override
public void updateClassification(Classification classification) {
classification.setModified(Date.valueOf(LocalDate.now()));
this.checkServiceLevel(classification);
Date today = Date.valueOf(LocalDate.now());
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
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) {
@ -86,4 +142,5 @@ public class ClassificationServiceImpl implements ClassificationService {
public ClassificationQuery createClassificationQuery() {
return new ClassificationQueryImpl(taskanaEngine);
}
}

View File

@ -14,13 +14,24 @@ public class Classification {
private String parentClassificationId;
private String category;
private String type;
private String domain;
private Boolean isValidInDomain;
private Date created;
private Date modified;
private String name;
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;
private String custom4;
private String custom5;
private String custom6;
private String custom7;
private String custom8;
private Date validFrom;
private Date validUntil;
public String getId() {
return id;
@ -62,6 +73,22 @@ public class Classification {
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() {
return created;
}
@ -70,14 +97,6 @@ public class Classification {
this.created = created;
}
public Date getModified() {
return modified;
}
public void setModified(Date modified) {
this.modified = modified;
}
public String getName() {
return name;
}
@ -122,4 +141,84 @@ public class Classification {
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,7 +10,7 @@ import java.util.List;
*/
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 "
+ "ORDER BY ID")
@Results({@Result(property = "id", column = "ID"),
@ -18,15 +18,26 @@ public interface ClassificationMapper {
@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 = "modified", column = "MODIFIED"),
@Result(property = "name", column = "NAME"),
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "priority", column = "PRIORITY"),
@Result(property = "serviceLevel", column = "SERVICE_LEVEL") })
@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, 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 "
+ "WHERE PARENT_CLASSIFICATION_ID = #{parentClassificationId} "
+ "ORDER BY ID")
@ -35,33 +46,111 @@ public interface ClassificationMapper {
@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 = "modified", column = "MODIFIED"),
@Result(property = "name", column = "NAME"),
@Result(property = "description", column = "DESCRIPTION"),
@Result(property = "priority", column = "PRIORITY"),
@Result(property = "serviceLevel", column = "SERVICE_LEVEL") })
@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, 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 "
+ "WHERE ID = #{id}")
+ "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 = "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);
@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, 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})")
@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}, 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);
@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;
import java.util.List;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
@ -13,13 +11,15 @@ import org.taskana.model.Classification;
import org.taskana.model.ObjectReference;
import org.taskana.model.Task;
import java.util.List;
/**
* This class provides a mapper for all queries.
*/
public interface QueryMapper {
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 "
+ "FROM TASK t "

View File

@ -1,34 +1,21 @@
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.util.List;
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.
*/
public interface TaskMapper {
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 "
+ "FROM TASK "

View File

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

View File

@ -9,6 +9,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import org.taskana.model.Classification;
import org.taskana.model.mappings.ClassificationMapper;
import java.sql.Date;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@ -37,7 +38,7 @@ public class ClassificationServiceImplTest {
classification.setId("0");
classificationService.insertClassification(classification);
when(classificationMapper.findById(any())).thenReturn(classification);
when(classificationMapper.findByIdAndDomain(any(), any())).thenReturn(classification);
Assert.assertNotNull(classificationService.selectClassificationById(classification.getId()));
}
@ -81,21 +82,72 @@ public class ClassificationServiceImplTest {
classifications.add(classification1);
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());
}
@Test
public void testModifiedClassification() {
public void testModifiedClassificationSameDay() {
doNothing().when(classificationMapper).insert(any());
doNothing().when(classificationMapper).update(any());
Classification classification = new 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 java.io.FileNotFoundException;
import java.sql.Date;
import java.sql.SQLException;
import java.time.LocalDate;
@ -73,11 +74,32 @@ public class ClassificationServiceImplIntTest {
@Test
public void testModifiedClassification() {
Classification classification = new Classification();
classificationService.insertClassification(classification);
classification.setDescription("TEST EVERYTHING");
classification.setDescription("TEST SOMETHING");
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);
}
}