TSK-1335: Add workbasket history events
This commit is contained in:
parent
ef82e4f3ef
commit
29ba5fe418
|
|
@ -1,5 +1,7 @@
|
||||||
package pro.taskana.simplehistory;
|
package pro.taskana.simplehistory;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.TaskanaRole;
|
||||||
|
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.spi.history.api.TaskanaHistory;
|
import pro.taskana.spi.history.api.TaskanaHistory;
|
||||||
|
|
||||||
/** The TaskanaHistoryEngine represents an overall set of all needed services. */
|
/** The TaskanaHistoryEngine represents an overall set of all needed services. */
|
||||||
|
|
@ -10,4 +12,20 @@ public interface TaskanaHistoryEngine {
|
||||||
* @return the HistoryService
|
* @return the HistoryService
|
||||||
*/
|
*/
|
||||||
TaskanaHistory getTaskanaHistoryService();
|
TaskanaHistory getTaskanaHistoryService();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check whether the current user is member of one of the roles specified.
|
||||||
|
*
|
||||||
|
* @param roles The roles that are checked for membership of the current user
|
||||||
|
* @return true if the current user is a member of at least one of the specified groups
|
||||||
|
*/
|
||||||
|
boolean isUserInRole(TaskanaRole... roles);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether current user is member of any of the specified roles.
|
||||||
|
*
|
||||||
|
* @param roles The roles that are checked for membership of the current user
|
||||||
|
* @throws NotAuthorizedException If the current user is not member of any specified role
|
||||||
|
*/
|
||||||
|
void checkRoleMembership(TaskanaRole... roles) throws NotAuthorizedException;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
package pro.taskana.simplehistory.impl;
|
|
||||||
|
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
|
||||||
|
|
||||||
/** This entity contains the most important information about a history event. */
|
|
||||||
public class HistoryEventImpl extends TaskanaHistoryEvent {
|
|
||||||
|
|
||||||
public HistoryEventImpl() {}
|
|
||||||
|
|
||||||
public HistoryEventImpl(String id, String userId, String details) {
|
|
||||||
super(id, userId, details);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,570 +0,0 @@
|
||||||
package pro.taskana.simplehistory.impl;
|
|
||||||
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import pro.taskana.common.api.TimeInterval;
|
|
||||||
import pro.taskana.common.api.exceptions.SystemException;
|
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
|
||||||
import pro.taskana.simplehistory.query.HistoryQuery;
|
|
||||||
import pro.taskana.simplehistory.query.HistoryQueryColumnName;
|
|
||||||
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
|
||||||
|
|
||||||
/** Implementation for generating dynamic sql. */
|
|
||||||
public class HistoryQueryImpl implements HistoryQuery {
|
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(HistoryQueryImpl.class);
|
|
||||||
|
|
||||||
private final TaskanaHistoryEngineImpl taskanaHistoryEngine;
|
|
||||||
private final HistoryQueryMapper historyQueryMapper;
|
|
||||||
|
|
||||||
private final List<String> orderBy;
|
|
||||||
private final List<String> orderColumns;
|
|
||||||
private int
|
|
||||||
maxRows; // limit for rows. used to make list(offset, limit) and single() more efficient.
|
|
||||||
|
|
||||||
private HistoryQueryColumnName columnName;
|
|
||||||
private String[] idIn;
|
|
||||||
private String[] businessProcessIdIn;
|
|
||||||
private String[] parentBusinessProcessIdIn;
|
|
||||||
private String[] taskIdIn;
|
|
||||||
private String[] eventTypeIn;
|
|
||||||
private TimeInterval[] createdIn;
|
|
||||||
private String[] userIdIn;
|
|
||||||
private String[] domainIn;
|
|
||||||
private String[] workbasketKeyIn;
|
|
||||||
private String[] porCompanyIn;
|
|
||||||
private String[] porSystemIn;
|
|
||||||
private String[] porInstanceIn;
|
|
||||||
private String[] porTypeIn;
|
|
||||||
private String[] porValueIn;
|
|
||||||
private String[] taskClassificationKeyIn;
|
|
||||||
private String[] taskClassificationCategoryIn;
|
|
||||||
private String[] attachmentClassificationKeyIn;
|
|
||||||
private String[] oldValueIn;
|
|
||||||
private String[] newValueIn;
|
|
||||||
private String[] custom1In;
|
|
||||||
private String[] custom2In;
|
|
||||||
private String[] custom3In;
|
|
||||||
private String[] custom4In;
|
|
||||||
|
|
||||||
private String[] businessProcessIdLike;
|
|
||||||
private String[] parentBusinessProcessIdLike;
|
|
||||||
private String[] taskIdLike;
|
|
||||||
private String[] eventTypeLike;
|
|
||||||
private String[] userIdLike;
|
|
||||||
private String[] domainLike;
|
|
||||||
private String[] workbasketKeyLike;
|
|
||||||
private String[] porCompanyLike;
|
|
||||||
private String[] porSystemLike;
|
|
||||||
private String[] porInstanceLike;
|
|
||||||
private String[] porTypeLike;
|
|
||||||
private String[] porValueLike;
|
|
||||||
private String[] taskClassificationKeyLike;
|
|
||||||
private String[] taskClassificationCategoryLike;
|
|
||||||
private String[] attachmentClassificationKeyLike;
|
|
||||||
private String[] oldValueLike;
|
|
||||||
private String[] newValueLike;
|
|
||||||
private String[] custom1Like;
|
|
||||||
private String[] custom2Like;
|
|
||||||
private String[] custom3Like;
|
|
||||||
private String[] custom4Like;
|
|
||||||
|
|
||||||
public HistoryQueryImpl(
|
|
||||||
TaskanaHistoryEngineImpl taskanaHistoryEngineImpl, HistoryQueryMapper historyQueryMapper) {
|
|
||||||
this.taskanaHistoryEngine = taskanaHistoryEngineImpl;
|
|
||||||
this.historyQueryMapper = historyQueryMapper;
|
|
||||||
this.orderBy = new ArrayList<>();
|
|
||||||
this.orderColumns = new ArrayList<>();
|
|
||||||
this.maxRows = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery idIn(String... idIn) {
|
|
||||||
this.idIn = toUpperCopy(idIn);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery businessProcessIdIn(String... businessProcessId) {
|
|
||||||
this.businessProcessIdIn = toUpperCopy(businessProcessId);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery parentBusinessProcessIdIn(String... parentBusinessProcessId) {
|
|
||||||
this.parentBusinessProcessIdIn = toUpperCopy(parentBusinessProcessId);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery taskIdIn(String... taskId) {
|
|
||||||
this.taskIdIn = toUpperCopy(taskId);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery eventTypeIn(String... eventType) {
|
|
||||||
this.eventTypeIn = toUpperCopy(eventType);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery createdWithin(TimeInterval... createdIn) {
|
|
||||||
this.createdIn = createdIn;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery userIdIn(String... userId) {
|
|
||||||
this.userIdIn = toUpperCopy(userId);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery domainIn(String... domain) {
|
|
||||||
this.domainIn = toUpperCopy(domain);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery workbasketKeyIn(String... workbasketKey) {
|
|
||||||
this.workbasketKeyIn = toUpperCopy(workbasketKey);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porCompanyIn(String... porCompany) {
|
|
||||||
this.porCompanyIn = toUpperCopy(porCompany);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porSystemIn(String... porSystem) {
|
|
||||||
this.porSystemIn = toUpperCopy(porSystem);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porInstanceIn(String... porInstance) {
|
|
||||||
this.porInstanceIn = toUpperCopy(porInstance);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porTypeIn(String... porType) {
|
|
||||||
this.porTypeIn = toUpperCopy(porType);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porValueIn(String... porValue) {
|
|
||||||
this.porValueIn = toUpperCopy(porValue);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery taskClassificationKeyIn(String... taskClassificationKey) {
|
|
||||||
this.taskClassificationKeyIn = toUpperCopy(taskClassificationKey);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery taskClassificationCategoryIn(String... taskClassificationCategory) {
|
|
||||||
this.taskClassificationCategoryIn = toUpperCopy(taskClassificationCategory);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery attachmentClassificationKeyIn(String... attachmentClassificationKey) {
|
|
||||||
this.attachmentClassificationKeyIn = toUpperCopy(attachmentClassificationKey);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery oldValueIn(String... oldValueIn) {
|
|
||||||
this.oldValueIn = toUpperCopy(oldValueIn);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery newValueIn(String... newValueIn) {
|
|
||||||
this.newValueIn = toUpperCopy(newValueIn);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery businessProcessIdLike(String... businessProcessId) {
|
|
||||||
this.businessProcessIdLike = toUpperCopy(businessProcessId);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery parentBusinessProcessIdLike(String... parentBusinessProcessId) {
|
|
||||||
this.parentBusinessProcessIdLike = toUpperCopy(parentBusinessProcessId);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery taskIdLike(String... taskId) {
|
|
||||||
this.taskIdLike = toUpperCopy(taskId);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery eventTypeLike(String... eventType) {
|
|
||||||
this.eventTypeLike = toUpperCopy(eventType);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery userIdLike(String... userId) {
|
|
||||||
this.userIdLike = toUpperCopy(userId);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery domainLike(String... domain) {
|
|
||||||
this.domainLike = toUpperCopy(domain);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery workbasketKeyLike(String... workbasketKey) {
|
|
||||||
this.workbasketKeyLike = toUpperCopy(workbasketKey);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porCompanyLike(String... porCompany) {
|
|
||||||
this.porCompanyLike = toUpperCopy(porCompany);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porSystemLike(String... porSystem) {
|
|
||||||
this.porSystemLike = toUpperCopy(porSystem);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porInstanceLike(String... porInstance) {
|
|
||||||
this.porInstanceLike = toUpperCopy(porInstance);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porTypeLike(String... porType) {
|
|
||||||
this.porTypeLike = toUpperCopy(porType);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery porValueLike(String... porValue) {
|
|
||||||
this.porValueLike = toUpperCopy(porValue);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery taskClassificationKeyLike(String... taskClassificationKey) {
|
|
||||||
this.taskClassificationKeyLike = toUpperCopy(taskClassificationKey);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery taskClassificationCategoryLike(String... taskClassificationCategory) {
|
|
||||||
this.taskClassificationCategoryLike = toUpperCopy(taskClassificationCategory);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery attachmentClassificationKeyLike(String... attachmentClassificationKey) {
|
|
||||||
this.attachmentClassificationKeyLike = toUpperCopy(attachmentClassificationKey);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery oldValueLike(String... oldValue) {
|
|
||||||
this.oldValueLike = toUpperCopy(oldValue);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery newValueLike(String... newValue) {
|
|
||||||
this.newValueLike = toUpperCopy(newValue);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery customAttributeIn(
|
|
||||||
TaskHistoryCustomField customField, String... searchArguments) {
|
|
||||||
switch (customField) {
|
|
||||||
case CUSTOM_1:
|
|
||||||
custom1In = toUpperCopy(searchArguments);
|
|
||||||
break;
|
|
||||||
case CUSTOM_2:
|
|
||||||
custom2In = toUpperCopy(searchArguments);
|
|
||||||
break;
|
|
||||||
case CUSTOM_3:
|
|
||||||
custom3In = toUpperCopy(searchArguments);
|
|
||||||
break;
|
|
||||||
case CUSTOM_4:
|
|
||||||
custom4In = toUpperCopy(searchArguments);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new SystemException("Unknown customField '" + customField + "'");
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery customAttributeLike(
|
|
||||||
TaskHistoryCustomField customField, String... searchArguments) {
|
|
||||||
switch (customField) {
|
|
||||||
case CUSTOM_1:
|
|
||||||
custom1Like = toUpperCopy(searchArguments);
|
|
||||||
break;
|
|
||||||
case CUSTOM_2:
|
|
||||||
custom2Like = toUpperCopy(searchArguments);
|
|
||||||
break;
|
|
||||||
case CUSTOM_3:
|
|
||||||
custom3Like = toUpperCopy(searchArguments);
|
|
||||||
break;
|
|
||||||
case CUSTOM_4:
|
|
||||||
custom4Like = toUpperCopy(searchArguments);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new SystemException("Unknown customField '" + customField + "'");
|
|
||||||
}
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByBusinessProcessId(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("BUSINESS_PROCESS_ID", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByParentBusinessProcessId(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("PARENT_BUSINESS_PROCESS_ID", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByTaskId(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("TASK_ID", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByEventType(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("EVENT_TYPE", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByCreated(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("CREATED", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByUserId(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("USER_ID", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByDomain(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("DOMAIN", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByWorkbasketKey(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("WORKBASKET_KEY", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByPorCompany(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("POR_COMPANY", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByPorSystem(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("POR_SYSTEM", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByPorInstance(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("POR_INSTANCE", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByPorType(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("POR_TYPE", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByPorValue(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("POR_VALUE", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByTaskClassificationKey(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("TASK_CLASSIFICATION_KEY", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByTaskClassificationCategory(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("TASK_CLASSIFICATION_CATEGORY", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByAttachmentClassificationKey(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("ATTACHMENT_CLASSIFICATION_KEY", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByOldValue(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("OLD_VALUE", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByNewValue(SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria("NEW_VALUE", sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryQuery orderByCustomAttribute(
|
|
||||||
TaskHistoryCustomField customField, SortDirection sortDirection) {
|
|
||||||
return addOrderCriteria(customField.name(), sortDirection);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HistoryEventImpl> list() {
|
|
||||||
LOGGER.debug("entry to list(), this = {}", this);
|
|
||||||
List<HistoryEventImpl> result = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
taskanaHistoryEngine.openConnection();
|
|
||||||
result = historyQueryMapper.queryHistoryEvent(this);
|
|
||||||
LOGGER.debug("transaction was successful. Result: {}", result.toString());
|
|
||||||
return result;
|
|
||||||
} catch (SQLException e) {
|
|
||||||
LOGGER.error(
|
|
||||||
"Method openConnection() could not open a connection to the database.", e.getCause());
|
|
||||||
return result;
|
|
||||||
} catch (NullPointerException npe) {
|
|
||||||
LOGGER.error("No History Event found.");
|
|
||||||
return result;
|
|
||||||
} finally {
|
|
||||||
taskanaHistoryEngine.returnConnection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<HistoryEventImpl> list(int offset, int limit) {
|
|
||||||
LOGGER.debug("entry to list({},{}), this = {}", offset, limit, this);
|
|
||||||
List<HistoryEventImpl> result = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
taskanaHistoryEngine.openConnection();
|
|
||||||
this.maxRows = offset + limit;
|
|
||||||
result = historyQueryMapper.queryHistoryEvent(this);
|
|
||||||
LOGGER.debug("transaction was successful. Result: {}", result.toString());
|
|
||||||
limit = Math.min(result.size() - offset, limit);
|
|
||||||
if (result.size() > offset) {
|
|
||||||
return result.subList(offset, offset + limit);
|
|
||||||
} else {
|
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
|
||||||
LOGGER.error(
|
|
||||||
"Method openConnection() could not open a connection to the database.", e.getCause());
|
|
||||||
return result;
|
|
||||||
} catch (NullPointerException npe) {
|
|
||||||
LOGGER.error("No History Event found.");
|
|
||||||
return result;
|
|
||||||
} finally {
|
|
||||||
taskanaHistoryEngine.returnConnection();
|
|
||||||
this.maxRows = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> listValues(HistoryQueryColumnName dbColumnName, SortDirection sortDirection) {
|
|
||||||
LOGGER.debug(
|
|
||||||
"entry to listValues() of column {} with sortDirection {}, this {}",
|
|
||||||
dbColumnName,
|
|
||||||
sortDirection,
|
|
||||||
this);
|
|
||||||
List<String> result = new ArrayList<>();
|
|
||||||
this.columnName = dbColumnName;
|
|
||||||
this.orderBy.clear();
|
|
||||||
this.addOrderCriteria(columnName.toString(), sortDirection);
|
|
||||||
|
|
||||||
try {
|
|
||||||
taskanaHistoryEngine.openConnection();
|
|
||||||
result = historyQueryMapper.queryHistoryColumnValues(this);
|
|
||||||
LOGGER.debug("transaction was successful. Result: {}", result.toString());
|
|
||||||
return result;
|
|
||||||
} catch (SQLException e) {
|
|
||||||
LOGGER.error(
|
|
||||||
"Method openConnection() could not open a connection to the database.", e.getCause());
|
|
||||||
return result;
|
|
||||||
} catch (NullPointerException npe) {
|
|
||||||
LOGGER.error("No History Event found.");
|
|
||||||
return result;
|
|
||||||
} finally {
|
|
||||||
this.orderColumns.remove(orderColumns.size() - 1);
|
|
||||||
taskanaHistoryEngine.returnConnection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public HistoryEventImpl single() {
|
|
||||||
LOGGER.debug("entry to list(), this = {}", this);
|
|
||||||
HistoryEventImpl result = null;
|
|
||||||
try {
|
|
||||||
taskanaHistoryEngine.openConnection();
|
|
||||||
this.maxRows = 1;
|
|
||||||
result = historyQueryMapper.queryHistoryEvent(this).get(0);
|
|
||||||
LOGGER.debug("transaction was successful. Result: {}", result.toString());
|
|
||||||
return result;
|
|
||||||
} catch (SQLException e) {
|
|
||||||
LOGGER.error(
|
|
||||||
"Method openConnection() could not open a connection to the database.", e.getCause());
|
|
||||||
return result;
|
|
||||||
} catch (NullPointerException npe) {
|
|
||||||
LOGGER.error("No History Event found.");
|
|
||||||
return result;
|
|
||||||
} finally {
|
|
||||||
taskanaHistoryEngine.returnConnection();
|
|
||||||
this.maxRows = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long count() {
|
|
||||||
LOGGER.debug("entry to count(), this = {}", this);
|
|
||||||
try {
|
|
||||||
taskanaHistoryEngine.openConnection();
|
|
||||||
long result = historyQueryMapper.countHistoryEvent(this);
|
|
||||||
LOGGER.debug("transaction was successful. Result: {}", result);
|
|
||||||
return result;
|
|
||||||
} catch (SQLException e) {
|
|
||||||
LOGGER.error(
|
|
||||||
"Method openConnection() could not open a connection to the database.", e.getCause());
|
|
||||||
return -1;
|
|
||||||
} catch (NullPointerException npe) {
|
|
||||||
LOGGER.error("No History Event found.");
|
|
||||||
return -1;
|
|
||||||
} finally {
|
|
||||||
taskanaHistoryEngine.returnConnection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private HistoryQueryImpl addOrderCriteria(String columnName, SortDirection sortDirection) {
|
|
||||||
String orderByDirection =
|
|
||||||
" " + (sortDirection == null ? SortDirection.ASCENDING : sortDirection);
|
|
||||||
orderBy.add(columnName + orderByDirection);
|
|
||||||
orderColumns.add(columnName);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -11,11 +11,13 @@ import pro.taskana.common.api.TaskanaEngine;
|
||||||
import pro.taskana.common.api.TaskanaRole;
|
import pro.taskana.common.api.TaskanaRole;
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryEventMapper;
|
import pro.taskana.simplehistory.impl.task.TaskHistoryEventMapper;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQuery;
|
||||||
import pro.taskana.simplehistory.query.HistoryQuery;
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryEventMapper;
|
||||||
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryQuery;
|
||||||
import pro.taskana.spi.history.api.TaskanaHistory;
|
import pro.taskana.spi.history.api.TaskanaHistory;
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
import pro.taskana.spi.history.api.exceptions.TaskanaHistoryEventNotFoundException;
|
import pro.taskana.spi.history.api.exceptions.TaskanaHistoryEventNotFoundException;
|
||||||
|
|
||||||
/** This is the implementation of TaskanaHistory. */
|
/** This is the implementation of TaskanaHistory. */
|
||||||
|
|
@ -23,35 +25,53 @@ public class SimpleHistoryServiceImpl implements TaskanaHistory {
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(SimpleHistoryServiceImpl.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(SimpleHistoryServiceImpl.class);
|
||||||
private TaskanaHistoryEngineImpl taskanaHistoryEngine;
|
private TaskanaHistoryEngineImpl taskanaHistoryEngine;
|
||||||
private HistoryEventMapper historyEventMapper;
|
private TaskHistoryEventMapper taskHistoryEventMapper;
|
||||||
private HistoryQueryMapper historyQueryMapper;
|
private WorkbasketHistoryEventMapper workbasketHistoryEventMapper;
|
||||||
|
|
||||||
public void initialize(TaskanaEngine taskanaEngine) {
|
public void initialize(TaskanaEngine taskanaEngine) {
|
||||||
|
|
||||||
this.taskanaHistoryEngine = getTaskanaEngine(taskanaEngine.getConfiguration());
|
this.taskanaHistoryEngine = getTaskanaEngine(taskanaEngine.getConfiguration());
|
||||||
|
|
||||||
if (LOGGER.isDebugEnabled()) {
|
if (LOGGER.isDebugEnabled()) {
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"Simple history service implementation initialized with schemaName: {} ",
|
"Simple history service implementation initialized with schemaName: {} ",
|
||||||
taskanaEngine.getConfiguration().getSchemaName());
|
taskanaEngine.getConfiguration().getSchemaName());
|
||||||
}
|
}
|
||||||
|
|
||||||
this.historyEventMapper =
|
this.taskHistoryEventMapper =
|
||||||
this.taskanaHistoryEngine.getSqlSession().getMapper(HistoryEventMapper.class);
|
this.taskanaHistoryEngine.getSqlSession().getMapper(TaskHistoryEventMapper.class);
|
||||||
this.historyQueryMapper =
|
this.workbasketHistoryEventMapper =
|
||||||
this.taskanaHistoryEngine.getSqlSession().getMapper(HistoryQueryMapper.class);
|
this.taskanaHistoryEngine.getSqlSession().getMapper(WorkbasketHistoryEventMapper.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void create(TaskanaHistoryEvent event) {
|
public void create(TaskHistoryEvent event) {
|
||||||
try {
|
try {
|
||||||
taskanaHistoryEngine.openConnection();
|
taskanaHistoryEngine.openConnection();
|
||||||
if (event.getCreated() == null) {
|
if (event.getCreated() == null) {
|
||||||
Instant now = Instant.now();
|
Instant now = Instant.now();
|
||||||
event.setCreated(now);
|
event.setCreated(now);
|
||||||
}
|
}
|
||||||
historyEventMapper.insert(event);
|
taskHistoryEventMapper.insert(event);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
LOGGER.error("Error while inserting history event into historyEventMapper", e);
|
LOGGER.error("Error while inserting task history event into database", e);
|
||||||
|
} finally {
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
LOGGER.debug("Exit from create(TaskanaHistoryEvent event). Returning object = {}.", event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void create(WorkbasketHistoryEvent event) {
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
if (event.getCreated() == null) {
|
||||||
|
Instant now = Instant.now();
|
||||||
|
event.setCreated(now);
|
||||||
|
}
|
||||||
|
workbasketHistoryEventMapper.insert(event);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error("Error while inserting workbasket history event into database", e);
|
||||||
} finally {
|
} finally {
|
||||||
taskanaHistoryEngine.returnConnection();
|
taskanaHistoryEngine.returnConnection();
|
||||||
LOGGER.debug("Exit from create(TaskanaHistoryEvent event). Returning object = {}.", event);
|
LOGGER.debug("Exit from create(TaskanaHistoryEvent event). Returning object = {}.", event);
|
||||||
|
|
@ -75,7 +95,7 @@ public class SimpleHistoryServiceImpl implements TaskanaHistory {
|
||||||
try {
|
try {
|
||||||
taskanaHistoryEngine.openConnection();
|
taskanaHistoryEngine.openConnection();
|
||||||
|
|
||||||
historyEventMapper.deleteMultipleByTaskIds(taskIds);
|
taskHistoryEventMapper.deleteMultipleByTaskIds(taskIds);
|
||||||
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
LOGGER.error("Caught exception while trying to delete history events", e);
|
LOGGER.error("Caught exception while trying to delete history events", e);
|
||||||
|
|
@ -85,18 +105,18 @@ public class SimpleHistoryServiceImpl implements TaskanaHistory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public TaskanaHistoryEvent getHistoryEvent(String historyEventId)
|
public TaskHistoryEvent getTaskHistoryEvent(String historyEventId)
|
||||||
throws TaskanaHistoryEventNotFoundException {
|
throws TaskanaHistoryEventNotFoundException {
|
||||||
LOGGER.debug("entry to getHistoryEvent (id = {})", historyEventId);
|
LOGGER.debug("entry to getTaskHistoryEvent (id = {})", historyEventId);
|
||||||
TaskanaHistoryEvent resultEvent = null;
|
TaskHistoryEvent resultEvent = null;
|
||||||
try {
|
try {
|
||||||
taskanaHistoryEngine.openConnection();
|
taskanaHistoryEngine.openConnection();
|
||||||
resultEvent = historyEventMapper.findById(historyEventId);
|
resultEvent = taskHistoryEventMapper.findById(historyEventId);
|
||||||
|
|
||||||
if (resultEvent == null) {
|
if (resultEvent == null) {
|
||||||
throw new TaskanaHistoryEventNotFoundException(
|
throw new TaskanaHistoryEventNotFoundException(
|
||||||
historyEventId,
|
historyEventId,
|
||||||
String.format("TaskanaHistoryEvent for id %s was not found", historyEventId));
|
String.format("TaskHistoryEvent for id %s was not found", historyEventId));
|
||||||
}
|
}
|
||||||
|
|
||||||
return resultEvent;
|
return resultEvent;
|
||||||
|
|
@ -110,8 +130,12 @@ public class SimpleHistoryServiceImpl implements TaskanaHistory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public HistoryQuery createHistoryQuery() {
|
public TaskHistoryQuery createTaskHistoryQuery() {
|
||||||
return new HistoryQueryImpl(taskanaHistoryEngine, historyQueryMapper);
|
return new TaskHistoryQueryImpl(taskanaHistoryEngine);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WorkbasketHistoryQuery createWorkbasketHistoryQuery() {
|
||||||
|
return new WorkbasketHistoryQueryImpl(taskanaHistoryEngine);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,741 @@
|
||||||
|
package pro.taskana.simplehistory.impl;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.session.RowBounds;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.TimeInterval;
|
||||||
|
import pro.taskana.common.api.exceptions.SystemException;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQuery;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryColumnName;
|
||||||
|
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
|
/** Implementation for generating dynamic sql. */
|
||||||
|
public class TaskHistoryQueryImpl implements TaskHistoryQuery {
|
||||||
|
|
||||||
|
private static final String LINK_TO_MAPPER =
|
||||||
|
"pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper.queryHistoryEvents";
|
||||||
|
private static final String LINK_TO_VALUE_MAPPER =
|
||||||
|
"pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper.queryHistoryColumnValues";
|
||||||
|
private static final String LINK_TO_COUNTER =
|
||||||
|
"pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper.countHistoryEvents";
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(TaskHistoryQueryImpl.class);
|
||||||
|
|
||||||
|
private static final String SQL_EXCEPTION_MESSAGE =
|
||||||
|
"Method openConnection() could not open a connection to the database.";
|
||||||
|
|
||||||
|
private final TaskanaHistoryEngineImpl taskanaHistoryEngine;
|
||||||
|
private final List<String> orderBy;
|
||||||
|
private final List<String> orderColumns;
|
||||||
|
|
||||||
|
private TaskHistoryQueryColumnName columnName;
|
||||||
|
private String[] idIn;
|
||||||
|
private String[] businessProcessIdIn;
|
||||||
|
private String[] parentBusinessProcessIdIn;
|
||||||
|
private String[] taskIdIn;
|
||||||
|
private String[] eventTypeIn;
|
||||||
|
private TimeInterval[] createdIn;
|
||||||
|
private String[] userIdIn;
|
||||||
|
private String[] domainIn;
|
||||||
|
private String[] workbasketKeyIn;
|
||||||
|
private String[] porCompanyIn;
|
||||||
|
private String[] porSystemIn;
|
||||||
|
private String[] porInstanceIn;
|
||||||
|
private String[] porTypeIn;
|
||||||
|
private String[] porValueIn;
|
||||||
|
private String[] taskClassificationKeyIn;
|
||||||
|
private String[] taskClassificationCategoryIn;
|
||||||
|
private String[] attachmentClassificationKeyIn;
|
||||||
|
private String[] oldValueIn;
|
||||||
|
private String[] newValueIn;
|
||||||
|
private String[] custom1In;
|
||||||
|
private String[] custom2In;
|
||||||
|
private String[] custom3In;
|
||||||
|
private String[] custom4In;
|
||||||
|
|
||||||
|
private String[] businessProcessIdLike;
|
||||||
|
private String[] parentBusinessProcessIdLike;
|
||||||
|
private String[] taskIdLike;
|
||||||
|
private String[] eventTypeLike;
|
||||||
|
private String[] userIdLike;
|
||||||
|
private String[] domainLike;
|
||||||
|
private String[] workbasketKeyLike;
|
||||||
|
private String[] porCompanyLike;
|
||||||
|
private String[] porSystemLike;
|
||||||
|
private String[] porInstanceLike;
|
||||||
|
private String[] porTypeLike;
|
||||||
|
private String[] porValueLike;
|
||||||
|
private String[] taskClassificationKeyLike;
|
||||||
|
private String[] taskClassificationCategoryLike;
|
||||||
|
private String[] attachmentClassificationKeyLike;
|
||||||
|
private String[] oldValueLike;
|
||||||
|
private String[] newValueLike;
|
||||||
|
private String[] custom1Like;
|
||||||
|
private String[] custom2Like;
|
||||||
|
private String[] custom3Like;
|
||||||
|
private String[] custom4Like;
|
||||||
|
|
||||||
|
public TaskHistoryQueryImpl(TaskanaHistoryEngineImpl taskanaHistoryEngine) {
|
||||||
|
this.taskanaHistoryEngine = taskanaHistoryEngine;
|
||||||
|
this.orderBy = new ArrayList<>();
|
||||||
|
this.orderColumns = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getIdIn() {
|
||||||
|
return idIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getBusinessProcessIdIn() {
|
||||||
|
return businessProcessIdIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getParentBusinessProcessIdIn() {
|
||||||
|
return parentBusinessProcessIdIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTaskIdIn() {
|
||||||
|
return taskIdIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getEventTypeIn() {
|
||||||
|
return eventTypeIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TimeInterval[] getCreatedIn() {
|
||||||
|
return createdIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getUserIdIn() {
|
||||||
|
return userIdIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getDomainIn() {
|
||||||
|
return domainIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getWorkbasketKeyIn() {
|
||||||
|
return workbasketKeyIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorCompanyIn() {
|
||||||
|
return porCompanyIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorSystemIn() {
|
||||||
|
return porSystemIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorInstanceIn() {
|
||||||
|
return porInstanceIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorTypeIn() {
|
||||||
|
return porTypeIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorValueIn() {
|
||||||
|
return porValueIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTaskClassificationKeyIn() {
|
||||||
|
return taskClassificationKeyIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTaskClassificationCategoryIn() {
|
||||||
|
return taskClassificationCategoryIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getAttachmentClassificationKeyIn() {
|
||||||
|
return attachmentClassificationKeyIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOldValueIn() {
|
||||||
|
return oldValueIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getNewValueIn() {
|
||||||
|
return newValueIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom1In() {
|
||||||
|
return custom1In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom2In() {
|
||||||
|
return custom2In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom3In() {
|
||||||
|
return custom3In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom4In() {
|
||||||
|
return custom4In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getBusinessProcessIdLike() {
|
||||||
|
return businessProcessIdLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getParentBusinessProcessIdLike() {
|
||||||
|
return parentBusinessProcessIdLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTaskIdLike() {
|
||||||
|
return taskIdLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getEventTypeLike() {
|
||||||
|
return eventTypeLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getUserIdLike() {
|
||||||
|
return userIdLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getDomainLike() {
|
||||||
|
return domainLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getWorkbasketKeyLike() {
|
||||||
|
return workbasketKeyLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorCompanyLike() {
|
||||||
|
return porCompanyLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorSystemLike() {
|
||||||
|
return porSystemLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorInstanceLike() {
|
||||||
|
return porInstanceLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorTypeLike() {
|
||||||
|
return porTypeLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getPorValueLike() {
|
||||||
|
return porValueLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTaskClassificationKeyLike() {
|
||||||
|
return taskClassificationKeyLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getTaskClassificationCategoryLike() {
|
||||||
|
return taskClassificationCategoryLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getAttachmentClassificationKeyLike() {
|
||||||
|
return attachmentClassificationKeyLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOldValueLike() {
|
||||||
|
return oldValueLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getNewValueLike() {
|
||||||
|
return newValueLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom1Like() {
|
||||||
|
return custom1Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom2Like() {
|
||||||
|
return custom2Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom3Like() {
|
||||||
|
return custom3Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom4Like() {
|
||||||
|
return custom4Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery idIn(String... idIn) {
|
||||||
|
this.idIn = toUpperCopy(idIn);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery businessProcessIdIn(String... businessProcessId) {
|
||||||
|
this.businessProcessIdIn = toUpperCopy(businessProcessId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery parentBusinessProcessIdIn(String... parentBusinessProcessId) {
|
||||||
|
this.parentBusinessProcessIdIn = toUpperCopy(parentBusinessProcessId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery taskIdIn(String... taskId) {
|
||||||
|
this.taskIdIn = toUpperCopy(taskId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery eventTypeIn(String... eventType) {
|
||||||
|
this.eventTypeIn = toUpperCopy(eventType);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery createdWithin(TimeInterval... createdIn) {
|
||||||
|
this.createdIn = createdIn;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery userIdIn(String... userId) {
|
||||||
|
this.userIdIn = toUpperCopy(userId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery domainIn(String... domain) {
|
||||||
|
this.domainIn = toUpperCopy(domain);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery workbasketKeyIn(String... workbasketKey) {
|
||||||
|
this.workbasketKeyIn = toUpperCopy(workbasketKey);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porCompanyIn(String... porCompany) {
|
||||||
|
this.porCompanyIn = toUpperCopy(porCompany);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porSystemIn(String... porSystem) {
|
||||||
|
this.porSystemIn = toUpperCopy(porSystem);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porInstanceIn(String... porInstance) {
|
||||||
|
this.porInstanceIn = toUpperCopy(porInstance);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porTypeIn(String... porType) {
|
||||||
|
this.porTypeIn = toUpperCopy(porType);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porValueIn(String... porValue) {
|
||||||
|
this.porValueIn = toUpperCopy(porValue);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery taskClassificationKeyIn(String... taskClassificationKey) {
|
||||||
|
this.taskClassificationKeyIn = toUpperCopy(taskClassificationKey);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery taskClassificationCategoryIn(String... taskClassificationCategory) {
|
||||||
|
this.taskClassificationCategoryIn = toUpperCopy(taskClassificationCategory);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery attachmentClassificationKeyIn(String... attachmentClassificationKey) {
|
||||||
|
this.attachmentClassificationKeyIn = toUpperCopy(attachmentClassificationKey);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery oldValueIn(String... oldValueIn) {
|
||||||
|
this.oldValueIn = toUpperCopy(oldValueIn);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery newValueIn(String... newValueIn) {
|
||||||
|
this.newValueIn = toUpperCopy(newValueIn);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery businessProcessIdLike(String... businessProcessId) {
|
||||||
|
this.businessProcessIdLike = toUpperCopy(businessProcessId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery parentBusinessProcessIdLike(String... parentBusinessProcessId) {
|
||||||
|
this.parentBusinessProcessIdLike = toUpperCopy(parentBusinessProcessId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery taskIdLike(String... taskId) {
|
||||||
|
this.taskIdLike = toUpperCopy(taskId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery eventTypeLike(String... eventType) {
|
||||||
|
this.eventTypeLike = toUpperCopy(eventType);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery userIdLike(String... userId) {
|
||||||
|
this.userIdLike = toUpperCopy(userId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery domainLike(String... domain) {
|
||||||
|
this.domainLike = toUpperCopy(domain);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery workbasketKeyLike(String... workbasketKey) {
|
||||||
|
this.workbasketKeyLike = toUpperCopy(workbasketKey);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porCompanyLike(String... porCompany) {
|
||||||
|
this.porCompanyLike = toUpperCopy(porCompany);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porSystemLike(String... porSystem) {
|
||||||
|
this.porSystemLike = toUpperCopy(porSystem);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porInstanceLike(String... porInstance) {
|
||||||
|
this.porInstanceLike = toUpperCopy(porInstance);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porTypeLike(String... porType) {
|
||||||
|
this.porTypeLike = toUpperCopy(porType);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery porValueLike(String... porValue) {
|
||||||
|
this.porValueLike = toUpperCopy(porValue);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery taskClassificationKeyLike(String... taskClassificationKey) {
|
||||||
|
this.taskClassificationKeyLike = toUpperCopy(taskClassificationKey);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery taskClassificationCategoryLike(String... taskClassificationCategory) {
|
||||||
|
this.taskClassificationCategoryLike = toUpperCopy(taskClassificationCategory);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery attachmentClassificationKeyLike(String... attachmentClassificationKey) {
|
||||||
|
this.attachmentClassificationKeyLike = toUpperCopy(attachmentClassificationKey);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery oldValueLike(String... oldValue) {
|
||||||
|
this.oldValueLike = toUpperCopy(oldValue);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery newValueLike(String... newValue) {
|
||||||
|
this.newValueLike = toUpperCopy(newValue);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery customAttributeIn(
|
||||||
|
TaskHistoryCustomField customField, String... searchArguments) {
|
||||||
|
switch (customField) {
|
||||||
|
case CUSTOM_1:
|
||||||
|
custom1In = toUpperCopy(searchArguments);
|
||||||
|
break;
|
||||||
|
case CUSTOM_2:
|
||||||
|
custom2In = toUpperCopy(searchArguments);
|
||||||
|
break;
|
||||||
|
case CUSTOM_3:
|
||||||
|
custom3In = toUpperCopy(searchArguments);
|
||||||
|
break;
|
||||||
|
case CUSTOM_4:
|
||||||
|
custom4In = toUpperCopy(searchArguments);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new SystemException("Unknown customField '" + customField + "'");
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery customAttributeLike(
|
||||||
|
TaskHistoryCustomField customField, String... searchArguments) {
|
||||||
|
switch (customField) {
|
||||||
|
case CUSTOM_1:
|
||||||
|
custom1Like = toUpperCopy(searchArguments);
|
||||||
|
break;
|
||||||
|
case CUSTOM_2:
|
||||||
|
custom2Like = toUpperCopy(searchArguments);
|
||||||
|
break;
|
||||||
|
case CUSTOM_3:
|
||||||
|
custom3Like = toUpperCopy(searchArguments);
|
||||||
|
break;
|
||||||
|
case CUSTOM_4:
|
||||||
|
custom4Like = toUpperCopy(searchArguments);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new SystemException("Unknown customField '" + customField + "'");
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByBusinessProcessId(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("BUSINESS_PROCESS_ID", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByParentBusinessProcessId(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("PARENT_BUSINESS_PROCESS_ID", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByTaskId(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("TASK_ID", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByEventType(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("EVENT_TYPE", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByCreated(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("CREATED", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByUserId(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("USER_ID", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByDomain(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("DOMAIN", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByWorkbasketKey(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("WORKBASKET_KEY", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByPorCompany(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("POR_COMPANY", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByPorSystem(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("POR_SYSTEM", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByPorInstance(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("POR_INSTANCE", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByPorType(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("POR_TYPE", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByPorValue(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("POR_VALUE", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByTaskClassificationKey(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("TASK_CLASSIFICATION_KEY", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByTaskClassificationCategory(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("TASK_CLASSIFICATION_CATEGORY", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByAttachmentClassificationKey(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("ATTACHMENT_CLASSIFICATION_KEY", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByOldValue(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("OLD_VALUE", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByNewValue(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("NEW_VALUE", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryQuery orderByCustomAttribute(
|
||||||
|
TaskHistoryCustomField customField, SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria(customField.name(), sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TaskHistoryEvent> list() {
|
||||||
|
LOGGER.debug("entry to list(), this = {}", this);
|
||||||
|
List<TaskHistoryEvent> result = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
result = taskanaHistoryEngine.getSqlSession().selectList(LINK_TO_MAPPER, this);
|
||||||
|
return result;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
LOGGER.debug(
|
||||||
|
"exit from list(). Returning {} resulting Objects: {} ", result.size(), result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TaskHistoryEvent> list(int offset, int limit) {
|
||||||
|
LOGGER.debug("entry to list({},{}), this = {}", offset, limit, this);
|
||||||
|
List<TaskHistoryEvent> result = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
RowBounds rowBounds = new RowBounds(offset, limit);
|
||||||
|
result = taskanaHistoryEngine.getSqlSession().selectList(LINK_TO_MAPPER, this, rowBounds);
|
||||||
|
return result;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
LOGGER.debug(
|
||||||
|
"exit from list(offset,limit). Returning {} resulting Objects: {} ",
|
||||||
|
result.size(),
|
||||||
|
result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> listValues(
|
||||||
|
TaskHistoryQueryColumnName dbColumnName, SortDirection sortDirection) {
|
||||||
|
LOGGER.debug(
|
||||||
|
"entry to listValues() of column {} with sortDirection {}, this {}",
|
||||||
|
dbColumnName,
|
||||||
|
sortDirection,
|
||||||
|
this);
|
||||||
|
List<String> result = new ArrayList<>();
|
||||||
|
this.columnName = dbColumnName;
|
||||||
|
this.orderBy.clear();
|
||||||
|
this.addOrderCriteria(columnName.toString(), sortDirection);
|
||||||
|
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
result = taskanaHistoryEngine.getSqlSession().selectList(LINK_TO_VALUE_MAPPER, this);
|
||||||
|
return result;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
this.orderColumns.remove(orderColumns.size() - 1);
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
LOGGER.debug(
|
||||||
|
"Exit from listValues. Returning {} resulting Objects: {} ", result.size(), result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TaskHistoryEvent single() {
|
||||||
|
LOGGER.debug("entry to single(), this = {}", this);
|
||||||
|
TaskHistoryEvent result = null;
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
List<TaskHistoryEvent> results =
|
||||||
|
taskanaHistoryEngine.getSqlSession().selectList(LINK_TO_MAPPER, this);
|
||||||
|
if (results.isEmpty()) {
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
result = results.get(0);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
LOGGER.debug("exit from single(). Returning result {} ", result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long count() {
|
||||||
|
LOGGER.debug("entry to count(), this = {}", this);
|
||||||
|
Long rowCount = null;
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
rowCount = taskanaHistoryEngine.getSqlSession().selectOne(LINK_TO_COUNTER, this);
|
||||||
|
return (rowCount == null) ? 0L : rowCount;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return -1;
|
||||||
|
} finally {
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
LOGGER.debug("exit from count(). Returning result {} ", rowCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private TaskHistoryQueryImpl addOrderCriteria(String columnName, SortDirection sortDirection) {
|
||||||
|
String orderByDirection =
|
||||||
|
" " + (sortDirection == null ? SortDirection.ASCENDING : sortDirection);
|
||||||
|
orderBy.add(columnName + orderByDirection);
|
||||||
|
orderColumns.add(columnName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -23,8 +23,10 @@ import pro.taskana.common.api.TaskanaRole;
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.common.internal.security.CurrentUserContext;
|
import pro.taskana.common.internal.security.CurrentUserContext;
|
||||||
import pro.taskana.simplehistory.TaskanaHistoryEngine;
|
import pro.taskana.simplehistory.TaskanaHistoryEngine;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryEventMapper;
|
import pro.taskana.simplehistory.impl.task.TaskHistoryEventMapper;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryEventMapper;
|
||||||
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryQueryMapper;
|
||||||
import pro.taskana.spi.history.api.TaskanaHistory;
|
import pro.taskana.spi.history.api.TaskanaHistory;
|
||||||
|
|
||||||
/** This is the implementation of TaskanaHistoryEngine. */
|
/** This is the implementation of TaskanaHistoryEngine. */
|
||||||
|
|
@ -98,8 +100,10 @@ public class TaskanaHistoryEngineImpl implements TaskanaHistoryEngine {
|
||||||
Configuration configuration = new Configuration(environment);
|
Configuration configuration = new Configuration(environment);
|
||||||
|
|
||||||
// add mappers
|
// add mappers
|
||||||
configuration.addMapper(HistoryEventMapper.class);
|
configuration.addMapper(TaskHistoryEventMapper.class);
|
||||||
configuration.addMapper(HistoryQueryMapper.class);
|
configuration.addMapper(TaskHistoryQueryMapper.class);
|
||||||
|
configuration.addMapper(WorkbasketHistoryEventMapper.class);
|
||||||
|
configuration.addMapper(WorkbasketHistoryQueryMapper.class);
|
||||||
SqlSessionFactory localSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
|
SqlSessionFactory localSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
|
||||||
return SqlSessionManager.newInstance(localSessionFactory);
|
return SqlSessionManager.newInstance(localSessionFactory);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,594 @@
|
||||||
|
package pro.taskana.simplehistory.impl;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.session.RowBounds;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.TimeInterval;
|
||||||
|
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||||
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryQuery;
|
||||||
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryQueryColumnName;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
|
||||||
|
public class WorkbasketHistoryQueryImpl implements WorkbasketHistoryQuery {
|
||||||
|
|
||||||
|
private static final String LINK_TO_MAPPER =
|
||||||
|
"pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryQueryMapper.queryHistoryEvents";
|
||||||
|
private static final String LINK_TO_VALUE_MAPPER =
|
||||||
|
"pro.taskana.simplehistory.impl.workbasket."
|
||||||
|
+ "WorkbasketHistoryQueryMapper.queryHistoryColumnValues";
|
||||||
|
private static final String LINK_TO_COUNTER =
|
||||||
|
"pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryQueryMapper.countHistoryEvents";
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketHistoryQueryImpl.class);
|
||||||
|
|
||||||
|
private static final String SQL_EXCEPTION_MESSAGE =
|
||||||
|
"Method openConnection() could not open a connection to the database.";
|
||||||
|
|
||||||
|
private TaskanaHistoryEngineImpl taskanaHistoryEngine;
|
||||||
|
|
||||||
|
private WorkbasketHistoryQueryColumnName columnName;
|
||||||
|
private List<String> orderBy;
|
||||||
|
private List<String> orderColumns;
|
||||||
|
|
||||||
|
private String[] idIn;
|
||||||
|
private String[] workbasketIdIn;
|
||||||
|
private String[] eventTypeIn;
|
||||||
|
private TimeInterval[] createdIn;
|
||||||
|
private String[] userIdIn;
|
||||||
|
private String[] domainIn;
|
||||||
|
private String[] workbasketKeyIn;
|
||||||
|
private String[] workbasketTypeIn;
|
||||||
|
private String[] ownerIn;
|
||||||
|
private String[] custom1In;
|
||||||
|
private String[] custom2In;
|
||||||
|
private String[] custom3In;
|
||||||
|
private String[] custom4In;
|
||||||
|
private String[] orgLevel1In;
|
||||||
|
private String[] orgLevel2In;
|
||||||
|
private String[] orgLevel3In;
|
||||||
|
private String[] orgLevel4In;
|
||||||
|
|
||||||
|
private String[] workbasketIdLike;
|
||||||
|
private String[] eventTypeLike;
|
||||||
|
private String[] userIdLike;
|
||||||
|
private String[] domainLike;
|
||||||
|
private String[] workbasketKeyLike;
|
||||||
|
private String[] workbasketTypeLike;
|
||||||
|
private String[] ownerLike;
|
||||||
|
private String[] custom1Like;
|
||||||
|
private String[] custom2Like;
|
||||||
|
private String[] custom3Like;
|
||||||
|
private String[] custom4Like;
|
||||||
|
private String[] orgLevel1Like;
|
||||||
|
private String[] orgLevel2Like;
|
||||||
|
private String[] orgLevel3Like;
|
||||||
|
private String[] orgLevel4Like;
|
||||||
|
|
||||||
|
public WorkbasketHistoryQueryImpl(TaskanaHistoryEngineImpl internalTaskanaHistoryEngine) {
|
||||||
|
this.taskanaHistoryEngine = internalTaskanaHistoryEngine;
|
||||||
|
this.orderBy = new ArrayList<>();
|
||||||
|
this.orderColumns = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getIdIn() {
|
||||||
|
return idIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getWorkbasketIdIn() {
|
||||||
|
return workbasketIdIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getEventTypeIn() {
|
||||||
|
return eventTypeIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TimeInterval[] getCreatedIn() {
|
||||||
|
return createdIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getUserIdIn() {
|
||||||
|
return userIdIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getDomainIn() {
|
||||||
|
return domainIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getWorkbasketKeyIn() {
|
||||||
|
return workbasketKeyIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getWorkbasketTypeIn() {
|
||||||
|
return workbasketTypeIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOwnerIn() {
|
||||||
|
return ownerIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom1In() {
|
||||||
|
return custom1In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom2In() {
|
||||||
|
return custom2In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom3In() {
|
||||||
|
return custom3In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom4In() {
|
||||||
|
return custom4In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOrgLevel1In() {
|
||||||
|
return orgLevel1In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOrgLevel2In() {
|
||||||
|
return orgLevel2In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOrgLevel3In() {
|
||||||
|
return orgLevel3In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOrgLevel4In() {
|
||||||
|
return orgLevel4In;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getWorkbasketIdLike() {
|
||||||
|
return workbasketIdLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getEventTypeLike() {
|
||||||
|
return eventTypeLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getUserIdLike() {
|
||||||
|
return userIdLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getDomainLike() {
|
||||||
|
return domainLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getWorkbasketKeyLike() {
|
||||||
|
return workbasketKeyLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getWorkbasketTypeLike() {
|
||||||
|
return workbasketTypeLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOwnerLike() {
|
||||||
|
return ownerLike;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom1Like() {
|
||||||
|
return custom1Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom2Like() {
|
||||||
|
return custom2Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom3Like() {
|
||||||
|
return custom3Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getCustom4Like() {
|
||||||
|
return custom4Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOrgLevel1Like() {
|
||||||
|
return orgLevel1Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOrgLevel2Like() {
|
||||||
|
return orgLevel2Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOrgLevel3Like() {
|
||||||
|
return orgLevel3Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getOrgLevel4Like() {
|
||||||
|
return orgLevel4Like;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery idIn(String... idIn) {
|
||||||
|
this.idIn = toUpperCopy(idIn);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery workbasketIdIn(String... workbasketId) {
|
||||||
|
this.workbasketIdIn = toUpperCopy(workbasketId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery eventTypeIn(String... eventType) {
|
||||||
|
this.eventTypeIn = toUpperCopy(eventType);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery createdWithin(TimeInterval... createdIn) {
|
||||||
|
this.createdIn = createdIn;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery userIdIn(String... userId) {
|
||||||
|
this.userIdIn = toUpperCopy(userId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery domainIn(String... domain) {
|
||||||
|
this.domainIn = toUpperCopy(domain);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery workbasketKeyIn(String... workbasketKey) {
|
||||||
|
this.workbasketKeyIn = toUpperCopy(workbasketKey);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery workbasketTypeIn(String... workbasketType) {
|
||||||
|
this.workbasketTypeIn = toUpperCopy(workbasketType);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery ownerIn(String... oownerIn) {
|
||||||
|
this.ownerIn = toUpperCopy(ownerIn);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery custom1In(String... custom1) {
|
||||||
|
this.custom1In = toUpperCopy(custom1);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery custom2In(String... custom2) {
|
||||||
|
this.custom2In = toUpperCopy(custom2);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery custom3In(String... custom3) {
|
||||||
|
this.custom3In = toUpperCopy(custom3);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery custom4In(String... custom4) {
|
||||||
|
this.custom4In = toUpperCopy(custom4);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orgLevel1In(String... orgLevel1) {
|
||||||
|
this.orgLevel1In = toUpperCopy(orgLevel1);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orgLevel2In(String... orgLevel2) {
|
||||||
|
this.orgLevel2In = toUpperCopy(orgLevel2);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orgLevel3In(String... orgLevel3) {
|
||||||
|
this.orgLevel3In = toUpperCopy(orgLevel3);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orgLevel4In(String... orgLevel4) {
|
||||||
|
this.orgLevel4In = toUpperCopy(orgLevel4);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery workbasketIdLike(String... workbasketId) {
|
||||||
|
this.workbasketIdLike = toUpperCopy(workbasketId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery eventTypeLike(String... eventType) {
|
||||||
|
this.eventTypeLike = toUpperCopy(eventType);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery userIdLike(String... userId) {
|
||||||
|
this.userIdLike = toUpperCopy(userId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery domainLike(String... domain) {
|
||||||
|
this.domainLike = toUpperCopy(domain);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery workbasketKeyLike(String... workbasketKey) {
|
||||||
|
this.workbasketKeyLike = toUpperCopy(workbasketKey);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery workbasketTypeLike(String... workbasketType) {
|
||||||
|
this.workbasketTypeLike = toUpperCopy(workbasketType);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery ownerLike(String... ownerLike) {
|
||||||
|
this.ownerLike = toUpperCopy(ownerLike);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery custom1Like(String... custom1) {
|
||||||
|
this.custom1Like = toUpperCopy(custom1);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery custom2Like(String... custom2) {
|
||||||
|
this.custom2Like = toUpperCopy(custom2);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery custom3Like(String... custom3) {
|
||||||
|
this.custom3Like = toUpperCopy(custom3);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery custom4Like(String... custom4) {
|
||||||
|
this.custom4Like = toUpperCopy(custom4);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orgLevel1Like(String... orgLevel1) {
|
||||||
|
this.orgLevel1Like = toUpperCopy(orgLevel1);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orgLevel2Like(String... orgLevel2) {
|
||||||
|
this.orgLevel2Like = toUpperCopy(orgLevel2);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orgLevel3Like(String... orgLevel3) {
|
||||||
|
this.orgLevel3Like = toUpperCopy(orgLevel3);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orgLevel4Like(String... orgLevel4) {
|
||||||
|
this.orgLevel4Like = toUpperCopy(orgLevel4);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orderByWorkbasketId(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("WORKBASKET_ID", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orderByEventType(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("EVENT_TYPE", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orderByCreated(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("CREATED", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orderByUserId(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("USER_ID", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orderByDomain(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("DOMAIN", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orderByWorkbasketKey(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("WORKBASKET_KEY", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orderByWorkbasketType(SortDirection sortDirection) {
|
||||||
|
return addOrderCriteria("WORKBASKET_TYPE", sortDirection);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orderByCustomAttribute(int num, SortDirection sortDirection)
|
||||||
|
throws InvalidArgumentException {
|
||||||
|
|
||||||
|
switch (num) {
|
||||||
|
case 1:
|
||||||
|
return addOrderCriteria("CUSTOM_1", sortDirection);
|
||||||
|
case 2:
|
||||||
|
return addOrderCriteria("CUSTOM_2", sortDirection);
|
||||||
|
case 3:
|
||||||
|
return addOrderCriteria("CUSTOM_3", sortDirection);
|
||||||
|
case 4:
|
||||||
|
return addOrderCriteria("CUSTOM_4", sortDirection);
|
||||||
|
default:
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
"Custom number has to be between 1 and 4, but this is: " + num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryQuery orderByOrgLevel(int num, SortDirection sortDirection)
|
||||||
|
throws InvalidArgumentException {
|
||||||
|
|
||||||
|
switch (num) {
|
||||||
|
case 1:
|
||||||
|
return addOrderCriteria("ORGLEVEL_1", sortDirection);
|
||||||
|
case 2:
|
||||||
|
return addOrderCriteria("ORGLEVEL_2", sortDirection);
|
||||||
|
case 3:
|
||||||
|
return addOrderCriteria("ORGLEVEL_3", sortDirection);
|
||||||
|
case 4:
|
||||||
|
return addOrderCriteria("ORGLEVEL_4", sortDirection);
|
||||||
|
default:
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
"Org number has to be between 1 and 4, but this is: " + num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WorkbasketHistoryEvent> list() {
|
||||||
|
LOGGER.debug("entry to list(), this = {}", this);
|
||||||
|
List<WorkbasketHistoryEvent> result = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
result = taskanaHistoryEngine.getSqlSession().selectList(LINK_TO_MAPPER, this);
|
||||||
|
return result;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
LOGGER.debug(
|
||||||
|
"exit from list(). Returning {} resulting Objects: {} ", result.size(), result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WorkbasketHistoryEvent> list(int offset, int limit) {
|
||||||
|
LOGGER.debug("entry to list({},{}), this = {}", offset, limit, this);
|
||||||
|
List<WorkbasketHistoryEvent> result = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
RowBounds rowBounds = new RowBounds(offset, limit);
|
||||||
|
result = taskanaHistoryEngine.getSqlSession().selectList(LINK_TO_MAPPER, this, rowBounds);
|
||||||
|
return result;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
LOGGER.debug(
|
||||||
|
"exit from list(offset,limit). Returning {} resulting Objects: {} ",
|
||||||
|
result.size(),
|
||||||
|
result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> listValues(
|
||||||
|
WorkbasketHistoryQueryColumnName dbColumnName, SortDirection sortDirection) {
|
||||||
|
LOGGER.debug(
|
||||||
|
"entry to listValues() of column {} with sortDirection {}, this {}",
|
||||||
|
dbColumnName,
|
||||||
|
sortDirection,
|
||||||
|
this);
|
||||||
|
List<String> result = new ArrayList<>();
|
||||||
|
this.columnName = dbColumnName;
|
||||||
|
List<String> cacheOrderBy = this.orderBy;
|
||||||
|
this.orderBy.clear();
|
||||||
|
this.addOrderCriteria(columnName.toString(), sortDirection);
|
||||||
|
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
result = taskanaHistoryEngine.getSqlSession().selectList(LINK_TO_VALUE_MAPPER, this);
|
||||||
|
return result;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
this.orderBy = cacheOrderBy;
|
||||||
|
this.columnName = null;
|
||||||
|
this.orderColumns.remove(orderColumns.size() - 1);
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
LOGGER.debug(
|
||||||
|
"Exit from listValues. Returning {} resulting Objects: {} ", result.size(), result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WorkbasketHistoryEvent single() {
|
||||||
|
LOGGER.debug("entry to single(), this = {}", this);
|
||||||
|
WorkbasketHistoryEvent result = null;
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
List<WorkbasketHistoryEvent> results =
|
||||||
|
taskanaHistoryEngine.getSqlSession().selectList(LINK_TO_MAPPER, this);
|
||||||
|
if (results.isEmpty()) {
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
result = results.get(0);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return result;
|
||||||
|
} finally {
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
LOGGER.debug("exit from single(). Returning result {} ", result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long count() {
|
||||||
|
LOGGER.debug("entry to count(), this = {}", this);
|
||||||
|
Long rowCount = null;
|
||||||
|
try {
|
||||||
|
taskanaHistoryEngine.openConnection();
|
||||||
|
rowCount = taskanaHistoryEngine.getSqlSession().selectOne(LINK_TO_COUNTER, this);
|
||||||
|
return (rowCount == null) ? 0L : rowCount;
|
||||||
|
} catch (SQLException e) {
|
||||||
|
LOGGER.error(SQL_EXCEPTION_MESSAGE, e.getCause());
|
||||||
|
return -1;
|
||||||
|
} finally {
|
||||||
|
taskanaHistoryEngine.returnConnection();
|
||||||
|
LOGGER.debug("exit from count(). Returning result {} ", rowCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private WorkbasketHistoryQueryImpl addOrderCriteria(
|
||||||
|
String columnName, SortDirection sortDirection) {
|
||||||
|
String orderByDirection =
|
||||||
|
" " + (sortDirection == null ? SortDirection.ASCENDING : sortDirection);
|
||||||
|
orderBy.add(columnName + orderByDirection);
|
||||||
|
orderColumns.add(columnName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package pro.taskana.simplehistory.impl.mappings;
|
package pro.taskana.simplehistory.impl.task;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.ibatis.annotations.Delete;
|
import org.apache.ibatis.annotations.Delete;
|
||||||
|
|
@ -8,14 +8,14 @@ import org.apache.ibatis.annotations.Result;
|
||||||
import org.apache.ibatis.annotations.Results;
|
import org.apache.ibatis.annotations.Results;
|
||||||
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
/** This class is the mybatis mapping of workbaskets. */
|
/** This class is the mybatis mapping of task history events. */
|
||||||
@SuppressWarnings("checkstyle:LineLength")
|
@SuppressWarnings("checkstyle:LineLength")
|
||||||
public interface HistoryEventMapper {
|
public interface TaskHistoryEventMapper {
|
||||||
|
|
||||||
@Insert(
|
@Insert(
|
||||||
"<script>INSERT INTO HISTORY_EVENTS (ID,BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID,"
|
"<script>INSERT INTO TASK_HISTORY_EVENT (ID,BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID,"
|
||||||
+ " EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY, POR_SYSTEM, POR_INSTANCE,"
|
+ " EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY, POR_SYSTEM, POR_INSTANCE,"
|
||||||
+ " POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY, ATTACHMENT_CLASSIFICATION_KEY, "
|
+ " POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY, ATTACHMENT_CLASSIFICATION_KEY, "
|
||||||
+ " OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS)"
|
+ " OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS)"
|
||||||
|
|
@ -27,14 +27,14 @@ public interface HistoryEventMapper {
|
||||||
+ " #{historyEvent.custom1}, #{historyEvent.custom2}, #{historyEvent.custom3}, #{historyEvent.custom4},"
|
+ " #{historyEvent.custom1}, #{historyEvent.custom2}, #{historyEvent.custom3}, #{historyEvent.custom4},"
|
||||||
+ " #{historyEvent.details}) "
|
+ " #{historyEvent.details}) "
|
||||||
+ "</script>")
|
+ "</script>")
|
||||||
void insert(@Param("historyEvent") TaskanaHistoryEvent historyEvent);
|
void insert(@Param("historyEvent") TaskHistoryEvent historyEvent);
|
||||||
|
|
||||||
@Select(
|
@Select(
|
||||||
"<script>"
|
"<script>"
|
||||||
+ "SELECT ID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, "
|
+ "SELECT ID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, "
|
||||||
+ "POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY,"
|
+ "POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY,"
|
||||||
+ "ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS "
|
+ "ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS "
|
||||||
+ "FROM HISTORY_EVENTS WHERE ID = #{id} "
|
+ "FROM TASK_HISTORY_EVENT WHERE ID = #{id} "
|
||||||
+ "<if test=\"_databaseId == 'db2'\">with UR </if> "
|
+ "<if test=\"_databaseId == 'db2'\">with UR </if> "
|
||||||
+ "</script>")
|
+ "</script>")
|
||||||
@Results(
|
@Results(
|
||||||
|
|
@ -64,10 +64,9 @@ public interface HistoryEventMapper {
|
||||||
@Result(property = "custom4", column = "CUSTOM_4"),
|
@Result(property = "custom4", column = "CUSTOM_4"),
|
||||||
@Result(property = "details", column = "DETAILS")
|
@Result(property = "details", column = "DETAILS")
|
||||||
})
|
})
|
||||||
TaskanaHistoryEvent findById(@Param("id") String id);
|
TaskHistoryEvent findById(@Param("id") String id);
|
||||||
|
|
||||||
@Delete(
|
@Delete(
|
||||||
"<script>DELETE FROM HISTORY_EVENTS WHERE TASK_ID IN(<foreach item='item' collection='taskIds' separator=',' >#{item}</foreach>)</script>")
|
"<script>DELETE FROM TASK_HISTORY_EVENT WHERE TASK_ID IN(<foreach item='item' collection='taskIds' separator=',' >#{item}</foreach>)</script>")
|
||||||
void deleteMultipleByTaskIds(@Param("taskIds") List<String> taskIds);
|
void deleteMultipleByTaskIds(@Param("taskIds") List<String> taskIds);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
package pro.taskana.simplehistory.query;
|
package pro.taskana.simplehistory.impl.task;
|
||||||
|
|
||||||
import pro.taskana.common.api.BaseQuery;
|
import pro.taskana.common.api.BaseQuery;
|
||||||
import pro.taskana.common.api.TimeInterval;
|
import pro.taskana.common.api.TimeInterval;
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
/** HistoryQuery for generating dynamic sql. */
|
/** HistoryQuery for generating dynamic sql. */
|
||||||
public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryColumnName> {
|
public interface TaskHistoryQuery extends BaseQuery<TaskHistoryEvent, TaskHistoryQueryColumnName> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your Id to your query.
|
* Add your Id to your query.
|
||||||
|
|
@ -14,7 +14,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param idIn as String
|
* @param idIn as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery idIn(String... idIn);
|
TaskHistoryQuery idIn(String... idIn);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your businessProcessId to your query.
|
* Add your businessProcessId to your query.
|
||||||
|
|
@ -22,7 +22,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param businessProcessId as String
|
* @param businessProcessId as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery businessProcessIdIn(String... businessProcessId);
|
TaskHistoryQuery businessProcessIdIn(String... businessProcessId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your parentBusinessProcessId to your query.
|
* Add your parentBusinessProcessId to your query.
|
||||||
|
|
@ -30,7 +30,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param parentBusinessProcessId as String
|
* @param parentBusinessProcessId as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery parentBusinessProcessIdIn(String... parentBusinessProcessId);
|
TaskHistoryQuery parentBusinessProcessIdIn(String... parentBusinessProcessId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your taskId to your query.
|
* Add your taskId to your query.
|
||||||
|
|
@ -38,7 +38,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param taskId as String
|
* @param taskId as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery taskIdIn(String... taskId);
|
TaskHistoryQuery taskIdIn(String... taskId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your eventType to your query.
|
* Add your eventType to your query.
|
||||||
|
|
@ -46,7 +46,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param eventType as String
|
* @param eventType as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery eventTypeIn(String... eventType);
|
TaskHistoryQuery eventTypeIn(String... eventType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your created TimeInterval to your query.
|
* Add your created TimeInterval to your query.
|
||||||
|
|
@ -55,7 +55,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* were created.
|
* were created.
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery createdWithin(TimeInterval... createdWithin);
|
TaskHistoryQuery createdWithin(TimeInterval... createdWithin);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your userId to your query.
|
* Add your userId to your query.
|
||||||
|
|
@ -63,7 +63,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param userId as String
|
* @param userId as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery userIdIn(String... userId);
|
TaskHistoryQuery userIdIn(String... userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your domain to your query.
|
* Add your domain to your query.
|
||||||
|
|
@ -71,7 +71,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param domain as String
|
* @param domain as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery domainIn(String... domain);
|
TaskHistoryQuery domainIn(String... domain);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your workbasketKey to your query.
|
* Add your workbasketKey to your query.
|
||||||
|
|
@ -79,7 +79,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param workbasketKey as String
|
* @param workbasketKey as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery workbasketKeyIn(String... workbasketKey);
|
TaskHistoryQuery workbasketKeyIn(String... workbasketKey);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porCompany to your query.
|
* Add your porCompany to your query.
|
||||||
|
|
@ -87,7 +87,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porCompany as String
|
* @param porCompany as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porCompanyIn(String... porCompany);
|
TaskHistoryQuery porCompanyIn(String... porCompany);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porSystem to your query.
|
* Add your porSystem to your query.
|
||||||
|
|
@ -95,7 +95,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porSystem as String
|
* @param porSystem as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porSystemIn(String... porSystem);
|
TaskHistoryQuery porSystemIn(String... porSystem);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porInstance to your query.
|
* Add your porInstance to your query.
|
||||||
|
|
@ -103,7 +103,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porInstance as String
|
* @param porInstance as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porInstanceIn(String... porInstance);
|
TaskHistoryQuery porInstanceIn(String... porInstance);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porType to your query.
|
* Add your porType to your query.
|
||||||
|
|
@ -111,7 +111,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porType as String
|
* @param porType as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porTypeIn(String... porType);
|
TaskHistoryQuery porTypeIn(String... porType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porValue to your query.
|
* Add your porValue to your query.
|
||||||
|
|
@ -119,7 +119,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porValue as String
|
* @param porValue as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porValueIn(String... porValue);
|
TaskHistoryQuery porValueIn(String... porValue);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your taskClassificationKey to your query.
|
* Add your taskClassificationKey to your query.
|
||||||
|
|
@ -127,7 +127,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param taskClassificationKey as String
|
* @param taskClassificationKey as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery taskClassificationKeyIn(String... taskClassificationKey);
|
TaskHistoryQuery taskClassificationKeyIn(String... taskClassificationKey);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your taskClassificationCategory to your query.
|
* Add your taskClassificationCategory to your query.
|
||||||
|
|
@ -135,7 +135,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param taskClassificationCategory as String
|
* @param taskClassificationCategory as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery taskClassificationCategoryIn(String... taskClassificationCategory);
|
TaskHistoryQuery taskClassificationCategoryIn(String... taskClassificationCategory);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your attachmentClassificationKey to your query.
|
* Add your attachmentClassificationKey to your query.
|
||||||
|
|
@ -143,7 +143,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param attachmentClassificationKey as String
|
* @param attachmentClassificationKey as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery attachmentClassificationKeyIn(String... attachmentClassificationKey);
|
TaskHistoryQuery attachmentClassificationKeyIn(String... attachmentClassificationKey);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your oldValue to your query.
|
* Add your oldValue to your query.
|
||||||
|
|
@ -151,7 +151,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param oldValue as String
|
* @param oldValue as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery oldValueIn(String... oldValue);
|
TaskHistoryQuery oldValueIn(String... oldValue);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your newValue to your query.
|
* Add your newValue to your query.
|
||||||
|
|
@ -159,7 +159,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param newValue as String
|
* @param newValue as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery newValueIn(String... newValue);
|
TaskHistoryQuery newValueIn(String... newValue);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your businessProcessId to your query. It will be compared in SQL with an LIKE. If you use a
|
* Add your businessProcessId to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
|
@ -168,7 +168,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param businessProcessId as String
|
* @param businessProcessId as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery businessProcessIdLike(String... businessProcessId);
|
TaskHistoryQuery businessProcessIdLike(String... businessProcessId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your parentBusinessProcessId to your query. It will be compared in SQL with an LIKE. If you
|
* Add your parentBusinessProcessId to your query. It will be compared in SQL with an LIKE. If you
|
||||||
|
|
@ -177,7 +177,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param parentBusinessProcessId as String
|
* @param parentBusinessProcessId as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery parentBusinessProcessIdLike(String... parentBusinessProcessId);
|
TaskHistoryQuery parentBusinessProcessIdLike(String... parentBusinessProcessId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your taskId to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
* Add your taskId to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
|
@ -186,7 +186,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param taskId as String
|
* @param taskId as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery taskIdLike(String... taskId);
|
TaskHistoryQuery taskIdLike(String... taskId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your eventType to your query. It will be compared in SQL with an LIKE. If you use a
|
* Add your eventType to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
|
@ -195,7 +195,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param eventType as String
|
* @param eventType as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery eventTypeLike(String... eventType);
|
TaskHistoryQuery eventTypeLike(String... eventType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your userId to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
* Add your userId to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
|
@ -204,7 +204,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param userId as String
|
* @param userId as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery userIdLike(String... userId);
|
TaskHistoryQuery userIdLike(String... userId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your domain to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
* Add your domain to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
|
@ -213,7 +213,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param domain as String
|
* @param domain as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery domainLike(String... domain);
|
TaskHistoryQuery domainLike(String... domain);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your workbasketKey to your query. It will be compared in SQL with an LIKE. If you use a
|
* Add your workbasketKey to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
|
@ -222,7 +222,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param workbasketKey as String
|
* @param workbasketKey as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery workbasketKeyLike(String... workbasketKey);
|
TaskHistoryQuery workbasketKeyLike(String... workbasketKey);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porCompany to your query. It will be compared in SQL with an LIKE. If you use a
|
* Add your porCompany to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
|
@ -231,7 +231,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porCompany as String
|
* @param porCompany as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porCompanyLike(String... porCompany);
|
TaskHistoryQuery porCompanyLike(String... porCompany);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porSystem to your query. It will be compared in SQL with an LIKE. If you use a
|
* Add your porSystem to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
|
@ -240,7 +240,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porSystem as String
|
* @param porSystem as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porSystemLike(String... porSystem);
|
TaskHistoryQuery porSystemLike(String... porSystem);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porInstance to your query. It will be compared in SQL with an LIKE. If you use a
|
* Add your porInstance to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
|
@ -249,7 +249,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porInstance as String
|
* @param porInstance as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porInstanceLike(String... porInstance);
|
TaskHistoryQuery porInstanceLike(String... porInstance);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porType to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
* Add your porType to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
|
@ -258,7 +258,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porType as String
|
* @param porType as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porTypeLike(String... porType);
|
TaskHistoryQuery porTypeLike(String... porType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your porValue to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
* Add your porValue to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
|
@ -267,7 +267,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param porValue as String
|
* @param porValue as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery porValueLike(String... porValue);
|
TaskHistoryQuery porValueLike(String... porValue);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your taskClassificationKey to your query. It will be compared in SQL with an LIKE. If you
|
* Add your taskClassificationKey to your query. It will be compared in SQL with an LIKE. If you
|
||||||
|
|
@ -276,7 +276,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param taskClassificationKey as String
|
* @param taskClassificationKey as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery taskClassificationKeyLike(String... taskClassificationKey);
|
TaskHistoryQuery taskClassificationKeyLike(String... taskClassificationKey);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your taskClassificationCategory to your query. It will be compared in SQL with an LIKE. If
|
* Add your taskClassificationCategory to your query. It will be compared in SQL with an LIKE. If
|
||||||
|
|
@ -285,7 +285,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param taskClassificationCategory as String
|
* @param taskClassificationCategory as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery taskClassificationCategoryLike(String... taskClassificationCategory);
|
TaskHistoryQuery taskClassificationCategoryLike(String... taskClassificationCategory);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your attachmentClassificationKey to your query. It will be compared in SQL with an LIKE. If
|
* Add your attachmentClassificationKey to your query. It will be compared in SQL with an LIKE. If
|
||||||
|
|
@ -294,7 +294,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param attachmentClassificationKey as String
|
* @param attachmentClassificationKey as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery attachmentClassificationKeyLike(String... attachmentClassificationKey);
|
TaskHistoryQuery attachmentClassificationKeyLike(String... attachmentClassificationKey);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your oldValue to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
* Add your oldValue to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
|
@ -303,7 +303,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param oldValue as String
|
* @param oldValue as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery oldValueLike(String... oldValue);
|
TaskHistoryQuery oldValueLike(String... oldValue);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add your newValue to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
* Add your newValue to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
|
@ -312,7 +312,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param newValue as String
|
* @param newValue as String
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery newValueLike(String... newValue);
|
TaskHistoryQuery newValueLike(String... newValue);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add the values of custom attributes for exact matching to your query.
|
* Add the values of custom attributes for exact matching to your query.
|
||||||
|
|
@ -321,7 +321,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param searchArguments the customField values of the searched for tasks
|
* @param searchArguments the customField values of the searched for tasks
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery customAttributeIn(TaskHistoryCustomField customField, String... searchArguments);
|
TaskHistoryQuery customAttributeIn(TaskHistoryCustomField customField, String... searchArguments);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add the values of custom attributes for pattern matching to your query. They will be compared
|
* Add the values of custom attributes for pattern matching to your query. They will be compared
|
||||||
|
|
@ -332,7 +332,8 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* @param searchArguments the customField values of the searched-for tasks
|
* @param searchArguments the customField values of the searched-for tasks
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery customAttributeLike(TaskHistoryCustomField customField, String... searchArguments);
|
TaskHistoryQuery customAttributeLike(
|
||||||
|
TaskHistoryCustomField customField, String... searchArguments);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by businessProcessId.
|
* Sort the query result by businessProcessId.
|
||||||
|
|
@ -341,7 +342,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByBusinessProcessId(SortDirection sortDirection);
|
TaskHistoryQuery orderByBusinessProcessId(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by parentBusinessProcessId.
|
* Sort the query result by parentBusinessProcessId.
|
||||||
|
|
@ -350,7 +351,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByParentBusinessProcessId(SortDirection sortDirection);
|
TaskHistoryQuery orderByParentBusinessProcessId(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by taskId.
|
* Sort the query result by taskId.
|
||||||
|
|
@ -359,7 +360,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByTaskId(SortDirection sortDirection);
|
TaskHistoryQuery orderByTaskId(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by eventType.
|
* Sort the query result by eventType.
|
||||||
|
|
@ -368,7 +369,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByEventType(SortDirection sortDirection);
|
TaskHistoryQuery orderByEventType(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by created.
|
* Sort the query result by created.
|
||||||
|
|
@ -377,7 +378,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByCreated(SortDirection sortDirection);
|
TaskHistoryQuery orderByCreated(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by userId.
|
* Sort the query result by userId.
|
||||||
|
|
@ -386,7 +387,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByUserId(SortDirection sortDirection);
|
TaskHistoryQuery orderByUserId(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by Domain.
|
* Sort the query result by Domain.
|
||||||
|
|
@ -395,7 +396,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByDomain(SortDirection sortDirection);
|
TaskHistoryQuery orderByDomain(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by WorkbasketKey.
|
* Sort the query result by WorkbasketKey.
|
||||||
|
|
@ -404,7 +405,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByWorkbasketKey(SortDirection sortDirection);
|
TaskHistoryQuery orderByWorkbasketKey(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by porCompany.
|
* Sort the query result by porCompany.
|
||||||
|
|
@ -413,7 +414,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByPorCompany(SortDirection sortDirection);
|
TaskHistoryQuery orderByPorCompany(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by porSystem.
|
* Sort the query result by porSystem.
|
||||||
|
|
@ -422,7 +423,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByPorSystem(SortDirection sortDirection);
|
TaskHistoryQuery orderByPorSystem(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by porInstance.
|
* Sort the query result by porInstance.
|
||||||
|
|
@ -431,7 +432,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByPorInstance(SortDirection sortDirection);
|
TaskHistoryQuery orderByPorInstance(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by porType.
|
* Sort the query result by porType.
|
||||||
|
|
@ -440,7 +441,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByPorType(SortDirection sortDirection);
|
TaskHistoryQuery orderByPorType(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by porValue.
|
* Sort the query result by porValue.
|
||||||
|
|
@ -449,7 +450,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByPorValue(SortDirection sortDirection);
|
TaskHistoryQuery orderByPorValue(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by taskClassificationKey.
|
* Sort the query result by taskClassificationKey.
|
||||||
|
|
@ -458,7 +459,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByTaskClassificationKey(SortDirection sortDirection);
|
TaskHistoryQuery orderByTaskClassificationKey(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by taskClassificationCategory.
|
* Sort the query result by taskClassificationCategory.
|
||||||
|
|
@ -467,7 +468,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByTaskClassificationCategory(SortDirection sortDirection);
|
TaskHistoryQuery orderByTaskClassificationCategory(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by attachmentClassificationKey.
|
* Sort the query result by attachmentClassificationKey.
|
||||||
|
|
@ -476,7 +477,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByAttachmentClassificationKey(SortDirection sortDirection);
|
TaskHistoryQuery orderByAttachmentClassificationKey(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by oldValue.
|
* Sort the query result by oldValue.
|
||||||
|
|
@ -485,7 +486,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByOldValue(SortDirection sortDirection);
|
TaskHistoryQuery orderByOldValue(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sort the query result by newValue.
|
* Sort the query result by newValue.
|
||||||
|
|
@ -494,7 +495,7 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByNewValue(SortDirection sortDirection);
|
TaskHistoryQuery orderByNewValue(SortDirection sortDirection);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method sorts the query result according to the value of a custom field.
|
* This method sorts the query result according to the value of a custom field.
|
||||||
|
|
@ -504,6 +505,6 @@ public interface HistoryQuery extends BaseQuery<HistoryEventImpl, HistoryQueryCo
|
||||||
* If sortDirection is null, the result is sorted in ascending order
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
* @return the query
|
* @return the query
|
||||||
*/
|
*/
|
||||||
HistoryQuery orderByCustomAttribute(
|
TaskHistoryQuery orderByCustomAttribute(
|
||||||
TaskHistoryCustomField customField, SortDirection sortDirection);
|
TaskHistoryCustomField customField, SortDirection sortDirection);
|
||||||
}
|
}
|
||||||
|
|
@ -1,14 +1,13 @@
|
||||||
package pro.taskana.simplehistory.query;
|
package pro.taskana.simplehistory.impl.task;
|
||||||
|
|
||||||
import pro.taskana.common.api.QueryColumnName;
|
import pro.taskana.common.api.QueryColumnName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enum containing the column names for {@link
|
* Enum containing the column names for {@link TaskHistoryQueryMapper#queryHistoryColumnValues}.
|
||||||
* pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper#queryHistoryColumnValues}.
|
|
||||||
*
|
*
|
||||||
* @author bv
|
* @author bv
|
||||||
*/
|
*/
|
||||||
public enum HistoryQueryColumnName implements QueryColumnName {
|
public enum TaskHistoryQueryColumnName implements QueryColumnName {
|
||||||
ID("id"),
|
ID("id"),
|
||||||
BUSINESS_PROCESS_ID("business_process_id"),
|
BUSINESS_PROCESS_ID("business_process_id"),
|
||||||
PARENT_BUSINESS_PROCESS_ID("parent_business_process_id"),
|
PARENT_BUSINESS_PROCESS_ID("parent_business_process_id"),
|
||||||
|
|
@ -35,7 +34,7 @@ public enum HistoryQueryColumnName implements QueryColumnName {
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
HistoryQueryColumnName(String name) {
|
TaskHistoryQueryColumnName(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1,23 +1,23 @@
|
||||||
package pro.taskana.simplehistory.impl.mappings;
|
package pro.taskana.simplehistory.impl.task;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.apache.ibatis.annotations.Result;
|
import org.apache.ibatis.annotations.Result;
|
||||||
import org.apache.ibatis.annotations.Results;
|
import org.apache.ibatis.annotations.Results;
|
||||||
import org.apache.ibatis.annotations.Select;
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
import pro.taskana.simplehistory.impl.TaskHistoryQueryImpl;
|
||||||
import pro.taskana.simplehistory.impl.HistoryQueryImpl;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
/** This class is the mybatis mapping of historyQueries. */
|
/** This class is the mybatis mapping of TaskHistoryQueries. */
|
||||||
@SuppressWarnings("checkstyle:LineLength")
|
@SuppressWarnings("checkstyle:LineLength")
|
||||||
public interface HistoryQueryMapper {
|
public interface TaskHistoryQueryMapper {
|
||||||
|
|
||||||
@Select(
|
@Select(
|
||||||
"<script>"
|
"<script>"
|
||||||
+ "SELECT ID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, "
|
+ "SELECT ID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, "
|
||||||
+ "POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY,"
|
+ "POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY,"
|
||||||
+ "ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4 "
|
+ "ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4 "
|
||||||
+ "FROM HISTORY_EVENTS"
|
+ "FROM TASK_HISTORY_EVENT"
|
||||||
+ "<where>"
|
+ "<where>"
|
||||||
// IN-Queries
|
// IN-Queries
|
||||||
+ "<if test='idIn != null'>AND UPPER(ID) IN (<foreach item='item' collection='idIn' separator=',' >#{item}</foreach>)</if> "
|
+ "<if test='idIn != null'>AND UPPER(ID) IN (<foreach item='item' collection='idIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
|
@ -67,7 +67,6 @@ public interface HistoryQueryMapper {
|
||||||
+ "<if test='custom4Like != null'>AND (<foreach item='item' collection='custom4Like' separator=' OR ' >UPPER(CUSTOM_4) LIKE #{item}</foreach>)</if> "
|
+ "<if test='custom4Like != null'>AND (<foreach item='item' collection='custom4Like' separator=' OR ' >UPPER(CUSTOM_4) LIKE #{item}</foreach>)</if> "
|
||||||
+ "</where>"
|
+ "</where>"
|
||||||
+ "<if test='!orderBy.isEmpty()'>ORDER BY <foreach item='item' collection='orderBy' separator=',' >${item}</foreach></if> "
|
+ "<if test='!orderBy.isEmpty()'>ORDER BY <foreach item='item' collection='orderBy' separator=',' >${item}</foreach></if> "
|
||||||
+ "<if test='maxRows > 0'> FETCH FIRST #{maxRows} ROWS ONLY </if>"
|
|
||||||
+ "</script>")
|
+ "</script>")
|
||||||
@Results(
|
@Results(
|
||||||
value = {
|
value = {
|
||||||
|
|
@ -95,12 +94,12 @@ public interface HistoryQueryMapper {
|
||||||
@Result(property = "custom3", column = "CUSTOM_3"),
|
@Result(property = "custom3", column = "CUSTOM_3"),
|
||||||
@Result(property = "custom4", column = "CUSTOM_4")
|
@Result(property = "custom4", column = "CUSTOM_4")
|
||||||
})
|
})
|
||||||
List<HistoryEventImpl> queryHistoryEvent(HistoryQueryImpl historyEventQuery);
|
List<TaskHistoryEvent> queryHistoryEvents(TaskHistoryQueryImpl historyEventQuery);
|
||||||
|
|
||||||
@Select(
|
@Select(
|
||||||
"<script>"
|
"<script>"
|
||||||
+ "SELECT COUNT(ID) "
|
+ "SELECT COUNT(ID) "
|
||||||
+ "FROM HISTORY_EVENTS"
|
+ "FROM TASK_HISTORY_EVENT"
|
||||||
+ "<where>"
|
+ "<where>"
|
||||||
// IN-Queries
|
// IN-Queries
|
||||||
+ "<if test='businessProcessIdIn != null'>AND UPPER(BUSINESS_PROCESS_ID) IN (<foreach item='item' collection='businessProcessIdIn' separator=',' >#{item}</foreach>)</if> "
|
+ "<if test='businessProcessIdIn != null'>AND UPPER(BUSINESS_PROCESS_ID) IN (<foreach item='item' collection='businessProcessIdIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
|
@ -149,11 +148,11 @@ public interface HistoryQueryMapper {
|
||||||
+ "<if test='custom4Like != null'>AND (<foreach item='item' collection='custom4Like' separator=' OR ' >UPPER(CUSTOM_4) LIKE #{item}</foreach>)</if> "
|
+ "<if test='custom4Like != null'>AND (<foreach item='item' collection='custom4Like' separator=' OR ' >UPPER(CUSTOM_4) LIKE #{item}</foreach>)</if> "
|
||||||
+ "</where>"
|
+ "</where>"
|
||||||
+ "</script>")
|
+ "</script>")
|
||||||
long countHistoryEvent(HistoryQueryImpl historyEventQuery);
|
long countHistoryEvents(TaskHistoryQueryImpl historyEventQuery);
|
||||||
|
|
||||||
@Select(
|
@Select(
|
||||||
"<script>SELECT DISTINCT ${columnName} "
|
"<script>SELECT DISTINCT ${columnName} "
|
||||||
+ "FROM HISTORY_EVENTS"
|
+ "FROM TASK_HISTORY_EVENT"
|
||||||
+ "<where>"
|
+ "<where>"
|
||||||
// IN-Queries
|
// IN-Queries
|
||||||
+ "<if test='idIn != null'>AND UPPER(ID) IN (<foreach item='item' collection='idIn' separator=',' >#{item}</foreach>)</if> "
|
+ "<if test='idIn != null'>AND UPPER(ID) IN (<foreach item='item' collection='idIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
|
@ -204,5 +203,5 @@ public interface HistoryQueryMapper {
|
||||||
+ "</where>"
|
+ "</where>"
|
||||||
+ "<if test='!orderBy.isEmpty()'>ORDER BY <foreach item='item' collection='orderBy' separator=',' >${item}</foreach></if> "
|
+ "<if test='!orderBy.isEmpty()'>ORDER BY <foreach item='item' collection='orderBy' separator=',' >${item}</foreach></if> "
|
||||||
+ "</script>")
|
+ "</script>")
|
||||||
List<String> queryHistoryColumnValues(HistoryQueryImpl historyQuery);
|
List<String> queryHistoryColumnValues(TaskHistoryQueryImpl historyQuery);
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,59 @@
|
||||||
|
package pro.taskana.simplehistory.impl.workbasket;
|
||||||
|
|
||||||
|
import org.apache.ibatis.annotations.Insert;
|
||||||
|
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 pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
|
||||||
|
/** This class is the mybatis mapping of workbasket history events. */
|
||||||
|
@SuppressWarnings("checkstyle:LineLength")
|
||||||
|
public interface WorkbasketHistoryEventMapper {
|
||||||
|
|
||||||
|
@Insert(
|
||||||
|
"<script>INSERT INTO WORKBASKET_HISTORY_EVENT (ID,WORKBASKET_ID,"
|
||||||
|
+ " EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, WORKBASKET_TYPE, OWNER, "
|
||||||
|
+ " CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, ORGLEVEL_1,"
|
||||||
|
+ " ORGLEVEL_2, ORGLEVEL_3, ORGLEVEL_4, DETAILS)"
|
||||||
|
+ " VALUES ( #{historyEvent.id}, #{historyEvent.workbasketId},"
|
||||||
|
+ " #{historyEvent.eventType}, #{historyEvent.created}, #{historyEvent.userId},"
|
||||||
|
+ " #{historyEvent.domain}, #{historyEvent.workbasketKey}, "
|
||||||
|
+ " #{historyEvent.workbasketType}, #{historyEvent.owner}, "
|
||||||
|
+ " #{historyEvent.custom1}, #{historyEvent.custom2}, #{historyEvent.custom3}, "
|
||||||
|
+ "#{historyEvent.custom4}, #{historyEvent.orgLevel1}, #{historyEvent.orgLevel2}, "
|
||||||
|
+ "#{historyEvent.orgLevel3}, #{historyEvent.orgLevel4}, #{historyEvent.details}) "
|
||||||
|
+ "</script>")
|
||||||
|
void insert(@Param("historyEvent") WorkbasketHistoryEvent historyEvent);
|
||||||
|
|
||||||
|
@Select(
|
||||||
|
"<script>"
|
||||||
|
+ "SELECT ID, WORKBASKET_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, WORKBASKET_TYPE, OWNER, "
|
||||||
|
+ "CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, ORGLEVEL_1, ORGLEVEL_2, ORGLEVEL_3, ORGLEVEL_4, DETAILS "
|
||||||
|
+ "FROM WORKBASKET_HISTORY_EVENT WHERE ID = #{id} "
|
||||||
|
+ "<if test=\"_databaseId == 'db2'\">with UR </if> "
|
||||||
|
+ "</script>")
|
||||||
|
@Results(
|
||||||
|
value = {
|
||||||
|
@Result(property = "id", column = "ID"),
|
||||||
|
@Result(property = "workbasketId", column = "WORKBASKET_ID"),
|
||||||
|
@Result(property = "eventType", column = "EVENT_TYPE"),
|
||||||
|
@Result(property = "created", column = "CREATED"),
|
||||||
|
@Result(property = "userId", column = "USER_ID"),
|
||||||
|
@Result(property = "domain", column = "DOMAIN"),
|
||||||
|
@Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
|
||||||
|
@Result(property = "workbasketType", column = "WORKBASKET_TYPE"),
|
||||||
|
@Result(property = "owner", column = "OWNER"),
|
||||||
|
@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 = "orgLevel1", column = "ORGLEVEL_1"),
|
||||||
|
@Result(property = "orgLevel2", column = "ORGLEVEL_2"),
|
||||||
|
@Result(property = "orgLevel3", column = "ORGLEVEL_3"),
|
||||||
|
@Result(property = "orgLevel4", column = "ORGLEVEL_4"),
|
||||||
|
@Result(property = "details", column = "DETAILS")
|
||||||
|
})
|
||||||
|
WorkbasketHistoryEvent findById(@Param("id") String id);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,371 @@
|
||||||
|
package pro.taskana.simplehistory.impl.workbasket;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.BaseQuery;
|
||||||
|
import pro.taskana.common.api.TimeInterval;
|
||||||
|
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
|
||||||
|
/** HistoryQuery for generating dynamic sql. */
|
||||||
|
public interface WorkbasketHistoryQuery
|
||||||
|
extends BaseQuery<WorkbasketHistoryEvent, WorkbasketHistoryQueryColumnName> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your Id to your query.
|
||||||
|
*
|
||||||
|
* @param idIn as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery idIn(String... idIn);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your workbasketId to your query.
|
||||||
|
*
|
||||||
|
* @param workbasketId as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery workbasketIdIn(String... workbasketId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your eventType to your query.
|
||||||
|
*
|
||||||
|
* @param eventType as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery eventTypeIn(String... eventType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your created TimeInterval to your query.
|
||||||
|
*
|
||||||
|
* @param createdWithin the {@link TimeInterval} within which the searched-for classifications
|
||||||
|
* were created.
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery createdWithin(TimeInterval... createdWithin);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your userId to your query.
|
||||||
|
*
|
||||||
|
* @param userId as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery userIdIn(String... userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your domain to your query.
|
||||||
|
*
|
||||||
|
* @param domain as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery domainIn(String... domain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your workbasketKey to your query.
|
||||||
|
*
|
||||||
|
* @param workbasketKey as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery workbasketKeyIn(String... workbasketKey);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your workbasketType to your query.
|
||||||
|
*
|
||||||
|
* @param workbasketType as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery workbasketTypeIn(String... workbasketType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your owner to your query.
|
||||||
|
*
|
||||||
|
* @param owner as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery ownerIn(String... owner);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your custom1 to your query.
|
||||||
|
*
|
||||||
|
* @param custom1 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery custom1In(String... custom1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your custom2 to your query.
|
||||||
|
*
|
||||||
|
* @param custom2 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery custom2In(String... custom2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your custom3 to your query.
|
||||||
|
*
|
||||||
|
* @param custom3 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery custom3In(String... custom3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your custom4 to your query.
|
||||||
|
*
|
||||||
|
* @param custom4 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery custom4In(String... custom4);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your orgLevel1 to your query.
|
||||||
|
*
|
||||||
|
* @param orgLevel1 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orgLevel1In(String... orgLevel1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your orgLevel1 to your query.
|
||||||
|
*
|
||||||
|
* @param orgLevel2 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orgLevel2In(String... orgLevel2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your orgLevel1 to your query.
|
||||||
|
*
|
||||||
|
* @param orgLevel3 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orgLevel3In(String... orgLevel3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your orgLevel1 to your query.
|
||||||
|
*
|
||||||
|
* @param orgLevel4 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orgLevel4In(String... orgLevel4);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your workbasketId to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
* wildcard like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param workbasketId as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery workbasketIdLike(String... workbasketId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your eventType to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
* wildcard like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param eventType as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery eventTypeLike(String... eventType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your userId to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
* like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param userId as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery userIdLike(String... userId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your domain to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
* like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param domain as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery domainLike(String... domain);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your workbasketKey to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
* wildcard like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param workbasketKey as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery workbasketKeyLike(String... workbasketKey);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your workbasketType to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
* wildcard like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param workbasketType as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery workbasketTypeLike(String... workbasketType);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your owner to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
* like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param owner as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery ownerLike(String... owner);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your custom1 to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
* like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param custom1 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery custom1Like(String... custom1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your custom2 to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
* like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param custom2 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery custom2Like(String... custom2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your custom3 to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
* like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param custom3 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery custom3Like(String... custom3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your custom4 to your query. It will be compared in SQL with an LIKE. If you use a wildcard
|
||||||
|
* like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param custom4 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery custom4Like(String... custom4);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your orgLevel1 to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
* wildcard like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param orgLevel1 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orgLevel1Like(String... orgLevel1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your orgLevel2 to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
* wildcard like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param orgLevel2 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orgLevel2Like(String... orgLevel2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your orgLevel3 to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
* wildcard like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param orgLevel3 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orgLevel3Like(String... orgLevel3);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add your orgLevel4 to your query. It will be compared in SQL with an LIKE. If you use a
|
||||||
|
* wildcard like % then it will be transmitted to the database.
|
||||||
|
*
|
||||||
|
* @param orgLevel4 as String
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orgLevel4Like(String... orgLevel4);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort the query result by workbasketId.
|
||||||
|
*
|
||||||
|
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||||
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orderByWorkbasketId(SortDirection sortDirection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort the query result by eventType.
|
||||||
|
*
|
||||||
|
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||||
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orderByEventType(SortDirection sortDirection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort the query result by created.
|
||||||
|
*
|
||||||
|
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||||
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orderByCreated(SortDirection sortDirection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort the query result by userId.
|
||||||
|
*
|
||||||
|
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||||
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orderByUserId(SortDirection sortDirection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort the query result by Domain.
|
||||||
|
*
|
||||||
|
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||||
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orderByDomain(SortDirection sortDirection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort the query result by WorkbasketKey.
|
||||||
|
*
|
||||||
|
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||||
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orderByWorkbasketKey(SortDirection sortDirection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort the query result by WorkbasketType.
|
||||||
|
*
|
||||||
|
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||||
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
|
* @return the query
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orderByWorkbasketType(SortDirection sortDirection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort the query result by a custom attribute.
|
||||||
|
*
|
||||||
|
* @param num the number of the custom attribute as String (eg "4")
|
||||||
|
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||||
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
|
* @return the query
|
||||||
|
* @throws InvalidArgumentException when the number of the custom is incorrect.
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orderByCustomAttribute(int num, SortDirection sortDirection)
|
||||||
|
throws InvalidArgumentException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sort the query result by an orgLevel .
|
||||||
|
*
|
||||||
|
* @param num the number of the orgLevel as String (eg "4")
|
||||||
|
* @param sortDirection Determines whether the result is sorted in ascending or descending order.
|
||||||
|
* If sortDirection is null, the result is sorted in ascending order
|
||||||
|
* @return the query
|
||||||
|
* @throws InvalidArgumentException when the number of the orgLevel is incorrect.
|
||||||
|
*/
|
||||||
|
WorkbasketHistoryQuery orderByOrgLevel(int num, SortDirection sortDirection)
|
||||||
|
throws InvalidArgumentException;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
package pro.taskana.simplehistory.impl.workbasket;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.QueryColumnName;
|
||||||
|
|
||||||
|
/** Enum containing the column names for {@link WorkbasketHistoryQueryMapper}. */
|
||||||
|
public enum WorkbasketHistoryQueryColumnName implements QueryColumnName {
|
||||||
|
ID("id"),
|
||||||
|
WORKBASKET_ID("workbasket_id"),
|
||||||
|
EVENT_TYPE("event_type"),
|
||||||
|
CREATED("created"),
|
||||||
|
USER_ID("user_id"),
|
||||||
|
DOMAIN("domain"),
|
||||||
|
WORKBASKET_KEY("workbasket_key"),
|
||||||
|
WORKBASKET_TYPE("workbasket_type"),
|
||||||
|
OWNER("owner"),
|
||||||
|
CUSTOM_1("custom_1"),
|
||||||
|
CUSTOM_2("custom_2"),
|
||||||
|
CUSTOM_3("custom_3"),
|
||||||
|
CUSTOM_4("custom_4"),
|
||||||
|
ORGLEVEL_1("orgLevel_1"),
|
||||||
|
ORGLEVEL_2("orgLevel_2"),
|
||||||
|
ORGLEVEL_3("orgLevel_3"),
|
||||||
|
ORGLEVEL_4("orgLevel_4");
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
WorkbasketHistoryQueryColumnName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,163 @@
|
||||||
|
package pro.taskana.simplehistory.impl.workbasket;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.annotations.Result;
|
||||||
|
import org.apache.ibatis.annotations.Results;
|
||||||
|
import org.apache.ibatis.annotations.Select;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.WorkbasketHistoryQueryImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
|
||||||
|
/** This class is the mybatis mapping of WorkbasketHistoryQueries. */
|
||||||
|
@SuppressWarnings("checkstyle:LineLength")
|
||||||
|
public interface WorkbasketHistoryQueryMapper {
|
||||||
|
|
||||||
|
@Select(
|
||||||
|
"<script>"
|
||||||
|
+ "SELECT ID, WORKBASKET_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, WORKBASKET_TYPE,"
|
||||||
|
+ "OWNER, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, ORGLEVEL_1, ORGLEVEL_2, ORGLEVEL_3, ORGLEVEL_4 "
|
||||||
|
+ "FROM WORKBASKET_HISTORY_EVENT"
|
||||||
|
+ "<where>"
|
||||||
|
// IN-Queries
|
||||||
|
+ "<if test='idIn != null'>AND UPPER(ID) IN (<foreach item='item' collection='idIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketIdIn != null'>AND UPPER(WORKBASKET_ID) IN (<foreach item='item' collection='workbasketIdIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='eventTypeIn != null'>AND UPPER(EVENT_TYPE) IN (<foreach item='item' collection='eventTypeIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='createdIn !=null'> AND ( <foreach item='item' collection='createdIn' separator=',' > ( <if test='item.begin!=null'> CREATED >= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> CREATED <=#{item.end} </if>)</foreach>)</if> "
|
||||||
|
+ "<if test='userIdIn != null'>AND UPPER(USER_ID) IN (<foreach item='item' collection='userIdIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='domainIn != null'>AND UPPER(DOMAIN) IN (<foreach item='item' collection='domainIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketKeyIn != null'>AND UPPER(WORKBASKET_KEY) IN (<foreach item='item' collection='workbasketKeyIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketTypeIn != null'>AND UPPER(WORKBASKET_TYPE) IN (<foreach item='item' collection='workbasketTypeIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='ownerIn != null'>AND UPPER(OWNER) IN (<foreach item='item' collection='ownerIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom1In != null'>AND UPPER(CUSTOM_1) IN (<foreach item='item' collection='custom1In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom2In != null'>AND UPPER(CUSTOM_2) IN (<foreach item='item' collection='custom2In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom3In != null'>AND UPPER(CUSTOM_3) IN (<foreach item='item' collection='custom3In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom4In != null'>AND UPPER(CUSTOM_4) IN (<foreach item='item' collection='custom4In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel1In != null'>AND UPPER(ORGLEVEL_1) IN (<foreach item='item' collection='orgLevel1In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel2In != null'>AND UPPER(ORGLEVEL_2) IN (<foreach item='item' collection='orgLevel2In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel3In != null'>AND UPPER(ORGLEVEL_3) IN (<foreach item='item' collection='orgLevel3In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel4In != null'>AND UPPER(ORGLEVEL_4) IN (<foreach item='item' collection='orgLevel4In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
// LIKE-Queries
|
||||||
|
+ "<if test='workbasketIdLike != null'>AND (<foreach item='item' collection='workbasketIdLike' separator=' OR ' >UPPER(WORKBASKET_ID) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='eventTypeLike != null'>AND (<foreach item='item' collection='eventTypeLike' separator=' OR ' >UPPER(EVENT_TYPE) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='userIdLike != null'>AND (<foreach item='item' collection='userIdLike' separator=' OR ' >UPPER(USER_ID) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='domainLike != null'>AND (<foreach item='item' collection='domainLike' separator=' OR ' >UPPER(DOMAIN) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketKeyLike != null'>AND (<foreach item='item' collection='workbasketKeyLike' separator=' OR ' >UPPER(WORKBASKET_KEY) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketTypeLike != null'>AND (<foreach item='item' collection='workbasketTypeLike' separator=' OR ' >UPPER(WORKBASKET_TYPE) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='ownerLike != null'>AND (<foreach item='item' collection='ownerLike' separator=' OR ' >UPPER(OWNER) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom1Like != null'>AND (<foreach item='item' collection='custom1Like' separator=' OR ' >UPPER(CUSTOM_1) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom2Like != null'>AND (<foreach item='item' collection='custom2Like' separator=' OR ' >UPPER(CUSTOM_2) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom3Like != null'>AND (<foreach item='item' collection='custom3Like' separator=' OR ' >UPPER(CUSTOM_3) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom4Like != null'>AND (<foreach item='item' collection='custom4Like' separator=' OR ' >UPPER(CUSTOM_4) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel1Like != null'>AND (<foreach item='item' collection='orgLevel1Like' separator=' OR ' >UPPER(ORGLEVEL_1) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel2Like != null'>AND (<foreach item='item' collection='orgLevel2Like' separator=' OR ' >UPPER(ORGLEVEL_2) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel3Like != null'>AND (<foreach item='item' collection='orgLevel3Like' separator=' OR ' >UPPER(ORGLEVEL_3) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel4Like != null'>AND (<foreach item='item' collection='orgLevel4Like' separator=' OR ' >UPPER(ORGLEVEL_4) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "</where>"
|
||||||
|
+ "<if test='!orderBy.isEmpty()'>ORDER BY <foreach item='item' collection='orderBy' separator=',' >${item}</foreach></if> "
|
||||||
|
+ "</script>")
|
||||||
|
@Results(
|
||||||
|
value = {
|
||||||
|
@Result(property = "id", column = "ID"),
|
||||||
|
@Result(property = "workbasketId", column = "WORKBASKET_ID"),
|
||||||
|
@Result(property = "eventType", column = "EVENT_TYPE"),
|
||||||
|
@Result(property = "created", column = "CREATED"),
|
||||||
|
@Result(property = "userId", column = "USER_ID"),
|
||||||
|
@Result(property = "domain", column = "DOMAIN"),
|
||||||
|
@Result(property = "workbasketKey", column = "WORKBASKET_KEY"),
|
||||||
|
@Result(property = "workbasketType", column = "WORKBASKET_TYPE"),
|
||||||
|
@Result(property = "owner", column = "OWNER"),
|
||||||
|
@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 = "orgLevel1", column = "ORGLEVEL_1"),
|
||||||
|
@Result(property = "orgLevel2", column = "ORGLEVEL_2"),
|
||||||
|
@Result(property = "orgLevel3", column = "ORGLEVEL_3"),
|
||||||
|
@Result(property = "orgLevel4", column = "ORGLEVEL_4")
|
||||||
|
})
|
||||||
|
List<WorkbasketHistoryEvent> queryHistoryEvents(WorkbasketHistoryQueryImpl historyEventQuery);
|
||||||
|
|
||||||
|
@Select(
|
||||||
|
"<script>"
|
||||||
|
+ "SELECT COUNT(ID) "
|
||||||
|
+ "FROM WORKBASKET_HISTORY_EVENT"
|
||||||
|
+ "<where>"
|
||||||
|
+ "<if test='idIn != null'>AND UPPER(ID) IN (<foreach item='item' collection='idIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketIdIn != null'>AND UPPER(WORKBASKET_ID) IN (<foreach item='item' collection='workbasketIdIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='eventTypeIn != null'>AND UPPER(EVENT_TYPE) IN (<foreach item='item' collection='eventTypeIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='createdIn !=null'> AND ( <foreach item='item' collection='createdIn' separator=',' > ( <if test='item.begin!=null'> CREATED >= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> CREATED <=#{item.end} </if>)</foreach>)</if> "
|
||||||
|
+ "<if test='userIdIn != null'>AND UPPER(USER_ID) IN (<foreach item='item' collection='userIdIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='domainIn != null'>AND UPPER(DOMAIN) IN (<foreach item='item' collection='domainIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketKeyIn != null'>AND UPPER(WORKBASKET_KEY) IN (<foreach item='item' collection='workbasketKeyIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketTypeIn != null'>AND UPPER(WORKBASKET_TYPE) IN (<foreach item='item' collection='workbasketTypeIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='ownerIn != null'>AND UPPER(OWNER) IN (<foreach item='item' collection='ownerIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom1In != null'>AND UPPER(CUSTOM_1) IN (<foreach item='item' collection='custom1In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom2In != null'>AND UPPER(CUSTOM_2) IN (<foreach item='item' collection='custom2In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom3In != null'>AND UPPER(CUSTOM_3) IN (<foreach item='item' collection='custom3In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom4In != null'>AND UPPER(CUSTOM_4) IN (<foreach item='item' collection='custom4In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel1In != null'>AND UPPER(ORGLEVEL_1) IN (<foreach item='item' collection='orgLevel1In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel2In != null'>AND UPPER(ORGLEVEL_2) IN (<foreach item='item' collection='orgLevel2In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel3In != null'>AND UPPER(ORGLEVEL_3) IN (<foreach item='item' collection='orgLevel3In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel4In != null'>AND UPPER(ORGLEVEL_4) IN (<foreach item='item' collection='orgLevel4In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
// LIKE-Queries
|
||||||
|
+ "<if test='workbasketIdLike != null'>AND (<foreach item='item' collection='workbasketIdLike' separator=' OR ' >UPPER(WORKBASKET_ID) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='eventTypeLike != null'>AND (<foreach item='item' collection='eventTypeLike' separator=' OR ' >UPPER(EVENT_TYPE) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='userIdLike != null'>AND (<foreach item='item' collection='userIdLike' separator=' OR ' >UPPER(USER_ID) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='domainLike != null'>AND (<foreach item='item' collection='domainLike' separator=' OR ' >UPPER(DOMAIN) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketKeyLike != null'>AND (<foreach item='item' collection='workbasketKeyLike' separator=' OR ' >UPPER(WORKBASKET_KEY) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketTypeLike != null'>AND (<foreach item='item' collection='workbasketTypeLike' separator=' OR ' >UPPER(WORKBASKET_TYPE) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='ownerLike != null'>AND (<foreach item='item' collection='ownerLike' separator=' OR ' >UPPER(OWNER) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom1Like != null'>AND (<foreach item='item' collection='custom1Like' separator=' OR ' >UPPER(CUSTOM_1) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom2Like != null'>AND (<foreach item='item' collection='custom2Like' separator=' OR ' >UPPER(CUSTOM_2) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom3Like != null'>AND (<foreach item='item' collection='custom3Like' separator=' OR ' >UPPER(CUSTOM_3) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom4Like != null'>AND (<foreach item='item' collection='custom4Like' separator=' OR ' >UPPER(CUSTOM_4) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel1Like != null'>AND (<foreach item='item' collection='orgLevel1Like' separator=' OR ' >UPPER(ORGLEVEL_1) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel2Like != null'>AND (<foreach item='item' collection='orgLevel2Like' separator=' OR ' >UPPER(ORGLEVEL_2) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel3Like != null'>AND (<foreach item='item' collection='orgLevel3Like' separator=' OR ' >UPPER(ORGLEVEL_3) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel4Like != null'>AND (<foreach item='item' collection='orgLevel4Like' separator=' OR ' >UPPER(ORGLEVEL_4) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "</where>"
|
||||||
|
+ "</script>")
|
||||||
|
long countHistoryEvents(WorkbasketHistoryQueryImpl historyEventQuery);
|
||||||
|
|
||||||
|
@Select(
|
||||||
|
"<script>SELECT DISTINCT ${columnName} "
|
||||||
|
+ "FROM WORKBASKET_HISTORY_EVENT"
|
||||||
|
+ "<where>"
|
||||||
|
+ "<if test='idIn != null'>AND UPPER(ID) IN (<foreach item='item' collection='idIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketIdIn != null'>AND UPPER(WORKBASKET_ID) IN (<foreach item='item' collection='workbasketIdIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='eventTypeIn != null'>AND UPPER(EVENT_TYPE) IN (<foreach item='item' collection='eventTypeIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='createdIn !=null'> AND ( <foreach item='item' collection='createdIn' separator=',' > ( <if test='item.begin!=null'> CREATED >= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> CREATED <=#{item.end} </if>)</foreach>)</if> "
|
||||||
|
+ "<if test='userIdIn != null'>AND UPPER(USER_ID) IN (<foreach item='item' collection='userIdIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='domainIn != null'>AND UPPER(DOMAIN) IN (<foreach item='item' collection='domainIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketKeyIn != null'>AND UPPER(WORKBASKET_KEY) IN (<foreach item='item' collection='workbasketKeyIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketTypeIn != null'>AND UPPER(WORKBASKET_TYPE) IN (<foreach item='item' collection='workbasketTypeIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='ownerIn != null'>AND UPPER(OWNER) IN (<foreach item='item' collection='ownerIn' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom1In != null'>AND UPPER(CUSTOM_1) IN (<foreach item='item' collection='custom1In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom2In != null'>AND UPPER(CUSTOM_2) IN (<foreach item='item' collection='custom2In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom3In != null'>AND UPPER(CUSTOM_3) IN (<foreach item='item' collection='custom3In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom4In != null'>AND UPPER(CUSTOM_4) IN (<foreach item='item' collection='custom4In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel1In != null'>AND UPPER(ORGLEVEL_1) IN (<foreach item='item' collection='orgLevel1In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel2In != null'>AND UPPER(ORGLEVEL_2) IN (<foreach item='item' collection='orgLevel2In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel3In != null'>AND UPPER(ORGLEVEL_3) IN (<foreach item='item' collection='orgLevel3In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel4In != null'>AND UPPER(ORGLEVEL_4) IN (<foreach item='item' collection='orgLevel4In' separator=',' >#{item}</foreach>)</if> "
|
||||||
|
// LIKE-Queries
|
||||||
|
+ "<if test='workbasketIdLike != null'>AND (<foreach item='item' collection='workbasketIdLike' separator=' OR ' >UPPER(WORKBASKET_ID) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='eventTypeLike != null'>AND (<foreach item='item' collection='eventTypeLike' separator=' OR ' >UPPER(EVENT_TYPE) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='userIdLike != null'>AND (<foreach item='item' collection='userIdLike' separator=' OR ' >UPPER(USER_ID) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='domainLike != null'>AND (<foreach item='item' collection='domainLike' separator=' OR ' >UPPER(DOMAIN) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketKeyLike != null'>AND (<foreach item='item' collection='workbasketKeyLike' separator=' OR ' >UPPER(WORKBASKET_KEY) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='workbasketTypeLike != null'>AND (<foreach item='item' collection='workbasketTypeLike' separator=' OR ' >UPPER(WORKBASKET_TYPE) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='ownerLike != null'>AND (<foreach item='item' collection='ownerLike' separator=' OR ' >UPPER(OWNER) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom1Like != null'>AND (<foreach item='item' collection='custom1Like' separator=' OR ' >UPPER(CUSTOM_1) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom2Like != null'>AND (<foreach item='item' collection='custom2Like' separator=' OR ' >UPPER(CUSTOM_2) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom3Like != null'>AND (<foreach item='item' collection='custom3Like' separator=' OR ' >UPPER(CUSTOM_3) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='custom4Like != null'>AND (<foreach item='item' collection='custom4Like' separator=' OR ' >UPPER(CUSTOM_4) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel1Like != null'>AND (<foreach item='item' collection='orgLevel1Like' separator=' OR ' >UPPER(ORGLEVEL_1) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel2Like != null'>AND (<foreach item='item' collection='orgLevel2Like' separator=' OR ' >UPPER(ORGLEVEL_2) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel3Like != null'>AND (<foreach item='item' collection='orgLevel3Like' separator=' OR ' >UPPER(ORGLEVEL_3) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "<if test='orgLevel4Like != null'>AND (<foreach item='item' collection='orgLevel4Like' separator=' OR ' >UPPER(ORGLEVEL_4) LIKE #{item}</foreach>)</if> "
|
||||||
|
+ "</where>"
|
||||||
|
+ "<if test='!orderBy.isEmpty()'>ORDER BY <foreach item='item' collection='orderBy' separator=',' >${item}</foreach></if> "
|
||||||
|
+ "</script>")
|
||||||
|
List<String> queryHistoryColumnValues(WorkbasketHistoryQueryImpl historyQuery);
|
||||||
|
}
|
||||||
|
|
@ -20,10 +20,11 @@ import pro.taskana.common.api.TaskanaEngine;
|
||||||
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
import pro.taskana.common.api.TaskanaEngine.ConnectionManagementMode;
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
import pro.taskana.common.internal.util.IdGenerator;
|
||||||
import pro.taskana.sampledata.SampleDataGenerator;
|
import pro.taskana.sampledata.SampleDataGenerator;
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
import pro.taskana.simplehistory.impl.TaskanaHistoryEngineImpl;
|
import pro.taskana.simplehistory.impl.TaskanaHistoryEngineImpl;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
import pro.taskana.task.api.models.ObjectReference;
|
||||||
|
|
||||||
/** Set up database for tests. */
|
/** Set up database for tests. */
|
||||||
|
|
@ -55,7 +56,7 @@ public abstract class AbstractAccTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* create historyEvent object.
|
* create taskHistoryEvent object.
|
||||||
*
|
*
|
||||||
* @param workbasketKey the workbasketKey, the task currently resides in.
|
* @param workbasketKey the workbasketKey, the task currently resides in.
|
||||||
* @param taskId the taskid the event belongs to.
|
* @param taskId the taskid the event belongs to.
|
||||||
|
|
@ -63,18 +64,19 @@ public abstract class AbstractAccTest {
|
||||||
* @param previousWorkbasketId the workbasketId of the previous workbasket (if applicable).
|
* @param previousWorkbasketId the workbasketId of the previous workbasket (if applicable).
|
||||||
* @param userid the ID of the user that triggered the event.
|
* @param userid the ID of the user that triggered the event.
|
||||||
* @param details the details of the changes that happened.
|
* @param details the details of the changes that happened.
|
||||||
* @return History event object created.
|
* @return Task History event object created.
|
||||||
*/
|
*/
|
||||||
public static HistoryEventImpl createHistoryEvent(
|
public static TaskHistoryEvent createTaskHistoryEvent(
|
||||||
String workbasketKey,
|
String workbasketKey,
|
||||||
String taskId,
|
String taskId,
|
||||||
String type,
|
String type,
|
||||||
String previousWorkbasketId,
|
String previousWorkbasketId,
|
||||||
String userid,
|
String userid,
|
||||||
String details) {
|
String details) {
|
||||||
HistoryEventImpl historyEvent =
|
TaskHistoryEvent historyEvent = new TaskHistoryEvent();
|
||||||
new HistoryEventImpl(
|
historyEvent.setId(IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT));
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT), userid, details);
|
historyEvent.setUserId(userid);
|
||||||
|
historyEvent.setDetails(details);
|
||||||
historyEvent.setWorkbasketKey(workbasketKey);
|
historyEvent.setWorkbasketKey(workbasketKey);
|
||||||
historyEvent.setTaskId(taskId);
|
historyEvent.setTaskId(taskId);
|
||||||
historyEvent.setEventType(type);
|
historyEvent.setEventType(type);
|
||||||
|
|
@ -82,6 +84,29 @@ public abstract class AbstractAccTest {
|
||||||
return historyEvent;
|
return historyEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* create workbasketHistoryEvent object.
|
||||||
|
*
|
||||||
|
* @param workbasketKey the workbasketKey.
|
||||||
|
* @param type the type of the event.
|
||||||
|
* @param userid the ID of the user that triggered the event.
|
||||||
|
* @param details the details of the changes that happened.
|
||||||
|
* @return Workbasket History event object created.
|
||||||
|
*/
|
||||||
|
public static WorkbasketHistoryEvent createWorkbasketHistoryEvent(
|
||||||
|
String workbasketKey,
|
||||||
|
String type,
|
||||||
|
String userid,
|
||||||
|
String details) {
|
||||||
|
WorkbasketHistoryEvent historyEvent = new WorkbasketHistoryEvent();
|
||||||
|
historyEvent.setId(IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT));
|
||||||
|
historyEvent.setUserId(userid);
|
||||||
|
historyEvent.setDetails(details);
|
||||||
|
historyEvent.setWorkbasketKey(workbasketKey);
|
||||||
|
historyEvent.setEventType(type);
|
||||||
|
return historyEvent;
|
||||||
|
}
|
||||||
|
|
||||||
protected static void resetDb(String schemaName) throws Exception {
|
protected static void resetDb(String schemaName) throws Exception {
|
||||||
DataSource dataSource = getDataSource();
|
DataSource dataSource = getDataSource();
|
||||||
|
|
||||||
|
|
@ -135,7 +160,7 @@ public abstract class AbstractAccTest {
|
||||||
return historyService;
|
return historyService;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected HistoryQueryMapper getHistoryQueryMapper()
|
protected TaskHistoryQueryMapper getHistoryQueryMapper()
|
||||||
throws NoSuchFieldException, IllegalAccessException {
|
throws NoSuchFieldException, IllegalAccessException {
|
||||||
|
|
||||||
Field sessionManagerField = TaskanaHistoryEngineImpl.class.getDeclaredField("sessionManager");
|
Field sessionManagerField = TaskanaHistoryEngineImpl.class.getDeclaredField("sessionManager");
|
||||||
|
|
@ -143,7 +168,7 @@ public abstract class AbstractAccTest {
|
||||||
SqlSessionManager sqlSessionManager =
|
SqlSessionManager sqlSessionManager =
|
||||||
(SqlSessionManager) sessionManagerField.get(taskanaHistoryEngine);
|
(SqlSessionManager) sessionManagerField.get(taskanaHistoryEngine);
|
||||||
|
|
||||||
return sqlSessionManager.getMapper(HistoryQueryMapper.class);
|
return sqlSessionManager.getMapper(TaskHistoryQueryMapper.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ObjectReference createObjectRef(
|
protected ObjectReference createObjectRef(
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -9,10 +9,11 @@ import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryQueryImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.TaskHistoryQueryImpl;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEventType;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
import pro.taskana.task.api.TaskState;
|
import pro.taskana.task.api.TaskState;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
@ -29,24 +30,27 @@ class CreateHistoryEventOnTaskCancelClaimAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
final String taskId = "TKI:000000000000000000000000000000000043";
|
final String taskId = "TKI:000000000000000000000000000000000043";
|
||||||
|
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
assertThat(taskService.getTask(taskId).getState()).isEqualTo(TaskState.CLAIMED);
|
assertThat(taskService.getTask(taskId).getState()).isEqualTo(TaskState.CLAIMED);
|
||||||
Task task = taskService.forceCancelClaim(taskId);
|
Task task = taskService.forceCancelClaim(taskId);
|
||||||
assertThat(task.getState()).isEqualTo(TaskState.READY);
|
assertThat(task.getState()).isEqualTo(TaskState.READY);
|
||||||
|
|
||||||
listEvents =
|
events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_CLAIM_CANCELLED.getName());
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(1);
|
|
||||||
assertThat(historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType())
|
|
||||||
.isEqualTo("TASK_CLAIM_CANCELLED");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -9,8 +9,9 @@ import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEventType;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
|
|
||||||
@ExtendWith(JaasExtension.class)
|
@ExtendWith(JaasExtension.class)
|
||||||
|
|
@ -25,19 +26,20 @@ class CreateHistoryEventOnTaskCancellationAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
final String taskId = "TKI:000000000000000000000000000000000001";
|
final String taskId = "TKI:000000000000000000000000000000000001";
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list();
|
List<TaskHistoryEvent> listEvents =
|
||||||
|
historyService.createTaskHistoryQuery().taskIdIn(taskId).list();
|
||||||
|
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(listEvents).isEmpty();
|
||||||
|
|
||||||
taskService.cancelTask(taskId);
|
taskService.cancelTask(taskId);
|
||||||
|
|
||||||
listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list();
|
listEvents = historyService.createTaskHistoryQuery().taskIdIn(taskId).list();
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(1);
|
assertThat(listEvents).hasSize(1);
|
||||||
|
|
||||||
String eventType = historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType();
|
String eventType = listEvents.get(0).getEventType();
|
||||||
|
|
||||||
assertThat(eventType).isEqualTo("TASK_CANCELLED");
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_CANCELLED.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -46,18 +48,19 @@ class CreateHistoryEventOnTaskCancellationAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
final String taskId = "TKI:000000000000000000000000000000000003";
|
final String taskId = "TKI:000000000000000000000000000000000003";
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list();
|
List<TaskHistoryEvent> events =
|
||||||
|
historyService.createTaskHistoryQuery().taskIdIn(taskId).list();
|
||||||
|
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
taskService.cancelTask(taskId);
|
taskService.cancelTask(taskId);
|
||||||
|
|
||||||
listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list();
|
events = historyService.createTaskHistoryQuery().taskIdIn(taskId).list();
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(1);
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
String eventType = historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType();
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
assertThat(eventType).isEqualTo("TASK_CANCELLED");
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_CANCELLED.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -9,10 +9,11 @@ import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryQueryImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.TaskHistoryQueryImpl;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEventType;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
import pro.taskana.task.api.TaskState;
|
import pro.taskana.task.api.TaskState;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
@ -29,24 +30,24 @@ class CreateHistoryEventOnTaskClaimAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
final String taskId = "TKI:000000000000000000000000000000000047";
|
final String taskId = "TKI:000000000000000000000000000000000047";
|
||||||
|
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
assertThat(taskService.getTask(taskId).getState()).isEqualTo(TaskState.READY);
|
assertThat(taskService.getTask(taskId).getState()).isEqualTo(TaskState.READY);
|
||||||
Task task = taskService.claim(taskId);
|
Task task = taskService.claim(taskId);
|
||||||
assertThat(task.getState()).isEqualTo(TaskState.CLAIMED);
|
assertThat(task.getState()).isEqualTo(TaskState.CLAIMED);
|
||||||
|
|
||||||
listEvents =
|
events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(1);
|
String eventType = events.get(0).getEventType();
|
||||||
assertThat(historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType())
|
|
||||||
.isEqualTo("TASK_CLAIMED");
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_CLAIMED.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -9,10 +9,11 @@ import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryQueryImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.TaskHistoryQueryImpl;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEventType;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
import pro.taskana.task.api.TaskState;
|
import pro.taskana.task.api.TaskState;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
@ -29,24 +30,24 @@ class CreateHistoryEventOnTaskCompletionAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
final String taskId = "TKI:000000000000000000000000000000000001";
|
final String taskId = "TKI:000000000000000000000000000000000001";
|
||||||
|
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
assertThat(taskService.getTask(taskId).getState()).isEqualTo(TaskState.CLAIMED);
|
assertThat(taskService.getTask(taskId).getState()).isEqualTo(TaskState.CLAIMED);
|
||||||
Task task = taskService.forceCompleteTask(taskId);
|
Task task = taskService.forceCompleteTask(taskId);
|
||||||
assertThat(task.getState()).isEqualTo(TaskState.COMPLETED);
|
assertThat(task.getState()).isEqualTo(TaskState.COMPLETED);
|
||||||
|
|
||||||
listEvents =
|
events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(1);
|
String eventType = events.get(0).getEventType();
|
||||||
assertThat(historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType())
|
|
||||||
.isEqualTo("TASK_COMPLETED");
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_COMPLETED.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -9,10 +9,11 @@ import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryQueryImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.TaskHistoryQueryImpl;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEventType;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
import pro.taskana.task.api.models.ObjectReference;
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
import pro.taskana.task.internal.models.TaskImpl;
|
||||||
|
|
@ -34,13 +35,15 @@ class CreateHistoryEventOnTaskCreationAccTest extends AbstractAccTest {
|
||||||
newTask.setPrimaryObjRef(objectReference);
|
newTask.setPrimaryObjRef(objectReference);
|
||||||
taskService.createTask(newTask);
|
taskService.createTask(newTask);
|
||||||
|
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(newTask.getId()));
|
(TaskHistoryQueryImpl)
|
||||||
|
historyService.createTaskHistoryQuery().taskIdIn(newTask.getId()));
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(1);
|
String eventType = events.get(0).getEventType();
|
||||||
assertThat(listEvents.get(0).getEventType()).isEqualTo("TASK_CREATED");
|
|
||||||
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_CREATED.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -9,8 +9,9 @@ import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEventType;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
|
|
||||||
@ExtendWith(JaasExtension.class)
|
@ExtendWith(JaasExtension.class)
|
||||||
|
|
@ -25,19 +26,20 @@ class CreateHistoryEventOnTaskTerminationAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
final String taskId = "TKI:000000000000000000000000000000000001";
|
final String taskId = "TKI:000000000000000000000000000000000001";
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list();
|
List<TaskHistoryEvent> events =
|
||||||
|
historyService.createTaskHistoryQuery().taskIdIn(taskId).list();
|
||||||
|
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
taskService.terminateTask(taskId);
|
taskService.terminateTask(taskId);
|
||||||
|
|
||||||
listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list();
|
events = historyService.createTaskHistoryQuery().taskIdIn(taskId).list();
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(1);
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
String eventType = historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType();
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
assertThat(eventType).isEqualTo("TASK_TERMINATED");
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_TERMINATED.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -46,18 +48,19 @@ class CreateHistoryEventOnTaskTerminationAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
final String taskId = "TKI:000000000000000000000000000000000003";
|
final String taskId = "TKI:000000000000000000000000000000000003";
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list();
|
List<TaskHistoryEvent> events =
|
||||||
|
historyService.createTaskHistoryQuery().taskIdIn(taskId).list();
|
||||||
|
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
taskService.terminateTask(taskId);
|
taskService.terminateTask(taskId);
|
||||||
|
|
||||||
listEvents = historyService.createHistoryQuery().taskIdIn(taskId).list();
|
events = historyService.createTaskHistoryQuery().taskIdIn(taskId).list();
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(1);
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
String eventType = historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType();
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
assertThat(eventType).isEqualTo("TASK_TERMINATED");
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_TERMINATED.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -9,10 +9,11 @@ import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryQueryImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.TaskHistoryQueryImpl;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEventType;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
|
|
||||||
@ExtendWith(JaasExtension.class)
|
@ExtendWith(JaasExtension.class)
|
||||||
|
|
@ -27,22 +28,24 @@ class CreateHistoryEventOnTaskTransferAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
final String taskId = "TKI:000000000000000000000000000000000003";
|
final String taskId = "TKI:000000000000000000000000000000000003";
|
||||||
|
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
taskService.transfer(taskId, "WBI:100000000000000000000000000000000006");
|
taskService.transfer(taskId, "WBI:100000000000000000000000000000000006");
|
||||||
|
|
||||||
listEvents =
|
events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(1);
|
assertThat(events).hasSize(1);
|
||||||
assertThat(historyService.getHistoryEvent(listEvents.get(0).getId()).getEventType())
|
|
||||||
.isEqualTo("TASK_TRANSFERRED");
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_TRANSFERRED.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
|
@ -9,10 +9,11 @@ import java.util.List;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryQueryImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.TaskHistoryQueryImpl;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEventType;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
||||||
|
|
@ -27,26 +28,27 @@ class CreateHistoryEventOnTaskUpdateAccTest extends AbstractAccTest {
|
||||||
void should_CreateUpdatedHistoryEvent_When_TaskIsCreated() throws Exception {
|
void should_CreateUpdatedHistoryEvent_When_TaskIsCreated() throws Exception {
|
||||||
|
|
||||||
final String taskId = "TKI:000000000000000000000000000000000000";
|
final String taskId = "TKI:000000000000000000000000000000000000";
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(2);
|
assertThat(events).hasSize(2);
|
||||||
|
|
||||||
Task task = taskService.getTask(taskId);
|
Task task = taskService.getTask(taskId);
|
||||||
task.setName("someUpdatedName");
|
task.setName("someUpdatedName");
|
||||||
taskService.updateTask(task);
|
taskService.updateTask(task);
|
||||||
|
|
||||||
listEvents =
|
events =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
|
|
||||||
assertThat(listEvents).hasSize(3);
|
assertThat(events).hasSize(3);
|
||||||
assertThat(listEvents.get(2).getEventType()).isEqualTo("TASK_UPDATED");
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType).isEqualTo(TaskHistoryEventType.TASK_UPDATED.getName());
|
||||||
|
|
||||||
assertThat(historyService.getHistoryEvent(listEvents.get(2).getId()).getDetails())
|
|
||||||
.contains("someUpdatedName");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
|
|
@ -12,10 +12,10 @@ import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryQueryImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.TaskHistoryQueryImpl;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
import pro.taskana.task.api.TaskService;
|
import pro.taskana.task.api.TaskService;
|
||||||
import pro.taskana.task.api.exceptions.TaskNotFoundException;
|
import pro.taskana.task.api.exceptions.TaskNotFoundException;
|
||||||
|
|
||||||
|
|
@ -33,11 +33,11 @@ class DeleteHistoryEventsOnTaskDeletionAccTest extends AbstractAccTest {
|
||||||
final String taskid = "TKI:000000000000000000000000000000000036";
|
final String taskid = "TKI:000000000000000000000000000000000036";
|
||||||
taskanaEngineConfiguration.setDeleteHistoryOnTaskDeletionEnabled(true);
|
taskanaEngineConfiguration.setDeleteHistoryOnTaskDeletionEnabled(true);
|
||||||
|
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> listEvents =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskid));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskid));
|
||||||
assertThat(listEvents).hasSize(2);
|
assertThat(listEvents).hasSize(2);
|
||||||
|
|
||||||
taskService.deleteTask(taskid);
|
taskService.deleteTask(taskid);
|
||||||
|
|
@ -51,8 +51,8 @@ class DeleteHistoryEventsOnTaskDeletionAccTest extends AbstractAccTest {
|
||||||
assertThatThrownBy(getDeletedTaskCall).isInstanceOf(TaskNotFoundException.class);
|
assertThatThrownBy(getDeletedTaskCall).isInstanceOf(TaskNotFoundException.class);
|
||||||
|
|
||||||
listEvents =
|
listEvents =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskid));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskid));
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(listEvents).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,11 +66,12 @@ class DeleteHistoryEventsOnTaskDeletionAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
taskanaEngineConfiguration.setDeleteHistoryOnTaskDeletionEnabled(true);
|
taskanaEngineConfiguration.setDeleteHistoryOnTaskDeletionEnabled(true);
|
||||||
|
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> listEvents =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId_1, taskId_2));
|
(TaskHistoryQueryImpl)
|
||||||
|
historyService.createTaskHistoryQuery().taskIdIn(taskId_1, taskId_2));
|
||||||
assertThat(listEvents).hasSize(3);
|
assertThat(listEvents).hasSize(3);
|
||||||
|
|
||||||
taskService.deleteTasks(Arrays.asList(taskId_1, taskId_2));
|
taskService.deleteTasks(Arrays.asList(taskId_1, taskId_2));
|
||||||
|
|
@ -89,8 +90,9 @@ class DeleteHistoryEventsOnTaskDeletionAccTest extends AbstractAccTest {
|
||||||
assertThatThrownBy(getDeletedTaskCall2).isInstanceOf(TaskNotFoundException.class);
|
assertThatThrownBy(getDeletedTaskCall2).isInstanceOf(TaskNotFoundException.class);
|
||||||
|
|
||||||
listEvents =
|
listEvents =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId_1, taskId_2));
|
(TaskHistoryQueryImpl)
|
||||||
|
historyService.createTaskHistoryQuery().taskIdIn(taskId_1, taskId_2));
|
||||||
assertThat(listEvents).isEmpty();
|
assertThat(listEvents).isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -103,11 +105,11 @@ class DeleteHistoryEventsOnTaskDeletionAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
taskanaEngineConfiguration.setDeleteHistoryOnTaskDeletionEnabled(false);
|
taskanaEngineConfiguration.setDeleteHistoryOnTaskDeletionEnabled(false);
|
||||||
|
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> listEvents =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
assertThat(listEvents).hasSize(2);
|
assertThat(listEvents).hasSize(2);
|
||||||
|
|
||||||
taskService.deleteTask(taskId);
|
taskService.deleteTask(taskId);
|
||||||
|
|
@ -121,8 +123,8 @@ class DeleteHistoryEventsOnTaskDeletionAccTest extends AbstractAccTest {
|
||||||
assertThatThrownBy(getDeletedTaskCall).isInstanceOf(TaskNotFoundException.class);
|
assertThatThrownBy(getDeletedTaskCall).isInstanceOf(TaskNotFoundException.class);
|
||||||
|
|
||||||
listEvents =
|
listEvents =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId));
|
(TaskHistoryQueryImpl) historyService.createTaskHistoryQuery().taskIdIn(taskId));
|
||||||
assertThat(listEvents).hasSize(2);
|
assertThat(listEvents).hasSize(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -135,11 +137,12 @@ class DeleteHistoryEventsOnTaskDeletionAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
taskanaEngineConfiguration.setDeleteHistoryOnTaskDeletionEnabled(false);
|
taskanaEngineConfiguration.setDeleteHistoryOnTaskDeletionEnabled(false);
|
||||||
|
|
||||||
HistoryQueryMapper historyQueryMapper = getHistoryQueryMapper();
|
TaskHistoryQueryMapper taskHistoryQueryMapper = getHistoryQueryMapper();
|
||||||
|
|
||||||
List<HistoryEventImpl> listEvents =
|
List<TaskHistoryEvent> listEvents =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId_1, taskId_2));
|
(TaskHistoryQueryImpl)
|
||||||
|
historyService.createTaskHistoryQuery().taskIdIn(taskId_1, taskId_2));
|
||||||
assertThat(listEvents).hasSize(2);
|
assertThat(listEvents).hasSize(2);
|
||||||
|
|
||||||
taskService.deleteTasks(Arrays.asList(taskId_1, taskId_2));
|
taskService.deleteTasks(Arrays.asList(taskId_1, taskId_2));
|
||||||
|
|
@ -158,8 +161,9 @@ class DeleteHistoryEventsOnTaskDeletionAccTest extends AbstractAccTest {
|
||||||
assertThatThrownBy(getDeletedTaskCall2).isInstanceOf(TaskNotFoundException.class);
|
assertThatThrownBy(getDeletedTaskCall2).isInstanceOf(TaskNotFoundException.class);
|
||||||
|
|
||||||
listEvents =
|
listEvents =
|
||||||
historyQueryMapper.queryHistoryEvent(
|
taskHistoryQueryMapper.queryHistoryEvents(
|
||||||
(HistoryQueryImpl) historyService.createHistoryQuery().taskIdIn(taskId_1, taskId_2));
|
(TaskHistoryQueryImpl)
|
||||||
|
historyService.createTaskHistoryQuery().taskIdIn(taskId_1, taskId_2));
|
||||||
assertThat(listEvents).hasSize(2);
|
assertThat(listEvents).hasSize(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
package acceptance.events;
|
package acceptance.events.task;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
class GetHistoryEventAccTest extends AbstractAccTest {
|
|
||||||
|
class GetTaskHistoryEventAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void should_ReturnSpecificTaskHistoryEventWithDetails_For_HistoryEventId() throws Exception {
|
void should_ReturnSpecificTaskHistoryEventWithDetails_For_HistoryEventId() throws Exception {
|
||||||
|
|
@ -21,8 +22,8 @@ class GetHistoryEventAccTest extends AbstractAccTest {
|
||||||
+ "\"fieldName\":\"owner\","
|
+ "\"fieldName\":\"owner\","
|
||||||
+ "\"oldValue\":\"owner1\"}]}";
|
+ "\"oldValue\":\"owner1\"}]}";
|
||||||
|
|
||||||
TaskanaHistoryEvent taskHistoryEvent =
|
TaskHistoryEvent taskHistoryEvent =
|
||||||
getHistoryService().getHistoryEvent("HEI:000000000000000000000000000000000000");
|
getHistoryService().getTaskHistoryEvent("HEI:000000000000000000000000000000000000");
|
||||||
assertThat(taskHistoryEvent.getBusinessProcessId()).isEqualTo("BPI:01");
|
assertThat(taskHistoryEvent.getBusinessProcessId()).isEqualTo("BPI:01");
|
||||||
assertThat(taskHistoryEvent.getUserId()).isEqualTo("admin");
|
assertThat(taskHistoryEvent.getUserId()).isEqualTo("admin");
|
||||||
assertThat(taskHistoryEvent.getEventType()).isEqualTo("TASK_UPDATED");
|
assertThat(taskHistoryEvent.getEventType()).isEqualTo("TASK_UPDATED");
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketAccessItemCreationAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_CreateWorkbasketAccessItemCreatedHistoryEvent_When_AccessItemIsCreated()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String workbasketId = "WBI:100000000000000000000000000000000004";
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
WorkbasketAccessItem newWorkbasketAccessItem =
|
||||||
|
workbasketService.newWorkbasketAccessItem(workbasketId, "peter");
|
||||||
|
|
||||||
|
workbasketService.createWorkbasketAccessItem(newWorkbasketAccessItem);
|
||||||
|
|
||||||
|
events = historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_ACCESS_ITEM_CREATED.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,70 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketAccessItemDeletionAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_CreateWorkbasketAccessItemDeletedHistoryEvent_When_AccessItemIsDeleted()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String workbasketId = "WBI:100000000000000000000000000000000004";
|
||||||
|
|
||||||
|
final String workbasketAccessItemId = "WAI:100000000000000000000000000000000001";
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasketService.deleteWorkbasketAccessItem(workbasketAccessItemId);
|
||||||
|
|
||||||
|
events = historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_ACCESS_ITEM_DELETED.getName());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_NotCreateWorkbasketAccessItemDeletedHistoryEvent_When_ProvidingInvalidAccessItemId()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String workbasketId = "WBI:100000000000000000000000000000000004";
|
||||||
|
|
||||||
|
final String workbasketAccessItemId = "NonExistingWorkbasketAccessItemID";
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasketService.deleteWorkbasketAccessItem(workbasketAccessItemId);
|
||||||
|
|
||||||
|
events = historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,74 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketAccessItemsDeletionAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_CreateWorkbasketAccessItemDeletedHistoryEvents_When_AccessItemsAreDeleted()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String accessId = "teamlead-1";
|
||||||
|
|
||||||
|
String[] workbasketIds =
|
||||||
|
new String[] {
|
||||||
|
"WBI:100000000000000000000000000000000001",
|
||||||
|
"WBI:100000000000000000000000000000000004",
|
||||||
|
"WBI:100000000000000000000000000000000005",
|
||||||
|
"WBI:100000000000000000000000000000000010"
|
||||||
|
};
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketIds).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasketService.deleteWorkbasketAccessItemsForAccessId(accessId);
|
||||||
|
|
||||||
|
events = historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketIds).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(4);
|
||||||
|
|
||||||
|
assertThat(events)
|
||||||
|
.extracting(WorkbasketHistoryEvent::getEventType)
|
||||||
|
.containsOnly(WorkbasketHistoryEventType.WORKBASKET_ACCESS_ITEM_DELETED.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_NotCreateWorkbasketAccessItemDeletedHistoryEvents_When_ProvidingInvalidAccessId()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String workbasketId = "WBI:100000000000000000000000000000000011";
|
||||||
|
|
||||||
|
final String accessId = "NonExistingWorkbasketAccessItemID";
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasketService.deleteWorkbasketAccessItemsForAccessId(accessId);
|
||||||
|
|
||||||
|
events = historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
import pro.taskana.workbasket.api.models.WorkbasketAccessItem;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketAccessItemsSetAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_CreateWorkbasketAccessItemsUpdatedHistoryEvent_When_AccessItemsAreSet()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String workbasketId = "WBI:100000000000000000000000000000000004";
|
||||||
|
final String accessId1 = "peter";
|
||||||
|
final String accessId2 = "claudia";
|
||||||
|
final String accessId3 = "sven";
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
List<WorkbasketAccessItem> newItems = new ArrayList<>();
|
||||||
|
|
||||||
|
WorkbasketAccessItem newWorkbasketAccessItem =
|
||||||
|
workbasketService.newWorkbasketAccessItem(workbasketId, accessId1);
|
||||||
|
WorkbasketAccessItem newWorkbasketAccessItem2 =
|
||||||
|
workbasketService.newWorkbasketAccessItem(workbasketId, accessId2);
|
||||||
|
WorkbasketAccessItem newWorkbasketAccessItem3 =
|
||||||
|
workbasketService.newWorkbasketAccessItem(workbasketId, accessId3);
|
||||||
|
|
||||||
|
newItems.add(newWorkbasketAccessItem);
|
||||||
|
newItems.add(newWorkbasketAccessItem2);
|
||||||
|
newItems.add(newWorkbasketAccessItem3);
|
||||||
|
|
||||||
|
workbasketService.setWorkbasketAccessItems(workbasketId, newItems);
|
||||||
|
|
||||||
|
events = historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_ACCESS_ITEMS_UPDATED.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketType;
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketCreationAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_CreateWorkbasketAccessItemDeletedHistoryEvents_When_AccessItemsAreDeleted()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
Workbasket newWorkbasket = workbasketService.newWorkbasket("NT1234", "DOMAIN_A");
|
||||||
|
newWorkbasket.setName("Megabasket");
|
||||||
|
newWorkbasket.setType(WorkbasketType.GROUP);
|
||||||
|
newWorkbasket.setOrgLevel1("company");
|
||||||
|
newWorkbasket = workbasketService.createWorkbasket(newWorkbasket);
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(newWorkbasket.getId()).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_CREATED.getName());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketDeletionAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_CreateWorkbasketDeletedHistoryEvent_When_WorkbasketIsDeleted() throws Exception {
|
||||||
|
|
||||||
|
final String workbasketId = "WBI:100000000000000000000000000000000008";
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasketService.deleteWorkbasket(workbasketId);
|
||||||
|
|
||||||
|
events = historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_DELETED.getName());
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketDistributionTargetAddedAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_CreateWorkbasketDistributionTargetAddedHistoryEvent_When_DistributionTargetIsAdded()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String sourceWorkbasketId = "WBI:100000000000000000000000000000000004";
|
||||||
|
final String targetWorkbasketId = "WBI:100000000000000000000000000000000001";
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(sourceWorkbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasketService.addDistributionTarget(sourceWorkbasketId, targetWorkbasketId);
|
||||||
|
|
||||||
|
events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(sourceWorkbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_DISTRIBUTION_TARGET_ADDED.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketDistributionTargetRemovedAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void
|
||||||
|
should_CreateWorkbasketDistributionTargetRemovedHistoryEvent_When_RemovingDistributionTarget()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String sourceWorkbasketId = "WBI:100000000000000000000000000000000001";
|
||||||
|
final String targetWorkbasketId = "WBI:100000000000000000000000000000000002";
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(sourceWorkbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasketService.removeDistributionTarget(sourceWorkbasketId, targetWorkbasketId);
|
||||||
|
|
||||||
|
events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(sourceWorkbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_DISTRIBUTION_TARGET_REMOVED.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketDistributionTargetsSetAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void
|
||||||
|
should_CreateWorkbasketDistributionTargetsUpdatedHistoryEvent_When_DistributionTargetsAreSet()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String sourceWorkbasketId = "WBI:100000000000000000000000000000000004";
|
||||||
|
|
||||||
|
List<String> targetWorkbaskets =
|
||||||
|
Arrays.asList(
|
||||||
|
"WBI:100000000000000000000000000000000002", "WBI:100000000000000000000000000000000003");
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(sourceWorkbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasketService.setDistributionTargets(
|
||||||
|
"WBI:100000000000000000000000000000000004", targetWorkbaskets);
|
||||||
|
|
||||||
|
events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(sourceWorkbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_DISTRIBUTION_TARGETS_UPDATED.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketMarkedForDeletionAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "admin")
|
||||||
|
@Test
|
||||||
|
void should_CreateWorkbasketMarkedForDeletionHistoryEvent_When_WorkbasketIsMarkedForDeletion()
|
||||||
|
throws Exception {
|
||||||
|
|
||||||
|
final String workbasketId = "WBI:100000000000000000000000000000000004";
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasketService.deleteWorkbasket(workbasketId);
|
||||||
|
|
||||||
|
events = historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasketId).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_MARKED_FOR_DELETION.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
package acceptance.events.workbasket;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import acceptance.security.JaasExtension;
|
||||||
|
import acceptance.security.WithAccessId;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketCustomField;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketService;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketType;
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
@ExtendWith(JaasExtension.class)
|
||||||
|
class CreateHistoryEventOnWorkbasketUpdateAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
@WithAccessId(user = "businessadmin")
|
||||||
|
@Test
|
||||||
|
void testUpdateWorkbasket() throws Exception {
|
||||||
|
|
||||||
|
Workbasket workbasket = workbasketService.getWorkbasket("GPK_KSC", "DOMAIN_A");
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasket.getId()).list();
|
||||||
|
|
||||||
|
assertThat(events).isEmpty();
|
||||||
|
|
||||||
|
workbasket.setName("new name");
|
||||||
|
workbasket.setDescription("new description");
|
||||||
|
workbasket.setType(WorkbasketType.TOPIC);
|
||||||
|
workbasket.setOrgLevel1("new level 1");
|
||||||
|
workbasket.setOrgLevel2("new level 2");
|
||||||
|
workbasket.setOrgLevel3("new level 3");
|
||||||
|
workbasket.setOrgLevel4("new level 4");
|
||||||
|
workbasket.setCustomAttribute(WorkbasketCustomField.CUSTOM_1, "new custom 1");
|
||||||
|
workbasket.setCustomAttribute(WorkbasketCustomField.CUSTOM_2, "new custom 2");
|
||||||
|
workbasket.setCustomAttribute(WorkbasketCustomField.CUSTOM_3, "new custom 3");
|
||||||
|
workbasket.setCustomAttribute(WorkbasketCustomField.CUSTOM_4, "new custom 4");
|
||||||
|
workbasket.setDescription("new description");
|
||||||
|
workbasketService.updateWorkbasket(workbasket);
|
||||||
|
|
||||||
|
events =
|
||||||
|
historyService.createWorkbasketHistoryQuery().workbasketIdIn(workbasket.getId()).list();
|
||||||
|
|
||||||
|
assertThat(events).hasSize(1);
|
||||||
|
|
||||||
|
String eventType = events.get(0).getEventType();
|
||||||
|
|
||||||
|
assertThat(eventType)
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_UPDATED.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,346 +0,0 @@
|
||||||
package acceptance.query;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
|
||||||
|
|
||||||
import acceptance.AbstractAccTest;
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import org.junit.jupiter.api.Test;
|
|
||||||
|
|
||||||
import pro.taskana.common.api.BaseQuery.SortDirection;
|
|
||||||
import pro.taskana.common.api.TimeInterval;
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.query.HistoryQuery;
|
|
||||||
import pro.taskana.simplehistory.query.HistoryQueryColumnName;
|
|
||||||
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
|
||||||
|
|
||||||
/** Test for History queries. */
|
|
||||||
class QueryHistoryAccTest extends AbstractAccTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ConfirmEquality_When_UsingListValuesAscendingAndDescending() {
|
|
||||||
List<String> defaultList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.CREATED, null);
|
|
||||||
List<String> ascendingList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.CREATED, SortDirection.ASCENDING);
|
|
||||||
|
|
||||||
assertThat(ascendingList).hasSize(13);
|
|
||||||
assertThat(ascendingList).isEqualTo(defaultList);
|
|
||||||
|
|
||||||
List<String> descendingList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.CREATED, SortDirection.DESCENDING);
|
|
||||||
Collections.reverse(ascendingList);
|
|
||||||
|
|
||||||
assertThat(ascendingList).isEqualTo(descendingList);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnHistoryEvents_For_ComplexQuery() {
|
|
||||||
HistoryQuery query =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.businessProcessIdLike("just some string", "BPI:%")
|
|
||||||
.domainLike("%A")
|
|
||||||
.orderByCreated(SortDirection.DESCENDING);
|
|
||||||
|
|
||||||
List<HistoryEventImpl> results = query.list();
|
|
||||||
assertThat(results)
|
|
||||||
.extracting(TaskanaHistoryEvent::getUserId)
|
|
||||||
.containsOnly("admin", "peter");
|
|
||||||
results = query.orderByUserId(SortDirection.DESCENDING).list();
|
|
||||||
assertThat(results)
|
|
||||||
.extracting(TaskanaHistoryEvent::getUserId)
|
|
||||||
.containsOnly("admin", "peter");
|
|
||||||
assertThat(query.domainLike().count()).isEqualTo(13);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ConfirmQueryListOffset_When_ProvidingOffsetAndLimit() {
|
|
||||||
List<HistoryEventImpl> result = getHistoryService().createHistoryQuery().list(1, 2);
|
|
||||||
List<HistoryEventImpl> wrongList = getHistoryService().createHistoryQuery().list();
|
|
||||||
|
|
||||||
assertThat(result).hasSize(2);
|
|
||||||
assertThat(result.get(0).getUserId()).isNotEqualTo(wrongList.get(0).getUserId());
|
|
||||||
assertThat(result.get(0).getUserId()).isEqualTo(wrongList.get(1).getUserId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnEmptyList_When_ProvidingWrongContraints() {
|
|
||||||
List<HistoryEventImpl> result = getHistoryService().createHistoryQuery().list(1, 1000);
|
|
||||||
assertThat(result).hasSize(12);
|
|
||||||
|
|
||||||
result = getHistoryService().createHistoryQuery().list(100, 1000);
|
|
||||||
assertThat(result).isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnSingleHistoryEvent_When_UsingSingleMethod() {
|
|
||||||
HistoryEventImpl single = getHistoryService().createHistoryQuery().userIdIn("peter").single();
|
|
||||||
assertThat(single.getEventType()).isEqualTo("TASK_CREATED");
|
|
||||||
|
|
||||||
single = getHistoryService().createHistoryQuery().eventTypeIn("TASK_CREATED", "xy").single();
|
|
||||||
assertThat(single.getUserId()).isEqualTo("peter");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnCountOfEvents_When_UsingCountMethod() {
|
|
||||||
long count = getHistoryService().createHistoryQuery().userIdIn("peter").count();
|
|
||||||
assertThat(count).isEqualTo(6);
|
|
||||||
|
|
||||||
count = getHistoryService().createHistoryQuery().count();
|
|
||||||
assertThat(count).isEqualTo(13);
|
|
||||||
|
|
||||||
count = getHistoryService().createHistoryQuery().userIdIn("klaus", "arnold", "benni").count();
|
|
||||||
assertThat(count).isZero();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnHistoryEvents_For_DifferentInAttributes() {
|
|
||||||
List<HistoryEventImpl> returnValues =
|
|
||||||
getHistoryService().createHistoryQuery().businessProcessIdIn("BPI:01", "BPI:02").list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService().createHistoryQuery().parentBusinessProcessIdIn("BPI:01").list();
|
|
||||||
assertThat(returnValues).hasSize(6);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.taskIdIn("TKI:000000000000000000000000000000000000")
|
|
||||||
.list();
|
|
||||||
assertThat(returnValues).hasSize(2);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().eventTypeIn("TASK_CREATED").list();
|
|
||||||
assertThat(returnValues).hasSize(12);
|
|
||||||
|
|
||||||
TimeInterval timeInterval = new TimeInterval(Instant.now().minusSeconds(10), Instant.now());
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().createdWithin(timeInterval).list();
|
|
||||||
assertThat(returnValues).isEmpty();
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().userIdIn("admin").list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().domainIn("DOMAIN_A").list();
|
|
||||||
assertThat(returnValues).hasSize(12);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.workbasketKeyIn("WBI:100000000000000000000000000000000001")
|
|
||||||
.list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().porCompanyIn("00").list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().porSystemIn("PASystem").list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().porInstanceIn("22").list();
|
|
||||||
assertThat(returnValues).hasSize(6);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().porTypeIn("VN").list();
|
|
||||||
assertThat(returnValues).isEmpty();
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().porValueIn("11223344").list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService().createHistoryQuery().taskClassificationKeyIn("L140101").list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService().createHistoryQuery().taskClassificationCategoryIn("TASK").list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.attachmentClassificationKeyIn("DOCTYPE_DEFAULT")
|
|
||||||
.list();
|
|
||||||
assertThat(returnValues).hasSize(6);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.customAttributeIn(TaskHistoryCustomField.CUSTOM_1, "custom1")
|
|
||||||
.list();
|
|
||||||
assertThat(returnValues).hasSize(13);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.customAttributeIn(TaskHistoryCustomField.CUSTOM_2, "custom2")
|
|
||||||
.list();
|
|
||||||
assertThat(returnValues).hasSize(1);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.customAttributeIn(TaskHistoryCustomField.CUSTOM_3, "custom3")
|
|
||||||
.list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.customAttributeIn(TaskHistoryCustomField.CUSTOM_4, "custom4")
|
|
||||||
.list();
|
|
||||||
assertThat(returnValues).hasSize(1);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().oldValueIn("old_val").list();
|
|
||||||
assertThat(returnValues).hasSize(1);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().newValueIn("new_val").list();
|
|
||||||
assertThat(returnValues).hasSize(1);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().oldValueLike("old%").list();
|
|
||||||
assertThat(returnValues).hasSize(1);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().newValueLike("new_%").list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnHistoryEvents_For_DifferentLikeAttributes() {
|
|
||||||
List<HistoryEventImpl> returnValues =
|
|
||||||
getHistoryService().createHistoryQuery().businessProcessIdLike("BPI:0%").list();
|
|
||||||
assertThat(returnValues).hasSize(13);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService().createHistoryQuery().parentBusinessProcessIdLike("BPI:01", " %").list();
|
|
||||||
assertThat(returnValues).hasSize(6);
|
|
||||||
|
|
||||||
returnValues =
|
|
||||||
getHistoryService().createHistoryQuery().taskIdLike("TKI:000000000000000%").list();
|
|
||||||
assertThat(returnValues).hasSize(13);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().oldValueLike("old%").list();
|
|
||||||
assertThat(returnValues).hasSize(1);
|
|
||||||
|
|
||||||
returnValues = getHistoryService().createHistoryQuery().newValueLike("new_%").list();
|
|
||||||
assertThat(returnValues).hasSize(7);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_ReturnHistoryEvents_When_ProvidingListValues() {
|
|
||||||
List<String> returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.ID, null);
|
|
||||||
assertThat(returnedList).hasSize(13);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.BUSINESS_PROCESS_ID, null);
|
|
||||||
assertThat(returnedList).hasSize(3);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.PARENT_BUSINESS_PROCESS_ID, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.TASK_ID, null);
|
|
||||||
assertThat(returnedList).hasSize(7);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.EVENT_TYPE, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.CREATED, null);
|
|
||||||
assertThat(returnedList).hasSize(13);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.USER_ID, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.DOMAIN, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.WORKBASKET_KEY, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.POR_COMPANY, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.POR_SYSTEM, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.POR_INSTANCE, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.POR_TYPE, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.POR_VALUE, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.TASK_CLASSIFICATION_KEY, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.TASK_CLASSIFICATION_CATEGORY, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService()
|
|
||||||
.createHistoryQuery()
|
|
||||||
.listValues(HistoryQueryColumnName.ATTACHMENT_CLASSIFICATION_KEY, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.OLD_VALUE, null);
|
|
||||||
assertThat(returnedList).hasSize(3);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.NEW_VALUE, null);
|
|
||||||
assertThat(returnedList).hasSize(3);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.CUSTOM_1, null);
|
|
||||||
assertThat(returnedList).hasSize(1);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.CUSTOM_2, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.CUSTOM_3, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
|
|
||||||
returnedList =
|
|
||||||
getHistoryService().createHistoryQuery().listValues(HistoryQueryColumnName.CUSTOM_4, null);
|
|
||||||
assertThat(returnedList).hasSize(2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,380 @@
|
||||||
|
package acceptance.query;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.BaseQuery.SortDirection;
|
||||||
|
import pro.taskana.common.api.TimeInterval;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQuery;
|
||||||
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryColumnName;
|
||||||
|
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
|
/** Test for Task History queries. */
|
||||||
|
class QueryTaskHistoryAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
public QueryTaskHistoryAccTest() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ConfirmEquality_When_UsingListValuesAscendingAndDescending() {
|
||||||
|
List<String> defaultList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.CREATED, null);
|
||||||
|
List<String> ascendingList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.CREATED, SortDirection.ASCENDING);
|
||||||
|
|
||||||
|
assertThat(ascendingList).hasSize(13).isEqualTo(defaultList);
|
||||||
|
|
||||||
|
List<String> descendingList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.CREATED, SortDirection.DESCENDING);
|
||||||
|
Collections.reverse(ascendingList);
|
||||||
|
|
||||||
|
assertThat(ascendingList).isEqualTo(descendingList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnHistoryEvents_For_ComplexQuery() {
|
||||||
|
TaskHistoryQuery query =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.businessProcessIdLike("just some string", "BPI:%")
|
||||||
|
.domainLike("%A")
|
||||||
|
.orderByCreated(SortDirection.DESCENDING);
|
||||||
|
|
||||||
|
List<TaskHistoryEvent> results = query.list();
|
||||||
|
assertThat(results).extracting(TaskHistoryEvent::getUserId).containsOnly("admin", "peter");
|
||||||
|
results = query.orderByUserId(SortDirection.DESCENDING).list();
|
||||||
|
assertThat(results).extracting(TaskHistoryEvent::getUserId).containsOnly("admin", "peter");
|
||||||
|
assertThat(query.domainLike().count()).isEqualTo(13);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ConfirmQueryListOffset_When_ProvidingOffsetAndLimit() {
|
||||||
|
List<TaskHistoryEvent> offsetAndLimitResult =
|
||||||
|
getHistoryService().createTaskHistoryQuery().list(1, 2);
|
||||||
|
List<TaskHistoryEvent> regularResult = getHistoryService().createTaskHistoryQuery().list();
|
||||||
|
|
||||||
|
assertThat(offsetAndLimitResult).hasSize(2);
|
||||||
|
assertThat(offsetAndLimitResult.get(0).getUserId())
|
||||||
|
.isNotEqualTo(regularResult.get(0).getUserId());
|
||||||
|
assertThat(offsetAndLimitResult.get(0).getUserId()).isEqualTo(regularResult.get(1).getUserId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnEmptyList_When_ProvidingWrongContraints() {
|
||||||
|
List<TaskHistoryEvent> result = getHistoryService().createTaskHistoryQuery().list(1, 1000);
|
||||||
|
assertThat(result).hasSize(12);
|
||||||
|
|
||||||
|
result = getHistoryService().createTaskHistoryQuery().list(100, 1000);
|
||||||
|
assertThat(result).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnSingleHistoryEvent_When_UsingSingleMethod() {
|
||||||
|
TaskHistoryEvent single =
|
||||||
|
getHistoryService().createTaskHistoryQuery().userIdIn("peter").single();
|
||||||
|
assertThat(single.getEventType()).isEqualTo("TASK_CREATED");
|
||||||
|
|
||||||
|
single =
|
||||||
|
getHistoryService().createTaskHistoryQuery().eventTypeIn("TASK_CREATED", "xy").single();
|
||||||
|
assertThat(single.getUserId()).isEqualTo("peter");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnCountOfEvents_When_UsingCountMethod() {
|
||||||
|
long count = getHistoryService().createTaskHistoryQuery().userIdIn("peter").count();
|
||||||
|
assertThat(count).isEqualTo(6);
|
||||||
|
|
||||||
|
count = getHistoryService().createTaskHistoryQuery().count();
|
||||||
|
assertThat(count).isEqualTo(13);
|
||||||
|
|
||||||
|
count =
|
||||||
|
getHistoryService().createTaskHistoryQuery().userIdIn("klaus", "arnold", "benni").count();
|
||||||
|
assertThat(count).isZero();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnHistoryEvents_For_DifferentInAttributes() {
|
||||||
|
List<TaskHistoryEvent> returnValues =
|
||||||
|
getHistoryService().createTaskHistoryQuery().businessProcessIdIn("BPI:01", "BPI:02").list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService().createTaskHistoryQuery().parentBusinessProcessIdIn("BPI:01").list();
|
||||||
|
assertThat(returnValues).hasSize(6);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.taskIdIn("TKI:000000000000000000000000000000000000")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(2);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().eventTypeIn("TASK_CREATED").list();
|
||||||
|
assertThat(returnValues).hasSize(12);
|
||||||
|
|
||||||
|
TimeInterval timeInterval = new TimeInterval(Instant.now().minusSeconds(10), Instant.now());
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().createdWithin(timeInterval).list();
|
||||||
|
assertThat(returnValues).isEmpty();
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().userIdIn("admin").list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().domainIn("DOMAIN_A").list();
|
||||||
|
assertThat(returnValues).hasSize(12);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.workbasketKeyIn("WBI:100000000000000000000000000000000001")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().porCompanyIn("00").list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().porSystemIn("PASystem").list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().porInstanceIn("22").list();
|
||||||
|
assertThat(returnValues).hasSize(6);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().porTypeIn("VN").list();
|
||||||
|
assertThat(returnValues).isEmpty();
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().porValueIn("11223344").list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService().createTaskHistoryQuery().taskClassificationKeyIn("L140101").list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService().createTaskHistoryQuery().taskClassificationCategoryIn("TASK").list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.attachmentClassificationKeyIn("DOCTYPE_DEFAULT")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(6);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.customAttributeIn(TaskHistoryCustomField.CUSTOM_1, "custom1")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(13);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.customAttributeIn(TaskHistoryCustomField.CUSTOM_2, "custom2")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(1);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.customAttributeIn(TaskHistoryCustomField.CUSTOM_3, "custom3")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.customAttributeIn(TaskHistoryCustomField.CUSTOM_4, "custom4")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(1);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().oldValueIn("old_val").list();
|
||||||
|
assertThat(returnValues).hasSize(1);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().newValueIn("new_val").list();
|
||||||
|
assertThat(returnValues).hasSize(1);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().oldValueLike("old%").list();
|
||||||
|
assertThat(returnValues).hasSize(1);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().newValueLike("new_%").list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnHistoryEvents_For_DifferentLikeAttributes() {
|
||||||
|
List<TaskHistoryEvent> returnValues =
|
||||||
|
getHistoryService().createTaskHistoryQuery().businessProcessIdLike("BPI:0%").list();
|
||||||
|
assertThat(returnValues).hasSize(13);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.parentBusinessProcessIdLike("BPI:01", " %")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(6);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
getHistoryService().createTaskHistoryQuery().taskIdLike("TKI:000000000000000%").list();
|
||||||
|
assertThat(returnValues).hasSize(13);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().oldValueLike("old%").list();
|
||||||
|
assertThat(returnValues).hasSize(1);
|
||||||
|
|
||||||
|
returnValues = getHistoryService().createTaskHistoryQuery().newValueLike("new_%").list();
|
||||||
|
assertThat(returnValues).hasSize(7);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnHistoryEvents_When_ProvidingListValues() {
|
||||||
|
List<String> returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.ID, null);
|
||||||
|
assertThat(returnedList).hasSize(13);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.BUSINESS_PROCESS_ID, null);
|
||||||
|
assertThat(returnedList).hasSize(3);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.PARENT_BUSINESS_PROCESS_ID, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.TASK_ID, null);
|
||||||
|
assertThat(returnedList).hasSize(7);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.EVENT_TYPE, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.CREATED, null);
|
||||||
|
assertThat(returnedList).hasSize(13);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.USER_ID, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.DOMAIN, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.WORKBASKET_KEY, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.POR_COMPANY, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.POR_SYSTEM, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.POR_INSTANCE, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.POR_TYPE, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.POR_VALUE, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.TASK_CLASSIFICATION_KEY, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.TASK_CLASSIFICATION_CATEGORY, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.ATTACHMENT_CLASSIFICATION_KEY, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.OLD_VALUE, null);
|
||||||
|
assertThat(returnedList).hasSize(3);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.NEW_VALUE, null);
|
||||||
|
assertThat(returnedList).hasSize(3);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.CUSTOM_1, null);
|
||||||
|
assertThat(returnedList).hasSize(1);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.CUSTOM_2, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.CUSTOM_3, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
getHistoryService()
|
||||||
|
.createTaskHistoryQuery()
|
||||||
|
.listValues(TaskHistoryQueryColumnName.CUSTOM_4, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,318 @@
|
||||||
|
package acceptance.query;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import acceptance.AbstractAccTest;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.BaseQuery.SortDirection;
|
||||||
|
import pro.taskana.common.api.TimeInterval;
|
||||||
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryQuery;
|
||||||
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryQueryColumnName;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
|
||||||
|
/** Test for Workbasket History queries. */
|
||||||
|
class QueryWorkbasketHistoryAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
|
private final SimpleHistoryServiceImpl historyService = getHistoryService();
|
||||||
|
|
||||||
|
public QueryWorkbasketHistoryAccTest() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ConfirmEquality_When_UsingListValuesAscendingAndDescending() {
|
||||||
|
List<String> defaultList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.CREATED, null);
|
||||||
|
List<String> ascendingList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.CREATED, SortDirection.ASCENDING);
|
||||||
|
|
||||||
|
assertThat(ascendingList).hasSize(10).isEqualTo(defaultList);
|
||||||
|
|
||||||
|
List<String> descendingList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.CREATED, SortDirection.DESCENDING);
|
||||||
|
Collections.reverse(ascendingList);
|
||||||
|
|
||||||
|
assertThat(ascendingList).isEqualTo(descendingList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnHistoryEvents_For_ComplexQuery() {
|
||||||
|
|
||||||
|
WorkbasketHistoryQuery query =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.eventTypeIn(WorkbasketHistoryEventType.WORKBASKET_CREATED.getName())
|
||||||
|
.domainLike("%A")
|
||||||
|
.custom1In("custom1", "otherCustom1")
|
||||||
|
.orderByCreated(SortDirection.DESCENDING);
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> results = query.list();
|
||||||
|
assertThat(results)
|
||||||
|
.extracting(WorkbasketHistoryEvent::getUserId)
|
||||||
|
.containsOnly("claudia", "peter", "sven");
|
||||||
|
results = query.orderByUserId(SortDirection.DESCENDING).list();
|
||||||
|
assertThat(results)
|
||||||
|
.extracting(WorkbasketHistoryEvent::getUserId)
|
||||||
|
.containsOnly("claudia", "peter", "sven");
|
||||||
|
assertThat(query.count()).isEqualTo(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ConfirmQueryListOffset_When_ProvidingOffsetAndLimit() {
|
||||||
|
List<WorkbasketHistoryEvent> offsetAndLimitResult =
|
||||||
|
historyService.createWorkbasketHistoryQuery().list(1, 2);
|
||||||
|
List<WorkbasketHistoryEvent> regularResult =
|
||||||
|
historyService.createWorkbasketHistoryQuery().list();
|
||||||
|
|
||||||
|
assertThat(offsetAndLimitResult).hasSize(2);
|
||||||
|
assertThat(offsetAndLimitResult.get(0).getUserId())
|
||||||
|
.isNotEqualTo(regularResult.get(0).getUserId());
|
||||||
|
assertThat(offsetAndLimitResult.get(0).getUserId()).isEqualTo(regularResult.get(1).getUserId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnEmptyList_When_ProvidingWrongContraints() {
|
||||||
|
List<WorkbasketHistoryEvent> result =
|
||||||
|
historyService.createWorkbasketHistoryQuery().list(1, 1000);
|
||||||
|
assertThat(result).hasSize(9);
|
||||||
|
|
||||||
|
result = historyService.createWorkbasketHistoryQuery().list(100, 1000);
|
||||||
|
assertThat(result).isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnSingleHistoryEvent_When_UsingSingleMethod() {
|
||||||
|
WorkbasketHistoryEvent single =
|
||||||
|
historyService.createWorkbasketHistoryQuery().userIdIn("peter").single();
|
||||||
|
assertThat(single.getEventType())
|
||||||
|
.isEqualTo(WorkbasketHistoryEventType.WORKBASKET_CREATED.getName());
|
||||||
|
|
||||||
|
single =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.eventTypeIn(WorkbasketHistoryEventType.WORKBASKET_CREATED.getName(), "xy")
|
||||||
|
.single();
|
||||||
|
assertThat(single.getUserId()).isEqualTo("peter");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnCountOfEvents_When_UsingCountMethod() {
|
||||||
|
long count = historyService.createWorkbasketHistoryQuery().userIdIn("peter").count();
|
||||||
|
assertThat(count).isEqualTo(6);
|
||||||
|
|
||||||
|
count = historyService.createWorkbasketHistoryQuery().count();
|
||||||
|
assertThat(count).isEqualTo(10);
|
||||||
|
|
||||||
|
count =
|
||||||
|
historyService.createWorkbasketHistoryQuery().userIdIn("hans", "jürgen", "klaus").count();
|
||||||
|
assertThat(count).isZero();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnHistoryEvents_For_DifferentInAttributes() {
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> returnValues =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.workbasketIdIn("WBI:000000000000000000000000000000000903")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.eventTypeIn(WorkbasketHistoryEventType.WORKBASKET_CREATED.getName())
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(6);
|
||||||
|
|
||||||
|
TimeInterval timeInterval = new TimeInterval(Instant.now().minusSeconds(10), Instant.now());
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().createdWithin(timeInterval).list();
|
||||||
|
assertThat(returnValues).isEmpty();
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().userIdIn("peter").list();
|
||||||
|
assertThat(returnValues).hasSize(6);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().domainIn("DOMAIN_A").list();
|
||||||
|
assertThat(returnValues).hasSize(10);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().workbasketKeyIn("soRt003").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().custom1In("custom1").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().custom2In("custom2").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().custom3In("custom3").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().custom4In("custom4").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().orgLevel1In("orgLevel1").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().orgLevel2In("orgLevel2").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().orgLevel3In("orgLevel3").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().orgLevel4In("orgLevel4").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnHistoryEvents_For_DifferentLikeAttributes() {
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> returnValues =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.workbasketIdLike("WBI:000000000000000%")
|
||||||
|
.list();
|
||||||
|
assertThat(returnValues).hasSize(10);
|
||||||
|
|
||||||
|
returnValues =
|
||||||
|
historyService.createWorkbasketHistoryQuery().eventTypeLike("WORKBASKET_C%").list();
|
||||||
|
assertThat(returnValues).hasSize(6);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().userIdLike("p%", "c%").list();
|
||||||
|
assertThat(returnValues).hasSize(8);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().domainLike("%_A").list();
|
||||||
|
assertThat(returnValues).hasSize(10);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().workbasketKeyLike("%Rt0%").list();
|
||||||
|
assertThat(returnValues).hasSize(10);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().workbasketTypeLike("TOP%").list();
|
||||||
|
assertThat(returnValues).hasSize(10);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().ownerLike("adm%").list();
|
||||||
|
assertThat(returnValues).hasSize(10);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().custom1Like("other%").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
|
||||||
|
returnValues = historyService.createWorkbasketHistoryQuery().orgLevel1Like("org%").list();
|
||||||
|
assertThat(returnValues).hasSize(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnHistoryEvents_When_ProvidingListValues() {
|
||||||
|
List<String> returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.ID, null);
|
||||||
|
assertThat(returnedList).hasSize(10);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.WORKBASKET_ID, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.EVENT_TYPE, null);
|
||||||
|
assertThat(returnedList).hasSize(3);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.CREATED, null);
|
||||||
|
assertThat(returnedList).hasSize(10);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.USER_ID, null);
|
||||||
|
assertThat(returnedList).hasSize(3);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.DOMAIN, null);
|
||||||
|
assertThat(returnedList).hasSize(1);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.WORKBASKET_KEY, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.WORKBASKET_TYPE, null);
|
||||||
|
assertThat(returnedList).hasSize(1);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.OWNER, null);
|
||||||
|
assertThat(returnedList).hasSize(1);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.CUSTOM_1, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.CUSTOM_2, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.CUSTOM_3, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.CUSTOM_4, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.ORGLEVEL_1, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.ORGLEVEL_2, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.ORGLEVEL_3, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
|
||||||
|
returnedList =
|
||||||
|
historyService
|
||||||
|
.createWorkbasketHistoryQuery()
|
||||||
|
.listValues(WorkbasketHistoryQueryColumnName.ORGLEVEL_4, null);
|
||||||
|
assertThat(returnedList).hasSize(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -30,13 +30,13 @@ class TaskanaEngineConfigurationTest extends AbstractAccTest {
|
||||||
@Test
|
@Test
|
||||||
void testCreateTaskanaHistoryEventWithNonDefaultSchemaName() throws Exception {
|
void testCreateTaskanaHistoryEventWithNonDefaultSchemaName() throws Exception {
|
||||||
resetDb("SOMECUSTOMSCHEMANAME");
|
resetDb("SOMECUSTOMSCHEMANAME");
|
||||||
long count = getHistoryService().createHistoryQuery().workbasketKeyIn("wbKey1").count();
|
long count = getHistoryService().createTaskHistoryQuery().workbasketKeyIn("wbKey1").count();
|
||||||
assertThat(count).isZero();
|
assertThat(count).isZero();
|
||||||
getHistoryService()
|
getHistoryService()
|
||||||
.create(
|
.create(
|
||||||
AbstractAccTest.createHistoryEvent(
|
AbstractAccTest.createTaskHistoryEvent(
|
||||||
"wbKey1", "taskId1", "type1", "Some comment", "wbKey2", "someUserId"));
|
"wbKey1", "taskId1", "type1", "Some comment", "wbKey2", "someUserId"));
|
||||||
count = getHistoryService().createHistoryQuery().workbasketKeyIn("wbKey1").count();
|
count = getHistoryService().createTaskHistoryQuery().workbasketKeyIn("wbKey1").count();
|
||||||
assertThat(count).isOne();
|
assertThat(count).isOne();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import static org.mockito.Mockito.when;
|
||||||
import acceptance.AbstractAccTest;
|
import acceptance.AbstractAccTest;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.session.SqlSession;
|
||||||
import org.apache.ibatis.session.SqlSessionManager;
|
import org.apache.ibatis.session.SqlSessionManager;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
@ -20,8 +21,13 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
import pro.taskana.TaskanaEngineConfiguration;
|
import pro.taskana.TaskanaEngineConfiguration;
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
import pro.taskana.common.api.TaskanaEngine;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryEventMapper;
|
import pro.taskana.simplehistory.impl.task.TaskHistoryEventMapper;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQueryMapper;
|
||||||
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryEventMapper;
|
||||||
|
import pro.taskana.simplehistory.impl.workbasket.WorkbasketHistoryQueryMapper;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
|
||||||
/** Unit Test for SimpleHistoryServiceImplTest. */
|
/** Unit Test for SimpleHistoryServiceImplTest. */
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
|
@ -29,9 +35,13 @@ class SimpleHistoryServiceImplTest {
|
||||||
|
|
||||||
@InjectMocks @Spy private SimpleHistoryServiceImpl cutSpy;
|
@InjectMocks @Spy private SimpleHistoryServiceImpl cutSpy;
|
||||||
|
|
||||||
@Mock private HistoryEventMapper historyEventMapperMock;
|
@Mock private TaskHistoryEventMapper taskHistoryEventMapperMock;
|
||||||
|
|
||||||
@Mock private HistoryQueryMapper historyQueryMapperMock;
|
@Mock private TaskHistoryQueryMapper taskHistoryQueryMapperMock;
|
||||||
|
|
||||||
|
@Mock private WorkbasketHistoryEventMapper workbasketHistoryEventMapperMock;
|
||||||
|
|
||||||
|
@Mock private WorkbasketHistoryQueryMapper workbasketHistoryQueryMapperMock;
|
||||||
|
|
||||||
@Mock private TaskanaHistoryEngineImpl taskanaHistoryEngineMock;
|
@Mock private TaskanaHistoryEngineImpl taskanaHistoryEngineMock;
|
||||||
|
|
||||||
|
|
@ -41,12 +51,14 @@ class SimpleHistoryServiceImplTest {
|
||||||
|
|
||||||
@Mock private SqlSessionManager sqlSessionManagerMock;
|
@Mock private SqlSessionManager sqlSessionManagerMock;
|
||||||
|
|
||||||
|
@Mock private SqlSession sqlSessionMock;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testInitializeSimpleHistoryService() {
|
void testInitializeSimpleHistoryService() {
|
||||||
when(sqlSessionManagerMock.getMapper(HistoryEventMapper.class))
|
when(sqlSessionManagerMock.getMapper(TaskHistoryEventMapper.class))
|
||||||
.thenReturn(historyEventMapperMock);
|
.thenReturn(taskHistoryEventMapperMock);
|
||||||
when(sqlSessionManagerMock.getMapper(HistoryQueryMapper.class))
|
when(sqlSessionManagerMock.getMapper(WorkbasketHistoryEventMapper.class))
|
||||||
.thenReturn(historyQueryMapperMock);
|
.thenReturn(workbasketHistoryEventMapperMock);
|
||||||
when(taskanaHistoryEngineMock.getSqlSession()).thenReturn(sqlSessionManagerMock);
|
when(taskanaHistoryEngineMock.getSqlSession()).thenReturn(sqlSessionManagerMock);
|
||||||
doReturn(taskanaHistoryEngineMock).when(cutSpy).getTaskanaEngine(taskanaEngineConfiguration);
|
doReturn(taskanaHistoryEngineMock).when(cutSpy).getTaskanaEngine(taskanaEngineConfiguration);
|
||||||
doReturn(taskanaEngine).when(taskanaEngineConfiguration).buildTaskanaEngine();
|
doReturn(taskanaEngine).when(taskanaEngineConfiguration).buildTaskanaEngine();
|
||||||
|
|
@ -60,30 +72,74 @@ class SimpleHistoryServiceImplTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testCreateEvent() throws Exception {
|
void should_VerifyMethodInvocations_When_CreateTaskHistoryEvent() throws Exception {
|
||||||
HistoryEventImpl expectedWb =
|
TaskHistoryEvent expectedWb =
|
||||||
AbstractAccTest.createHistoryEvent(
|
AbstractAccTest.createTaskHistoryEvent(
|
||||||
"wbKey1", "taskId1", "type1", "wbKey2", "someUserId", "someDetails");
|
"wbKey1", "taskId1", "type1", "wbKey2", "someUserId", "someDetails");
|
||||||
|
|
||||||
cutSpy.create(expectedWb);
|
cutSpy.create(expectedWb);
|
||||||
verify(taskanaHistoryEngineMock, times(1)).openConnection();
|
verify(taskanaHistoryEngineMock, times(1)).openConnection();
|
||||||
verify(historyEventMapperMock, times(1)).insert(expectedWb);
|
verify(taskHistoryEventMapperMock, times(1)).insert(expectedWb);
|
||||||
verify(taskanaHistoryEngineMock, times(1)).returnConnection();
|
verify(taskanaHistoryEngineMock, times(1)).returnConnection();
|
||||||
assertThat(expectedWb.getCreated()).isNotNull();
|
assertThat(expectedWb.getCreated()).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testQueryEvent() throws Exception {
|
void should_VerifyMethodInvocations_When_CreateWorkbasketHisoryEvent() throws Exception {
|
||||||
List<HistoryEventImpl> returnList = new ArrayList<>();
|
WorkbasketHistoryEvent expectedEvent =
|
||||||
returnList.add(
|
AbstractAccTest.createWorkbasketHistoryEvent(
|
||||||
AbstractAccTest.createHistoryEvent(
|
"wbKey1",
|
||||||
"wbKey1", "taskId1", "type1", "wbKey2", "someUserId", "someDetails"));
|
WorkbasketHistoryEventType.WORKBASKET_CREATED.getName(),
|
||||||
when(historyQueryMapperMock.queryHistoryEvent(any())).thenReturn(returnList);
|
"someUserId",
|
||||||
|
"someDetails");
|
||||||
|
|
||||||
final List<HistoryEventImpl> result = cutSpy.createHistoryQuery().taskIdIn("taskId1").list();
|
cutSpy.create(expectedEvent);
|
||||||
|
verify(taskanaHistoryEngineMock, times(1)).openConnection();
|
||||||
|
verify(workbasketHistoryEventMapperMock, times(1)).insert(expectedEvent);
|
||||||
|
verify(taskanaHistoryEngineMock, times(1)).returnConnection();
|
||||||
|
assertThat(expectedEvent.getCreated()).isNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_VerifyMethodInvocations_When_QueryTaskHistoryEvent() throws Exception {
|
||||||
|
List<TaskHistoryEvent> returnList = new ArrayList<>();
|
||||||
|
returnList.add(
|
||||||
|
AbstractAccTest.createTaskHistoryEvent(
|
||||||
|
"wbKey1", "taskId1", "type1", "wbKey2", "someUserId", "someDetails"));
|
||||||
|
|
||||||
|
when(taskanaHistoryEngineMock.getSqlSession()).thenReturn(sqlSessionMock);
|
||||||
|
when(sqlSessionMock.selectList(any(), any())).thenReturn(new ArrayList<>(returnList));
|
||||||
|
|
||||||
|
final List<TaskHistoryEvent> result =
|
||||||
|
cutSpy.createTaskHistoryQuery().taskIdIn("taskId1").list();
|
||||||
|
|
||||||
verify(taskanaHistoryEngineMock, times(1)).openConnection();
|
verify(taskanaHistoryEngineMock, times(1)).openConnection();
|
||||||
verify(historyQueryMapperMock, times(1)).queryHistoryEvent(any());
|
verify(taskanaHistoryEngineMock, times(1)).getSqlSession();
|
||||||
|
verify(sqlSessionMock, times(1)).selectList(any(), any());
|
||||||
|
|
||||||
|
verify(taskanaHistoryEngineMock, times(1)).returnConnection();
|
||||||
|
assertThat(result).hasSize(returnList.size());
|
||||||
|
assertThat(result.get(0).getWorkbasketKey()).isEqualTo(returnList.get(0).getWorkbasketKey());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_VerifyMethodInvocations_When_QueryWorkbasketHisoryEvent() throws Exception {
|
||||||
|
List<WorkbasketHistoryEvent> returnList = new ArrayList<>();
|
||||||
|
returnList.add(
|
||||||
|
AbstractAccTest.createWorkbasketHistoryEvent(
|
||||||
|
"wbKey1",
|
||||||
|
WorkbasketHistoryEventType.WORKBASKET_CREATED.getName(),
|
||||||
|
"someUserId",
|
||||||
|
"someDetails"));
|
||||||
|
when(taskanaHistoryEngineMock.getSqlSession()).thenReturn(sqlSessionMock);
|
||||||
|
when(sqlSessionMock.selectList(any(), any())).thenReturn(new ArrayList<>(returnList));
|
||||||
|
|
||||||
|
final List<WorkbasketHistoryEvent> result =
|
||||||
|
cutSpy.createWorkbasketHistoryQuery().workbasketKeyIn("wbKey1").list();
|
||||||
|
|
||||||
|
verify(taskanaHistoryEngineMock, times(1)).openConnection();
|
||||||
|
verify(taskanaHistoryEngineMock, times(1)).getSqlSession();
|
||||||
|
verify(sqlSessionMock, times(1)).selectList(any(), any());
|
||||||
verify(taskanaHistoryEngineMock, times(1)).returnConnection();
|
verify(taskanaHistoryEngineMock, times(1)).returnConnection();
|
||||||
assertThat(result).hasSize(returnList.size());
|
assertThat(result).hasSize(returnList.size());
|
||||||
assertThat(result.get(0).getWorkbasketKey()).isEqualTo(returnList.get(0).getWorkbasketKey());
|
assertThat(result.get(0).getWorkbasketKey()).isEqualTo(returnList.get(0).getWorkbasketKey());
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,15 @@
|
||||||
package pro.taskana.simplehistory.impl;
|
package pro.taskana.simplehistory.impl;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.Mockito.doNothing;
|
import static org.mockito.Mockito.doNothing;
|
||||||
import static org.mockito.Mockito.doReturn;
|
|
||||||
import static org.mockito.Mockito.validateMockitoUsage;
|
import static org.mockito.Mockito.validateMockitoUsage;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.session.SqlSession;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
@ -16,40 +18,37 @@ import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
import pro.taskana.common.api.TimeInterval;
|
import pro.taskana.common.api.TimeInterval;
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
import pro.taskana.common.internal.util.IdGenerator;
|
||||||
import pro.taskana.simplehistory.impl.mappings.HistoryQueryMapper;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
/**
|
/** Unit Test for SimpleHistoryServiceImplTest. */
|
||||||
* Unit Test for SimpleHistoryServiceImplTest.
|
|
||||||
*
|
|
||||||
* @author BV
|
|
||||||
*/
|
|
||||||
@ExtendWith(MockitoExtension.class)
|
@ExtendWith(MockitoExtension.class)
|
||||||
class HistoryQueryImplTest {
|
class TaskHistoryQueryImplTest {
|
||||||
|
|
||||||
private static final String ID_PREFIX_HISTORY_EVENT = "HEI";
|
private static final String ID_PREFIX_HISTORY_EVENT = "HEI";
|
||||||
|
|
||||||
private HistoryQueryImpl historyQueryImpl;
|
private TaskHistoryQueryImpl historyQueryImpl;
|
||||||
|
|
||||||
@Mock private TaskanaHistoryEngineImpl taskanaHistoryEngineMock;
|
@Mock private TaskanaHistoryEngineImpl taskanaHistoryEngineMock;
|
||||||
|
|
||||||
@Mock private HistoryQueryMapper historyQueryMock;
|
@Mock private SqlSession sqlSessionMock;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setup() {
|
void setup() {
|
||||||
historyQueryImpl = new HistoryQueryImpl(taskanaHistoryEngineMock, historyQueryMock);
|
historyQueryImpl = new TaskHistoryQueryImpl(taskanaHistoryEngineMock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testShouldReturnList() throws Exception {
|
void should_returnList_When_CallingListMethodOnTaskHistoryQuery() throws Exception {
|
||||||
List<HistoryEventImpl> returnList = new ArrayList<>();
|
List<TaskHistoryEvent> returnList = new ArrayList<>();
|
||||||
returnList.add(createHistoryEvent("abcd", "T22", "car", "BV", "this was important", null));
|
returnList.add(createHistoryEvent("abcd", "T22", "car", "BV", "this was important", null));
|
||||||
TimeInterval interval = new TimeInterval(Instant.now().minusNanos(1000), Instant.now());
|
TimeInterval interval = new TimeInterval(Instant.now().minusNanos(1000), Instant.now());
|
||||||
|
|
||||||
doNothing().when(taskanaHistoryEngineMock).openConnection();
|
doNothing().when(taskanaHistoryEngineMock).openConnection();
|
||||||
doNothing().when(taskanaHistoryEngineMock).returnConnection();
|
doNothing().when(taskanaHistoryEngineMock).returnConnection();
|
||||||
doReturn(returnList).when(historyQueryMock).queryHistoryEvent(historyQueryImpl);
|
when(taskanaHistoryEngineMock.getSqlSession()).thenReturn(sqlSessionMock);
|
||||||
|
when(sqlSessionMock.selectList(any(), any())).thenReturn(new ArrayList<>(returnList));
|
||||||
|
|
||||||
List<HistoryEventImpl> result =
|
List<TaskHistoryEvent> result =
|
||||||
historyQueryImpl
|
historyQueryImpl
|
||||||
.taskIdIn("TKI:01")
|
.taskIdIn("TKI:01")
|
||||||
.workbasketKeyIn(
|
.workbasketKeyIn(
|
||||||
|
|
@ -62,16 +61,17 @@ class HistoryQueryImplTest {
|
||||||
assertThat(result).isEqualTo(returnList);
|
assertThat(result).isEqualTo(returnList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private HistoryEventImpl createHistoryEvent(
|
private TaskHistoryEvent createHistoryEvent(
|
||||||
String taskId,
|
String taskId,
|
||||||
String workbasketKey,
|
String workbasketKey,
|
||||||
String type,
|
String type,
|
||||||
String userId,
|
String userId,
|
||||||
String details,
|
String details,
|
||||||
Instant created) {
|
Instant created) {
|
||||||
HistoryEventImpl he =
|
TaskHistoryEvent he = new TaskHistoryEvent();
|
||||||
new HistoryEventImpl(
|
he.setId(IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT));
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT), userId, details);
|
he.setUserId(userId);
|
||||||
|
he.setDetails(details);
|
||||||
he.setTaskId(taskId);
|
he.setTaskId(taskId);
|
||||||
he.setWorkbasketKey(workbasketKey);
|
he.setWorkbasketKey(workbasketKey);
|
||||||
he.setEventType(type);
|
he.setEventType(type);
|
||||||
|
|
@ -0,0 +1,81 @@
|
||||||
|
package pro.taskana.simplehistory.impl;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
|
import static org.mockito.Mockito.doNothing;
|
||||||
|
import static org.mockito.Mockito.validateMockitoUsage;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.session.SqlSession;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.TimeInterval;
|
||||||
|
import pro.taskana.common.internal.util.IdGenerator;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEventType;
|
||||||
|
|
||||||
|
/** Unit Test for SimpleHistoryServiceImplTest. */
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class WorkbasketHistoryQueryImplTest {
|
||||||
|
|
||||||
|
private static final String ID_PREFIX_HISTORY_EVENT = "WHI";
|
||||||
|
|
||||||
|
@Mock private TaskanaHistoryEngineImpl taskanaHistoryEngineMock;
|
||||||
|
|
||||||
|
private WorkbasketHistoryQueryImpl historyQueryImpl;
|
||||||
|
|
||||||
|
@Mock private SqlSession sqlSessionMock;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setup() {
|
||||||
|
historyQueryImpl = new WorkbasketHistoryQueryImpl(taskanaHistoryEngineMock);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_ReturnList_When_CallingListMethodOnWorkbasketHistoryQuery() throws Exception {
|
||||||
|
List<WorkbasketHistoryEvent> returnList = new ArrayList<>();
|
||||||
|
returnList.add(
|
||||||
|
createHistoryEvent(
|
||||||
|
"abcd",
|
||||||
|
WorkbasketHistoryEventType.WORKBASKET_CREATED.getName(),
|
||||||
|
"someUserId",
|
||||||
|
"someDetails",
|
||||||
|
null));
|
||||||
|
TimeInterval interval = new TimeInterval(Instant.now().minusNanos(1000), Instant.now());
|
||||||
|
|
||||||
|
doNothing().when(taskanaHistoryEngineMock).openConnection();
|
||||||
|
doNothing().when(taskanaHistoryEngineMock).returnConnection();
|
||||||
|
when(taskanaHistoryEngineMock.getSqlSession()).thenReturn(sqlSessionMock);
|
||||||
|
when(sqlSessionMock.selectList(any(), any())).thenReturn(new ArrayList<>(returnList));
|
||||||
|
|
||||||
|
List<WorkbasketHistoryEvent> result =
|
||||||
|
historyQueryImpl
|
||||||
|
.workbasketIdIn("WBI:01")
|
||||||
|
.workbasketKeyIn("abcd", "some_random_string")
|
||||||
|
.userIdIn("someUserId")
|
||||||
|
.createdWithin(interval)
|
||||||
|
.list();
|
||||||
|
|
||||||
|
validateMockitoUsage();
|
||||||
|
assertThat(result).isEqualTo(returnList);
|
||||||
|
}
|
||||||
|
|
||||||
|
private WorkbasketHistoryEvent createHistoryEvent(
|
||||||
|
String workbasketKey, String type, String userId, String details, Instant created) {
|
||||||
|
WorkbasketHistoryEvent he = new WorkbasketHistoryEvent();
|
||||||
|
he.setId(IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT));
|
||||||
|
he.setUserId(userId);
|
||||||
|
he.setDetails(details);
|
||||||
|
he.setWorkbasketKey(workbasketKey);
|
||||||
|
he.setEventType(type);
|
||||||
|
he.setCreated(created);
|
||||||
|
return he;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -24,15 +24,14 @@ import pro.taskana.common.api.TimeInterval;
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||||
import pro.taskana.common.rest.AbstractPagingController;
|
import pro.taskana.common.rest.AbstractPagingController;
|
||||||
import pro.taskana.common.rest.QueryHelper;
|
import pro.taskana.common.rest.QueryHelper;
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
import pro.taskana.simplehistory.impl.SimpleHistoryServiceImpl;
|
||||||
import pro.taskana.simplehistory.query.HistoryQuery;
|
import pro.taskana.simplehistory.impl.task.TaskHistoryQuery;
|
||||||
import pro.taskana.simplehistory.rest.assembler.TaskHistoryEventListResourceAssembler;
|
import pro.taskana.simplehistory.rest.assembler.TaskHistoryEventListResourceAssembler;
|
||||||
import pro.taskana.simplehistory.rest.assembler.TaskHistoryEventRepresentationModelAssembler;
|
import pro.taskana.simplehistory.rest.assembler.TaskHistoryEventRepresentationModelAssembler;
|
||||||
import pro.taskana.simplehistory.rest.models.TaskHistoryEventListResource;
|
import pro.taskana.simplehistory.rest.models.TaskHistoryEventListResource;
|
||||||
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
|
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
|
||||||
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
import pro.taskana.spi.history.api.exceptions.TaskanaHistoryEventNotFoundException;
|
import pro.taskana.spi.history.api.exceptions.TaskanaHistoryEventNotFoundException;
|
||||||
|
|
||||||
/** Controller for all TaskHistoryEvent related endpoints. */
|
/** Controller for all TaskHistoryEvent related endpoints. */
|
||||||
|
|
@ -107,12 +106,12 @@ public class TaskHistoryEventController extends AbstractPagingController {
|
||||||
LOGGER.debug("Entry to getTaskHistoryEvents(params= {})", params);
|
LOGGER.debug("Entry to getTaskHistoryEvents(params= {})", params);
|
||||||
}
|
}
|
||||||
|
|
||||||
HistoryQuery query = simpleHistoryService.createHistoryQuery();
|
TaskHistoryQuery query = simpleHistoryService.createTaskHistoryQuery();
|
||||||
applySortingParams(query, params);
|
applySortingParams(query, params);
|
||||||
applyFilterParams(query, params);
|
applyFilterParams(query, params);
|
||||||
|
|
||||||
PageMetadata pageMetadata = null;
|
PageMetadata pageMetadata = null;
|
||||||
List<HistoryEventImpl> historyEvents;
|
List<TaskHistoryEvent> historyEvents;
|
||||||
final String page = params.getFirst(PAGING_PAGE);
|
final String page = params.getFirst(PAGING_PAGE);
|
||||||
final String pageSize = params.getFirst(PAGING_PAGE_SIZE);
|
final String pageSize = params.getFirst(PAGING_PAGE_SIZE);
|
||||||
params.remove(PAGING_PAGE);
|
params.remove(PAGING_PAGE);
|
||||||
|
|
@ -150,7 +149,7 @@ public class TaskHistoryEventController extends AbstractPagingController {
|
||||||
LOGGER.debug("Entry to getTaskHistoryEvent(historyEventId= {})", historyEventId);
|
LOGGER.debug("Entry to getTaskHistoryEvent(historyEventId= {})", historyEventId);
|
||||||
}
|
}
|
||||||
|
|
||||||
TaskanaHistoryEvent resultEvent = simpleHistoryService.getHistoryEvent(historyEventId);
|
TaskHistoryEvent resultEvent = simpleHistoryService.getTaskHistoryEvent(historyEventId);
|
||||||
|
|
||||||
TaskHistoryEventRepresentationModel taskEventResource =
|
TaskHistoryEventRepresentationModel taskEventResource =
|
||||||
taskHistoryEventRepresentationModelAssembler.toModel(resultEvent);
|
taskHistoryEventRepresentationModelAssembler.toModel(resultEvent);
|
||||||
|
|
@ -164,7 +163,7 @@ public class TaskHistoryEventController extends AbstractPagingController {
|
||||||
return new ResponseEntity<>(taskEventResource, HttpStatus.OK);
|
return new ResponseEntity<>(taskEventResource, HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applySortingParams(HistoryQuery query, MultiValueMap<String, String> params)
|
private void applySortingParams(TaskHistoryQuery query, MultiValueMap<String, String> params)
|
||||||
throws InvalidArgumentException {
|
throws InvalidArgumentException {
|
||||||
if (LOGGER.isDebugEnabled()) {
|
if (LOGGER.isDebugEnabled()) {
|
||||||
LOGGER.debug("Entry to applySortingParams(params= {})", params);
|
LOGGER.debug("Entry to applySortingParams(params= {})", params);
|
||||||
|
|
@ -244,7 +243,7 @@ public class TaskHistoryEventController extends AbstractPagingController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void applyFilterParams(HistoryQuery query, MultiValueMap<String, String> params) {
|
private void applyFilterParams(TaskHistoryQuery query, MultiValueMap<String, String> params) {
|
||||||
if (LOGGER.isDebugEnabled()) {
|
if (LOGGER.isDebugEnabled()) {
|
||||||
LOGGER.debug("Entry to applyFilterParams(query= {}, params= {})", query, params);
|
LOGGER.debug("Entry to applyFilterParams(query= {}, params= {})", query, params);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,16 +9,16 @@ import org.springframework.hateoas.Link;
|
||||||
import org.springframework.hateoas.PagedModel.PageMetadata;
|
import org.springframework.hateoas.PagedModel.PageMetadata;
|
||||||
|
|
||||||
import pro.taskana.resource.rest.AbstractRessourcesAssembler;
|
import pro.taskana.resource.rest.AbstractRessourcesAssembler;
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.rest.TaskHistoryEventController;
|
import pro.taskana.simplehistory.rest.TaskHistoryEventController;
|
||||||
import pro.taskana.simplehistory.rest.models.TaskHistoryEventListResource;
|
import pro.taskana.simplehistory.rest.models.TaskHistoryEventListResource;
|
||||||
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
|
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
|
||||||
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
/** Mapper to convert from a list of HistoryEventImpl to a TaskHistoryEventResource. */
|
/** Mapper to convert from a list of TaskHistoryEvent to a TaskHistoryEventResource. */
|
||||||
public class TaskHistoryEventListResourceAssembler extends AbstractRessourcesAssembler {
|
public class TaskHistoryEventListResourceAssembler extends AbstractRessourcesAssembler {
|
||||||
|
|
||||||
public TaskHistoryEventListResource toResources(
|
public TaskHistoryEventListResource toResources(
|
||||||
List<HistoryEventImpl> historyEvents, PageMetadata pageMetadata) {
|
List<TaskHistoryEvent> historyEvents, PageMetadata pageMetadata) {
|
||||||
|
|
||||||
TaskHistoryEventRepresentationModelAssembler assembler =
|
TaskHistoryEventRepresentationModelAssembler assembler =
|
||||||
new TaskHistoryEventRepresentationModelAssembler();
|
new TaskHistoryEventRepresentationModelAssembler();
|
||||||
|
|
|
||||||
|
|
@ -7,20 +7,18 @@ import org.springframework.hateoas.server.RepresentationModelAssembler;
|
||||||
import org.springframework.lang.NonNull;
|
import org.springframework.lang.NonNull;
|
||||||
|
|
||||||
import pro.taskana.common.api.exceptions.SystemException;
|
import pro.taskana.common.api.exceptions.SystemException;
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.rest.TaskHistoryEventController;
|
import pro.taskana.simplehistory.rest.TaskHistoryEventController;
|
||||||
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
|
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
|
||||||
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
/** Transforms any {@link HistoryEventImpl} into its {@link TaskHistoryEventRepresentationModel}. */
|
/** Transforms any {@link TaskHistoryEvent} into its {@link TaskHistoryEventRepresentationModel}. */
|
||||||
public class TaskHistoryEventRepresentationModelAssembler
|
public class TaskHistoryEventRepresentationModelAssembler
|
||||||
implements RepresentationModelAssembler<
|
implements RepresentationModelAssembler<TaskHistoryEvent, TaskHistoryEventRepresentationModel> {
|
||||||
TaskanaHistoryEvent, TaskHistoryEventRepresentationModel> {
|
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public TaskHistoryEventRepresentationModel toModel(@NonNull TaskanaHistoryEvent historyEvent) {
|
public TaskHistoryEventRepresentationModel toModel(@NonNull TaskHistoryEvent historyEvent) {
|
||||||
TaskHistoryEventRepresentationModel repModel = new TaskHistoryEventRepresentationModel();
|
TaskHistoryEventRepresentationModel repModel = new TaskHistoryEventRepresentationModel();
|
||||||
repModel.setTaskHistoryId(historyEvent.getId());
|
repModel.setTaskHistoryId(historyEvent.getId());
|
||||||
repModel.setBusinessProcessId(historyEvent.getBusinessProcessId());
|
repModel.setBusinessProcessId(historyEvent.getBusinessProcessId());
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,9 @@ package pro.taskana.simplehistory.rest.models;
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import org.springframework.hateoas.RepresentationModel;
|
import org.springframework.hateoas.RepresentationModel;
|
||||||
|
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
/** Resource class for {@link TaskanaHistoryEvent}. */
|
/** Resource class for {@link TaskHistoryEvent}. */
|
||||||
public class TaskHistoryEventRepresentationModel
|
public class TaskHistoryEventRepresentationModel
|
||||||
extends RepresentationModel<TaskHistoryEventRepresentationModel> {
|
extends RepresentationModel<TaskHistoryEventRepresentationModel> {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
-- the order is important!
|
-- the order is important!
|
||||||
DELETE FROM HISTORY_EVENTS;
|
DELETE FROM TASK_HISTORY_EVENT;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
DROP TABLE HISTORY_EVENTS;
|
DROP TABLE TASK_HISTORY_EVENT;
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
INSERT INTO HISTORY_EVENTS (ID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY, ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS) VALUES
|
INSERT INTO TASK_HISTORY_EVENT (ID, BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY, ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS) VALUES
|
||||||
-- BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, TASK_CREATEDD, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY , POR_SYSTEM, POR_INSTANCE , POR_TYPE , POR_VALUE , TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY , ATTACHMENT_CLASSIFICATION_KEY , OLD_VALUE , NEW_VALUE , CUSTOM_1 , CUSTOM_2 , CUSTOM_3 , CUSTOM_4
|
-- BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, TASK_CREATEDD, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY , POR_SYSTEM, POR_INSTANCE , POR_TYPE , POR_VALUE , TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY , ATTACHMENT_CLASSIFICATION_KEY , OLD_VALUE , NEW_VALUE , CUSTOM_1 , CUSTOM_2 , CUSTOM_3 , CUSTOM_4
|
||||||
('HEI:000000000000000000000000000000000000','BPI:01' ,'', 'TKI:000000000000000000000000000000000000', 'TASK_CREATED', CURRENT_TIMESTAMP , 'USER_2_2', 'DOMAIN_B', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '11223344' ,' L140101' , 'TASK' ,'' ,'old_val12' ,'new_val12' ,'custom1' ,'custom2' , 'custom3' ,'custom4', 'some Details'),
|
('HEI:000000000000000000000000000000000000','BPI:01' ,'', 'TKI:000000000000000000000000000000000000', 'TASK_CREATED', CURRENT_TIMESTAMP , 'USER_2_2', 'DOMAIN_B', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '11223344' ,' L140101' , 'TASK' ,'' ,'old_val12' ,'new_val12' ,'custom1' ,'custom2' , 'custom3' ,'custom4', 'some Details'),
|
||||||
('HEI:000000000000000000000000000000000001','BPI:02' ,'', 'TKI:000000000000000000000000000000000000', 'TASK_UPDATED', DATEADD('DAY', -2, CURRENT_TIMESTAMP ), 'USER_1_1', 'DOMAIN_A', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '65464564' , '' , '' ,'' ,'2old_val' ,'new_val2' ,'custom1' ,'' , 'custom3' ,'','some Details'),
|
('HEI:000000000000000000000000000000000001','BPI:02' ,'', 'TKI:000000000000000000000000000000000000', 'TASK_UPDATED', DATEADD('DAY', -2, CURRENT_TIMESTAMP ), 'USER_1_1', 'DOMAIN_A', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '65464564' , '' , '' ,'' ,'2old_val' ,'new_val2' ,'custom1' ,'' , 'custom3' ,'','some Details'),
|
||||||
|
|
|
||||||
|
|
@ -9,11 +9,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
|
|
||||||
import pro.taskana.simplehistory.impl.HistoryEventImpl;
|
|
||||||
import pro.taskana.simplehistory.rest.TaskHistoryRestConfiguration;
|
import pro.taskana.simplehistory.rest.TaskHistoryRestConfiguration;
|
||||||
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
|
import pro.taskana.simplehistory.rest.models.TaskHistoryEventRepresentationModel;
|
||||||
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
|
||||||
/** Test for {@link TaskHistoryEventRepresentationModelAssembler}. */
|
/** Test for {@link TaskHistoryEventRepresentationModelAssembler}. */
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
|
|
@ -35,8 +34,7 @@ class TaskHistoryEventRepresentationModelAssemblerTest {
|
||||||
@Test
|
@Test
|
||||||
void taskHistoryEventModelToResource() {
|
void taskHistoryEventModelToResource() {
|
||||||
|
|
||||||
HistoryEventImpl historyEvent =
|
TaskHistoryEvent historyEvent = new TaskHistoryEvent();
|
||||||
new HistoryEventImpl("HEI:000000000000000000000000000000000000", "user1", "someDetails");
|
|
||||||
|
|
||||||
historyEvent.setEventType("TASK_CREATED");
|
historyEvent.setEventType("TASK_CREATED");
|
||||||
historyEvent.setBusinessProcessId("BPI:01");
|
historyEvent.setBusinessProcessId("BPI:01");
|
||||||
|
|
@ -65,7 +63,7 @@ class TaskHistoryEventRepresentationModelAssemblerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void testEquality(
|
private void testEquality(
|
||||||
TaskanaHistoryEvent historyEvent,
|
TaskHistoryEvent historyEvent,
|
||||||
TaskHistoryEventRepresentationModel taskHistoryEventRepresentationModel) {
|
TaskHistoryEventRepresentationModel taskHistoryEventRepresentationModel) {
|
||||||
|
|
||||||
assertThat(historyEvent.getEventType())
|
assertThat(historyEvent.getEventType())
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,131 @@
|
||||||
|
package pro.taskana.common.internal.util;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import pro.taskana.common.api.exceptions.SystemException;
|
||||||
|
|
||||||
|
public class ObjectAttributeChangeDetector {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(ObjectAttributeChangeDetector.class);
|
||||||
|
|
||||||
|
private ObjectAttributeChangeDetector() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines changes in fields between two objects.
|
||||||
|
*
|
||||||
|
* @param oldObject the old object for the comparison
|
||||||
|
* @param newObject the new object for the comparison
|
||||||
|
* @param <T> The generic type parameter
|
||||||
|
* @return the details of all changed fields as JSON string
|
||||||
|
*/
|
||||||
|
public static <T> String determineChangesInAttributes(T oldObject, T newObject) {
|
||||||
|
LOGGER.debug(
|
||||||
|
"Entry to determineChangesInAttributes (oldObject = {}, newObject = {}",
|
||||||
|
oldObject,
|
||||||
|
newObject);
|
||||||
|
|
||||||
|
List<Field> fields = new ArrayList<>();
|
||||||
|
|
||||||
|
if (Objects.isNull(oldObject) || Objects.isNull(newObject)) {
|
||||||
|
|
||||||
|
throw new SystemException(
|
||||||
|
"Null was provided as a parameter. Please provide two objects of the same type");
|
||||||
|
}
|
||||||
|
|
||||||
|
Class<?> currentClass = oldObject.getClass();
|
||||||
|
|
||||||
|
if (List.class.isAssignableFrom(currentClass)) {
|
||||||
|
|
||||||
|
return compareLists(oldObject, newObject);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
retrieveFields(fields, currentClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
Predicate<Triplet<Field, Object, Object>> areFieldsNotEqual =
|
||||||
|
fieldAndValuePairTriplet ->
|
||||||
|
!Objects.equals(
|
||||||
|
fieldAndValuePairTriplet.getMiddle(), fieldAndValuePairTriplet.getRight());
|
||||||
|
Predicate<Triplet<Field, Object, Object>> isFieldNotCustomAttributes =
|
||||||
|
fieldAndValuePairTriplet ->
|
||||||
|
!fieldAndValuePairTriplet.getLeft().getName().equals("customAttributes");
|
||||||
|
|
||||||
|
List<JSONObject> changedAttributes =
|
||||||
|
fields.stream()
|
||||||
|
.peek(field -> field.setAccessible(true))
|
||||||
|
.map(
|
||||||
|
CheckedFunction.wrap(
|
||||||
|
field -> new Triplet<>(field, field.get(oldObject), field.get(newObject))))
|
||||||
|
.filter(areFieldsNotEqual.and(isFieldNotCustomAttributes))
|
||||||
|
.map(
|
||||||
|
fieldAndValuePairTriplet -> {
|
||||||
|
JSONObject changedAttribute = new JSONObject();
|
||||||
|
changedAttribute.put("fieldName", fieldAndValuePairTriplet.getLeft().getName());
|
||||||
|
changedAttribute.put(
|
||||||
|
"oldValue",
|
||||||
|
Optional.ofNullable(fieldAndValuePairTriplet.getMiddle()).orElse(""));
|
||||||
|
changedAttribute.put(
|
||||||
|
"newValue",
|
||||||
|
Optional.ofNullable(fieldAndValuePairTriplet.getRight()).orElse(""));
|
||||||
|
return changedAttribute;
|
||||||
|
})
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
JSONObject changes = new JSONObject();
|
||||||
|
changes.put("changes", changedAttributes);
|
||||||
|
|
||||||
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
LOGGER.debug("Exit from determineChangesInAttributes(), returning {}", changes);
|
||||||
|
}
|
||||||
|
|
||||||
|
return changes.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void retrieveFields(List<Field> fields, Class<?> currentClass) {
|
||||||
|
while (currentClass.getSuperclass() != null) {
|
||||||
|
fields.addAll(Arrays.asList(currentClass.getDeclaredFields()));
|
||||||
|
currentClass = currentClass.getSuperclass();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static <T> String compareLists(T oldObject, T newObject) {
|
||||||
|
|
||||||
|
LOGGER.debug(
|
||||||
|
"Entry to determineChangesInAttributes (oldObject = {}, newObject = {}",
|
||||||
|
oldObject,
|
||||||
|
newObject);
|
||||||
|
|
||||||
|
if (!oldObject.equals(newObject)) {
|
||||||
|
JSONObject changedAttribute = new JSONObject();
|
||||||
|
|
||||||
|
changedAttribute.put("oldValue", oldObject);
|
||||||
|
changedAttribute.put("newValue", newObject);
|
||||||
|
|
||||||
|
JSONObject changes = new JSONObject();
|
||||||
|
|
||||||
|
changes.put("changes", changedAttribute);
|
||||||
|
|
||||||
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
LOGGER.debug("Exit from determineChangesInAttributes(), returning {}", changes);
|
||||||
|
}
|
||||||
|
return changes.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
LOGGER.debug(
|
||||||
|
"Exit from determineChangesInAttributes(), "
|
||||||
|
+ "returning empty String because there are no changed attributes");
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,8 @@ import java.util.List;
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
import pro.taskana.common.api.TaskanaEngine;
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
|
||||||
/** Interface for TASKANA History Service Provider. */
|
/** Interface for TASKANA History Service Provider. */
|
||||||
public interface TaskanaHistory {
|
public interface TaskanaHistory {
|
||||||
|
|
@ -18,11 +19,18 @@ public interface TaskanaHistory {
|
||||||
void initialize(TaskanaEngine taskanaEngine);
|
void initialize(TaskanaEngine taskanaEngine);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new history event.
|
* Create a new task history event.
|
||||||
*
|
*
|
||||||
* @param event {@link TaskanaHistoryEvent} The event to be created.
|
* @param event {@link TaskHistoryEvent} The event to be created.
|
||||||
*/
|
*/
|
||||||
void create(TaskanaHistoryEvent event);
|
void create(TaskHistoryEvent event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new workbasket history event.
|
||||||
|
*
|
||||||
|
* @param event {@link WorkbasketHistoryEvent} The event to be created.
|
||||||
|
*/
|
||||||
|
void create(WorkbasketHistoryEvent event);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete history events by taskIds. Invalid/non-existing taskIds will be ignored
|
* Delete history events by taskIds. Invalid/non-existing taskIds will be ignored
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,9 @@ package pro.taskana.spi.history.api.events.task;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
||||||
/** Event fired if a task is cancelled. */
|
/** Event fired if a task is cancelled. */
|
||||||
public class CancelledEvent extends TaskEvent {
|
public class TaskCancelledEvent extends TaskHistoryEvent {
|
||||||
|
|
||||||
public CancelledEvent(String id, Task task, String userId) {
|
public TaskCancelledEvent(String id, Task task, String userId) {
|
||||||
super(id, task, userId, null);
|
super(id, task, userId, null);
|
||||||
eventType = "TASK_CANCELLED";
|
eventType = "TASK_CANCELLED";
|
||||||
created = task.getCompleted();
|
created = task.getCompleted();
|
||||||
|
|
@ -3,11 +3,11 @@ package pro.taskana.spi.history.api.events.task;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
||||||
/** Event fired if a task is cancelled to be claimed. */
|
/** Event fired if a task is cancelled to be claimed. */
|
||||||
public class ClaimCancelledEvent extends TaskEvent {
|
public class TaskClaimCancelledEvent extends TaskHistoryEvent {
|
||||||
|
|
||||||
public ClaimCancelledEvent(String id, Task task, String userId) {
|
public TaskClaimCancelledEvent(String id, Task task, String userId) {
|
||||||
super(id, task, userId, null);
|
super(id, task, userId, null);
|
||||||
eventType = "TASK_CLAIM_CANCELLED";
|
eventType = TaskHistoryEventType.TASK_CLAIM_CANCELLED.getName();
|
||||||
created = task.getModified();
|
created = task.getModified();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3,11 +3,11 @@ package pro.taskana.spi.history.api.events.task;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
||||||
/** Event fired if a task is claimed. */
|
/** Event fired if a task is claimed. */
|
||||||
public class ClaimedEvent extends TaskEvent {
|
public class TaskClaimedEvent extends TaskHistoryEvent {
|
||||||
|
|
||||||
public ClaimedEvent(String id, Task task, String userId) {
|
public TaskClaimedEvent(String id, Task task, String userId) {
|
||||||
super(id, task, userId, null);
|
super(id, task, userId, null);
|
||||||
setEventType("TASK_CLAIMED");
|
eventType = (TaskHistoryEventType.TASK_CLAIMED.getName());
|
||||||
created = task.getClaimed();
|
created = task.getClaimed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4,17 +4,17 @@ import pro.taskana.task.api.models.Task;
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
import pro.taskana.task.api.models.TaskSummary;
|
||||||
|
|
||||||
/** Event fired if a task is completed. */
|
/** Event fired if a task is completed. */
|
||||||
public class CompletedEvent extends TaskEvent {
|
public class TaskCompletedEvent extends TaskHistoryEvent {
|
||||||
|
|
||||||
public CompletedEvent(String id, Task completedTask, String userId) {
|
public TaskCompletedEvent(String id, Task completedTask, String userId) {
|
||||||
super(id, completedTask, userId, null);
|
super(id, completedTask, userId, null);
|
||||||
eventType = "TASK_COMPLETED";
|
eventType = TaskHistoryEventType.TASK_COMPLETED.getName();
|
||||||
created = completedTask.getCompleted();
|
created = completedTask.getCompleted();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompletedEvent(String id, TaskSummary completedTask, String userId) {
|
public TaskCompletedEvent(String id, TaskSummary completedTask, String userId) {
|
||||||
super(id, completedTask, userId, null);
|
super(id, completedTask, userId, null);
|
||||||
eventType = "TASK_COMPLETED";
|
eventType = TaskHistoryEventType.TASK_COMPLETED.getName();
|
||||||
created = completedTask.getCompleted();
|
created = completedTask.getCompleted();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -3,11 +3,11 @@ package pro.taskana.spi.history.api.events.task;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
||||||
/** Event fired if a task is created. */
|
/** Event fired if a task is created. */
|
||||||
public class CreatedEvent extends TaskEvent {
|
public class TaskCreatedEvent extends TaskHistoryEvent {
|
||||||
|
|
||||||
public CreatedEvent(String id, Task task, String userId, String details) {
|
public TaskCreatedEvent(String id, Task task, String userId, String details) {
|
||||||
super(id, task, userId, details);
|
super(id, task, userId, details);
|
||||||
eventType = "TASK_CREATED";
|
eventType = TaskHistoryEventType.TASK_CREATED.getName();
|
||||||
created = task.getCreated();
|
created = task.getCreated();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,112 +0,0 @@
|
||||||
package pro.taskana.spi.history.api.events.task;
|
|
||||||
|
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
|
||||||
import pro.taskana.task.api.models.Task;
|
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
|
||||||
|
|
||||||
/** Super class for all task related events. */
|
|
||||||
public class TaskEvent extends TaskanaHistoryEvent {
|
|
||||||
|
|
||||||
public TaskEvent(String id, Task task, String userId, String details) {
|
|
||||||
super(id, userId, details);
|
|
||||||
taskId = task.getId();
|
|
||||||
businessProcessId = task.getBusinessProcessId();
|
|
||||||
parentBusinessProcessId = task.getParentBusinessProcessId();
|
|
||||||
domain = task.getDomain();
|
|
||||||
workbasketKey = task.getWorkbasketKey();
|
|
||||||
taskClassificationCategory = task.getClassificationCategory();
|
|
||||||
if (task.getClassificationSummary() != null) {
|
|
||||||
taskClassificationKey = task.getClassificationSummary().getKey();
|
|
||||||
}
|
|
||||||
if (!task.getAttachments().isEmpty()) {
|
|
||||||
attachmentClassificationKey =
|
|
||||||
task.getAttachments().get(0).getClassificationSummary().getKey();
|
|
||||||
}
|
|
||||||
if (task.getPrimaryObjRef() != null) {
|
|
||||||
porCompany = task.getPrimaryObjRef().getCompany();
|
|
||||||
porSystem = task.getPrimaryObjRef().getSystem();
|
|
||||||
porInstance = task.getPrimaryObjRef().getSystemInstance();
|
|
||||||
porType = task.getPrimaryObjRef().getType();
|
|
||||||
porValue = task.getPrimaryObjRef().getValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskEvent(String id, TaskSummary task, String userId, String details) {
|
|
||||||
super(id, userId, details);
|
|
||||||
taskId = task.getId();
|
|
||||||
businessProcessId = task.getBusinessProcessId();
|
|
||||||
parentBusinessProcessId = task.getParentBusinessProcessId();
|
|
||||||
domain = task.getDomain();
|
|
||||||
if (task.getWorkbasketSummary() != null) {
|
|
||||||
workbasketKey = task.getWorkbasketSummary().getKey();
|
|
||||||
}
|
|
||||||
if (task.getClassificationSummary() != null) {
|
|
||||||
taskClassificationKey = task.getClassificationSummary().getKey();
|
|
||||||
taskClassificationCategory = task.getClassificationSummary().getCategory();
|
|
||||||
}
|
|
||||||
if (!task.getAttachmentSummaries().isEmpty()) {
|
|
||||||
attachmentClassificationKey =
|
|
||||||
task.getAttachmentSummaries().get(0).getClassificationSummary().getKey();
|
|
||||||
}
|
|
||||||
if (task.getPrimaryObjRef() != null) {
|
|
||||||
porCompany = task.getPrimaryObjRef().getCompany();
|
|
||||||
porSystem = task.getPrimaryObjRef().getSystem();
|
|
||||||
porInstance = task.getPrimaryObjRef().getSystemInstance();
|
|
||||||
porType = task.getPrimaryObjRef().getType();
|
|
||||||
porValue = task.getPrimaryObjRef().getValue();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "TaskEvent [id="
|
|
||||||
+ id
|
|
||||||
+ ", businessProcessId="
|
|
||||||
+ businessProcessId
|
|
||||||
+ ", parentBusinessProcessId="
|
|
||||||
+ parentBusinessProcessId
|
|
||||||
+ ", taskId="
|
|
||||||
+ taskId
|
|
||||||
+ ", eventType="
|
|
||||||
+ eventType
|
|
||||||
+ ", created="
|
|
||||||
+ created
|
|
||||||
+ ", userId="
|
|
||||||
+ userId
|
|
||||||
+ ", domain="
|
|
||||||
+ domain
|
|
||||||
+ ", workbasketKey="
|
|
||||||
+ workbasketKey
|
|
||||||
+ ", porCompany="
|
|
||||||
+ porCompany
|
|
||||||
+ ", porSystem="
|
|
||||||
+ porSystem
|
|
||||||
+ ", porInstance="
|
|
||||||
+ porInstance
|
|
||||||
+ ", porType="
|
|
||||||
+ porType
|
|
||||||
+ ", porValue="
|
|
||||||
+ porValue
|
|
||||||
+ ", taskClassificationKey="
|
|
||||||
+ taskClassificationKey
|
|
||||||
+ ", taskClassificationCategory="
|
|
||||||
+ taskClassificationCategory
|
|
||||||
+ ", attachmentClassificationKey="
|
|
||||||
+ attachmentClassificationKey
|
|
||||||
+ ", oldValue="
|
|
||||||
+ oldValue
|
|
||||||
+ ", newValue="
|
|
||||||
+ newValue
|
|
||||||
+ ", custom1="
|
|
||||||
+ custom1
|
|
||||||
+ ", custom2="
|
|
||||||
+ custom2
|
|
||||||
+ ", custom3="
|
|
||||||
+ custom3
|
|
||||||
+ ", custom4="
|
|
||||||
+ custom4
|
|
||||||
+ ", details="
|
|
||||||
+ details
|
|
||||||
+ "]";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,12 +1,15 @@
|
||||||
package pro.taskana.spi.history.api.events;
|
package pro.taskana.spi.history.api.events.task;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import pro.taskana.common.api.exceptions.SystemException;
|
import pro.taskana.common.api.exceptions.SystemException;
|
||||||
|
import pro.taskana.spi.history.api.events.TaskHistoryCustomField;
|
||||||
|
import pro.taskana.task.api.TaskCustomField;
|
||||||
|
import pro.taskana.task.api.models.TaskSummary;
|
||||||
|
|
||||||
/** Super class for all specific events from the TASKANA engine. */
|
/** Super class for all task related events. */
|
||||||
public class TaskanaHistoryEvent {
|
public class TaskHistoryEvent {
|
||||||
|
|
||||||
protected String id;
|
protected String id;
|
||||||
protected String businessProcessId;
|
protected String businessProcessId;
|
||||||
|
|
@ -33,12 +36,36 @@ public class TaskanaHistoryEvent {
|
||||||
protected String custom4;
|
protected String custom4;
|
||||||
protected String details;
|
protected String details;
|
||||||
|
|
||||||
public TaskanaHistoryEvent() {}
|
public TaskHistoryEvent() {}
|
||||||
|
|
||||||
public TaskanaHistoryEvent(String id, String userId, String details) {
|
public TaskHistoryEvent(String id, TaskSummary task, String userId, String details) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.userId = userId;
|
this.userId = userId;
|
||||||
this.details = details;
|
this.details = details;
|
||||||
|
taskId = task.getId();
|
||||||
|
businessProcessId = task.getBusinessProcessId();
|
||||||
|
parentBusinessProcessId = task.getParentBusinessProcessId();
|
||||||
|
domain = task.getDomain();
|
||||||
|
workbasketKey = task.getWorkbasketSummary().getKey();
|
||||||
|
taskClassificationCategory = task.getClassificationSummary().getCategory();
|
||||||
|
if (task.getClassificationSummary() != null) {
|
||||||
|
taskClassificationKey = task.getClassificationSummary().getKey();
|
||||||
|
}
|
||||||
|
if (!task.getAttachmentSummaries().isEmpty()) {
|
||||||
|
attachmentClassificationKey =
|
||||||
|
task.getAttachmentSummaries().get(0).getClassificationSummary().getKey();
|
||||||
|
}
|
||||||
|
if (task.getPrimaryObjRef() != null) {
|
||||||
|
porCompany = task.getPrimaryObjRef().getCompany();
|
||||||
|
porSystem = task.getPrimaryObjRef().getSystem();
|
||||||
|
porInstance = task.getPrimaryObjRef().getSystemInstance();
|
||||||
|
porType = task.getPrimaryObjRef().getType();
|
||||||
|
porValue = task.getPrimaryObjRef().getValue();
|
||||||
|
}
|
||||||
|
custom1 = task.getCustomAttribute(TaskCustomField.CUSTOM_1);
|
||||||
|
custom2 = task.getCustomAttribute(TaskCustomField.CUSTOM_2);
|
||||||
|
custom3 = task.getCustomAttribute(TaskCustomField.CUSTOM_3);
|
||||||
|
custom4 = task.getCustomAttribute(TaskCustomField.CUSTOM_4);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCustomAttribute(TaskHistoryCustomField customField, String value) {
|
public void setCustomAttribute(TaskHistoryCustomField customField, String value) {
|
||||||
|
|
@ -75,14 +102,6 @@ public class TaskanaHistoryEvent {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setId(String id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getBusinessProcessId() {
|
public String getBusinessProcessId() {
|
||||||
return businessProcessId;
|
return businessProcessId;
|
||||||
}
|
}
|
||||||
|
|
@ -107,30 +126,6 @@ public class TaskanaHistoryEvent {
|
||||||
this.taskId = taskId;
|
this.taskId = taskId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getEventType() {
|
|
||||||
return eventType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEventType(String eventType) {
|
|
||||||
this.eventType = eventType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Instant getCreated() {
|
|
||||||
return created;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCreated(Instant created) {
|
|
||||||
this.created = created;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUserId() {
|
|
||||||
return userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserId(String userId) {
|
|
||||||
this.userId = userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDomain() {
|
public String getDomain() {
|
||||||
return domain;
|
return domain;
|
||||||
}
|
}
|
||||||
|
|
@ -211,6 +206,38 @@ public class TaskanaHistoryEvent {
|
||||||
this.attachmentClassificationKey = attachmentClassificationKey;
|
this.attachmentClassificationKey = attachmentClassificationKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEventType() {
|
||||||
|
return eventType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEventType(String eventType) {
|
||||||
|
this.eventType = eventType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Instant getCreated() {
|
||||||
|
return created;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreated(Instant created) {
|
||||||
|
this.created = created;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(String userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
public String getOldValue() {
|
public String getOldValue() {
|
||||||
return oldValue;
|
return oldValue;
|
||||||
}
|
}
|
||||||
|
|
@ -309,35 +336,54 @@ public class TaskanaHistoryEvent {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "TaskanaHistoryEvent ["
|
return "TaskEvent [id="
|
||||||
+ "id="
|
+ id
|
||||||
+ this.id
|
|
||||||
+ ", businessProcessId="
|
+ ", businessProcessId="
|
||||||
+ this.businessProcessId
|
+ businessProcessId
|
||||||
+ ", parentBusinessProcessId="
|
+ ", parentBusinessProcessId="
|
||||||
+ this.parentBusinessProcessId
|
+ parentBusinessProcessId
|
||||||
+ ", taskId="
|
+ ", taskId="
|
||||||
+ this.taskId
|
+ taskId
|
||||||
+ ", eventType="
|
+ ", eventType="
|
||||||
+ this.eventType
|
+ eventType
|
||||||
+ ", created="
|
+ ", created="
|
||||||
+ this.created
|
+ created
|
||||||
+ ", userId="
|
+ ", userId="
|
||||||
+ this.userId
|
+ userId
|
||||||
+ ", domain="
|
+ ", domain="
|
||||||
+ this.domain
|
+ domain
|
||||||
+ ", workbasketKey="
|
+ ", workbasketKey="
|
||||||
+ this.workbasketKey
|
+ workbasketKey
|
||||||
|
+ ", porCompany="
|
||||||
|
+ porCompany
|
||||||
|
+ ", porSystem="
|
||||||
|
+ porSystem
|
||||||
|
+ ", porInstance="
|
||||||
|
+ porInstance
|
||||||
|
+ ", porType="
|
||||||
|
+ porType
|
||||||
|
+ ", porValue="
|
||||||
|
+ porValue
|
||||||
+ ", taskClassificationKey="
|
+ ", taskClassificationKey="
|
||||||
+ this.taskClassificationKey
|
+ taskClassificationKey
|
||||||
|
+ ", taskClassificationCategory="
|
||||||
|
+ taskClassificationCategory
|
||||||
+ ", attachmentClassificationKey="
|
+ ", attachmentClassificationKey="
|
||||||
+ this.attachmentClassificationKey
|
+ attachmentClassificationKey
|
||||||
+ ", oldValue="
|
+ ", oldValue="
|
||||||
+ this.oldValue
|
+ oldValue
|
||||||
+ ", newValue="
|
+ ", newValue="
|
||||||
+ this.newValue
|
+ newValue
|
||||||
|
+ ", custom1="
|
||||||
|
+ custom1
|
||||||
|
+ ", custom2="
|
||||||
|
+ custom2
|
||||||
|
+ ", custom3="
|
||||||
|
+ custom3
|
||||||
|
+ ", custom4="
|
||||||
|
+ custom4
|
||||||
+ ", details="
|
+ ", details="
|
||||||
+ this.details
|
+ details
|
||||||
+ "]";
|
+ "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
package pro.taskana.spi.history.api.events.task;
|
||||||
|
|
||||||
|
public enum TaskHistoryEventType {
|
||||||
|
TASK_CREATED("TASK_CREATED"),
|
||||||
|
TASK_UPDATED("TASK_UPDATED"),
|
||||||
|
TASK_CLAIMED("TASK_CLAIMED"),
|
||||||
|
TASK_CLAIM_CANCELLED("TASK_CLAIM_CANCELLED"),
|
||||||
|
TASK_COMPLETED("TASK_COMPLETED"),
|
||||||
|
TASK_CANCELLED("TASK_CANCELLED"),
|
||||||
|
TASK_TERMINATED("TASK_TERMINATED"),
|
||||||
|
TASK_TRANSFERRED("TASK_TRANSFERRED");
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
TaskHistoryEventType(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,9 +3,9 @@ package pro.taskana.spi.history.api.events.task;
|
||||||
import pro.taskana.task.api.models.Task;
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
||||||
/** Event fired if a task is terminated. */
|
/** Event fired if a task is terminated. */
|
||||||
public class TerminatedEvent extends TaskEvent {
|
public class TaskTerminatedEvent extends TaskHistoryEvent {
|
||||||
|
|
||||||
public TerminatedEvent(String id, Task task, String userId) {
|
public TaskTerminatedEvent(String id, Task task, String userId) {
|
||||||
super(id, task, userId, null);
|
super(id, task, userId, null);
|
||||||
eventType = "TASK_TERMINATED";
|
eventType = "TASK_TERMINATED";
|
||||||
created = task.getCompleted();
|
created = task.getCompleted();
|
||||||
|
|
@ -4,16 +4,16 @@ import pro.taskana.task.api.models.Task;
|
||||||
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
||||||
|
|
||||||
/** Event fired if a task is transferred. */
|
/** Event fired if a task is transferred. */
|
||||||
public class TransferredEvent extends TaskEvent {
|
public class TaskTransferredEvent extends TaskHistoryEvent {
|
||||||
|
|
||||||
public TransferredEvent(
|
public TaskTransferredEvent(
|
||||||
String id,
|
String id,
|
||||||
Task task,
|
Task task,
|
||||||
WorkbasketSummary oldWorkbasket,
|
WorkbasketSummary oldWorkbasket,
|
||||||
WorkbasketSummary newWorkbasket,
|
WorkbasketSummary newWorkbasket,
|
||||||
String userId) {
|
String userId) {
|
||||||
super(id, task, userId, null);
|
super(id, task, userId, null);
|
||||||
eventType = "TASK_TRANSFERRED";
|
eventType = TaskHistoryEventType.TASK_TRANSFERRED.getName();
|
||||||
created = task.getModified();
|
created = task.getModified();
|
||||||
this.oldValue = oldWorkbasket.getId();
|
this.oldValue = oldWorkbasket.getId();
|
||||||
this.newValue = newWorkbasket.getId();
|
this.newValue = newWorkbasket.getId();
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package pro.taskana.spi.history.api.events.task;
|
||||||
|
|
||||||
|
import pro.taskana.task.api.models.Task;
|
||||||
|
|
||||||
|
public class TaskUpdatedEvent extends TaskHistoryEvent {
|
||||||
|
|
||||||
|
public TaskUpdatedEvent(String id, Task updatedTask, String userId, String details) {
|
||||||
|
super(id, updatedTask, userId, details);
|
||||||
|
eventType = TaskHistoryEventType.TASK_UPDATED.getName();
|
||||||
|
created = updatedTask.getModified();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
package pro.taskana.spi.history.api.events.task;
|
|
||||||
|
|
||||||
import pro.taskana.task.api.models.Task;
|
|
||||||
|
|
||||||
public class UpdatedEvent extends TaskEvent {
|
|
||||||
|
|
||||||
public UpdatedEvent(String id, Task updatedTask, String userId, String details) {
|
|
||||||
super(id, updatedTask, userId, details);
|
|
||||||
eventType = "TASK_UPDATED";
|
|
||||||
created = updatedTask.getModified();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketAccessItemCreatedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketAccessItemCreatedEvent(
|
||||||
|
String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_ACCESS_ITEM_CREATED.getName();
|
||||||
|
created = Instant.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketAccessItemDeletedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketAccessItemDeletedEvent(
|
||||||
|
String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_ACCESS_ITEM_DELETED.getName();
|
||||||
|
created = Instant.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketAccessItemDeletedForAccessIdEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketAccessItemDeletedForAccessIdEvent(
|
||||||
|
String id, Workbasket workbasket, String userId) {
|
||||||
|
super(id, workbasket, userId, null);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_ACCESS_ITEM_DELETED_FOR_ACCESS_ID.getName();
|
||||||
|
created = Instant.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketAccessItemUpdatedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketAccessItemUpdatedEvent(
|
||||||
|
String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_ACCESS_ITEM_UPDATED.getName();
|
||||||
|
created = Instant.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketAccessItemsUpdatedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketAccessItemsUpdatedEvent(
|
||||||
|
String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_ACCESS_ITEMS_UPDATED.getName();
|
||||||
|
created = Instant.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketCreatedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketCreatedEvent(String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_CREATED.getName();
|
||||||
|
created = workbasket.getCreated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketDeletedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketDeletedEvent(String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_DELETED.getName();
|
||||||
|
created = workbasket.getModified();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketDistributionTargetAddedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketDistributionTargetAddedEvent(
|
||||||
|
String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_DISTRIBUTION_TARGET_ADDED.getName();
|
||||||
|
created = Instant.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketDistributionTargetRemovedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketDistributionTargetRemovedEvent(
|
||||||
|
String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_DISTRIBUTION_TARGET_REMOVED.getName();
|
||||||
|
created = Instant.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketDistributionTargetsUpdatedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketDistributionTargetsUpdatedEvent(
|
||||||
|
String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_DISTRIBUTION_TARGETS_UPDATED.getName();
|
||||||
|
created = Instant.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,236 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketCustomField;
|
||||||
|
import pro.taskana.workbasket.api.models.WorkbasketSummary;
|
||||||
|
|
||||||
|
/** Super class for all workbasket related events. */
|
||||||
|
public class WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
protected String id;
|
||||||
|
protected String eventType;
|
||||||
|
protected Instant created;
|
||||||
|
protected String userId;
|
||||||
|
protected String domain;
|
||||||
|
protected String workbasketId;
|
||||||
|
protected String workbasketKey;
|
||||||
|
protected String workbasketType;
|
||||||
|
protected String owner;
|
||||||
|
protected String custom1;
|
||||||
|
protected String custom2;
|
||||||
|
protected String custom3;
|
||||||
|
protected String custom4;
|
||||||
|
protected String orgLevel1;
|
||||||
|
protected String orgLevel2;
|
||||||
|
protected String orgLevel3;
|
||||||
|
protected String orgLevel4;
|
||||||
|
protected String details;
|
||||||
|
|
||||||
|
public WorkbasketHistoryEvent() {}
|
||||||
|
|
||||||
|
public WorkbasketHistoryEvent(
|
||||||
|
String id, WorkbasketSummary workbasket, String userId, String details) {
|
||||||
|
this.id = id;
|
||||||
|
this.userId = userId;
|
||||||
|
this.details = details;
|
||||||
|
workbasketId = workbasket.getId();
|
||||||
|
domain = workbasket.getDomain();
|
||||||
|
workbasketKey = workbasket.getKey();
|
||||||
|
workbasketType = workbasket.getType().name();
|
||||||
|
owner = workbasket.getOwner();
|
||||||
|
custom1 = workbasket.getCustomAttribute(WorkbasketCustomField.CUSTOM_1);
|
||||||
|
custom2 = workbasket.getCustomAttribute(WorkbasketCustomField.CUSTOM_2);
|
||||||
|
custom3 = workbasket.getCustomAttribute(WorkbasketCustomField.CUSTOM_3);
|
||||||
|
custom4 = workbasket.getCustomAttribute(WorkbasketCustomField.CUSTOM_4);
|
||||||
|
orgLevel1 = workbasket.getOrgLevel1();
|
||||||
|
orgLevel2 = workbasket.getOrgLevel2();
|
||||||
|
orgLevel3 = workbasket.getOrgLevel3();
|
||||||
|
orgLevel4 = workbasket.getOrgLevel4();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEventType() {
|
||||||
|
return eventType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEventType(String eventType) {
|
||||||
|
this.eventType = eventType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Instant getCreated() {
|
||||||
|
return created;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCreated(Instant created) {
|
||||||
|
this.created = created;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserId() {
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserId(String userId) {
|
||||||
|
this.userId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDomain() {
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDomain(String domain) {
|
||||||
|
this.domain = domain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWorkbasketId() {
|
||||||
|
return workbasketId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkbasketId(String workbasketId) {
|
||||||
|
this.workbasketId = workbasketId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWorkbasketKey() {
|
||||||
|
return workbasketKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkbasketKey(String workbasketKey) {
|
||||||
|
this.workbasketKey = workbasketKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWorkbasketType() {
|
||||||
|
return workbasketType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWorkbasketType(String workbasketType) {
|
||||||
|
this.workbasketType = workbasketType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwner() {
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOwner(String owner) {
|
||||||
|
this.owner = owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
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 getOrgLevel1() {
|
||||||
|
return orgLevel1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrgLevel1(String orgLevel1) {
|
||||||
|
this.orgLevel1 = orgLevel1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOrgLevel2() {
|
||||||
|
return orgLevel2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrgLevel2(String orgLevel2) {
|
||||||
|
this.orgLevel2 = orgLevel2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOrgLevel3() {
|
||||||
|
return orgLevel3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrgLevel3(String orgLevel3) {
|
||||||
|
this.orgLevel3 = orgLevel3;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOrgLevel4() {
|
||||||
|
return orgLevel4;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrgLevel4(String orgLevel4) {
|
||||||
|
this.orgLevel4 = orgLevel4;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDetails() {
|
||||||
|
return details;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDetails(String details) {
|
||||||
|
this.details = details;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "WorkbasketEvent [id="
|
||||||
|
+ id
|
||||||
|
+ ", eventType="
|
||||||
|
+ eventType
|
||||||
|
+ ", created="
|
||||||
|
+ created
|
||||||
|
+ ", userId="
|
||||||
|
+ userId
|
||||||
|
+ ", domain="
|
||||||
|
+ domain
|
||||||
|
+ ", workbasketId="
|
||||||
|
+ workbasketId
|
||||||
|
+ ", workbasketKey="
|
||||||
|
+ workbasketKey
|
||||||
|
+ ", workbasketType="
|
||||||
|
+ workbasketType
|
||||||
|
+ ", owner="
|
||||||
|
+ owner
|
||||||
|
+ ", custom1="
|
||||||
|
+ custom1
|
||||||
|
+ ", custom2="
|
||||||
|
+ custom2
|
||||||
|
+ ", custom3="
|
||||||
|
+ custom3
|
||||||
|
+ ", custom4="
|
||||||
|
+ custom4
|
||||||
|
+ ", orgLevel1="
|
||||||
|
+ orgLevel1
|
||||||
|
+ ", orgLevel2="
|
||||||
|
+ orgLevel2
|
||||||
|
+ ", orgLevel3="
|
||||||
|
+ orgLevel3
|
||||||
|
+ ", orgLevel4="
|
||||||
|
+ orgLevel4
|
||||||
|
+ ", details="
|
||||||
|
+ details
|
||||||
|
+ "]";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
public enum WorkbasketHistoryEventType {
|
||||||
|
WORKBASKET_CREATED("WORKBASKET_CREATED"),
|
||||||
|
WORKBASKET_UPDATED("WORKBASKET_UPDATED"),
|
||||||
|
WORKBASKET_DELETED("WORKBASKET_DELETED"),
|
||||||
|
WORKBASKET_MARKED_FOR_DELETION("WORKBASKET_MARKED_FOR_DELETION"),
|
||||||
|
WORKBASKET_ACCESS_ITEM_CREATED("WORKBASKET_ACCESS_ITEM_CREATED"),
|
||||||
|
WORKBASKET_ACCESS_ITEM_UPDATED("WORKBASKET_ACCESS_ITEM_UPDATED"),
|
||||||
|
WORKBASKET_ACCESS_ITEM_DELETED("WORKBASKET_ACCESS_ITEM_DELETED"),
|
||||||
|
WORKBASKET_ACCESS_ITEMS_UPDATED("WORKBASKET_ACCESS_ITEMS_UPDATED"),
|
||||||
|
WORKBASKET_ACCESS_ITEM_DELETED_FOR_ACCESS_ID("WORKBASKET_ACCESS_ITEM_DELETED_FOR_ACCESS_ID"),
|
||||||
|
WORKBASKET_DISTRIBUTION_TARGET_ADDED("WORKBASKET_DISTRIBUTION_TARGET_ADDED"),
|
||||||
|
WORKBASKET_DISTRIBUTION_TARGET_REMOVED("WORKBASKET_DISTRIBUTION_TARGET_REMOVED"),
|
||||||
|
WORKBASKET_DISTRIBUTION_TARGETS_UPDATED("WORKBASKET_DISTRIBUTION_TARGETS_UPDATED");
|
||||||
|
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
WorkbasketHistoryEventType(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketMarkedForDeletionEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketMarkedForDeletionEvent(
|
||||||
|
String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_MARKED_FOR_DELETION.getName();
|
||||||
|
created = workbasket.getModified();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
package pro.taskana.spi.history.api.events.workbasket;
|
||||||
|
|
||||||
|
import pro.taskana.workbasket.api.models.Workbasket;
|
||||||
|
|
||||||
|
public class WorkbasketUpdatedEvent extends WorkbasketHistoryEvent {
|
||||||
|
|
||||||
|
public WorkbasketUpdatedEvent(String id, Workbasket workbasket, String userId, String details) {
|
||||||
|
super(id, workbasket, userId, details);
|
||||||
|
eventType = WorkbasketHistoryEventType.WORKBASKET_UPDATED.getName();
|
||||||
|
created = workbasket.getModified();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,7 +10,8 @@ import pro.taskana.common.api.TaskanaEngine;
|
||||||
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
import pro.taskana.common.api.exceptions.InvalidArgumentException;
|
||||||
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
import pro.taskana.common.api.exceptions.NotAuthorizedException;
|
||||||
import pro.taskana.spi.history.api.TaskanaHistory;
|
import pro.taskana.spi.history.api.TaskanaHistory;
|
||||||
import pro.taskana.spi.history.api.events.TaskanaHistoryEvent;
|
import pro.taskana.spi.history.api.events.task.TaskHistoryEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketHistoryEvent;
|
||||||
|
|
||||||
/** Creates and deletes events and emits them to the registered history service providers. */
|
/** Creates and deletes events and emits them to the registered history service providers. */
|
||||||
public final class HistoryEventManager {
|
public final class HistoryEventManager {
|
||||||
|
|
@ -43,7 +44,12 @@ public final class HistoryEventManager {
|
||||||
return Objects.nonNull(singleton) && singleton.enabled;
|
return Objects.nonNull(singleton) && singleton.enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createEvent(TaskanaHistoryEvent event) {
|
public void createEvent(TaskHistoryEvent event) {
|
||||||
|
LOGGER.debug("Sending event to history service providers: {}", event);
|
||||||
|
serviceLoader.forEach(historyProvider -> historyProvider.create(event));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void createEvent(WorkbasketHistoryEvent event) {
|
||||||
LOGGER.debug("Sending event to history service providers: {}", event);
|
LOGGER.debug("Sending event to history service providers: {}", event);
|
||||||
serviceLoader.forEach(historyProvider -> historyProvider.create(event));
|
serviceLoader.forEach(historyProvider -> historyProvider.create(event));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
package pro.taskana.task.internal;
|
package pro.taskana.task.internal;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
|
@ -11,13 +9,11 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Predicate;
|
import java.util.function.Predicate;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import org.apache.ibatis.exceptions.PersistenceException;
|
import org.apache.ibatis.exceptions.PersistenceException;
|
||||||
import org.json.JSONObject;
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
|
@ -35,17 +31,16 @@ import pro.taskana.common.api.exceptions.TaskanaException;
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||||
import pro.taskana.common.internal.security.CurrentUserContext;
|
import pro.taskana.common.internal.security.CurrentUserContext;
|
||||||
import pro.taskana.common.internal.util.CheckedConsumer;
|
import pro.taskana.common.internal.util.CheckedConsumer;
|
||||||
import pro.taskana.common.internal.util.CheckedFunction;
|
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
import pro.taskana.common.internal.util.IdGenerator;
|
||||||
|
import pro.taskana.common.internal.util.ObjectAttributeChangeDetector;
|
||||||
import pro.taskana.common.internal.util.Pair;
|
import pro.taskana.common.internal.util.Pair;
|
||||||
import pro.taskana.common.internal.util.Triplet;
|
import pro.taskana.spi.history.api.events.task.TaskCancelledEvent;
|
||||||
import pro.taskana.spi.history.api.events.task.CancelledEvent;
|
import pro.taskana.spi.history.api.events.task.TaskClaimCancelledEvent;
|
||||||
import pro.taskana.spi.history.api.events.task.ClaimCancelledEvent;
|
import pro.taskana.spi.history.api.events.task.TaskClaimedEvent;
|
||||||
import pro.taskana.spi.history.api.events.task.ClaimedEvent;
|
import pro.taskana.spi.history.api.events.task.TaskCompletedEvent;
|
||||||
import pro.taskana.spi.history.api.events.task.CompletedEvent;
|
import pro.taskana.spi.history.api.events.task.TaskCreatedEvent;
|
||||||
import pro.taskana.spi.history.api.events.task.CreatedEvent;
|
import pro.taskana.spi.history.api.events.task.TaskTerminatedEvent;
|
||||||
import pro.taskana.spi.history.api.events.task.TerminatedEvent;
|
import pro.taskana.spi.history.api.events.task.TaskUpdatedEvent;
|
||||||
import pro.taskana.spi.history.api.events.task.UpdatedEvent;
|
|
||||||
import pro.taskana.spi.history.internal.HistoryEventManager;
|
import pro.taskana.spi.history.internal.HistoryEventManager;
|
||||||
import pro.taskana.task.api.CallbackState;
|
import pro.taskana.task.api.CallbackState;
|
||||||
import pro.taskana.task.api.TaskCustomField;
|
import pro.taskana.task.api.TaskCustomField;
|
||||||
|
|
@ -233,9 +228,10 @@ public class TaskServiceImpl implements TaskService {
|
||||||
LOGGER.debug("Method createTask() created Task '{}'.", task.getId());
|
LOGGER.debug("Method createTask() created Task '{}'.", task.getId());
|
||||||
if (HistoryEventManager.isHistoryEnabled()) {
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
String details = determineChangesInTaskAttributes(newTask(), task);
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(newTask(), task);
|
||||||
historyEventManager.createEvent(
|
historyEventManager.createEvent(
|
||||||
new CreatedEvent(
|
new TaskCreatedEvent(
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
||||||
task,
|
task,
|
||||||
CurrentUserContext.getUserid(),
|
CurrentUserContext.getUserid(),
|
||||||
|
|
@ -440,10 +436,11 @@ public class TaskServiceImpl implements TaskService {
|
||||||
|
|
||||||
if (HistoryEventManager.isHistoryEnabled()) {
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
String changeDetails = determineChangesInTaskAttributes(oldTaskImpl, newTaskImpl);
|
String changeDetails =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(oldTaskImpl, newTaskImpl);
|
||||||
|
|
||||||
historyEventManager.createEvent(
|
historyEventManager.createEvent(
|
||||||
new UpdatedEvent(
|
new TaskUpdatedEvent(
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
||||||
task,
|
task,
|
||||||
CurrentUserContext.getUserid(),
|
CurrentUserContext.getUserid(),
|
||||||
|
|
@ -807,7 +804,7 @@ public class TaskServiceImpl implements TaskService {
|
||||||
|
|
||||||
if (HistoryEventManager.isHistoryEnabled()) {
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
historyEventManager.createEvent(
|
historyEventManager.createEvent(
|
||||||
new CancelledEvent(
|
new TaskCancelledEvent(
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
||||||
cancelledTask,
|
cancelledTask,
|
||||||
CurrentUserContext.getUserid()));
|
CurrentUserContext.getUserid()));
|
||||||
|
|
@ -835,7 +832,7 @@ public class TaskServiceImpl implements TaskService {
|
||||||
|
|
||||||
if (HistoryEventManager.isHistoryEnabled()) {
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
historyEventManager.createEvent(
|
historyEventManager.createEvent(
|
||||||
new TerminatedEvent(
|
new TaskTerminatedEvent(
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
||||||
terminatedTask,
|
terminatedTask,
|
||||||
CurrentUserContext.getUserid()));
|
CurrentUserContext.getUserid()));
|
||||||
|
|
@ -921,58 +918,6 @@ public class TaskServiceImpl implements TaskService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String determineChangesInTaskAttributes(Task oldTaskImpl, Task newTaskImpl) {
|
|
||||||
|
|
||||||
LOGGER.debug(
|
|
||||||
"Entry to determineChangesInTaskAttributes (oldTaskImpl = {}, newTaskImpl = {}",
|
|
||||||
oldTaskImpl,
|
|
||||||
newTaskImpl);
|
|
||||||
|
|
||||||
List<Field> fields = new ArrayList<>();
|
|
||||||
|
|
||||||
Class<?> currentClass = oldTaskImpl.getClass();
|
|
||||||
while (currentClass.getSuperclass() != null) {
|
|
||||||
fields.addAll(Arrays.asList(currentClass.getDeclaredFields()));
|
|
||||||
currentClass = currentClass.getSuperclass();
|
|
||||||
}
|
|
||||||
|
|
||||||
Predicate<Triplet<Field, Object, Object>> areFieldsNotEqual =
|
|
||||||
fieldAndValuePairTriplet ->
|
|
||||||
!Objects.equals(
|
|
||||||
fieldAndValuePairTriplet.getMiddle(), fieldAndValuePairTriplet.getRight());
|
|
||||||
Predicate<Triplet<Field, Object, Object>> isFieldNotCustomAttributes =
|
|
||||||
fieldAndValuePairTriplet ->
|
|
||||||
!fieldAndValuePairTriplet.getLeft().getName().equals("customAttributes");
|
|
||||||
|
|
||||||
List<JSONObject> changedAttributes =
|
|
||||||
fields.stream()
|
|
||||||
.peek(field -> field.setAccessible(true))
|
|
||||||
.map(
|
|
||||||
CheckedFunction.wrap(
|
|
||||||
field -> new Triplet<>(field, field.get(oldTaskImpl), field.get(newTaskImpl))))
|
|
||||||
.filter(areFieldsNotEqual.and(isFieldNotCustomAttributes))
|
|
||||||
.map(
|
|
||||||
fieldAndValuePairTriplet -> {
|
|
||||||
JSONObject changedAttribute = new JSONObject();
|
|
||||||
changedAttribute.put("fieldName", fieldAndValuePairTriplet.getLeft().getName());
|
|
||||||
changedAttribute.put(
|
|
||||||
"oldValue",
|
|
||||||
Optional.ofNullable(fieldAndValuePairTriplet.getMiddle()).orElse(""));
|
|
||||||
changedAttribute.put(
|
|
||||||
"newValue",
|
|
||||||
Optional.ofNullable(fieldAndValuePairTriplet.getRight()).orElse(""));
|
|
||||||
return changedAttribute;
|
|
||||||
})
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
JSONObject changes = new JSONObject();
|
|
||||||
changes.put("changes", changedAttributes);
|
|
||||||
|
|
||||||
LOGGER.debug("Exit from determineChangesInTaskAttributes()");
|
|
||||||
|
|
||||||
return changes.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
Pair<List<MinimalTaskSummary>, BulkLog> getMinimalTaskSummaries(List<String> argTaskIds) {
|
Pair<List<MinimalTaskSummary>, BulkLog> getMinimalTaskSummaries(List<String> argTaskIds) {
|
||||||
BulkLog bulkLog = new BulkLog();
|
BulkLog bulkLog = new BulkLog();
|
||||||
// remove duplicates
|
// remove duplicates
|
||||||
|
|
@ -1241,7 +1186,7 @@ public class TaskServiceImpl implements TaskService {
|
||||||
LOGGER.debug("Task '{}' claimed by user '{}'.", taskId, userId);
|
LOGGER.debug("Task '{}' claimed by user '{}'.", taskId, userId);
|
||||||
if (HistoryEventManager.isHistoryEnabled()) {
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
historyEventManager.createEvent(
|
historyEventManager.createEvent(
|
||||||
new ClaimedEvent(
|
new TaskClaimedEvent(
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
||||||
task,
|
task,
|
||||||
CurrentUserContext.getUserid()));
|
CurrentUserContext.getUserid()));
|
||||||
|
|
@ -1341,7 +1286,7 @@ public class TaskServiceImpl implements TaskService {
|
||||||
LOGGER.debug("Task '{}' unclaimed by user '{}'.", taskId, userId);
|
LOGGER.debug("Task '{}' unclaimed by user '{}'.", taskId, userId);
|
||||||
if (HistoryEventManager.isHistoryEnabled()) {
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
historyEventManager.createEvent(
|
historyEventManager.createEvent(
|
||||||
new ClaimCancelledEvent(
|
new TaskClaimCancelledEvent(
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
||||||
task,
|
task,
|
||||||
CurrentUserContext.getUserid()));
|
CurrentUserContext.getUserid()));
|
||||||
|
|
@ -1382,7 +1327,7 @@ public class TaskServiceImpl implements TaskService {
|
||||||
LOGGER.debug("Task '{}' completed by user '{}'.", taskId, userId);
|
LOGGER.debug("Task '{}' completed by user '{}'.", taskId, userId);
|
||||||
if (HistoryEventManager.isHistoryEnabled()) {
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
historyEventManager.createEvent(
|
historyEventManager.createEvent(
|
||||||
new CompletedEvent(
|
new TaskCompletedEvent(
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
||||||
task,
|
task,
|
||||||
CurrentUserContext.getUserid()));
|
CurrentUserContext.getUserid()));
|
||||||
|
|
@ -1957,7 +1902,7 @@ public class TaskServiceImpl implements TaskService {
|
||||||
taskSummaries.forEach(
|
taskSummaries.forEach(
|
||||||
task ->
|
task ->
|
||||||
historyEventManager.createEvent(
|
historyEventManager.createEvent(
|
||||||
new CompletedEvent(
|
new TaskCompletedEvent(
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
||||||
task,
|
task,
|
||||||
CurrentUserContext.getUserid())));
|
CurrentUserContext.getUserid())));
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ import pro.taskana.common.api.exceptions.TaskanaException;
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||||
import pro.taskana.common.internal.security.CurrentUserContext;
|
import pro.taskana.common.internal.security.CurrentUserContext;
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
import pro.taskana.common.internal.util.IdGenerator;
|
||||||
import pro.taskana.spi.history.api.events.task.TransferredEvent;
|
import pro.taskana.spi.history.api.events.task.TaskTransferredEvent;
|
||||||
import pro.taskana.spi.history.internal.HistoryEventManager;
|
import pro.taskana.spi.history.internal.HistoryEventManager;
|
||||||
import pro.taskana.task.api.TaskState;
|
import pro.taskana.task.api.TaskState;
|
||||||
import pro.taskana.task.api.exceptions.InvalidStateException;
|
import pro.taskana.task.api.exceptions.InvalidStateException;
|
||||||
|
|
@ -367,7 +367,7 @@ public class TaskTransferrer {
|
||||||
private void createTaskTransferredEvent(
|
private void createTaskTransferredEvent(
|
||||||
Task task, WorkbasketSummary oldWorkbasketSummary, WorkbasketSummary newWorkbasketSummary) {
|
Task task, WorkbasketSummary oldWorkbasketSummary, WorkbasketSummary newWorkbasketSummary) {
|
||||||
historyEventManager.createEvent(
|
historyEventManager.createEvent(
|
||||||
new TransferredEvent(
|
new TaskTransferredEvent(
|
||||||
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
IdGenerator.generateWithPrefix(ID_PREFIX_HISTORY_EVENT),
|
||||||
task,
|
task,
|
||||||
oldWorkbasketSummary,
|
oldWorkbasketSummary,
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,38 @@ public interface WorkbasketAccessMapper {
|
||||||
})
|
})
|
||||||
List<WorkbasketAccessItemImpl> findByWorkbasketId(@Param("id") String id);
|
List<WorkbasketAccessItemImpl> findByWorkbasketId(@Param("id") String id);
|
||||||
|
|
||||||
|
@Select(
|
||||||
|
"<script>SELECT WBA.ID, WORKBASKET_ID, WB.KEY, ACCESS_ID, ACCESS_NAME, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8, PERM_CUSTOM_9, PERM_CUSTOM_10, PERM_CUSTOM_11, PERM_CUSTOM_12 "
|
||||||
|
+ "FROM WORKBASKET_ACCESS_LIST AS WBA LEFT JOIN WORKBASKET AS WB ON WORKBASKET_ID = WB.ID WHERE ACCESS_ID = #{id} "
|
||||||
|
+ "<if test=\"_databaseId == 'db2'\">with UR </if> "
|
||||||
|
+ "</script>")
|
||||||
|
@Results(
|
||||||
|
value = {
|
||||||
|
@Result(property = "id", column = "ID"),
|
||||||
|
@Result(property = "workbasketId", column = "WORKBASKET_ID"),
|
||||||
|
@Result(property = "workbasketKey", column = "KEY"),
|
||||||
|
@Result(property = "accessId", column = "ACCESS_ID"),
|
||||||
|
@Result(property = "accessName", column = "ACCESS_NAME"),
|
||||||
|
@Result(property = "permRead", column = "PERM_READ"),
|
||||||
|
@Result(property = "permOpen", column = "PERM_OPEN"),
|
||||||
|
@Result(property = "permAppend", column = "PERM_APPEND"),
|
||||||
|
@Result(property = "permTransfer", column = "PERM_TRANSFER"),
|
||||||
|
@Result(property = "permDistribute", column = "PERM_DISTRIBUTE"),
|
||||||
|
@Result(property = "permCustom1", column = "PERM_CUSTOM_1"),
|
||||||
|
@Result(property = "permCustom2", column = "PERM_CUSTOM_2"),
|
||||||
|
@Result(property = "permCustom3", column = "PERM_CUSTOM_3"),
|
||||||
|
@Result(property = "permCustom4", column = "PERM_CUSTOM_4"),
|
||||||
|
@Result(property = "permCustom5", column = "PERM_CUSTOM_5"),
|
||||||
|
@Result(property = "permCustom6", column = "PERM_CUSTOM_6"),
|
||||||
|
@Result(property = "permCustom7", column = "PERM_CUSTOM_7"),
|
||||||
|
@Result(property = "permCustom8", column = "PERM_CUSTOM_8"),
|
||||||
|
@Result(property = "permCustom9", column = "PERM_CUSTOM_9"),
|
||||||
|
@Result(property = "permCustom10", column = "PERM_CUSTOM_10"),
|
||||||
|
@Result(property = "permCustom11", column = "PERM_CUSTOM_11"),
|
||||||
|
@Result(property = "permCustom12", column = "PERM_CUSTOM_12")
|
||||||
|
})
|
||||||
|
List<WorkbasketAccessItemImpl> findByAccessId(@Param("id") String id);
|
||||||
|
|
||||||
@Insert(
|
@Insert(
|
||||||
"INSERT INTO WORKBASKET_ACCESS_LIST (ID, WORKBASKET_ID, ACCESS_ID, ACCESS_NAME, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8, PERM_CUSTOM_9, PERM_CUSTOM_10, PERM_CUSTOM_11, PERM_CUSTOM_12) "
|
"INSERT INTO WORKBASKET_ACCESS_LIST (ID, WORKBASKET_ID, ACCESS_ID, ACCESS_NAME, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8, PERM_CUSTOM_9, PERM_CUSTOM_10, PERM_CUSTOM_11, PERM_CUSTOM_12) "
|
||||||
+ "VALUES (#{workbasketAccessItem.id}, #{workbasketAccessItem.workbasketId}, #{workbasketAccessItem.accessId}, #{workbasketAccessItem.accessName}, #{workbasketAccessItem.permRead}, #{workbasketAccessItem.permOpen}, #{workbasketAccessItem.permAppend}, #{workbasketAccessItem.permTransfer}, #{workbasketAccessItem.permDistribute}, #{workbasketAccessItem.permCustom1}, #{workbasketAccessItem.permCustom2}, #{workbasketAccessItem.permCustom3}, #{workbasketAccessItem.permCustom4}, #{workbasketAccessItem.permCustom5}, #{workbasketAccessItem.permCustom6}, #{workbasketAccessItem.permCustom7}, #{workbasketAccessItem.permCustom8}, #{workbasketAccessItem.permCustom9}, #{workbasketAccessItem.permCustom10}, #{workbasketAccessItem.permCustom11}, #{workbasketAccessItem.permCustom12})")
|
+ "VALUES (#{workbasketAccessItem.id}, #{workbasketAccessItem.workbasketId}, #{workbasketAccessItem.accessId}, #{workbasketAccessItem.accessName}, #{workbasketAccessItem.permRead}, #{workbasketAccessItem.permOpen}, #{workbasketAccessItem.permAppend}, #{workbasketAccessItem.permTransfer}, #{workbasketAccessItem.permDistribute}, #{workbasketAccessItem.permCustom1}, #{workbasketAccessItem.permCustom2}, #{workbasketAccessItem.permCustom3}, #{workbasketAccessItem.permCustom4}, #{workbasketAccessItem.permCustom5}, #{workbasketAccessItem.permCustom6}, #{workbasketAccessItem.permCustom7}, #{workbasketAccessItem.permCustom8}, #{workbasketAccessItem.permCustom9}, #{workbasketAccessItem.permCustom10}, #{workbasketAccessItem.permCustom11}, #{workbasketAccessItem.permCustom12})")
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,19 @@ import pro.taskana.common.api.exceptions.TaskanaException;
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||||
import pro.taskana.common.internal.security.CurrentUserContext;
|
import pro.taskana.common.internal.security.CurrentUserContext;
|
||||||
import pro.taskana.common.internal.util.IdGenerator;
|
import pro.taskana.common.internal.util.IdGenerator;
|
||||||
|
import pro.taskana.common.internal.util.ObjectAttributeChangeDetector;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketAccessItemCreatedEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketAccessItemDeletedEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketAccessItemUpdatedEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketAccessItemsUpdatedEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketCreatedEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketDeletedEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketDistributionTargetAddedEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketDistributionTargetRemovedEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketDistributionTargetsUpdatedEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketMarkedForDeletionEvent;
|
||||||
|
import pro.taskana.spi.history.api.events.workbasket.WorkbasketUpdatedEvent;
|
||||||
|
import pro.taskana.spi.history.internal.HistoryEventManager;
|
||||||
import pro.taskana.task.api.TaskState;
|
import pro.taskana.task.api.TaskState;
|
||||||
import pro.taskana.workbasket.api.WorkbasketAccessItemQuery;
|
import pro.taskana.workbasket.api.WorkbasketAccessItemQuery;
|
||||||
import pro.taskana.workbasket.api.WorkbasketPermission;
|
import pro.taskana.workbasket.api.WorkbasketPermission;
|
||||||
|
|
@ -46,10 +59,12 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketServiceImpl.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketServiceImpl.class);
|
||||||
private static final String ID_PREFIX_WORKBASKET = "WBI";
|
private static final String ID_PREFIX_WORKBASKET = "WBI";
|
||||||
private static final String ID_PREFIX_WORKBASKET_AUTHORIZATION = "WAI";
|
private static final String ID_PREFIX_WORKBASKET_AUTHORIZATION = "WAI";
|
||||||
|
private static final String ID_PREFIX_WORKBASKET_HISTORY_EVENT = "WHI";
|
||||||
private final InternalTaskanaEngine taskanaEngine;
|
private final InternalTaskanaEngine taskanaEngine;
|
||||||
private final WorkbasketMapper workbasketMapper;
|
private final WorkbasketMapper workbasketMapper;
|
||||||
private final DistributionTargetMapper distributionTargetMapper;
|
private final DistributionTargetMapper distributionTargetMapper;
|
||||||
private final WorkbasketAccessMapper workbasketAccessMapper;
|
private final WorkbasketAccessMapper workbasketAccessMapper;
|
||||||
|
private final HistoryEventManager historyEventManager;
|
||||||
|
|
||||||
public WorkbasketServiceImpl(
|
public WorkbasketServiceImpl(
|
||||||
InternalTaskanaEngine taskanaEngine,
|
InternalTaskanaEngine taskanaEngine,
|
||||||
|
|
@ -60,6 +75,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
this.workbasketMapper = workbasketMapper;
|
this.workbasketMapper = workbasketMapper;
|
||||||
this.distributionTargetMapper = distributionTargetMapper;
|
this.distributionTargetMapper = distributionTargetMapper;
|
||||||
this.workbasketAccessMapper = workbasketAccessMapper;
|
this.workbasketAccessMapper = workbasketAccessMapper;
|
||||||
|
this.historyEventManager = taskanaEngine.getHistoryEventManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -137,6 +153,19 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
validateWorkbasket(workbasket);
|
validateWorkbasket(workbasket);
|
||||||
|
|
||||||
workbasketMapper.insert(workbasket);
|
workbasketMapper.insert(workbasket);
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
newWorkbasket("", ""), newWorkbasket);
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketCreatedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
newWorkbasket,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
LOGGER.debug("Method createWorkbasket() created Workbasket '{}'", workbasket);
|
LOGGER.debug("Method createWorkbasket() created Workbasket '{}'", workbasket);
|
||||||
return workbasket;
|
return workbasket;
|
||||||
} finally {
|
} finally {
|
||||||
|
|
@ -176,6 +205,20 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
|
|
||||||
workbasketMapper.update(workbasketImplToUpdate);
|
workbasketMapper.update(workbasketImplToUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
oldWorkbasket, workbasketToUpdate);
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketUpdatedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
workbasketToUpdate,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"Method updateWorkbasket() updated workbasket '{}'", workbasketImplToUpdate.getId());
|
"Method updateWorkbasket() updated workbasket '{}'", workbasketImplToUpdate.getId());
|
||||||
|
|
||||||
|
|
@ -231,6 +274,20 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
workbasketAccessMapper.insert(accessItem);
|
workbasketAccessMapper.insert(accessItem);
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
newWorkbasketAccessItem("", ""), accessItem);
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketAccessItemCreatedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
wb,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"Method createWorkbasketAccessItem() created workbaskteAccessItem {}", accessItem);
|
"Method createWorkbasketAccessItem() created workbaskteAccessItem {}", accessItem);
|
||||||
} catch (PersistenceException e) {
|
} catch (PersistenceException e) {
|
||||||
|
|
@ -276,6 +333,22 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
}
|
}
|
||||||
|
|
||||||
workbasketAccessMapper.update(accessItem);
|
workbasketAccessMapper.update(accessItem);
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(originalItem, accessItem);
|
||||||
|
|
||||||
|
Workbasket workbasket = workbasketMapper.findById(accessItem.getWorkbasketId());
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketAccessItemUpdatedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
workbasket,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
|
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"Method updateWorkbasketAccessItem() updated workbasketAccessItem {}", accessItem);
|
"Method updateWorkbasketAccessItem() updated workbasketAccessItem {}", accessItem);
|
||||||
return accessItem;
|
return accessItem;
|
||||||
|
|
@ -292,7 +365,29 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
||||||
try {
|
try {
|
||||||
taskanaEngine.openConnection();
|
taskanaEngine.openConnection();
|
||||||
|
|
||||||
|
WorkbasketAccessItem accessItem = null;
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
accessItem = workbasketAccessMapper.findById(accessItemId);
|
||||||
|
}
|
||||||
|
|
||||||
workbasketAccessMapper.delete(accessItemId);
|
workbasketAccessMapper.delete(accessItemId);
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled() && accessItem != null) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
accessItem, newWorkbasketAccessItem("", ""));
|
||||||
|
Workbasket workbasket = workbasketMapper.findById(accessItem.getWorkbasketId());
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketAccessItemDeletedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
workbasket,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
|
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"Method deleteWorkbasketAccessItem() deleted workbasketAccessItem wit Id {}",
|
"Method deleteWorkbasketAccessItem() deleted workbasketAccessItem wit Id {}",
|
||||||
accessItemId);
|
accessItemId);
|
||||||
|
|
@ -433,44 +528,43 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
@Override
|
@Override
|
||||||
public void setWorkbasketAccessItems(
|
public void setWorkbasketAccessItems(
|
||||||
String workbasketId, List<WorkbasketAccessItem> wbAccessItems)
|
String workbasketId, List<WorkbasketAccessItem> wbAccessItems)
|
||||||
throws InvalidArgumentException, NotAuthorizedException,
|
throws NotAuthorizedException, WorkbasketAccessItemAlreadyExistException,
|
||||||
WorkbasketAccessItemAlreadyExistException {
|
InvalidArgumentException {
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"entry to setWorkbasketAccessItems(workbasketAccessItems = {})", wbAccessItems);
|
"entry to setWorkbasketAccessItems(workbasketAccessItems = {})", wbAccessItems);
|
||||||
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
||||||
|
|
||||||
Set<String> ids = new HashSet<>();
|
Set<String> ids = new HashSet<>();
|
||||||
Set<WorkbasketAccessItemImpl> accessItems = new HashSet<>();
|
Set<WorkbasketAccessItemImpl> accessItems =
|
||||||
for (WorkbasketAccessItem workbasketAccessItem : wbAccessItems) {
|
checkAccessItemsPreconditionsAndSetId(workbasketId, ids, wbAccessItems);
|
||||||
WorkbasketAccessItemImpl wbAccessItemImpl = (WorkbasketAccessItemImpl) workbasketAccessItem;
|
|
||||||
// Check pre-conditions and set ID
|
|
||||||
if (wbAccessItemImpl.getWorkbasketId() == null) {
|
|
||||||
throw new InvalidArgumentException(
|
|
||||||
String.format(
|
|
||||||
"Checking the preconditions of the current WorkbasketAccessItem failed "
|
|
||||||
+ "- WBID is NULL. WorkbasketAccessItem=%s",
|
|
||||||
workbasketAccessItem));
|
|
||||||
} else if (!wbAccessItemImpl.getWorkbasketId().equals(workbasketId)) {
|
|
||||||
throw new InvalidArgumentException(
|
|
||||||
String.format(
|
|
||||||
"Checking the preconditions of the current WorkbasketAccessItem failed "
|
|
||||||
+ "- the WBID does not match. Target-WBID=''%s'' WorkbasketAccessItem=%s",
|
|
||||||
workbasketId, workbasketAccessItem));
|
|
||||||
}
|
|
||||||
if (wbAccessItemImpl.getId() == null || wbAccessItemImpl.getId().isEmpty()) {
|
|
||||||
wbAccessItemImpl.setId(IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_AUTHORIZATION));
|
|
||||||
}
|
|
||||||
if (ids.contains(wbAccessItemImpl.getAccessId())) {
|
|
||||||
throw new WorkbasketAccessItemAlreadyExistException(wbAccessItemImpl);
|
|
||||||
}
|
|
||||||
ids.add(wbAccessItemImpl.getAccessId());
|
|
||||||
accessItems.add(wbAccessItemImpl);
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
taskanaEngine.openConnection();
|
taskanaEngine.openConnection();
|
||||||
|
|
||||||
|
List<WorkbasketAccessItemImpl> originalAccessItems = new ArrayList<>();
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
originalAccessItems = workbasketAccessMapper.findByWorkbasketId(workbasketId);
|
||||||
|
}
|
||||||
// delete all current ones
|
// delete all current ones
|
||||||
workbasketAccessMapper.deleteAllAccessItemsForWorkbasketId(workbasketId);
|
workbasketAccessMapper.deleteAllAccessItemsForWorkbasketId(workbasketId);
|
||||||
accessItems.forEach(workbasketAccessMapper::insert);
|
accessItems.forEach(workbasketAccessMapper::insert);
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
originalAccessItems, new ArrayList<>(accessItems));
|
||||||
|
|
||||||
|
Workbasket workbasket = workbasketMapper.findById(workbasketId);
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketAccessItemsUpdatedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
workbasket,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
taskanaEngine.returnConnection();
|
taskanaEngine.returnConnection();
|
||||||
LOGGER.debug("exit from setWorkbasketAccessItems(workbasketAccessItems = {})", wbAccessItems);
|
LOGGER.debug("exit from setWorkbasketAccessItems(workbasketAccessItems = {})", wbAccessItems);
|
||||||
|
|
@ -579,6 +673,13 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
taskanaEngine.openConnection();
|
taskanaEngine.openConnection();
|
||||||
// check existence of source workbasket
|
// check existence of source workbasket
|
||||||
WorkbasketImpl sourceWorkbasket = (WorkbasketImpl) getWorkbasket(sourceWorkbasketId);
|
WorkbasketImpl sourceWorkbasket = (WorkbasketImpl) getWorkbasket(sourceWorkbasketId);
|
||||||
|
|
||||||
|
List<String> originalTargetWorkbasketIds = new ArrayList<>();
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
originalTargetWorkbasketIds = distributionTargetMapper.findBySourceId(sourceWorkbasketId);
|
||||||
|
}
|
||||||
|
|
||||||
distributionTargetMapper.deleteAllDistributionTargetsBySourceId(sourceWorkbasketId);
|
distributionTargetMapper.deleteAllDistributionTargetsBySourceId(sourceWorkbasketId);
|
||||||
|
|
||||||
sourceWorkbasket.setModified(Instant.now());
|
sourceWorkbasket.setModified(Instant.now());
|
||||||
|
|
@ -595,7 +696,22 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
sourceWorkbasketId,
|
sourceWorkbasketId,
|
||||||
targetId);
|
targetId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled() && !targetWorkbasketIds.isEmpty()) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
originalTargetWorkbasketIds, targetWorkbasketIds);
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketDistributionTargetsUpdatedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
sourceWorkbasket,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
taskanaEngine.returnConnection();
|
taskanaEngine.returnConnection();
|
||||||
if (LOGGER.isDebugEnabled()) {
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
|
@ -631,6 +747,19 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
+ "distribution target exists already. Doing nothing.");
|
+ "distribution target exists already. Doing nothing.");
|
||||||
} else {
|
} else {
|
||||||
distributionTargetMapper.insert(sourceWorkbasketId, targetWorkbasketId);
|
distributionTargetMapper.insert(sourceWorkbasketId, targetWorkbasketId);
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
"{\"changes\":{\"newValue\":\"" + targetWorkbasketId + "\",\"oldValue\":\"\"}}";
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketDistributionTargetAddedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
sourceWorkbasket,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"addDistributionTarget inserted distribution target sourceId = {}, targetId = {}",
|
"addDistributionTarget inserted distribution target sourceId = {}, targetId = {}",
|
||||||
sourceWorkbasketId,
|
sourceWorkbasketId,
|
||||||
|
|
@ -663,6 +792,24 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
sourceWorkbasketId, targetWorkbasketId);
|
sourceWorkbasketId, targetWorkbasketId);
|
||||||
if (numberOfDistTargets > 0) {
|
if (numberOfDistTargets > 0) {
|
||||||
distributionTargetMapper.delete(sourceWorkbasketId, targetWorkbasketId);
|
distributionTargetMapper.delete(sourceWorkbasketId, targetWorkbasketId);
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
|
Workbasket workbasket = workbasketMapper.findById(sourceWorkbasketId);
|
||||||
|
|
||||||
|
if (workbasket != null) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
"{\"changes\":{\"newValue\":\"\",\"oldValue\":\"" + targetWorkbasketId + "\"}}";
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketDistributionTargetRemovedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
workbasket,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
|
}
|
||||||
LOGGER.debug(
|
LOGGER.debug(
|
||||||
"removeDistributionTarget deleted distribution target sourceId = {}, targetId = {}",
|
"removeDistributionTarget deleted distribution target sourceId = {}, targetId = {}",
|
||||||
sourceWorkbasketId,
|
sourceWorkbasketId,
|
||||||
|
|
@ -702,8 +849,9 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
try {
|
try {
|
||||||
taskanaEngine.openConnection();
|
taskanaEngine.openConnection();
|
||||||
|
|
||||||
|
Workbasket workbasketToDelete;
|
||||||
try {
|
try {
|
||||||
this.getWorkbasket(workbasketId);
|
workbasketToDelete = this.getWorkbasket(workbasketId);
|
||||||
} catch (WorkbasketNotFoundException ex) {
|
} catch (WorkbasketNotFoundException ex) {
|
||||||
LOGGER.debug("Workbasket with workbasketId = {} is already deleted?", workbasketId);
|
LOGGER.debug("Workbasket with workbasketId = {} is already deleted?", workbasketId);
|
||||||
throw ex;
|
throw ex;
|
||||||
|
|
@ -728,9 +876,24 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
if (canBeDeletedNow) {
|
if (canBeDeletedNow) {
|
||||||
workbasketMapper.delete(workbasketId);
|
workbasketMapper.delete(workbasketId);
|
||||||
deleteReferencesToWorkbasket(workbasketId);
|
deleteReferencesToWorkbasket(workbasketId);
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
workbasketToDelete, newWorkbasket("", ""));
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketDeletedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
workbasketToDelete,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
markWorkbasketForDeletion(workbasketId);
|
markWorkbasketForDeletion(workbasketId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return canBeDeletedNow;
|
return canBeDeletedNow;
|
||||||
} finally {
|
} finally {
|
||||||
taskanaEngine.returnConnection();
|
taskanaEngine.returnConnection();
|
||||||
|
|
@ -856,7 +1019,31 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
if (TaskanaEngineConfiguration.shouldUseLowerCaseForAccessIds() && accessId != null) {
|
if (TaskanaEngineConfiguration.shouldUseLowerCaseForAccessIds() && accessId != null) {
|
||||||
accessId = accessId.toLowerCase();
|
accessId = accessId.toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<WorkbasketAccessItemImpl> workbasketAccessItems = new ArrayList<>();
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
workbasketAccessItems = workbasketAccessMapper.findByAccessId(accessId);
|
||||||
|
}
|
||||||
workbasketAccessMapper.deleteAccessItemsForAccessId(accessId);
|
workbasketAccessMapper.deleteAccessItemsForAccessId(accessId);
|
||||||
|
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
|
for (WorkbasketAccessItemImpl workbasketAccessItem : workbasketAccessItems) {
|
||||||
|
|
||||||
|
String details =
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
workbasketAccessItem, new WorkbasketAccessItemImpl());
|
||||||
|
|
||||||
|
Workbasket workbasket = workbasketMapper.findById(workbasketAccessItem.getWorkbasketId());
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketAccessItemDeletedEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
workbasket,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
details));
|
||||||
|
}
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
taskanaEngine.returnConnection();
|
taskanaEngine.returnConnection();
|
||||||
LOGGER.debug("exit from deleteWorkbasketAccessItemsForAccessId(accessId={}).", accessId);
|
LOGGER.debug("exit from deleteWorkbasketAccessItemsForAccessId(accessId={}).", accessId);
|
||||||
|
|
@ -882,6 +1069,44 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Set<WorkbasketAccessItemImpl> checkAccessItemsPreconditionsAndSetId(
|
||||||
|
String workbasketId, Set<String> ids, List<WorkbasketAccessItem> wbAccessItems)
|
||||||
|
throws InvalidArgumentException, WorkbasketAccessItemAlreadyExistException {
|
||||||
|
|
||||||
|
Set<WorkbasketAccessItemImpl> accessItems = new HashSet<>();
|
||||||
|
|
||||||
|
for (WorkbasketAccessItem workbasketAccessItem : wbAccessItems) {
|
||||||
|
|
||||||
|
if (workbasketAccessItem != null) {
|
||||||
|
WorkbasketAccessItemImpl wbAccessItemImpl = (WorkbasketAccessItemImpl) workbasketAccessItem;
|
||||||
|
|
||||||
|
if (wbAccessItemImpl.getWorkbasketId() == null) {
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
String.format(
|
||||||
|
"Checking the preconditions of the current WorkbasketAccessItem failed "
|
||||||
|
+ "- WBID is NULL. WorkbasketAccessItem=%s",
|
||||||
|
workbasketAccessItem));
|
||||||
|
} else if (!wbAccessItemImpl.getWorkbasketId().equals(workbasketId)) {
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
String.format(
|
||||||
|
"Checking the preconditions of the current WorkbasketAccessItem failed "
|
||||||
|
+ "- the WBID does not match. Target-WBID=''%s'' WorkbasketAccessItem=%s",
|
||||||
|
workbasketId, workbasketAccessItem));
|
||||||
|
}
|
||||||
|
if (wbAccessItemImpl.getId() == null || wbAccessItemImpl.getId().isEmpty()) {
|
||||||
|
wbAccessItemImpl.setId(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_AUTHORIZATION));
|
||||||
|
}
|
||||||
|
if (ids.contains(wbAccessItemImpl.getAccessId())) {
|
||||||
|
throw new WorkbasketAccessItemAlreadyExistException(wbAccessItemImpl);
|
||||||
|
}
|
||||||
|
ids.add(wbAccessItemImpl.getAccessId());
|
||||||
|
accessItems.add(wbAccessItemImpl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return accessItems;
|
||||||
|
}
|
||||||
|
|
||||||
private void validateWorkbasketId(String workbasketId) throws InvalidArgumentException {
|
private void validateWorkbasketId(String workbasketId) throws InvalidArgumentException {
|
||||||
if (workbasketId == null) {
|
if (workbasketId == null) {
|
||||||
throw new InvalidArgumentException("The WorkbasketId can´t be NULL");
|
throw new InvalidArgumentException("The WorkbasketId can´t be NULL");
|
||||||
|
|
@ -981,6 +1206,15 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
WorkbasketImpl workbasket = workbasketMapper.findById(workbasketId);
|
WorkbasketImpl workbasket = workbasketMapper.findById(workbasketId);
|
||||||
workbasket.setMarkedForDeletion(true);
|
workbasket.setMarkedForDeletion(true);
|
||||||
workbasketMapper.update(workbasket);
|
workbasketMapper.update(workbasket);
|
||||||
|
if (HistoryEventManager.isHistoryEnabled()) {
|
||||||
|
|
||||||
|
historyEventManager.createEvent(
|
||||||
|
new WorkbasketMarkedForDeletionEvent(
|
||||||
|
IdGenerator.generateWithPrefix(ID_PREFIX_WORKBASKET_HISTORY_EVENT),
|
||||||
|
workbasket,
|
||||||
|
CurrentUserContext.getUserid(),
|
||||||
|
null));
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
taskanaEngine.returnConnection();
|
taskanaEngine.returnConnection();
|
||||||
LOGGER.debug("exit from markWorkbasketForDeletion(workbasketId = {}).", workbasketId);
|
LOGGER.debug("exit from markWorkbasketForDeletion(workbasketId = {}).", workbasketId);
|
||||||
|
|
|
||||||
|
|
@ -206,7 +206,7 @@ CREATE TABLE SCHEDULED_JOB(
|
||||||
PRIMARY KEY (JOB_ID)
|
PRIMARY KEY (JOB_ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE HISTORY_EVENTS
|
CREATE TABLE TASK_HISTORY_EVENT
|
||||||
(
|
(
|
||||||
ID VARCHAR(40) NOT NULL,
|
ID VARCHAR(40) NOT NULL,
|
||||||
BUSINESS_PROCESS_ID VARCHAR(128) NULL,
|
BUSINESS_PROCESS_ID VARCHAR(128) NULL,
|
||||||
|
|
@ -235,6 +235,29 @@ CREATE TABLE HISTORY_EVENTS
|
||||||
PRIMARY KEY (ID)
|
PRIMARY KEY (ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE WORKBASKET_HISTORY_EVENT
|
||||||
|
(
|
||||||
|
ID VARCHAR(40) NOT NULL,
|
||||||
|
EVENT_TYPE VARCHAR(40) NULL,
|
||||||
|
CREATED TIMESTAMP NULL,
|
||||||
|
USER_ID VARCHAR(32) NULL,
|
||||||
|
DOMAIN VARCHAR(32) NULL,
|
||||||
|
WORKBASKET_ID VARCHAR(40) NULL,
|
||||||
|
WORKBASKET_KEY VARCHAR(64) NULL,
|
||||||
|
WORKBASKET_TYPE VARCHAR(64) NULL,
|
||||||
|
OWNER VARCHAR(32) NULL,
|
||||||
|
CUSTOM_1 VARCHAR(128) NULL,
|
||||||
|
CUSTOM_2 VARCHAR(128) NULL,
|
||||||
|
CUSTOM_3 VARCHAR(128) NULL,
|
||||||
|
CUSTOM_4 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_1 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_2 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_3 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_4 VARCHAR(128) NULL,
|
||||||
|
DETAILS CLOB NULL,
|
||||||
|
PRIMARY KEY (ID)
|
||||||
|
);
|
||||||
|
|
||||||
CREATE SEQUENCE SCHEDULED_JOB_SEQ
|
CREATE SEQUENCE SCHEDULED_JOB_SEQ
|
||||||
MINVALUE 1
|
MINVALUE 1
|
||||||
START WITH 1
|
START WITH 1
|
||||||
|
|
|
||||||
|
|
@ -13,3 +13,8 @@ CALL SYSPROC.ADMIN_CMD ( 'REORG TABLE HISTORY_EVENTS allow read access' );
|
||||||
|
|
||||||
ALTER TABLE HISTORY_EVENTS ADD PRIMARY KEY (ID);
|
ALTER TABLE HISTORY_EVENTS ADD PRIMARY KEY (ID);
|
||||||
CALL SYSPROC.ADMIN_CMD ( 'REORG TABLE HISTORY_EVENTS allow read access' );
|
CALL SYSPROC.ADMIN_CMD ( 'REORG TABLE HISTORY_EVENTS allow read access' );
|
||||||
|
|
||||||
|
RENAME TABLE HISTORY_EVENTS TO TASK_HISTORY_EVENT;
|
||||||
|
|
||||||
|
UPDATE TASK_HISTORY_EVENT SET ID = REPLACE(ID,'HEI','THI') WHERE ID LIKE '%HEI%';
|
||||||
|
|
||||||
|
|
@ -209,7 +209,7 @@ CREATE TABLE SCHEDULED_JOB(
|
||||||
PRIMARY KEY (JOB_ID)
|
PRIMARY KEY (JOB_ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE HISTORY_EVENTS
|
CREATE TABLE TASK_HISTORY_EVENT
|
||||||
(
|
(
|
||||||
ID VARCHAR(40) NOT NULL,
|
ID VARCHAR(40) NOT NULL,
|
||||||
BUSINESS_PROCESS_ID VARCHAR(128) NULL,
|
BUSINESS_PROCESS_ID VARCHAR(128) NULL,
|
||||||
|
|
@ -238,6 +238,29 @@ CREATE TABLE HISTORY_EVENTS
|
||||||
PRIMARY KEY (ID)
|
PRIMARY KEY (ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE WORKBASKET_HISTORY_EVENT
|
||||||
|
(
|
||||||
|
ID VARCHAR(40) NOT NULL,
|
||||||
|
EVENT_TYPE VARCHAR(40) NULL,
|
||||||
|
CREATED TIMESTAMP NULL,
|
||||||
|
USER_ID VARCHAR(32) NULL,
|
||||||
|
DOMAIN VARCHAR(32) NULL,
|
||||||
|
WORKBASKET_ID VARCHAR(40) NULL,
|
||||||
|
WORKBASKET_KEY VARCHAR(64) NULL,
|
||||||
|
WORKBASKET_TYPE VARCHAR(64) NULL,
|
||||||
|
OWNER VARCHAR(32) NULL,
|
||||||
|
CUSTOM_1 VARCHAR(128) NULL,
|
||||||
|
CUSTOM_2 VARCHAR(128) NULL,
|
||||||
|
CUSTOM_3 VARCHAR(128) NULL,
|
||||||
|
CUSTOM_4 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_1 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_2 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_3 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_4 VARCHAR(128) NULL,
|
||||||
|
DETAILS CLOB NULL,
|
||||||
|
PRIMARY KEY (ID)
|
||||||
|
);
|
||||||
|
|
||||||
CREATE TABLE CONFIGURATION (
|
CREATE TABLE CONFIGURATION (
|
||||||
ENFORCE_SECURITY BOOLEAN NOT NULL
|
ENFORCE_SECURITY BOOLEAN NOT NULL
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -5,3 +5,9 @@ SET SCHEMA %schemaName%;
|
||||||
INSERT INTO TASKANA_SCHEMA_VERSION (VERSION, CREATED) VALUES ('4.0.0', CURRENT_TIMESTAMP);
|
INSERT INTO TASKANA_SCHEMA_VERSION (VERSION, CREATED) VALUES ('4.0.0', CURRENT_TIMESTAMP);
|
||||||
|
|
||||||
ALTER TABLE HISTORY_EVENTS ALTER COLUMN ID VARCHAR(40);
|
ALTER TABLE HISTORY_EVENTS ALTER COLUMN ID VARCHAR(40);
|
||||||
|
|
||||||
|
ALTER TABLE HISTORY_EVENTS RENAME TO TASK_HISTORY_EVENT;
|
||||||
|
|
||||||
|
UPDATE TASK_HISTORY_EVENT SET ID = REPLACE(ID,'HEI','THI') WHERE ID LIKE '%HEI%';
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -204,7 +204,7 @@ CREATE TABLE SCHEDULED_JOB(
|
||||||
PRIMARY KEY (JOB_ID)
|
PRIMARY KEY (JOB_ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE HISTORY_EVENTS
|
CREATE TABLE TASK_HISTORY_EVENT
|
||||||
(
|
(
|
||||||
ID VARCHAR(40) NOT NULL,
|
ID VARCHAR(40) NOT NULL,
|
||||||
BUSINESS_PROCESS_ID VARCHAR(128) NULL,
|
BUSINESS_PROCESS_ID VARCHAR(128) NULL,
|
||||||
|
|
@ -233,6 +233,31 @@ CREATE TABLE HISTORY_EVENTS
|
||||||
PRIMARY KEY (ID)
|
PRIMARY KEY (ID)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE WORKBASKET_HISTORY_EVENT
|
||||||
|
(
|
||||||
|
ID VARCHAR(40) NOT NULL,
|
||||||
|
WORKBASKET_ID VARCHAR(40) NULL,
|
||||||
|
EVENT_TYPE VARCHAR(40) NULL,
|
||||||
|
CREATED TIMESTAMP NULL,
|
||||||
|
USER_ID VARCHAR(32) NULL,
|
||||||
|
DOMAIN VARCHAR(32) NULL,
|
||||||
|
WORKBASKET_KEY VARCHAR(64) NULL,
|
||||||
|
WORKBASKET_TYPE VARCHAR(64) NULL,
|
||||||
|
OWNER VARCHAR(32) NULL,
|
||||||
|
OLD_VALUE VARCHAR(255) NULL,
|
||||||
|
NEW_VALUE VARCHAR(255) NULL,
|
||||||
|
CUSTOM_1 VARCHAR(128) NULL,
|
||||||
|
CUSTOM_2 VARCHAR(128) NULL,
|
||||||
|
CUSTOM_3 VARCHAR(128) NULL,
|
||||||
|
CUSTOM_4 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_1 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_2 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_3 VARCHAR(128) NULL,
|
||||||
|
ORGLEVEL_4 VARCHAR(128) NULL,
|
||||||
|
DETAILS TEXT NULL,
|
||||||
|
PRIMARY KEY (ID)
|
||||||
|
);
|
||||||
|
|
||||||
CREATE TABLE CONFIGURATION (
|
CREATE TABLE CONFIGURATION (
|
||||||
ENFORCE_SECURITY BOOLEAN NOT NULL
|
ENFORCE_SECURITY BOOLEAN NOT NULL
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -7,3 +7,7 @@ INSERT INTO TASKANA_SCHEMA_VERSION (VERSION, CREATED) VALUES ('4.0.0', CURRENT_T
|
||||||
ALTER TABLE HISTORY_EVENTS ALTER COLUMN ID DROP IDENTITY;
|
ALTER TABLE HISTORY_EVENTS ALTER COLUMN ID DROP IDENTITY;
|
||||||
|
|
||||||
ALTER TABLE HISTORY_EVENTS ALTER COLUMN ID TYPE VARCHAR(40);
|
ALTER TABLE HISTORY_EVENTS ALTER COLUMN ID TYPE VARCHAR(40);
|
||||||
|
|
||||||
|
ALTER TABLE HISTORY_EVENTS RENAME TO TASK_HISTORY_EVENT;
|
||||||
|
|
||||||
|
UPDATE TASK_HISTORY_EVENT SET ID = REPLACE(ID,'HEI','THI') WHERE ID LIKE '%HEI%';
|
||||||
|
|
@ -162,6 +162,8 @@ class ArchitectureTest {
|
||||||
.that()
|
.that()
|
||||||
.haveNameNotMatching(".*TaskanaEngine.*")
|
.haveNameNotMatching(".*TaskanaEngine.*")
|
||||||
.and()
|
.and()
|
||||||
|
.haveSimpleNameNotEndingWith("ObjectAttributeChangeDetectorTest")
|
||||||
|
.and()
|
||||||
.haveSimpleNameNotEndingWith("AbstractTaskanaJob")
|
.haveSimpleNameNotEndingWith("AbstractTaskanaJob")
|
||||||
.and()
|
.and()
|
||||||
.resideInAPackage("..common..")
|
.resideInAPackage("..common..")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,277 @@
|
||||||
|
package pro.taskana.common.internal.util;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.json.JSONArray;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import pro.taskana.task.api.CallbackState;
|
||||||
|
import pro.taskana.task.internal.models.TaskImpl;
|
||||||
|
import pro.taskana.workbasket.api.WorkbasketType;
|
||||||
|
import pro.taskana.workbasket.internal.models.WorkbasketAccessItemImpl;
|
||||||
|
import pro.taskana.workbasket.internal.models.WorkbasketImpl;
|
||||||
|
|
||||||
|
class ObjectAttributeChangeDetectorTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_DetermineDifferences_When_ComparingEmptyTaskWithNonEmptyTask() {
|
||||||
|
|
||||||
|
TaskImpl newTask = new TaskImpl();
|
||||||
|
newTask.setOwner("new Owner");
|
||||||
|
newTask.setCreator("new Creator");
|
||||||
|
newTask.setId("new ID");
|
||||||
|
newTask.setCreated(Instant.now());
|
||||||
|
newTask.setModified(Instant.now());
|
||||||
|
newTask.setClassificationKey("new ClassificationKey");
|
||||||
|
newTask.setWorkbasketKey("new WorkbasketKey");
|
||||||
|
newTask.setBusinessProcessId("new BusinessProcessId");
|
||||||
|
newTask.setCallbackState(CallbackState.CALLBACK_PROCESSING_REQUIRED);
|
||||||
|
|
||||||
|
TaskImpl oldTask = new TaskImpl();
|
||||||
|
|
||||||
|
JSONArray changedAttributes =
|
||||||
|
new JSONObject(ObjectAttributeChangeDetector.determineChangesInAttributes(oldTask, newTask))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(9);
|
||||||
|
|
||||||
|
changedAttributes =
|
||||||
|
new JSONObject(ObjectAttributeChangeDetector.determineChangesInAttributes(newTask, oldTask))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(9);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_DetermineDifferences_When_ComparingTasks() {
|
||||||
|
|
||||||
|
TaskImpl oldTask = new TaskImpl();
|
||||||
|
oldTask.setOwner("old Owner");
|
||||||
|
oldTask.setCreator("old Creator");
|
||||||
|
oldTask.setId("old ID");
|
||||||
|
oldTask.setCreated(Instant.now().minusMillis(100));
|
||||||
|
oldTask.setModified(Instant.now().minusMillis(100));
|
||||||
|
oldTask.setClassificationKey("old ClassificationKey");
|
||||||
|
oldTask.setWorkbasketKey("old WorkbasketKey");
|
||||||
|
oldTask.setBusinessProcessId("old BusinessProcessId");
|
||||||
|
oldTask.setCallbackState(CallbackState.NONE);
|
||||||
|
|
||||||
|
TaskImpl newTask = new TaskImpl();
|
||||||
|
newTask.setOwner("new Owner");
|
||||||
|
newTask.setCreator("new Creator");
|
||||||
|
newTask.setId("old ID");
|
||||||
|
newTask.setCreated(Instant.now());
|
||||||
|
newTask.setModified(Instant.now());
|
||||||
|
newTask.setClassificationKey("new ClassificationKey");
|
||||||
|
newTask.setWorkbasketKey("new WorkbasketKey");
|
||||||
|
newTask.setBusinessProcessId("new BusinessProcessId");
|
||||||
|
newTask.setCallbackState(CallbackState.CALLBACK_PROCESSING_REQUIRED);
|
||||||
|
|
||||||
|
JSONArray changedAttributes =
|
||||||
|
new JSONObject(ObjectAttributeChangeDetector.determineChangesInAttributes(oldTask, newTask))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(8);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_IgnoreDifferencesInCustomAttributes_When_CustomAttributesHaveChanged() {
|
||||||
|
|
||||||
|
TaskImpl oldTask = new TaskImpl();
|
||||||
|
oldTask.setOwner("old Owner");
|
||||||
|
oldTask.setCreator("old Creator");
|
||||||
|
|
||||||
|
TaskImpl newTask = new TaskImpl();
|
||||||
|
newTask.setOwner("new Owner");
|
||||||
|
newTask.setCreator("new Creator");
|
||||||
|
|
||||||
|
Map<String, String> customAttriutes = new HashMap<>();
|
||||||
|
customAttriutes.put("new key", "new value");
|
||||||
|
newTask.setCustomAttributes(customAttriutes);
|
||||||
|
|
||||||
|
JSONArray changedAttributes =
|
||||||
|
new JSONObject(ObjectAttributeChangeDetector.determineChangesInAttributes(oldTask, newTask))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_DetermineDifferences_When_ComparingWorkbaskets() {
|
||||||
|
|
||||||
|
Instant created = Instant.now();
|
||||||
|
|
||||||
|
WorkbasketImpl oldWorkbasket = new WorkbasketImpl();
|
||||||
|
oldWorkbasket.setId("oldWbId");
|
||||||
|
oldWorkbasket.setKey("oldWbKey");
|
||||||
|
oldWorkbasket.setDomain("oldWbDomain");
|
||||||
|
oldWorkbasket.setCreated(created.minus(10, ChronoUnit.SECONDS));
|
||||||
|
oldWorkbasket.setModified(created.minus(5, ChronoUnit.SECONDS));
|
||||||
|
oldWorkbasket.setName("oldWb");
|
||||||
|
oldWorkbasket.setType(WorkbasketType.PERSONAL);
|
||||||
|
oldWorkbasket.setOrgLevel1("oworgLevel1");
|
||||||
|
oldWorkbasket.setCustom1("owcustom1");
|
||||||
|
oldWorkbasket.setOrgLevel2("oworgLevel2");
|
||||||
|
oldWorkbasket.setCustom2("owcustom2");
|
||||||
|
oldWorkbasket.setOrgLevel3("oworgLevel3");
|
||||||
|
oldWorkbasket.setCustom3("owcustom3");
|
||||||
|
oldWorkbasket.setOrgLevel4("oworgLevel4");
|
||||||
|
oldWorkbasket.setCustom4("owcustom4");
|
||||||
|
|
||||||
|
WorkbasketImpl newWorkbasket = new WorkbasketImpl();
|
||||||
|
newWorkbasket.setId("newWbId");
|
||||||
|
newWorkbasket.setKey("newWbKey");
|
||||||
|
newWorkbasket.setDomain("oldWbDomain");
|
||||||
|
newWorkbasket.setName("newWb");
|
||||||
|
newWorkbasket.setCreated(created.minus(10, ChronoUnit.SECONDS));
|
||||||
|
newWorkbasket.setModified(created.minus(2, ChronoUnit.SECONDS));
|
||||||
|
newWorkbasket.setType(WorkbasketType.GROUP);
|
||||||
|
newWorkbasket.setOrgLevel1("nworgLevel1");
|
||||||
|
newWorkbasket.setCustom1("nwcustom1");
|
||||||
|
newWorkbasket.setOrgLevel2("nworgLevel2");
|
||||||
|
newWorkbasket.setCustom2("nwcustom2");
|
||||||
|
newWorkbasket.setOrgLevel3("nworgLevel3");
|
||||||
|
newWorkbasket.setCustom3("nwcustom3");
|
||||||
|
newWorkbasket.setOrgLevel4("nworgLevel4");
|
||||||
|
newWorkbasket.setCustom4("nwcustom4");
|
||||||
|
|
||||||
|
JSONArray changedAttributes =
|
||||||
|
new JSONObject(
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
oldWorkbasket, newWorkbasket))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(13);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_DetermineDifferences_When_ComparingEmptyWorkbasketWithNonEmptyWorkbasket() {
|
||||||
|
|
||||||
|
Instant created = Instant.now();
|
||||||
|
|
||||||
|
WorkbasketImpl oldWorkbasket = new WorkbasketImpl();
|
||||||
|
|
||||||
|
WorkbasketImpl newWorkbasket = new WorkbasketImpl();
|
||||||
|
newWorkbasket.setId("newWbId");
|
||||||
|
newWorkbasket.setKey("newWbKey");
|
||||||
|
newWorkbasket.setDomain("newWbDomain");
|
||||||
|
newWorkbasket.setName("newWb");
|
||||||
|
newWorkbasket.setCreated(created.minus(10, ChronoUnit.SECONDS));
|
||||||
|
newWorkbasket.setModified(created.minus(2, ChronoUnit.SECONDS));
|
||||||
|
newWorkbasket.setType(WorkbasketType.PERSONAL);
|
||||||
|
newWorkbasket.setOrgLevel1("nworgLevel1");
|
||||||
|
newWorkbasket.setCustom1("nwcustom1");
|
||||||
|
newWorkbasket.setOrgLevel2("nworgLevel2");
|
||||||
|
newWorkbasket.setCustom2("nwcustom2");
|
||||||
|
newWorkbasket.setOrgLevel3("nworgLevel3");
|
||||||
|
newWorkbasket.setCustom3("nwcustom3");
|
||||||
|
newWorkbasket.setOrgLevel4("nworgLevel4");
|
||||||
|
newWorkbasket.setCustom4("nwcustom4");
|
||||||
|
|
||||||
|
JSONArray changedAttributes =
|
||||||
|
new JSONObject(
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
oldWorkbasket, newWorkbasket))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(15);
|
||||||
|
|
||||||
|
changedAttributes =
|
||||||
|
new JSONObject(
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
newWorkbasket, oldWorkbasket))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(15);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_DetermineDifferences_When_ComparingWorkbasketAccessItems() {
|
||||||
|
|
||||||
|
WorkbasketAccessItemImpl oldWorkbasketAccessItem = new WorkbasketAccessItemImpl();
|
||||||
|
oldWorkbasketAccessItem.setId("oldId");
|
||||||
|
oldWorkbasketAccessItem.setAccessId("oldAccessId");
|
||||||
|
oldWorkbasketAccessItem.setWorkbasketId("oldWorkbasketId");
|
||||||
|
|
||||||
|
WorkbasketAccessItemImpl newWorkbasketAccessItem = new WorkbasketAccessItemImpl();
|
||||||
|
newWorkbasketAccessItem.setId("newId");
|
||||||
|
newWorkbasketAccessItem.setAccessId("oldAccessId");
|
||||||
|
newWorkbasketAccessItem.setWorkbasketId("newWorkbasketId");
|
||||||
|
|
||||||
|
JSONArray changedAttributes =
|
||||||
|
new JSONObject(
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
oldWorkbasketAccessItem, newWorkbasketAccessItem))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_DetermineDifferences_When_ComparingEmptyWorkbasketAccessItemWithNonEmptyWai() {
|
||||||
|
|
||||||
|
WorkbasketAccessItemImpl oldWorkbasketAccessItem = new WorkbasketAccessItemImpl();
|
||||||
|
oldWorkbasketAccessItem.setId("oldId");
|
||||||
|
oldWorkbasketAccessItem.setAccessId("oldAccessId");
|
||||||
|
oldWorkbasketAccessItem.setWorkbasketId("oldWorkbasketId");
|
||||||
|
|
||||||
|
WorkbasketAccessItemImpl newWorkbasketAccessItem = new WorkbasketAccessItemImpl();
|
||||||
|
|
||||||
|
JSONArray changedAttributes =
|
||||||
|
new JSONObject(
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
oldWorkbasketAccessItem, newWorkbasketAccessItem))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(3);
|
||||||
|
|
||||||
|
changedAttributes =
|
||||||
|
new JSONObject(
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
newWorkbasketAccessItem, oldWorkbasketAccessItem))
|
||||||
|
.getJSONArray("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes).hasSize(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void should_DetermineDifferences_When_ComparingLists() {
|
||||||
|
|
||||||
|
List<WorkbasketAccessItemImpl> accessitems1 = new ArrayList<>();
|
||||||
|
|
||||||
|
WorkbasketAccessItemImpl workbasketAccessItem = new WorkbasketAccessItemImpl();
|
||||||
|
accessitems1.add(workbasketAccessItem);
|
||||||
|
|
||||||
|
WorkbasketAccessItemImpl workbasketAccessItem2 = new WorkbasketAccessItemImpl();
|
||||||
|
accessitems1.add(workbasketAccessItem2);
|
||||||
|
|
||||||
|
WorkbasketAccessItemImpl workbasketAccessItem3 = new WorkbasketAccessItemImpl();
|
||||||
|
accessitems1.add(workbasketAccessItem3);
|
||||||
|
|
||||||
|
List<WorkbasketAccessItemImpl> accessitems2 = new ArrayList<>();
|
||||||
|
|
||||||
|
WorkbasketAccessItemImpl workbasketAccessItem4 = new WorkbasketAccessItemImpl();
|
||||||
|
workbasketAccessItem4.setId("WAI:1000000000000000000000000000000001");
|
||||||
|
accessitems2.add(workbasketAccessItem4);
|
||||||
|
|
||||||
|
WorkbasketAccessItemImpl workbasketAccessItem5 = new WorkbasketAccessItemImpl();
|
||||||
|
workbasketAccessItem5.setId("WAI:1000000000000000000000000000000002");
|
||||||
|
accessitems2.add(workbasketAccessItem5);
|
||||||
|
|
||||||
|
JSONObject changedAttributes =
|
||||||
|
new JSONObject(
|
||||||
|
ObjectAttributeChangeDetector.determineChangesInAttributes(
|
||||||
|
accessitems1, accessitems2))
|
||||||
|
.getJSONObject("changes");
|
||||||
|
|
||||||
|
assertThat(changedAttributes.getJSONArray("newValue")).hasSize(2);
|
||||||
|
assertThat(changedAttributes.getJSONArray("oldValue")).hasSize(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,11 +3,6 @@ package pro.taskana.task.internal;
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import org.json.JSONArray;
|
|
||||||
import org.json.JSONObject;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
@ -18,7 +13,6 @@ import pro.taskana.classification.api.models.Classification;
|
||||||
import pro.taskana.classification.internal.ClassificationServiceImpl;
|
import pro.taskana.classification.internal.ClassificationServiceImpl;
|
||||||
import pro.taskana.common.api.TaskanaEngine;
|
import pro.taskana.common.api.TaskanaEngine;
|
||||||
import pro.taskana.common.internal.InternalTaskanaEngine;
|
import pro.taskana.common.internal.InternalTaskanaEngine;
|
||||||
import pro.taskana.task.api.CallbackState;
|
|
||||||
import pro.taskana.task.api.models.ObjectReference;
|
import pro.taskana.task.api.models.ObjectReference;
|
||||||
import pro.taskana.task.api.models.TaskSummary;
|
import pro.taskana.task.api.models.TaskSummary;
|
||||||
import pro.taskana.task.internal.models.TaskImpl;
|
import pro.taskana.task.internal.models.TaskImpl;
|
||||||
|
|
@ -59,83 +53,6 @@ class TaskServiceImplTest {
|
||||||
internalTaskanaEngineMock, taskMapperMock, taskCommentMapperMock, attachmentMapperMock);
|
internalTaskanaEngineMock, taskMapperMock, taskCommentMapperMock, attachmentMapperMock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_DetermineDifferences_When_ComparingEmptyTaskWithNonEmptyTask() {
|
|
||||||
|
|
||||||
TaskImpl oldTask = (TaskImpl) cut.newTask();
|
|
||||||
|
|
||||||
TaskImpl newTask = (TaskImpl) cut.newTask();
|
|
||||||
newTask.setOwner("new Owner");
|
|
||||||
newTask.setCreator("new Creator");
|
|
||||||
newTask.setId("new ID");
|
|
||||||
newTask.setCreated(Instant.now());
|
|
||||||
newTask.setModified(Instant.now());
|
|
||||||
newTask.setClassificationKey("new ClassificationKey");
|
|
||||||
newTask.setWorkbasketKey("new WorkbasketKey");
|
|
||||||
newTask.setBusinessProcessId("new BusinessProcessId");
|
|
||||||
newTask.setCallbackState(CallbackState.CALLBACK_PROCESSING_REQUIRED);
|
|
||||||
|
|
||||||
JSONArray changedAttributes =
|
|
||||||
new JSONObject(cut.determineChangesInTaskAttributes(oldTask, newTask))
|
|
||||||
.getJSONArray("changes");
|
|
||||||
|
|
||||||
assertThat(changedAttributes).hasSize(9);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_DetermineDifferences_When_ComparingNonEmptyTaskWithNonEmptyTask() {
|
|
||||||
|
|
||||||
TaskImpl oldTask = (TaskImpl) cut.newTask();
|
|
||||||
oldTask.setOwner("old Owner");
|
|
||||||
oldTask.setCreator("old Creator");
|
|
||||||
oldTask.setId("old ID");
|
|
||||||
oldTask.setCreated(Instant.now().minusMillis(100));
|
|
||||||
oldTask.setModified(Instant.now().minusMillis(100));
|
|
||||||
oldTask.setClassificationKey("old ClassificationKey");
|
|
||||||
oldTask.setWorkbasketKey("old WorkbasketKey");
|
|
||||||
oldTask.setBusinessProcessId("old BusinessProcessId");
|
|
||||||
oldTask.setCallbackState(CallbackState.NONE);
|
|
||||||
|
|
||||||
TaskImpl newTask = (TaskImpl) cut.newTask();
|
|
||||||
newTask.setOwner("new Owner");
|
|
||||||
newTask.setCreator("new Creator");
|
|
||||||
newTask.setId("new ID");
|
|
||||||
newTask.setCreated(Instant.now());
|
|
||||||
newTask.setModified(Instant.now());
|
|
||||||
newTask.setClassificationKey("new ClassificationKey");
|
|
||||||
newTask.setWorkbasketKey("new WorkbasketKey");
|
|
||||||
newTask.setBusinessProcessId("new BusinessProcessId");
|
|
||||||
newTask.setCallbackState(CallbackState.CALLBACK_PROCESSING_REQUIRED);
|
|
||||||
|
|
||||||
JSONArray changedAttributes =
|
|
||||||
new JSONObject(cut.determineChangesInTaskAttributes(oldTask, newTask))
|
|
||||||
.getJSONArray("changes");
|
|
||||||
|
|
||||||
assertThat(changedAttributes).hasSize(9);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
void should_IgnoreDifferencesInCustomAttributes_When_CustomAttributesHaveChanged() {
|
|
||||||
|
|
||||||
TaskImpl oldTask = (TaskImpl) cut.newTask();
|
|
||||||
oldTask.setOwner("old Owner");
|
|
||||||
oldTask.setCreator("old Creator");
|
|
||||||
|
|
||||||
TaskImpl newTask = (TaskImpl) cut.newTask();
|
|
||||||
newTask.setOwner("new Owner");
|
|
||||||
newTask.setCreator("new Creator");
|
|
||||||
|
|
||||||
Map<String, String> customAttriutes = new HashMap<>();
|
|
||||||
customAttriutes.put("new key", "new value");
|
|
||||||
newTask.setCustomAttributeMap(customAttriutes);
|
|
||||||
|
|
||||||
JSONArray changedAttributes =
|
|
||||||
new JSONObject(cut.determineChangesInTaskAttributes(oldTask, newTask))
|
|
||||||
.getJSONArray("changes");
|
|
||||||
|
|
||||||
assertThat(changedAttributes).hasSize(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testTaskSummaryEqualsHashCode() throws Exception {
|
void testTaskSummaryEqualsHashCode() throws Exception {
|
||||||
Classification classification = CreateTaskModelHelper.createDummyClassification();
|
Classification classification = CreateTaskModelHelper.createDummyClassification();
|
||||||
|
|
|
||||||
|
|
@ -95,6 +95,7 @@ class WorkbasketServiceImplTest {
|
||||||
verify(taskanaEngine, times(4)).checkRoleMembership(any());
|
verify(taskanaEngine, times(4)).checkRoleMembership(any());
|
||||||
verify(internalTaskanaEngineMock, times(4)).getEngine();
|
verify(internalTaskanaEngineMock, times(4)).getEngine();
|
||||||
verify(internalTaskanaEngineMock, times(3)).domainExists(any());
|
verify(internalTaskanaEngineMock, times(3)).domainExists(any());
|
||||||
|
verify(internalTaskanaEngineMock, times(1)).getHistoryEventManager();
|
||||||
verifyNoMoreInteractions(
|
verifyNoMoreInteractions(
|
||||||
taskQueryMock,
|
taskQueryMock,
|
||||||
taskServiceMock,
|
taskServiceMock,
|
||||||
|
|
@ -141,6 +142,8 @@ class WorkbasketServiceImplTest {
|
||||||
verify(distributionTargetMapperMock)
|
verify(distributionTargetMapperMock)
|
||||||
.deleteAllDistributionTargetsBySourceId(eq(expectedWb.getId()));
|
.deleteAllDistributionTargetsBySourceId(eq(expectedWb.getId()));
|
||||||
verify(workbasketMapperMock).update(eq(expectedWb));
|
verify(workbasketMapperMock).update(eq(expectedWb));
|
||||||
|
verify(internalTaskanaEngineMock, times(1)).getHistoryEventManager();
|
||||||
|
|
||||||
verifyNoMoreInteractions(
|
verifyNoMoreInteractions(
|
||||||
taskQueryMock,
|
taskQueryMock,
|
||||||
taskServiceMock,
|
taskServiceMock,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
-- the order is important!
|
-- the order is important!
|
||||||
DELETE FROM TASK_COMMENT;
|
DELETE FROM TASK_COMMENT;
|
||||||
DELETE FROM HISTORY_EVENTS;
|
|
||||||
DELETE FROM CONFIGURATION;
|
DELETE FROM CONFIGURATION;
|
||||||
|
DELETE FROM TASK_HISTORY_EVENT;
|
||||||
|
DELETE FROM WORKBASKET_HISTORY_EVENT;
|
||||||
DELETE FROM ATTACHMENT;
|
DELETE FROM ATTACHMENT;
|
||||||
DELETE FROM TASK;
|
DELETE FROM TASK;
|
||||||
DELETE FROM WORKBASKET_ACCESS_LIST;
|
DELETE FROM WORKBASKET_ACCESS_LIST;
|
||||||
|
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
DELETE FROM HISTORY_EVENTS;
|
|
||||||
COMMIT;
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
DROP TABLE TASKANA_SCHEMA_VERSION;
|
DROP TABLE TASKANA_SCHEMA_VERSION;
|
||||||
DROP TABLE TASK_COMMENT;
|
DROP TABLE TASK_COMMENT;
|
||||||
|
DROP TABLE TASK_HISTORY_EVENT;
|
||||||
|
DROP TABLE WORKBASKET_HISTORY_EVENT;
|
||||||
DROP TABLE CONFIGURATION;
|
DROP TABLE CONFIGURATION;
|
||||||
DROP TABLE ATTACHMENT;
|
DROP TABLE ATTACHMENT;
|
||||||
DROP TABLE TASK;
|
DROP TABLE TASK;
|
||||||
|
|
@ -11,5 +13,3 @@ DROP TABLE OBJECT_REFERENCE;
|
||||||
DROP TABLE SCHEDULED_JOB;
|
DROP TABLE SCHEDULED_JOB;
|
||||||
DROP SEQUENCE SCHEDULED_JOB_SEQ;
|
DROP SEQUENCE SCHEDULED_JOB_SEQ;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
DROP TABLE HISTORY_EVENTS;
|
|
||||||
COMMIT;
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
INSERT INTO HISTORY_EVENTS (BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY, ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS) VALUES
|
INSERT INTO TASK_HISTORY_EVENT (BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY, ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS) VALUES
|
||||||
-- BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, TASK_CREATEDD, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY , POR_SYSTEM, POR_INSTANCE , POR_TYPE , POR_VALUE , TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY , ATTACHMENT_CLASSIFICATION_KEY , OLD_VALUE , NEW_VALUE , CUSTOM_1 , CUSTOM_2 , CUSTOM_3 , CUSTOM_4
|
-- BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, TASK_CREATEDD, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY , POR_SYSTEM, POR_INSTANCE , POR_TYPE , POR_VALUE , TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY , ATTACHMENT_CLASSIFICATION_KEY , OLD_VALUE , NEW_VALUE , CUSTOM_1 , CUSTOM_2 , CUSTOM_3 , CUSTOM_4
|
||||||
('BPI:01' ,'', 'TKI:000000000000000000000000000000000000', 'TASK_CREATED', RELATIVE_DATE(0) , 'USER-2-2', 'DOMAIN_B', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '11223344' ,' L140101' , 'TASK' ,'' ,'old_val12' ,'new_val12' ,'custom1' ,'custom2' , 'custom3' ,'custom4', 'some Details'),
|
('BPI:01' ,'', 'TKI:000000000000000000000000000000000000', 'TASK_CREATED', RELATIVE_DATE(0) , 'USER-2-2', 'DOMAIN_B', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '11223344' ,' L140101' , 'TASK' ,'' ,'old_val12' ,'new_val12' ,'custom1' ,'custom2' , 'custom3' ,'custom4', 'some Details'),
|
||||||
('BPI:02' ,'', 'TKI:000000000000000000000000000000000000', 'TASK_UPDATED', RELATIVE_DATE(0), 'USER-1-1', 'DOMAIN_A', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '65464564' , '' , '' ,'' ,'2old_val' ,'new_val2' ,'custom1' ,'' , 'custom3' ,'','some Details'),
|
('BPI:02' ,'', 'TKI:000000000000000000000000000000000000', 'TASK_UPDATED', RELATIVE_DATE(0), 'USER-1-1', 'DOMAIN_A', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '65464564' , '' , '' ,'' ,'2old_val' ,'new_val2' ,'custom1' ,'' , 'custom3' ,'','some Details'),
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
INSERT INTO HISTORY_EVENTS (ID,BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY,
|
INSERT INTO TASK_HISTORY_EVENT (ID,BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY, POR_SYSTEM, POR_INSTANCE, POR_TYPE, POR_VALUE, TASK_CLASSIFICATION_KEY,
|
||||||
TASK_CLASSIFICATION_CATEGORY, ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS) VALUES
|
TASK_CLASSIFICATION_CATEGORY, ATTACHMENT_CLASSIFICATION_KEY, OLD_VALUE, NEW_VALUE, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, DETAILS) VALUES
|
||||||
-- BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY , POR_SYSTEM, POR_INSTANCE , POR_TYPE , POR_VALUE , TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY , ATTACHMENT_CLASSIFICATION_KEY , OLD_VALUE , NEW_VALUE , CUSTOM_1 , CUSTOM_2 , CUSTOM_3 , CUSTOM_4, details
|
-- BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY , POR_SYSTEM, POR_INSTANCE , POR_TYPE , POR_VALUE , TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY , ATTACHMENT_CLASSIFICATION_KEY , OLD_VALUE , NEW_VALUE , CUSTOM_1 , CUSTOM_2 , CUSTOM_3 , CUSTOM_4, details
|
||||||
('HEI:000000000000000000000000000000000000','BPI:01' ,'' ,'TKI:000000000000000000000000000000000000', 'TASK_UPDATED', '2018-01-29 15:55:00' , 'admin', 'DOMAIN_B', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '11223344', 'L140101' , 'TASK' ,'' ,'old_val' ,'new_val' ,'custom1' ,'custom2' , 'custom3' ,'custom4', '{"changes":[{"newValue":"BPI:01","fieldName":"businessProcessId","oldValue":"BPI:02"},{"newValue":"admin","fieldName":"owner","oldValue":"owner1"}]}' ),
|
('HEI:000000000000000000000000000000000000','BPI:01' ,'' ,'TKI:000000000000000000000000000000000000', 'TASK_UPDATED', '2018-01-29 15:55:00' , 'admin', 'DOMAIN_B', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '11223344', 'L140101' , 'TASK' ,'' ,'old_val' ,'new_val' ,'custom1' ,'custom2' , 'custom3' ,'custom4', '{"changes":[{"newValue":"BPI:01","fieldName":"businessProcessId","oldValue":"BPI:02"},{"newValue":"admin","fieldName":"owner","oldValue":"owner1"}]}' ),
|
||||||
|
|
@ -15,3 +15,19 @@ INSERT INTO HISTORY_EVENTS (ID,BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID,
|
||||||
('HEI:000000000000000000000000000000000011','BPI:02' ,'' ,'TKI:000000000000000000000000000000000066', 'TASK_CREATED', '2018-01-29 15:55:11','peter', 'DOMAIN_A', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '11223344', '' , '' ,'' ,'2old_val' ,'new_val2' ,'custom1' ,'' , 'custom2' ,'' ,'someDetails' ),
|
('HEI:000000000000000000000000000000000011','BPI:02' ,'' ,'TKI:000000000000000000000000000000000066', 'TASK_CREATED', '2018-01-29 15:55:11','peter', 'DOMAIN_A', 'WBI:100000000000000000000000000000000001', '00' , 'PASystem', '00' , 'VNR' , '11223344', '' , '' ,'' ,'2old_val' ,'new_val2' ,'custom1' ,'' , 'custom2' ,'' ,'someDetails' ),
|
||||||
('HEI:000000000000000000000000000000000012','BPI:03' ,'BPI:01','TKI:000000000000000000000000000000000066','TASK_CREATED', '2018-01-29 15:55:12' , 'admin', 'DOMAIN_A', 'WBI:100000000000000000000000000000000002', '11' , '' , '22' , '' , '' , 'L140101' , 'TASK' ,'DOCTYPE_DEFAULT' ,'' ,'' ,'custom1' ,'' , 'custom3' ,'' ,'someDetails' )
|
('HEI:000000000000000000000000000000000012','BPI:03' ,'BPI:01','TKI:000000000000000000000000000000000066','TASK_CREATED', '2018-01-29 15:55:12' , 'admin', 'DOMAIN_A', 'WBI:100000000000000000000000000000000002', '11' , '' , '22' , '' , '' , 'L140101' , 'TASK' ,'DOCTYPE_DEFAULT' ,'' ,'' ,'custom1' ,'' , 'custom3' ,'' ,'someDetails' )
|
||||||
;
|
;
|
||||||
|
|
||||||
|
INSERT INTO WORKBASKET_HISTORY_EVENT (ID,EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_ID, WORKBASKET_KEY, WORKBASKET_TYPE, OWNER, CUSTOM_1, CUSTOM_2, CUSTOM_3, CUSTOM_4, ORGLEVEL_1, ORGLEVEL_2, ORGLEVEL_3, ORGLEVEL_4, DETAILS) VALUES
|
||||||
|
-- BUSINESS_PROCESS_ID, PARENT_BUSINESS_PROCESS_ID, TASK_ID, EVENT_TYPE, CREATED, USER_ID, DOMAIN, WORKBASKET_KEY, POR_COMPANY , POR_SYSTEM, POR_INSTANCE , POR_TYPE , POR_VALUE , TASK_CLASSIFICATION_KEY, TASK_CLASSIFICATION_CATEGORY , ATTACHMENT_CLASSIFICATION_KEY , OLD_VALUE , NEW_VALUE , CUSTOM_1 , CUSTOM_2 , CUSTOM_3 , CUSTOM_4, details
|
||||||
|
('WHI:000000000000000000000000000000000000','WORKBASKET_CREATED' ,'2018-01-29 15:55:00' ,'peter', 'DOMAIN_A', 'WBI:000000000000000000000000000000000903', 'soRt004', 'TOPIC', 'admin', 'custom1' ,'custom2' , 'custom3' ,'custom4', 'orgLevel1' ,'orgLevel2' , 'orgLevel3' ,'orgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' ),
|
||||||
|
('WHI:000000000000000000000000000000000001','WORKBASKET_UPDATED' ,'2018-01-29 15:55:01' ,'claudia', 'DOMAIN_A', 'WBI:000000000000000000000000000000000803', 'soRt003', 'TOPIC', 'admin', 'otherCustom1' ,'otherCustom2' , 'otherCustom3' ,'otherCustom4', 'otherOrgLevel1' ,'otherOrgLevel2' , 'otherOrgLevel3' ,'otherOrgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' ),
|
||||||
|
('WHI:000000000000000000000000000000000002','WORKBASKET_DELETED' ,'2018-01-29 15:55:02' ,'peter', 'DOMAIN_A', 'WBI:000000000000000000000000000000000903', 'soRt004', 'TOPIC','admin', 'custom1' ,'custom2' , 'custom3' ,'custom4', 'orgLevel1' ,'orgLevel2' , 'orgLevel3' ,'orgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' ),
|
||||||
|
('WHI:000000000000000000000000000000000003','WORKBASKET_CREATED' ,'2018-01-29 15:55:03' ,'claudia', 'DOMAIN_A', 'WBI:000000000000000000000000000000000803', 'soRt003', 'TOPIC','admin', 'otherCustom1' ,'otherCustom2' , 'otherCustom3' ,'otherCustom4', 'otherOrgLevel1' ,'otherOrgLevel2' , 'otherOrgLevel3' ,'otherOrgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' ),
|
||||||
|
('WHI:000000000000000000000000000000000004','WORKBASKET_CREATED' ,'2018-01-29 15:55:04' ,'peter', 'DOMAIN_A', 'WBI:000000000000000000000000000000000803', 'soRt003', 'TOPIC','admin', 'custom1' ,'custom2' , 'custom3' ,'custom4', 'orgLevel1' ,'orgLevel2' , 'orgLevel3' ,'orgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' ),
|
||||||
|
('WHI:000000000000000000000000000000000005','WORKBASKET_DELETED' ,'2018-01-29 15:55:05' ,'sven', 'DOMAIN_A', 'WBI:000000000000000000000000000000000903', 'soRt004', 'TOPIC','admin', 'otherCustom1' ,'otherCustom2' , 'otherCustom3' ,'otherCustom4', 'otherOrgLevel1' ,'otherOrgLevel2' , 'otherOrgLevel3' ,'otherOrgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' ),
|
||||||
|
('WHI:000000000000000000000000000000000006','WORKBASKET_CREATED' ,'2018-01-29 15:55:06' ,'peter', 'DOMAIN_A', 'WBI:000000000000000000000000000000000803', 'soRt003', 'TOPIC','admin', 'custom1' ,'custom2' , 'custom3' ,'custom4', 'orgLevel1' ,'orgLevel2' , 'orgLevel3' ,'orgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' ),
|
||||||
|
('WHI:000000000000000000000000000000000007','WORKBASKET_CREATED' ,'2018-01-29 15:55:07' ,'sven', 'DOMAIN_A', 'WBI:000000000000000000000000000000000903', 'soRt004', 'TOPIC','admin', 'otherCustom1' ,'otherCustom2' , 'otherCustom3' ,'otherCustom4', 'otherOrgLevel1' ,'otherOrgLevel2' , 'otherOrgLevel3' ,'otherOrgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' ),
|
||||||
|
('WHI:000000000000000000000000000000000008','WORKBASKET_UPDATED' ,'2018-01-29 15:55:08' ,'peter', 'DOMAIN_A', 'WBI:000000000000000000000000000000000803', 'soRt003', 'TOPIC','admin', 'custom1' ,'custom2' , 'custom3' ,'custom4', 'orgLevel1' ,'orgLevel2' , 'orgLevel3' ,'orgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' ),
|
||||||
|
('WHI:000000000000000000000000000000000009','WORKBASKET_CREATED' ,'2018-01-29 15:55:09' ,'peter', 'DOMAIN_A', 'WBI:000000000000000000000000000000000903', 'soRt004', 'TOPIC', 'admin','otherCustom1' ,'otherCustom2' , 'otherCustom3' ,'otherCustom4', 'otherOrgLevel1' ,'otherOrgLevel2' , 'otherOrgLevel3' ,'otherOrgLevel4', '{"changes":[{"newValue":"WBI:100000000000000000000000000000001234","fieldName":"id","oldValue":""}]}' )
|
||||||
|
|
||||||
|
;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue