TSK-865: seperated taskanaEngine in two engines (internal + external)

This commit is contained in:
Mustapha Zorgati 2019-07-18 12:10:45 +02:00
parent 301085da06
commit 271e293969
39 changed files with 635 additions and 565 deletions

View File

@ -2,8 +2,11 @@ package pro.taskana;
import java.sql.SQLException;
import org.apache.ibatis.session.SqlSession;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.history.HistoryEventProducer;
/**
* The TaskanaEngine represents an overall set of all needed services.
@ -52,6 +55,12 @@ public interface TaskanaEngine {
*/
TaskanaEngineConfiguration getConfiguration();
/**
* The HistoryEventProducer events and emits them to the registered history service providers.
* @return The HistoryEventProducer
*/
HistoryEventProducer getHistoryEventProducer();
/**
* sets the connection management mode for taskana.
*
@ -112,4 +121,52 @@ public interface TaskanaEngine {
EXPLICIT
}
/**
* FOR INTERNAL USE ONLY.
*
* Contains all actions which are necessary within taskana.
*/
interface Internal {
/**
* Opens the connection to the database. Has to be called at the begin of each Api call that accesses the database
*/
void openConnection();
/**
* Returns the database connection into the pool. In the case of nested calls, simply pops the latest session from
* the session stack. Closes the connection if the session stack is empty. In mode AUTOCOMMIT commits before the
* connection is closed. To be called at the end of each Api call that accesses the database
*/
void returnConnection();
/**
* Initializes the SqlSessionManager.
*/
void initSqlSession();
/**
* Returns true if the given domain does exist in the configuration.
*
* @param domain
* the domain specified in the configuration
* @return <code>true</code> if the domain exists
*/
boolean domainExists(String domain);
/**
* retrieve the SqlSession used by taskana.
*
* @return the myBatis SqlSession object used by taskana
*/
SqlSession getSqlSession();
/**
* Retrieve TaskanaEngine.
* @return The nested TaskanaEngine.
*/
TaskanaEngine getEngine();
}
}

View File

@ -1,6 +1,5 @@
package pro.taskana.history;
import java.util.Iterator;
import java.util.ServiceLoader;
import org.slf4j.Logger;
@ -16,12 +15,22 @@ import pro.taskana.history.api.TaskanaHistoryEvent;
public final class HistoryEventProducer {
private static final Logger LOGGER = LoggerFactory.getLogger(HistoryEventProducer.class);
TaskanaEngineConfiguration taskanaEngineConfiguration;
private static HistoryEventProducer emitterInstance;
private ServiceLoader<TaskanaHistory> serviceLoader;
private boolean enabled = false;
private HistoryEventProducer(TaskanaEngineConfiguration taskanaEngineConfiguration) {
serviceLoader = ServiceLoader.load(TaskanaHistory.class);
for (TaskanaHistory history : serviceLoader) {
history.initialize(taskanaEngineConfiguration);
LOGGER.info("Registered history provider: {}", history.getClass().getName());
enabled = true;
}
if (!enabled) {
LOGGER.info("No history provider found. Running without history.");
}
}
public static synchronized HistoryEventProducer getInstance(TaskanaEngineConfiguration taskanaEngineConfiguration) {
if (emitterInstance == null) {
emitterInstance = new HistoryEventProducer(taskanaEngineConfiguration);
@ -39,23 +48,6 @@ public final class HistoryEventProducer {
public void createEvent(TaskanaHistoryEvent event) {
LOGGER.debug("Sending event to history service providers: {}", event);
serviceLoader.forEach(historyProvider -> {
historyProvider.create(event);
});
}
private HistoryEventProducer(TaskanaEngineConfiguration taskanaEngineConfiguration) {
this.taskanaEngineConfiguration = taskanaEngineConfiguration;
serviceLoader = ServiceLoader.load(TaskanaHistory.class);
Iterator<TaskanaHistory> serviceIterator = serviceLoader.iterator();
while (serviceIterator.hasNext()) {
TaskanaHistory history = serviceIterator.next();
history.initialize(taskanaEngineConfiguration);
LOGGER.info("Registered history provider: {}", history.getClass().getName());
enabled = true;
}
if (!enabled) {
LOGGER.info("No history provider found. Running without history.");
}
serviceLoader.forEach(historyProvider -> historyProvider.create(event));
}
}

View File

@ -33,12 +33,12 @@ abstract class AbstractWorkbasketAccessItemQueryImpl<Q extends AbstractWorkbaske
private String[] workbasketIdIn;
private String[] idIn;
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
private List<String> orderBy;
private List<String> orderColumns;
AbstractWorkbasketAccessItemQueryImpl(TaskanaEngine taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
AbstractWorkbasketAccessItemQueryImpl(TaskanaEngine.Internal taskanaEngine) {
this.taskanaEngine = taskanaEngine;
orderBy = new ArrayList<>();
orderColumns = new ArrayList<>();
}
@ -96,7 +96,7 @@ abstract class AbstractWorkbasketAccessItemQueryImpl<Q extends AbstractWorkbaske
} finally {
taskanaEngine.returnConnection();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", result.size(),
LOGGER.debug("exit from list(). Returning {} resulting Objects: {} ", result.size(),
LoggerUtils.listToString(result));
}
}

View File

@ -24,7 +24,7 @@ public class CategoryReportBuilderImpl
private static final Logger LOGGER = LoggerFactory.getLogger(CategoryReport.Builder.class);
CategoryReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
CategoryReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
super(taskanaEngine, taskMonitorMapper);
}
@ -41,7 +41,7 @@ public class CategoryReportBuilderImpl
@Override
public CategoryReport buildReport() throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to buildReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR);
try {
this.taskanaEngine.openConnection();
CategoryReport report = new CategoryReport(this.columnHeaders);

View File

@ -10,8 +10,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import pro.taskana.ClassificationQuery;
import pro.taskana.ClassificationSummary;
import pro.taskana.ClassificationQueryColumnName;
import pro.taskana.ClassificationSummary;
import pro.taskana.TaskanaEngine;
import pro.taskana.TimeInterval;
import pro.taskana.exceptions.InvalidArgumentException;
@ -29,7 +29,7 @@ public class ClassificationQueryImpl implements ClassificationQuery {
private static final String LINK_TO_COUNTER = "pro.taskana.mappings.QueryMapper.countQueryClassifications";
private static final String LINK_TO_VALUEMAPPER = "pro.taskana.mappings.QueryMapper.queryClassificationColumnValues";
private static final Logger LOGGER = LoggerFactory.getLogger(ClassificationQueryImpl.class);
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
private ClassificationQueryColumnName columnName;
private String[] key;
private String[] idIn;
@ -68,8 +68,8 @@ public class ClassificationQueryImpl implements ClassificationQuery {
private List<String> orderBy;
private List<String> orderColumns;
ClassificationQueryImpl(TaskanaEngine taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
ClassificationQueryImpl(TaskanaEngine.Internal taskanaEngine) {
this.taskanaEngine = taskanaEngine;
this.orderBy = new ArrayList<>();
this.orderColumns = new ArrayList<>();
}
@ -241,7 +241,8 @@ public class ClassificationQueryImpl implements ClassificationQuery {
}
@Override
public ClassificationQuery customAttributeLike(String number, String... customLike) throws InvalidArgumentException {
public ClassificationQuery customAttributeLike(String number, String... customLike)
throws InvalidArgumentException {
int num = 0;
try {
num = Integer.parseInt(number);
@ -334,7 +335,8 @@ public class ClassificationQueryImpl implements ClassificationQuery {
}
@Override
public ClassificationQuery orderByCustomAttribute(String number, SortDirection sortDirection) throws InvalidArgumentException {
public ClassificationQuery orderByCustomAttribute(String number, SortDirection sortDirection)
throws InvalidArgumentException {
int num = 0;
try {
num = Integer.parseInt(number);

View File

@ -26,7 +26,7 @@ public class ClassificationReportBuilderImpl
private static final Logger LOGGER = LoggerFactory.getLogger(ClassificationReport.Builder.class);
ClassificationReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
ClassificationReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
super(taskanaEngine, taskMonitorMapper);
}
@ -43,7 +43,7 @@ public class ClassificationReportBuilderImpl
@Override
public ClassificationReport buildReport() throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to buildReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try {
this.taskanaEngine.openConnection();
ClassificationReport report = new ClassificationReport(this.columnHeaders);
@ -62,7 +62,7 @@ public class ClassificationReportBuilderImpl
@Override
public DetailedClassificationReport buildDetailedReport() throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to buildDetailedReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try {
this.taskanaEngine.openConnection();
DetailedClassificationReport report = new DetailedClassificationReport(this.columnHeaders);

View File

@ -43,12 +43,11 @@ public class ClassificationServiceImpl implements ClassificationService {
private static final Logger LOGGER = LoggerFactory.getLogger(ClassificationServiceImpl.class);
private ClassificationMapper classificationMapper;
private TaskMapper taskMapper;
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
ClassificationServiceImpl(TaskanaEngine taskanaEngine, ClassificationMapper classificationMapper,
ClassificationServiceImpl(TaskanaEngine.Internal taskanaEngine, ClassificationMapper classificationMapper,
TaskMapper taskMapper) {
super();
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
this.taskanaEngine = taskanaEngine;
this.classificationMapper = classificationMapper;
this.taskMapper = taskMapper;
}
@ -79,7 +78,7 @@ public class ClassificationServiceImpl implements ClassificationService {
throws ClassificationAlreadyExistException, NotAuthorizedException,
DomainNotFoundException, InvalidArgumentException {
LOGGER.debug("entry to createClassification(classification = {})", classification);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
if (!taskanaEngine.domainExists(classification.getDomain()) && !"".equals(classification.getDomain())) {
throw new DomainNotFoundException(classification.getDomain(),
"Domain " + classification.getDomain() + " does not exist in the configuration.");
@ -183,7 +182,7 @@ public class ClassificationServiceImpl implements ClassificationService {
public Classification updateClassification(Classification classification)
throws NotAuthorizedException, ConcurrencyException, ClassificationNotFoundException, InvalidArgumentException {
LOGGER.debug("entry to updateClassification(Classification = {})", classification);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
ClassificationImpl classificationImpl = null;
try {
taskanaEngine.openConnection();
@ -256,13 +255,13 @@ public class ClassificationServiceImpl implements ClassificationService {
}
if (classification.getType() != null
&& !taskanaEngine.getConfiguration().getClassificationTypes().contains(classification.getType())) {
&& !taskanaEngine.getEngine().getConfiguration().getClassificationTypes().contains(classification.getType())) {
throw new InvalidArgumentException("Given classification type " + classification.getType()
+ " is not valid according to the configuration.");
}
if (classification.getCategory() != null
&& !taskanaEngine.getConfiguration()
&& !taskanaEngine.getEngine().getConfiguration()
.getClassificationCategoriesByType(classification.getType())
.contains(classification.getCategory())) {
throw new InvalidArgumentException(
@ -355,7 +354,7 @@ public class ClassificationServiceImpl implements ClassificationService {
public void deleteClassification(String classificationKey, String domain)
throws ClassificationInUseException, ClassificationNotFoundException, NotAuthorizedException {
LOGGER.debug("entry to deleteClassification(key = {}, domain = {})", classificationKey, domain);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
Classification classification = this.classificationMapper.findByKeyAndDomain(classificationKey, domain);
@ -374,7 +373,7 @@ public class ClassificationServiceImpl implements ClassificationService {
public void deleteClassification(String classificationId)
throws ClassificationInUseException, ClassificationNotFoundException, NotAuthorizedException {
LOGGER.debug("entry to deleteClassification(id = {})", classificationId);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
Classification classification = this.classificationMapper.findById(classificationId);
@ -460,7 +459,7 @@ public class ClassificationServiceImpl implements ClassificationService {
*/
private void updateCategoryOnAssociatedTasks(ClassificationImpl classificationImpl,
Classification oldClassification) {
List<TaskSummary> taskSummaries = taskanaEngine.getTaskService()
List<TaskSummary> taskSummaries = taskanaEngine.getEngine().getTaskService()
.createTaskQuery()
.classificationIdIn(oldClassification.getId())
.list();
@ -515,7 +514,7 @@ public class ClassificationServiceImpl implements ClassificationService {
ScheduledJob job = new ScheduledJob();
job.setArguments(args);
job.setType(ScheduledJob.Type.CLASSIFICATIONCHANGEDJOB);
taskanaEngine.getJobService().createJob(job);
taskanaEngine.getEngine().getJobService().createJob(job);
}
}

View File

@ -27,7 +27,7 @@ public class CustomFieldValueReportBuilderImpl
private CustomField customField;
CustomFieldValueReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper,
CustomFieldValueReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper,
CustomField customField) {
super(taskanaEngine, taskMonitorMapper);
this.customField = customField;
@ -47,7 +47,7 @@ public class CustomFieldValueReportBuilderImpl
public CustomFieldValueReport buildReport()
throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to buildReport(customField = {}), this = {}", this.customField, this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR);
try {
this.taskanaEngine.openConnection();
CustomFieldValueReport report = new CustomFieldValueReport(this.columnHeaders);

View File

@ -21,11 +21,10 @@ public class JobServiceImpl implements JobService {
private static final Logger LOGGER = LoggerFactory.getLogger(JobServiceImpl.class);
private JobMapper jobMapper;
private TaskanaEngineImpl taskanaEngineImpl;
private TaskanaEngine.Internal taskanaEngineImpl;
public JobServiceImpl(TaskanaEngine taskanaEngine, JobMapper jobMapper) {
super();
this.taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
public JobServiceImpl(TaskanaEngine.Internal taskanaEngine, JobMapper jobMapper) {
this.taskanaEngineImpl = taskanaEngine;
this.jobMapper = jobMapper;
}
@ -94,7 +93,7 @@ public class JobServiceImpl implements JobService {
if (job.getDue() == null) {
job.setDue(Instant.now());
}
job.setRetryCount(taskanaEngineImpl.getConfiguration().getMaxNumberOfJobRetries());
job.setRetryCount(taskanaEngineImpl.getEngine().getConfiguration().getMaxNumberOfJobRetries());
LOGGER.debug("Job after initialization: {}", job);
return job;
}

View File

@ -27,7 +27,7 @@ public class ObjectReferenceQueryImpl implements ObjectReferenceQuery {
private static final String LINK_TO_COUNTER = "pro.taskana.mappings.QueryMapper.countQueryObjectReferences";
private static final String LINK_TO_VALUEMAPPER = "pro.taskana.mappings.QueryMapper.queryObjectReferenceColumnValues";
private static final Logger LOGGER = LoggerFactory.getLogger(ObjectReferenceQueryImpl.class);
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
private ObjectReferenceQueryColumnName columnName;
private String[] company;
private String[] system;
@ -36,8 +36,8 @@ public class ObjectReferenceQueryImpl implements ObjectReferenceQuery {
private String[] value;
private List<String> orderBy;
ObjectReferenceQueryImpl(TaskanaEngine taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
ObjectReferenceQueryImpl(TaskanaEngine.Internal taskanaEngine) {
this.taskanaEngine = taskanaEngine;
this.orderBy = new ArrayList<>();
}

View File

@ -2,6 +2,7 @@ package pro.taskana.impl;
import pro.taskana.CustomField;
import pro.taskana.TaskMonitorService;
import pro.taskana.TaskanaEngine;
import pro.taskana.mappings.TaskMonitorMapper;
import pro.taskana.report.CategoryReport;
import pro.taskana.report.ClassificationReport;
@ -15,43 +16,43 @@ import pro.taskana.report.WorkbasketReport;
*/
public class TaskMonitorServiceImpl implements TaskMonitorService {
private TaskanaEngineImpl taskanaEngineImpl;
private TaskanaEngine.Internal taskanaEngine;
private TaskMonitorMapper taskMonitorMapper;
TaskMonitorServiceImpl(TaskanaEngineImpl taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
TaskMonitorServiceImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
super();
this.taskanaEngineImpl = taskanaEngine;
this.taskanaEngine = taskanaEngine;
this.taskMonitorMapper = taskMonitorMapper;
}
@Override
public WorkbasketReport.Builder createWorkbasketReportBuilder() {
return new WorkbasketReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper);
return new WorkbasketReportBuilderImpl(taskanaEngine, taskMonitorMapper);
}
@Override
public CategoryReport.Builder createCategoryReportBuilder() {
return new CategoryReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper);
return new CategoryReportBuilderImpl(taskanaEngine, taskMonitorMapper);
}
@Override
public ClassificationReport.Builder createClassificationReportBuilder() {
return new ClassificationReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper);
return new ClassificationReportBuilderImpl(taskanaEngine, taskMonitorMapper);
}
@Override
public CustomFieldValueReport.Builder createCustomFieldValueReportBuilder(CustomField customField) {
return new CustomFieldValueReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper, customField);
return new CustomFieldValueReportBuilderImpl(taskanaEngine, taskMonitorMapper, customField);
}
@Override
public TaskStatusReport.Builder createTaskStatusReportBuilder() {
return new TaskStatusReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper);
return new TaskStatusReportBuilderImpl(taskanaEngine, taskMonitorMapper);
}
@Override
public TimestampReport.Builder createTimestampReportBuilder() {
return new TimestampReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper);
return new TimestampReportBuilderImpl(taskanaEngine, taskMonitorMapper);
}
}

View File

@ -41,7 +41,7 @@ public class TaskQueryImpl implements TaskQuery {
private static final String TIME_INTERVAL = "TimeInterval ";
private static final String IS_INVALID = " is invalid.";
private static final Logger LOGGER = LoggerFactory.getLogger(TaskQueryImpl.class);
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
private TaskServiceImpl taskService;
private TaskQueryColumnName columnName;
private String[] nameIn;
@ -146,9 +146,9 @@ public class TaskQueryImpl implements TaskQuery {
private boolean addClassificationNameToSelectClauseForOrdering = false;
private boolean addAttachmentClassificationNameToSelectClauseForOrdering = false;
TaskQueryImpl(TaskanaEngine taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
this.taskService = (TaskServiceImpl) taskanaEngine.getTaskService();
TaskQueryImpl(TaskanaEngine.Internal taskanaEngine) {
this.taskanaEngine = taskanaEngine;
this.taskService = (TaskServiceImpl) taskanaEngine.getEngine().getTaskService();
this.orderBy = new ArrayList<>();
this.orderColumns = new ArrayList<>();
this.filterByAccessIdIn = true;
@ -178,7 +178,6 @@ public class TaskQueryImpl implements TaskQuery {
return this;
}
@Override
public TaskQuery nameLike(String... names) {
this.nameLike = toUpperCopy(names);
@ -698,23 +697,23 @@ public class TaskQueryImpl implements TaskQuery {
public TaskQuery orderByClassificationName(SortDirection sortDirection) {
joinWithClassifications = true;
addClassificationNameToSelectClauseForOrdering = true;
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2")
return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? addOrderCriteria("CNAME", sortDirection)
: addOrderCriteria("c.NAME", sortDirection);
: addOrderCriteria("c.NAME", sortDirection);
}
@Override
public TaskQuery orderByAttachmentClassificationName(SortDirection sortDirection) {
joinWithAttachments = true;
addAttachmentClassificationNameToSelectClauseForOrdering = true;
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2")
return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? addOrderCriteria("ACNAME", sortDirection)
: addOrderCriteria("ac.NAME", sortDirection);
: addOrderCriteria("ac.NAME", sortDirection);
}
@Override
public TaskQuery orderByClassificationKey(SortDirection sortDirection) {
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2")
return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? addOrderCriteria("TCLASSIFICATION_KEY", sortDirection)
: addOrderCriteria("t.CLASSIFICATION_KEY", sortDirection);
}
@ -803,7 +802,7 @@ public class TaskQueryImpl implements TaskQuery {
public TaskQuery orderByAttachmentClassificationKey(SortDirection sortDirection) {
joinWithAttachments = true;
addAttachmentColumnsToSelectClauseForOrdering = true;
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2")
return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? addOrderCriteria("ACLASSIFICATION_KEY", sortDirection)
: addOrderCriteria("a.CLASSIFICATION_KEY", sortDirection);
}
@ -812,7 +811,7 @@ public class TaskQueryImpl implements TaskQuery {
public TaskQuery orderByAttachmentClassificationId(SortDirection sortDirection) {
joinWithAttachments = true;
addAttachmentColumnsToSelectClauseForOrdering = true;
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2")
return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? addOrderCriteria("ACLASSIFICATION_ID", sortDirection)
: addOrderCriteria("a.CLASSIFICATION_ID", sortDirection);
}
@ -976,19 +975,21 @@ public class TaskQueryImpl implements TaskQuery {
}
public String getLinkToMapperScript() {
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2")
return this.taskanaEngine
.getSqlSession()
.getConfiguration().getDatabaseId().equals("db2")
? LINK_TO_MAPPER_DB2
: LINK_TO_MAPPER;
}
public String getLinkToCounterTaskScript() {
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2")
return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? LINK_TO_COUNTER_DB2
: LINK_TO_COUNTER;
}
private void setupAccessIds() {
if (taskanaEngine.isUserInRole(TaskanaRole.ADMIN) || !filterByAccessIdIn) {
if (taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN) || !filterByAccessIdIn) {
this.accessIdIn = null;
} else if (this.accessIdIn == null) {
String[] accessIds = new String[0];
@ -1154,7 +1155,7 @@ public class TaskQueryImpl implements TaskQuery {
}
private void checkOpenAndReadPermissionForSpecifiedWorkbaskets() {
if (taskanaEngine.isUserInRole(TaskanaRole.ADMIN)) {
if (taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN)) {
LOGGER.debug("Skipping permissions check since user is in role ADMIN.");
return;
}
@ -1178,7 +1179,7 @@ public class TaskQueryImpl implements TaskQuery {
private void checkOpenAndReadPermissionById(String workbasketId) throws NotAuthorizedException {
try {
taskanaEngine.getWorkbasketService().checkAuthorization(workbasketId,
taskanaEngine.getEngine().getWorkbasketService().checkAuthorization(workbasketId,
WorkbasketPermission.OPEN, WorkbasketPermission.READ);
} catch (WorkbasketNotFoundException e) {
LOGGER.warn("The workbasket with the ID '" + workbasketId + "' does not exist.", e);
@ -1187,7 +1188,7 @@ public class TaskQueryImpl implements TaskQuery {
private void checkOpenAndReadPermissionByKeyDomain(KeyDomain keyDomain) throws NotAuthorizedException {
try {
taskanaEngine.getWorkbasketService().checkAuthorization(keyDomain.getKey(),
taskanaEngine.getEngine().getWorkbasketService().checkAuthorization(keyDomain.getKey(),
keyDomain.getDomain(), WorkbasketPermission.OPEN, WorkbasketPermission.READ);
} catch (WorkbasketNotFoundException e) {
LOGGER.warn("The workbasket with the KEY '" + keyDomain.getKey() + "' and DOMAIN '"
@ -1195,10 +1196,6 @@ public class TaskQueryImpl implements TaskQuery {
}
}
public TaskanaEngineImpl getTaskanaEngine() {
return taskanaEngine;
}
public String[] getTaskIds() {
return taskIds;
}
@ -1634,7 +1631,8 @@ public class TaskQueryImpl implements TaskQuery {
return addClassificationNameToSelectClauseForOrdering;
}
public void setAddClassificationNameToSelectClauseForOrdering(boolean addClassificationNameToSelectClauseForOrdering) {
public void setAddClassificationNameToSelectClauseForOrdering(
boolean addClassificationNameToSelectClauseForOrdering) {
this.addClassificationNameToSelectClauseForOrdering = addClassificationNameToSelectClauseForOrdering;
}

View File

@ -11,6 +11,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.apache.ibatis.exceptions.PersistenceException;
import org.slf4j.Logger;
@ -19,6 +20,7 @@ import org.slf4j.LoggerFactory;
import pro.taskana.Attachment;
import pro.taskana.BulkOperationResults;
import pro.taskana.Classification;
import pro.taskana.ClassificationService;
import pro.taskana.ClassificationSummary;
import pro.taskana.ObjectReference;
import pro.taskana.Task;
@ -79,17 +81,17 @@ public class TaskServiceImpl implements TaskService {
private static final String ID_PREFIX_BUSINESS_PROCESS = "BPI";
private static final String MUST_NOT_BE_EMPTY = " must not be empty";
private static final Duration MAX_DURATION = Duration.ofSeconds(Long.MAX_VALUE, 999_999_999);
private static final Set<String> ALLOWED_KEYS = new HashSet<>(
Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"));
private static final Set<String> ALLOWED_KEYS =
IntStream.rangeClosed(1, 16).mapToObj(String::valueOf).collect(Collectors.toSet());
private DaysToWorkingDaysConverter converter;
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
private WorkbasketService workbasketService;
private ClassificationServiceImpl classificationService;
private ClassificationService classificationService;
private TaskMapper taskMapper;
private AttachmentMapper attachmentMapper;
private HistoryEventProducer historyEventProducer;
TaskServiceImpl(TaskanaEngine taskanaEngine, TaskMapper taskMapper,
TaskServiceImpl(TaskanaEngine.Internal taskanaEngine, TaskMapper taskMapper,
AttachmentMapper attachmentMapper) {
super();
try {
@ -98,12 +100,12 @@ public class TaskServiceImpl implements TaskService {
} catch (InvalidArgumentException e) {
throw new SystemException("Internal error. Cannot initialize DaysToWorkingDaysConverter", e.getCause());
}
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
this.taskanaEngine = taskanaEngine;
this.taskMapper = taskMapper;
this.workbasketService = taskanaEngine.getWorkbasketService();
this.workbasketService = taskanaEngine.getEngine().getWorkbasketService();
this.attachmentMapper = attachmentMapper;
this.classificationService = (ClassificationServiceImpl) taskanaEngine.getClassificationService();
this.historyEventProducer = ((TaskanaEngineImpl) taskanaEngine).getHistoryEventProducer();
this.classificationService = taskanaEngine.getEngine().getClassificationService();
this.historyEventProducer = taskanaEngine.getEngine().getHistoryEventProducer();
}
@Override
@ -237,7 +239,8 @@ public class TaskServiceImpl implements TaskService {
if (msg != null
&& (msg.contains("violation") || msg.contains("violates"))
&& msg.contains("external_id")) {
throw new TaskAlreadyExistException("Task with external id " + task.getExternalId() + " already exists");
throw new TaskAlreadyExistException(
"Task with external id " + task.getExternalId() + " already exists");
} else {
throw e;
}
@ -280,7 +283,8 @@ public class TaskServiceImpl implements TaskService {
List<ClassificationSummary> classifications;
classifications = findClassificationForTaskImplAndAttachments(resultTask, attachmentImpls);
List<Attachment> attachments = addClassificationSummariesToAttachments(attachmentImpls, classifications);
List<Attachment> attachments = addClassificationSummariesToAttachments(attachmentImpls,
classifications);
resultTask.setAttachments(attachments);
String classificationId = resultTask.getClassificationSummary().getId();
@ -413,7 +417,8 @@ public class TaskServiceImpl implements TaskService {
try {
taskanaEngine.openConnection();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to transferTasks(targetWbId = {}, taskIds = {})", destinationWorkbasketId, LoggerUtils.listToString(taskIds));
LOGGER.debug("entry to transferTasks(targetWbId = {}, taskIds = {})", destinationWorkbasketId,
LoggerUtils.listToString(taskIds));
}
// Check pre-conditions with trowing Exceptions
@ -426,7 +431,8 @@ public class TaskServiceImpl implements TaskService {
return transferTasks(taskIds, destinationWorkbasket);
} finally {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("exit from transferTasks(targetWbKey = {}, taskIds = {})", destinationWorkbasketId, LoggerUtils.listToString(taskIds));
LOGGER.debug("exit from transferTasks(targetWbKey = {}, taskIds = {})", destinationWorkbasketId,
LoggerUtils.listToString(taskIds));
}
taskanaEngine.returnConnection();
@ -440,7 +446,8 @@ public class TaskServiceImpl implements TaskService {
try {
taskanaEngine.openConnection();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to transferTasks(targetWbKey = {}, domain = {}, taskIds = {})", destinationWorkbasketKey,
LOGGER.debug("entry to transferTasks(targetWbKey = {}, domain = {}, taskIds = {})",
destinationWorkbasketKey,
destinationWorkbasketDomain, LoggerUtils.listToString(taskIds));
}
@ -455,7 +462,8 @@ public class TaskServiceImpl implements TaskService {
return transferTasks(taskIds, destinationWorkbasket);
} finally {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("exit from transferTasks(targetWbKey = {}, targetWbDomain = {}, destination taskIds = {})", destinationWorkbasketKey,
LOGGER.debug("exit from transferTasks(targetWbKey = {}, targetWbDomain = {}, destination taskIds = {})",
destinationWorkbasketKey,
destinationWorkbasketDomain, LoggerUtils.listToString(taskIds));
}
@ -609,7 +617,8 @@ public class TaskServiceImpl implements TaskService {
changedTasks = taskSummaries.stream().map(TaskSummary::getTaskId).collect(Collectors.toList());
taskMapper.updateTasks(changedTasks, updated, fieldSelector);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("updateTasks() updated the following tasks: {} ", LoggerUtils.listToString(changedTasks));
LOGGER.debug("updateTasks() updated the following tasks: {} ",
LoggerUtils.listToString(changedTasks));
}
} else {
@ -645,7 +654,8 @@ public class TaskServiceImpl implements TaskService {
changedTasks = taskSummaries.stream().map(TaskSummary::getTaskId).collect(Collectors.toList());
taskMapper.updateTasks(changedTasks, updatedTask, fieldSelector);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("updateTasks() updated the following tasks: {} ", LoggerUtils.listToString(changedTasks));
LOGGER.debug("updateTasks() updated the following tasks: {} ",
LoggerUtils.listToString(changedTasks));
}
} else {
@ -697,7 +707,7 @@ public class TaskServiceImpl implements TaskService {
task.setTransferred(false);
String creator = CurrentUserContext.getUserid();
if (taskanaEngine.getConfiguration().isSecurityEnabled() && creator == null) {
if (taskanaEngine.getEngine().getConfiguration().isSecurityEnabled() && creator == null) {
throw new SystemException(
"TaskanaSecurity is enabled, but the current UserId is NULL while creating a Task.");
}
@ -747,7 +757,7 @@ public class TaskServiceImpl implements TaskService {
}
if (task.getName() == null && classification != null) {
if (task.getName() == null && classification != null) {
task.setName(classification.getName());
}
@ -761,7 +771,8 @@ public class TaskServiceImpl implements TaskService {
Workbasket destinationWorkbasket)
throws InvalidArgumentException, WorkbasketNotFoundException, NotAuthorizedException {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to transferTasks(taskIdsToBeTransferred = {}, destinationWorkbasket = {})", LoggerUtils.listToString(taskIdsToBeTransferred), destinationWorkbasket);
LOGGER.debug("entry to transferTasks(taskIdsToBeTransferred = {}, destinationWorkbasket = {})",
LoggerUtils.listToString(taskIdsToBeTransferred), destinationWorkbasket);
}
workbasketService.checkAuthorization(destinationWorkbasket.getId(), WorkbasketPermission.APPEND);
@ -795,7 +806,8 @@ public class TaskServiceImpl implements TaskService {
private void removeNonExistingTasksFromTaskIdList(List<String> taskIds,
BulkOperationResults<String, TaskanaException> bulkLog) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to removeNonExistingTasksFromTaskIdList(targetWbId = {}, taskIds = {})", taskIds, bulkLog);
LOGGER.debug("entry to removeNonExistingTasksFromTaskIdList(targetWbId = {}, taskIds = {})", taskIds,
bulkLog);
}
Iterator<String> taskIdIterator = taskIds.iterator();
@ -813,7 +825,8 @@ public class TaskServiceImpl implements TaskService {
private void checkIfTransferConditionsAreFulfilled(List<String> taskIds, List<MinimalTaskSummary> taskSummaries,
BulkOperationResults<String, TaskanaException> bulkLog) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to checkIfTransferConditionsAreFulfilled(taskIds = {}, taskSummaries = {}, bulkLog = {})",
LOGGER.debug(
"entry to checkIfTransferConditionsAreFulfilled(taskIds = {}, taskSummaries = {}, bulkLog = {})",
LoggerUtils.listToString(taskIds), LoggerUtils.listToString(taskSummaries), bulkLog);
}
@ -837,8 +850,10 @@ public class TaskServiceImpl implements TaskService {
private void checkIfTasksMatchTransferCriteria(List<String> taskIds, List<MinimalTaskSummary> taskSummaries,
List<WorkbasketSummary> sourceWorkbaskets, BulkOperationResults<String, TaskanaException> bulkLog) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to checkIfTasksMatchTransferCriteria(taskIds = {}, taskSummaries = {}, sourceWorkbaskets = {}, bulkLog = {})",
LoggerUtils.listToString(taskIds), LoggerUtils.listToString(taskSummaries), LoggerUtils.listToString(sourceWorkbaskets), bulkLog);
LOGGER.debug(
"entry to checkIfTasksMatchTransferCriteria(taskIds = {}, taskSummaries = {}, sourceWorkbaskets = {}, bulkLog = {})",
LoggerUtils.listToString(taskIds), LoggerUtils.listToString(taskSummaries),
LoggerUtils.listToString(sourceWorkbaskets), bulkLog);
}
Iterator<String> taskIdIterator = taskIds.iterator();
@ -935,7 +950,8 @@ public class TaskServiceImpl implements TaskService {
private void updateTasksToBeCompleted(List<String> taskIds,
List<TaskSummary> taskSummaries) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to updateTasksToBeCompleted(taskIds = {}, taskSummaries = {})", LoggerUtils.listToString(taskIds), LoggerUtils.listToString(taskSummaries));
LOGGER.debug("entry to updateTasksToBeCompleted(taskIds = {}, taskSummaries = {})",
LoggerUtils.listToString(taskIds), LoggerUtils.listToString(taskSummaries));
}
if (!taskIds.isEmpty() && !taskSummaries.isEmpty()) {
@ -985,7 +1001,8 @@ public class TaskServiceImpl implements TaskService {
private void addClassificationSummariesToTaskSummaries(List<TaskSummaryImpl> tasks,
List<ClassificationSummary> classifications) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to addClassificationSummariesToTaskSummaries(tasks = {}, classifications = {})", LoggerUtils.listToString(tasks), LoggerUtils.listToString(classifications));
LOGGER.debug("entry to addClassificationSummariesToTaskSummaries(tasks = {}, classifications = {})",
LoggerUtils.listToString(tasks), LoggerUtils.listToString(classifications));
}
if (tasks == null || tasks.isEmpty()) {
@ -1096,8 +1113,10 @@ public class TaskServiceImpl implements TaskService {
private void addAttachmentSummariesToTaskSummaries(List<TaskSummaryImpl> taskSummaries,
List<AttachmentSummaryImpl> attachmentSummaries, List<ClassificationSummary> classifications) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to addAttachmentSummariesToTaskSummaries(taskSummaries = {}, attachmentSummaries = {}, classifications = {})",
LoggerUtils.listToString(taskSummaries), LoggerUtils.listToString(attachmentSummaries), LoggerUtils.listToString(classifications));
LOGGER.debug(
"entry to addAttachmentSummariesToTaskSummaries(taskSummaries = {}, attachmentSummaries = {}, classifications = {})",
LoggerUtils.listToString(taskSummaries), LoggerUtils.listToString(attachmentSummaries),
LoggerUtils.listToString(classifications));
}
if (taskSummaries == null || taskSummaries.isEmpty()) {
@ -1181,7 +1200,8 @@ public class TaskServiceImpl implements TaskService {
private TaskImpl initUpdatedTask(Map<String, String> customFieldsToUpdate, CustomPropertySelector fieldSelector)
throws InvalidArgumentException {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to initUpdatedTask(customFieldsToUpdate = {}, fieldSelector = {})", LoggerUtils.mapToString(customFieldsToUpdate), fieldSelector);
LOGGER.debug("entry to initUpdatedTask(customFieldsToUpdate = {}, fieldSelector = {})",
LoggerUtils.mapToString(customFieldsToUpdate), fieldSelector);
}
TaskImpl newTask = new TaskImpl();
@ -1201,7 +1221,8 @@ public class TaskServiceImpl implements TaskService {
private void validateCustomFields(Map<String, String> customFieldsToUpdate) throws InvalidArgumentException {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to validateCustomFields(customFieldsToUpdate = {}, taskIds = {})", LoggerUtils.mapToString(customFieldsToUpdate));
LOGGER.debug("entry to validateCustomFields(customFieldsToUpdate = {}, taskIds = {})",
LoggerUtils.mapToString(customFieldsToUpdate));
}
if (customFieldsToUpdate == null || customFieldsToUpdate.isEmpty()) {
@ -1296,9 +1317,8 @@ public class TaskServiceImpl implements TaskService {
} else {
ClassificationSummary classificationSummary = attachment.getClassificationSummary();
if (classificationSummary != null) {
PrioDurationHolder newPrioDuraton = getNewPrioDuration(actualPrioDuration,
actualPrioDuration = getNewPrioDuration(actualPrioDuration,
classificationSummary.getPriority(), classificationSummary.getServiceLevel());
actualPrioDuration = newPrioDuraton;
}
}
return actualPrioDuration;
@ -1405,7 +1425,8 @@ public class TaskServiceImpl implements TaskService {
private PrioDurationHolder handleAttachmentsOnTaskUpdate(TaskImpl oldTaskImpl, TaskImpl newTaskImpl)
throws AttachmentPersistenceException {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to handleAttachmentsOnTaskUpdate(oldTaskImpl = {}, newTaskImpl = {})", oldTaskImpl, newTaskImpl);
LOGGER.debug("entry to handleAttachmentsOnTaskUpdate(oldTaskImpl = {}, newTaskImpl = {})", oldTaskImpl,
newTaskImpl);
}
PrioDurationHolder prioDuration = new PrioDurationHolder(MAX_DURATION, Integer.MIN_VALUE);
@ -1415,7 +1436,8 @@ public class TaskServiceImpl implements TaskService {
while (i.hasNext()) {
Attachment attachment = i.next();
if (attachment != null) {
prioDuration = handlePrioDurationOfOneAttachmentOnTaskUpdate(oldTaskImpl, newTaskImpl, prioDuration, attachment);
prioDuration = handlePrioDurationOfOneAttachmentOnTaskUpdate(oldTaskImpl, newTaskImpl, prioDuration,
attachment);
} else {
i.remove();
}
@ -1433,7 +1455,8 @@ public class TaskServiceImpl implements TaskService {
private void deleteAttachmentOnTaskUpdate(TaskImpl oldTaskImpl, TaskImpl newTaskImpl) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to deleteAttachmentOnTaskUpdate(oldTaskImpl = {}, newTaskImpl = {})", oldTaskImpl, newTaskImpl);
LOGGER.debug("entry to deleteAttachmentOnTaskUpdate(oldTaskImpl = {}, newTaskImpl = {})", oldTaskImpl,
newTaskImpl);
}
for (Attachment oldAttachment : oldTaskImpl.getAttachments()) {
@ -1491,7 +1514,7 @@ public class TaskServiceImpl implements TaskService {
ClassificationSummary classification = attachment.getClassificationSummary();
if (classification != null) {
prioDuration = getNewPrioDuration(prioDuration,
prioDuration = getNewPrioDuration(prioDuration,
classification.getPriority(), classification.getServiceLevel());
}
@ -1556,11 +1579,12 @@ public class TaskServiceImpl implements TaskService {
LOGGER.debug("exit from handleAttachmentsOnClassificationUpdate(), returning {}", prioDuration);
return prioDuration;
}
}
private PrioDurationHolder getNewPrioDuration(PrioDurationHolder prioDurationHolder, int prioFromClassification,
String serviceLevelFromClassification) {
LOGGER.debug("entry to getNewPrioDuration(prioDurationHolder = {}, prioFromClassification = {}, serviceLevelFromClassification = {})",
LOGGER.debug(
"entry to getNewPrioDuration(prioDurationHolder = {}, prioFromClassification = {}, serviceLevelFromClassification = {})",
prioDurationHolder, prioFromClassification, serviceLevelFromClassification);
Duration minDuration = prioDurationHolder.getDuration();
int maxPrio = prioDurationHolder.getPrio();
@ -1832,7 +1856,7 @@ public class TaskServiceImpl implements TaskService {
private void deleteTask(String taskId, boolean forceDelete)
throws TaskNotFoundException, InvalidStateException, NotAuthorizedException {
LOGGER.debug("entry to deleteTask(taskId = {} , forceDelete = {})", taskId, forceDelete);
taskanaEngine.checkRoleMembership(TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.ADMIN);
TaskImpl task = null;
try {
taskanaEngine.openConnection();
@ -1877,7 +1901,8 @@ public class TaskServiceImpl implements TaskService {
List<TaskSummary> augmentTaskSummariesByContainedSummaries(List<TaskSummaryImpl> taskSummaries) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("entry to augmentTaskSummariesByContainedSummaries(taskSummaries= {})", LoggerUtils.listToString(taskSummaries));
LOGGER.debug("entry to augmentTaskSummariesByContainedSummaries(taskSummaries= {})",
LoggerUtils.listToString(taskSummaries));
}
List<TaskSummary> result = new ArrayList<>();
@ -1909,6 +1934,7 @@ public class TaskServiceImpl implements TaskService {
* @author bbr
*/
static class PrioDurationHolder {
private Duration duration;
private int prio;
@ -1923,14 +1949,14 @@ public class TaskServiceImpl implements TaskService {
return duration;
}
public int getPrio() {
return prio;
}
public void setDuration(Duration duration) {
this.duration = duration;
}
public int getPrio() {
return prio;
}
public void setPrio(int prio) {
this.prio = prio;
}

View File

@ -19,13 +19,13 @@ import pro.taskana.report.TaskStatusReport;
public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
private static final Logger LOGGER = LoggerFactory.getLogger(TaskStatusReportBuilderImpl.class);
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
private TaskMonitorMapper taskMonitorMapper;
private List<String> domains;
private List<TaskState> states;
TaskStatusReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
TaskStatusReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
this.taskanaEngine = taskanaEngine;
this.taskMonitorMapper = taskMonitorMapper;
}
@ -44,7 +44,7 @@ public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
@Override
public TaskStatusReport buildReport() throws NotAuthorizedException {
LOGGER.debug("entry to buildReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try {
this.taskanaEngine.openConnection();
List<TaskQueryItem> tasks = this.taskMonitorMapper.getTasksCountByState(this.domains, this.states);

View File

@ -63,12 +63,14 @@ public class TaskanaEngineImpl implements TaskanaEngine {
protected ConnectionManagementMode mode = ConnectionManagementMode.PARTICIPATE;
protected java.sql.Connection connection = null;
protected HistoryEventProducer historyEventProducer;
private Internal internal;
protected TaskanaEngineImpl(TaskanaEngineConfiguration taskanaEngineConfiguration) {
this.taskanaEngineConfiguration = taskanaEngineConfiguration;
createTransactionFactory(taskanaEngineConfiguration.getUseManagedTransactions());
this.sessionManager = createSqlSessionManager();
this.historyEventProducer = HistoryEventProducer.getInstance(taskanaEngineConfiguration);
this.internal = new Internal();
}
public static TaskanaEngine createTaskanaEngine(TaskanaEngineConfiguration taskanaEngineConfiguration) {
@ -130,21 +132,21 @@ public class TaskanaEngineImpl implements TaskanaEngine {
@Override
public TaskService getTaskService() {
SqlSession session = this.sessionManager;
return new TaskServiceImpl(this, session.getMapper(TaskMapper.class),
return new TaskServiceImpl(internal, session.getMapper(TaskMapper.class),
session.getMapper(AttachmentMapper.class));
}
@Override
public TaskMonitorService getTaskMonitorService() {
SqlSession session = this.sessionManager;
return new TaskMonitorServiceImpl(this,
return new TaskMonitorServiceImpl(internal,
session.getMapper(TaskMonitorMapper.class));
}
@Override
public WorkbasketService getWorkbasketService() {
SqlSession session = this.sessionManager;
return new WorkbasketServiceImpl(this,
return new WorkbasketServiceImpl(internal,
session.getMapper(WorkbasketMapper.class),
session.getMapper(DistributionTargetMapper.class),
session.getMapper(WorkbasketAccessMapper.class));
@ -153,14 +155,14 @@ public class TaskanaEngineImpl implements TaskanaEngine {
@Override
public ClassificationService getClassificationService() {
SqlSession session = this.sessionManager;
return new ClassificationServiceImpl(this, session.getMapper(ClassificationMapper.class),
return new ClassificationServiceImpl(internal, session.getMapper(ClassificationMapper.class),
session.getMapper(TaskMapper.class));
}
@Override
public JobService getJobService() {
SqlSession session = this.sessionManager;
return new JobServiceImpl(this, session.getMapper(JobMapper.class));
return new JobServiceImpl(internal, session.getMapper(JobMapper.class));
}
@Override
@ -168,8 +170,9 @@ public class TaskanaEngineImpl implements TaskanaEngine {
return this.taskanaEngineConfiguration;
}
@Override
public HistoryEventProducer getHistoryEventProducer() {
return this.historyEventProducer;
return historyEventProducer;
}
/**
@ -233,65 +236,6 @@ public class TaskanaEngineImpl implements TaskanaEngine {
}
}
/**
* Open the connection to the database. to be called at the begin of each Api call that accesses the database
*/
void openConnection() {
initSqlSession();
try {
this.sessionManager.getConnection().setSchema(taskanaEngineConfiguration.getSchemaName());
} catch (SQLException e) {
throw new SystemException(
"Method openConnection() could not open a connection to the database. No schema has been created.",
e.getCause());
}
if (mode != ConnectionManagementMode.EXPLICIT) {
pushSessionToStack(this.sessionManager);
}
}
/**
* Initializes the SqlSessionManager.
*/
void initSqlSession() {
if (mode == ConnectionManagementMode.EXPLICIT && this.connection == null) {
throw new ConnectionNotSetException();
} else if (mode != ConnectionManagementMode.EXPLICIT && !this.sessionManager.isManagedSessionStarted()) {
this.sessionManager.startManagedSession();
}
}
/**
* Returns the database connection into the pool. In the case of nested calls, simply pops the latest session from
* the session stack. Closes the connection if the session stack is empty. In mode AUTOCOMMIT commits before the
* connection is closed. To be called at the end of each Api call that accesses the database
*/
void returnConnection() {
if (this.mode != ConnectionManagementMode.EXPLICIT) {
popSessionFromStack();
if (getSessionStack().isEmpty()
&& this.sessionManager != null && this.sessionManager.isManagedSessionStarted()) {
if (this.mode == ConnectionManagementMode.AUTOCOMMIT) {
try {
this.sessionManager.commit();
} catch (Exception e) {
throw new AutocommitFailedException(e.getCause());
}
}
this.sessionManager.close();
}
}
}
/**
* retrieve the SqlSession used by taskana.
*
* @return the myBatis SqlSession object used by taskana
*/
SqlSession getSqlSession() {
return this.sessionManager;
}
/**
* Checks whether current user is member of any of the specified roles.
*
@ -402,14 +346,66 @@ public class TaskanaEngineImpl implements TaskanaEngine {
}
/**
* Returns true if the given domain does exist in the configuration.
*
* @param domain
* the domain specified in the configuration
* @return <code>true</code> if the domain exists
* Internal Engine for internal operations.
*/
public boolean domainExists(String domain) {
return getConfiguration().getDomains().contains(domain);
}
private class Internal implements TaskanaEngine.Internal {
@Override
public void openConnection() {
initSqlSession();
try {
sessionManager.getConnection().setSchema(taskanaEngineConfiguration.getSchemaName());
} catch (SQLException e) {
throw new SystemException(
"Method openConnection() could not open a connection to the database. No schema has been created.",
e.getCause());
}
if (mode != ConnectionManagementMode.EXPLICIT) {
pushSessionToStack(sessionManager);
}
}
@Override
public void initSqlSession() {
if (mode == ConnectionManagementMode.EXPLICIT && connection == null) {
throw new ConnectionNotSetException();
} else if (mode != ConnectionManagementMode.EXPLICIT && !sessionManager.isManagedSessionStarted()) {
sessionManager.startManagedSession();
}
}
@Override
public void returnConnection() {
if (mode != ConnectionManagementMode.EXPLICIT) {
popSessionFromStack();
if (getSessionStack().isEmpty()
&& sessionManager != null && sessionManager.isManagedSessionStarted()) {
if (mode == ConnectionManagementMode.AUTOCOMMIT) {
try {
sessionManager.commit();
} catch (Exception e) {
throw new AutocommitFailedException(e.getCause());
}
}
sessionManager.close();
}
}
}
@Override
public boolean domainExists(String domain) {
return getConfiguration().getDomains().contains(domain);
}
@Override
public SqlSession getSqlSession() {
return sessionManager;
}
@Override
public TaskanaEngine getEngine() {
return TaskanaEngineImpl.this;
}
}
}

View File

@ -33,7 +33,7 @@ abstract class TimeIntervalReportBuilderImpl<B extends TimeIntervalReportBuilder
private static final Logger LOGGER = LoggerFactory.getLogger(TimeIntervalReportBuilder.class);
protected TaskanaEngineImpl taskanaEngine;
protected TaskanaEngine.Internal taskanaEngine;
protected TaskMonitorMapper taskMonitorMapper;
protected List<H> columnHeaders;
protected boolean inWorkingDays;
@ -45,8 +45,8 @@ abstract class TimeIntervalReportBuilderImpl<B extends TimeIntervalReportBuilder
protected List<String> excludedClassificationIds;
protected Map<CustomField, String> customAttributeFilter;
TimeIntervalReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
TimeIntervalReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
this.taskanaEngine = taskanaEngine;
this.taskMonitorMapper = taskMonitorMapper;
this.columnHeaders = Collections.emptyList();
configureDaysToWorkingDaysConverter();
@ -113,7 +113,7 @@ abstract class TimeIntervalReportBuilderImpl<B extends TimeIntervalReportBuilder
throws NotAuthorizedException {
LOGGER.debug("entry to listCustomAttributeValuesForCustomAttributeName(customField = {}), this = {}",
customField, this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR);
try {
this.taskanaEngine.openConnection();
return taskMonitorMapper.getCustomAttributeValuesForReport(this.workbasketIds,
@ -133,7 +133,7 @@ abstract class TimeIntervalReportBuilderImpl<B extends TimeIntervalReportBuilder
LoggerUtils.listToString(selectedItems), this);
}
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR);
try {
this.taskanaEngine.openConnection();
if (this.columnHeaders == null) {
@ -161,9 +161,10 @@ abstract class TimeIntervalReportBuilderImpl<B extends TimeIntervalReportBuilder
protected abstract String determineGroupedBy();
private void configureDaysToWorkingDaysConverter() {
DaysToWorkingDaysConverter.setCustomHolidays(this.taskanaEngine.getConfiguration().getCustomHolidays());
DaysToWorkingDaysConverter.setCustomHolidays(
this.taskanaEngine.getEngine().getConfiguration().getCustomHolidays());
DaysToWorkingDaysConverter.setGermanPublicHolidaysEnabled(
this.taskanaEngine.getConfiguration().isGermanPublicHolidaysEnabled());
this.taskanaEngine.getEngine().getConfiguration().isGermanPublicHolidaysEnabled());
}
private List<SelectedItem> convertWorkingDaysToDays(List<SelectedItem> selectedItems,

View File

@ -31,7 +31,7 @@ public class TimestampReportBuilderImpl extends
private static final Logger LOGGER = LoggerFactory.getLogger(TimestampReport.Builder.class);
private List<Timestamp> status = Arrays.asList(Timestamp.CREATED, Timestamp.COMPLETED);
TimestampReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
TimestampReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
super(taskanaEngine, taskMonitorMapper);
}
@ -65,7 +65,7 @@ public class TimestampReportBuilderImpl extends
@Override
public TimestampReport buildReport() throws NotAuthorizedException, InvalidArgumentException {
LOGGER.debug("entry to buildDetailedReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try {
this.taskanaEngine.openConnection();
TimestampReport report = new TimestampReport(this.columnHeaders);

View File

@ -33,12 +33,12 @@ public class WorkbasketAccessItemQueryImpl implements WorkbasketAccessItemQuery
private String[] workbasketKeyLike;
private String[] idIn;
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
private List<String> orderBy;
private List<String> orderColumns;
WorkbasketAccessItemQueryImpl(TaskanaEngine taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
WorkbasketAccessItemQueryImpl(TaskanaEngine.Internal taskanaEngine) {
this.taskanaEngine = taskanaEngine;
orderBy = new ArrayList<>();
orderColumns = new ArrayList<>();
}
@ -197,7 +197,8 @@ public class WorkbasketAccessItemQueryImpl implements WorkbasketAccessItemQuery
}
private WorkbasketAccessItemQuery addOrderCriteria(String colName, SortDirection sortDirection) {
String orderByDirection = " " + (sortDirection == null ? SortDirection.ASCENDING.toString() : sortDirection.toString());
String orderByDirection =
" " + (sortDirection == null ? SortDirection.ASCENDING.toString() : sortDirection.toString());
orderBy.add(colName + orderByDirection);
orderColumns.add(colName);
return this;

View File

@ -70,7 +70,7 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
private String[] orgLevel4Like;
private boolean markedForDeletion;
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
private List<String> orderBy;
private List<String> orderColumns;
private boolean joinWithAccessList;
@ -78,8 +78,8 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
private boolean usedToAugmentTasks;
private boolean callerRolesAndAccessIdsAlreadyHandled;
WorkbasketQueryImpl(TaskanaEngine taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
WorkbasketQueryImpl(TaskanaEngine.Internal taskanaEngine) {
this.taskanaEngine = taskanaEngine;
this.orderBy = new ArrayList<>();
this.orderColumns = new ArrayList<>();
this.callerRolesAndAccessIdsAlreadyHandled = false;
@ -354,7 +354,7 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
@Override
public WorkbasketQuery accessIdsHavePermission(WorkbasketPermission permission, String... accessIds)
throws InvalidArgumentException, NotAuthorizedException {
taskanaEngine.checkRoleMembership(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN);
// Checking pre-conditions
if (permission == null) {
throw new InvalidArgumentException("Permission can´t be null.");
@ -670,10 +670,10 @@ public class WorkbasketQueryImpl implements WorkbasketQuery {
// (f,t) -> cannot happen, cannot be matched to meaningful query
joinWithAccessList = true;
checkReadPermission = true;
if (taskanaEngine.isUserInRole(TaskanaRole.ADMIN) && accessId == null) {
if (taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN) && accessId == null) {
checkReadPermission = false;
joinWithAccessList = false;
} else if (taskanaEngine.isUserInRole(TaskanaRole.BUSINESS_ADMIN) && !usedToAugmentTasks) {
} else if (taskanaEngine.getEngine().isUserInRole(TaskanaRole.BUSINESS_ADMIN) && !usedToAugmentTasks) {
checkReadPermission = false;
if (accessId == null && permission == null) {
joinWithAccessList = false;

View File

@ -26,7 +26,7 @@ public class WorkbasketReportBuilderImpl
private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketReportBuilderImpl.class);
private List<CombinedClassificationFilter> combinedClassificationFilter;
WorkbasketReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
WorkbasketReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
super(taskanaEngine, taskMonitorMapper);
}
@ -43,7 +43,7 @@ public class WorkbasketReportBuilderImpl
@Override
public WorkbasketReport buildReport() throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to buildReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try {
this.taskanaEngine.openConnection();
WorkbasketReport report = new WorkbasketReport(this.columnHeaders);
@ -62,7 +62,7 @@ public class WorkbasketReportBuilderImpl
@Override
public WorkbasketReport buildPlannedDateBasedReport() throws NotAuthorizedException, InvalidArgumentException {
LOGGER.debug("entry to buildPlannedDateReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try {
this.taskanaEngine.openConnection();
WorkbasketReport report = new WorkbasketReport(this.columnHeaders);

View File

@ -43,14 +43,14 @@ public class WorkbasketServiceImpl implements WorkbasketService {
private static final Logger LOGGER = LoggerFactory.getLogger(WorkbasketServiceImpl.class);
private static final String ID_PREFIX_WORKBASKET = "WBI";
private static final String ID_PREFIX_WORKBASKET_AUTHORIZATION = "WAI";
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngine;
private WorkbasketMapper workbasketMapper;
private DistributionTargetMapper distributionTargetMapper;
private WorkbasketAccessMapper workbasketAccessMapper;
WorkbasketServiceImpl(TaskanaEngine taskanaEngine, WorkbasketMapper workbasketMapper,
WorkbasketServiceImpl(TaskanaEngine.Internal taskanaEngine, WorkbasketMapper workbasketMapper,
DistributionTargetMapper distributionTargetMapper, WorkbasketAccessMapper workbasketAccessMapper) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
this.taskanaEngine = taskanaEngine;
this.workbasketMapper = workbasketMapper;
this.distributionTargetMapper = distributionTargetMapper;
this.workbasketAccessMapper = workbasketAccessMapper;
@ -68,7 +68,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
throw new WorkbasketNotFoundException(workbasketId,
"Workbasket with id " + workbasketId + " was not found.");
}
if (!taskanaEngine.isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
if (!taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
this.checkAuthorization(workbasketId, WorkbasketPermission.READ);
}
return result;
@ -90,7 +90,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
throw new WorkbasketNotFoundException(workbasketKey, domain,
"Workbasket with key " + workbasketKey + " and domain " + domain + " was not found.");
}
if (!taskanaEngine.isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
if (!taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
this.checkAuthorization(workbasketKey, domain, WorkbasketPermission.READ);
}
return result;
@ -104,8 +104,8 @@ public class WorkbasketServiceImpl implements WorkbasketService {
public Workbasket createWorkbasket(Workbasket newWorkbasket)
throws InvalidWorkbasketException, NotAuthorizedException, WorkbasketAlreadyExistException,
DomainNotFoundException {
LOGGER.debug("entry to createWorkbasket(workbasket)", newWorkbasket);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
LOGGER.debug("entry to createtWorkbasket(workbasket)", newWorkbasket);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
WorkbasketImpl workbasket = (WorkbasketImpl) newWorkbasket;
try {
@ -137,7 +137,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
public Workbasket updateWorkbasket(Workbasket workbasketToUpdate)
throws NotAuthorizedException {
LOGGER.debug("entry to updateWorkbasket(workbasket)", workbasketToUpdate);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
WorkbasketImpl workbasket = (WorkbasketImpl) workbasketToUpdate;
try {
@ -168,7 +168,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
public WorkbasketAccessItem createWorkbasketAccessItem(WorkbasketAccessItem workbasketAccessItem)
throws InvalidArgumentException, NotAuthorizedException, WorkbasketNotFoundException {
LOGGER.debug("entry to createWorkbasketAccessItemn(workbasketAccessItem = {})", workbasketAccessItem);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
WorkbasketAccessItemImpl accessItem = (WorkbasketAccessItemImpl) workbasketAccessItem;
try {
taskanaEngine.openConnection();
@ -199,7 +199,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
public void setWorkbasketAccessItems(String workbasketId, List<WorkbasketAccessItem> wbAccessItems)
throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to setWorkbasketAccessItems(workbasketAccessItems = {})", wbAccessItems.toString());
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
List<WorkbasketAccessItemImpl> newItems = new ArrayList<>();
try {
taskanaEngine.openConnection();
@ -240,7 +240,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
@Override
public void deleteWorkbasketAccessItem(String accessItemId) throws NotAuthorizedException {
LOGGER.debug("entry to deleteWorkbasketAccessItem(id = {})", accessItemId);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
workbasketAccessMapper.delete(accessItemId);
@ -254,7 +254,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
@Override
public void deleteWorkbasketAccessItemsForAccessId(String accessId) throws NotAuthorizedException {
LOGGER.debug("entry to deleteWorkbasketAccessItemsForAccessId(accessId = {})", accessId);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
workbasketAccessMapper.deleteAccessItemsForAccessId(accessId);
@ -350,12 +350,12 @@ public class WorkbasketServiceImpl implements WorkbasketService {
private boolean skipAuthorizationCheck() {
// Skip permission check is security is not enabled
if (!taskanaEngine.getConfiguration().isSecurityEnabled()) {
if (!taskanaEngine.getEngine().getConfiguration().isSecurityEnabled()) {
LOGGER.debug("Skipping permissions check since security is disabled.");
return true;
}
if (taskanaEngine.isUserInRole(TaskanaRole.ADMIN)) {
if (taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN)) {
LOGGER.debug("Skipping permissions check since user is in role ADMIN.");
return true;
}
@ -367,7 +367,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
public WorkbasketAccessItem updateWorkbasketAccessItem(WorkbasketAccessItem workbasketAccessItem)
throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to updateWorkbasketAccessItem(workbasketAccessItem = {}", workbasketAccessItem);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
WorkbasketAccessItemImpl accessItem = (WorkbasketAccessItemImpl) workbasketAccessItem;
try {
taskanaEngine.openConnection();
@ -394,7 +394,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
@Override
public List<WorkbasketAccessItem> getWorkbasketAccessItems(String workbasketId) throws NotAuthorizedException {
LOGGER.debug("entry to getWorkbasketAccessItems(workbasketId = {})", workbasketId);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
List<WorkbasketAccessItem> result = new ArrayList<>();
try {
taskanaEngine.openConnection();
@ -521,7 +521,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
taskanaEngine.openConnection();
// check that source workbasket exists
getWorkbasket(workbasketId);
if (!taskanaEngine.isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
if (!taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
checkAuthorization(workbasketId, WorkbasketPermission.READ);
}
List<WorkbasketSummaryImpl> distributionTargets = workbasketMapper
@ -547,7 +547,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
taskanaEngine.openConnection();
// check that source workbasket exists
Workbasket workbasket = getWorkbasket(workbasketKey, domain);
if (!taskanaEngine.isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
if (!taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
checkAuthorization(workbasket.getId(), WorkbasketPermission.READ);
}
List<WorkbasketSummaryImpl> distributionTargets = workbasketMapper
@ -574,7 +574,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
taskanaEngine.openConnection();
// check that source workbasket exists
getWorkbasket(workbasketId);
if (!taskanaEngine.isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
if (!taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
checkAuthorization(workbasketId, WorkbasketPermission.READ);
}
List<WorkbasketSummaryImpl> distributionSources = workbasketMapper
@ -600,7 +600,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
taskanaEngine.openConnection();
// check that source workbasket exists
Workbasket workbasket = getWorkbasket(workbasketKey, domain);
if (!taskanaEngine.isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
if (!taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN)) {
checkAuthorization(workbasket.getId(), WorkbasketPermission.READ);
}
List<WorkbasketSummaryImpl> distributionSources = workbasketMapper
@ -625,7 +625,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
sourceWorkbasketId,
LoggerUtils.listToString(targetWorkbasketIds));
}
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
// check existence of source workbasket
@ -660,7 +660,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
throws NotAuthorizedException, WorkbasketNotFoundException {
LOGGER.debug("entry to addDistributionTarget(sourceWorkbasketId = {}, targetWorkbasketId = {})",
sourceWorkbasketId, targetWorkbasketId);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
// check existence of source workbasket
@ -693,7 +693,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
throws NotAuthorizedException {
LOGGER.debug("entry to removeDistributionTarget(sourceWorkbasketId = {}, targetWorkbasketId = {})",
sourceWorkbasketId, targetWorkbasketId);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
// don't check existence of source / target workbasket to enable cleanup even if the db is corrupted
@ -729,7 +729,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
public boolean deleteWorkbasket(String workbasketId)
throws NotAuthorizedException, WorkbasketNotFoundException, WorkbasketInUseException, InvalidArgumentException {
LOGGER.debug("entry to deleteWorkbasket(workbasketId = {})", workbasketId);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
@ -740,7 +740,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
// check if the workbasket does exist and is empty (Task)
this.getWorkbasket(workbasketId);
long numTasksNotCompletedInWorkbasket = taskanaEngine.getTaskService()
long numTasksNotCompletedInWorkbasket = taskanaEngine.getEngine().getTaskService()
.createTaskQuery()
.workbasketIdIn(workbasketId)
.stateNotIn(
@ -752,7 +752,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
"Workbasket " + workbasketId + " contains non-completed tasks and can´t be marked for deletion.");
}
long numTasksInWorkbasket = taskanaEngine.getTaskService()
long numTasksInWorkbasket = taskanaEngine.getEngine().getTaskService()
.createTaskQuery()
.workbasketIdIn(workbasketId)
.count();
@ -774,7 +774,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
private void markWorkbasketForDeletion(String workbasketId)
throws NotAuthorizedException, InvalidArgumentException {
LOGGER.debug("entry to markWorkbasketForDeletion(workbasketId = {})", workbasketId);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
@ -797,7 +797,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
LOGGER.debug("entry to deleteWorkbaskets(workbasketId = {})", LoggerUtils.listToString(workbasketsIds));
}
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try {
taskanaEngine.openConnection();
@ -834,7 +834,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
@Override
public WorkbasketAccessItemQuery createWorkbasketAccessItemQuery() throws NotAuthorizedException {
taskanaEngine.checkRoleMembership(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN);
taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.ADMIN, TaskanaRole.BUSINESS_ADMIN);
return new WorkbasketAccessItemQueryImpl(this.taskanaEngine);
}

View File

@ -1,12 +1,11 @@
package acceptance.history;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import org.junit.Test;
import acceptance.AbstractAccTest;
import pro.taskana.history.HistoryEventProducer;
import pro.taskana.impl.TaskanaEngineImpl;
/**
* Acceptance test for historyEventProducer class.
@ -15,7 +14,7 @@ public class TaskEventProducerTest extends AbstractAccTest {
@Test
public void testHistoryEventProducerIsNotEnabled() {
HistoryEventProducer historyEventProducer = ((TaskanaEngineImpl) taskanaEngine).getHistoryEventProducer();
assertEquals(false, historyEventProducer.isEnabled());
HistoryEventProducer historyEventProducer = taskanaEngine.getHistoryEventProducer();
assertFalse(historyEventProducer.isEnabled());
}
}

View File

@ -33,7 +33,6 @@ import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.DaysToWorkingDaysConverter;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.TaskanaEngineProxyForTest;
import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
import pro.taskana.mappings.AttachmentMapper;
@ -63,7 +62,8 @@ public class CreateTaskAccTest extends AbstractAccTest {
TaskService taskService = taskanaEngine.getTaskService();
Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A");
newTask.setClassificationKey("T2100");
ObjectReference objectReference = createObjectReference("COMPANY_A", "SYSTEM_A", "INSTANCE_A", "VNR", "1234567");
ObjectReference objectReference = createObjectReference("COMPANY_A", "SYSTEM_A", "INSTANCE_A", "VNR",
"1234567");
newTask.setPrimaryObjRef(objectReference);
newTask.setOwner("user_1_1");
Task createdTask = taskService.createTask(newTask);
@ -90,7 +90,7 @@ public class CreateTaskAccTest extends AbstractAccTest {
@WithAccessId(
userName = "user_1_1",
groupNames = { "group_1" })
groupNames = {"group_1"})
@Test
public void testCreateTaskWithPlanned()
throws NotAuthorizedException, InvalidArgumentException,
@ -108,7 +108,7 @@ public class CreateTaskAccTest extends AbstractAccTest {
assertNotNull(createdTask.getCreated());
assertNotNull(createdTask.getPlanned());
assertEquals(createdTask.getCreated().plus(2, ChronoUnit.HOURS).truncatedTo(ChronoUnit.SECONDS),
createdTask.getPlanned().truncatedTo(ChronoUnit.SECONDS));
createdTask.getPlanned().truncatedTo(ChronoUnit.SECONDS));
}
@WithAccessId(
@ -157,7 +157,8 @@ public class CreateTaskAccTest extends AbstractAccTest {
@Test
public void testCreateSimpleTaskWithCustomAttributes()
throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException,
WorkbasketNotFoundException, TaskAlreadyExistException, TaskNotFoundException {
WorkbasketNotFoundException, TaskAlreadyExistException, TaskNotFoundException, NoSuchFieldException,
IllegalAccessException {
TaskService taskService = taskanaEngine.getTaskService();
Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A");
@ -183,7 +184,7 @@ public class CreateTaskAccTest extends AbstractAccTest {
assertEquals(false, createdTask.isRead());
assertEquals(false, createdTask.isTransferred());
// verify that the database content is as expected
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest((TaskanaEngineImpl) taskanaEngine);
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest(taskanaEngine);
try {
SqlSession session = engineProxy.getSqlSession();
Configuration config = session.getConfiguration();
@ -224,7 +225,8 @@ public class CreateTaskAccTest extends AbstractAccTest {
@Test
public void testCreateExternalTaskWithAttachment()
throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException,
WorkbasketNotFoundException, TaskAlreadyExistException, TaskNotFoundException {
WorkbasketNotFoundException, TaskAlreadyExistException, TaskNotFoundException, NoSuchFieldException,
IllegalAccessException {
TaskService taskService = taskanaEngine.getTaskService();
Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A");
@ -240,7 +242,7 @@ public class CreateTaskAccTest extends AbstractAccTest {
assertThat(createdTask.getCreator(), equalTo(CurrentUserContext.getUserid()));
// verify that the database content is as expected
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest((TaskanaEngineImpl) taskanaEngine);
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest(taskanaEngine);
try {
SqlSession session = engineProxy.getSqlSession();
AttachmentMapper mapper = session.getMapper(AttachmentMapper.class);

View File

@ -5,13 +5,12 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static pro.taskana.TaskQueryColumnName.A_CHANNEL;
import static pro.taskana.TaskQueryColumnName.A_CLASSIFICATION_ID;
import static pro.taskana.TaskQueryColumnName.A_REF_VALUE;
import static pro.taskana.TaskQueryColumnName.CLASSIFICATION_KEY;
import static pro.taskana.TaskQueryColumnName.OWNER;
import static pro.taskana.TaskQueryColumnName.STATE;
import static pro.taskana.TaskQueryColumnName.A_CHANNEL;
import static pro.taskana.TaskQueryColumnName.A_REF_VALUE;
import static pro.taskana.TaskQueryColumnName.A_CLASSIFICATION_ID;
import static pro.taskana.TaskQueryColumnName.CLASSIFICATION_KEY;
import java.util.ArrayList;
import java.util.List;
@ -43,7 +42,6 @@ import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.TaskImpl;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.TaskanaEngineProxyForTest;
import pro.taskana.mappings.TaskTestMapper;
import pro.taskana.security.JAASRunner;
@ -63,8 +61,8 @@ public class QueryTasksAccTest extends AbstractAccTest {
}
@WithAccessId(
userName = "teamlead_1",
groupNames = {"admin"})
userName = "teamlead_1",
groupNames = {"admin"})
@Test
public void testQueryTaskValuesForEveryColumn() {
TaskService taskService = taskanaEngine.getTaskService();
@ -281,7 +279,7 @@ public class QueryTasksAccTest extends AbstractAccTest {
.count();
long countAllIds = taskService.createTaskQuery().count();
assertEquals(countAllIds, countAllExternalIds);
}
}
@WithAccessId(
userName = "teamlead_1",
@ -824,7 +822,7 @@ public class QueryTasksAccTest extends AbstractAccTest {
@Test
public void testQueryTaskByCustomAttributes()
throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException,
WorkbasketNotFoundException, TaskAlreadyExistException {
WorkbasketNotFoundException, TaskAlreadyExistException, NoSuchFieldException, IllegalAccessException {
TaskService taskService = taskanaEngine.getTaskService();
Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A");
@ -836,7 +834,7 @@ public class QueryTasksAccTest extends AbstractAccTest {
assertNotNull(createdTask);
// query the task by custom attributes
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest((TaskanaEngineImpl) taskanaEngine);
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest(taskanaEngine);
try {
SqlSession session = engineProxy.getSqlSession();
Configuration config = session.getConfiguration();
@ -1526,5 +1524,4 @@ public class QueryTasksAccTest extends AbstractAccTest {
assertThat(result2.size(), equalTo(10));
}
}

View File

@ -21,12 +21,12 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.CustomField;
import pro.taskana.TaskState;
import pro.taskana.TaskanaEngine;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.NotAuthorizedException;
@ -45,7 +45,10 @@ public class CategoryReportBuilderImplTest {
private TaskMonitorServiceImpl cut;
@Mock
private TaskanaEngineImpl taskanaEngineImplMock;
private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private TaskanaEngine taskanaEngineMock;
@Mock
private TaskanaEngineConfiguration taskanaEngineConfiguration;
@ -56,9 +59,8 @@ public class CategoryReportBuilderImplTest {
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
Mockito.doNothing().when(taskanaEngineImplMock).openConnection();
Mockito.doNothing().when(taskanaEngineImplMock).returnConnection();
when(taskanaEngineImplMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
when(taskanaEngineConfiguration.isGermanPublicHolidaysEnabled()).thenReturn(true);
when(taskanaEngineConfiguration.getCustomHolidays()).thenReturn(null);
}
@ -92,15 +94,17 @@ public class CategoryReportBuilderImplTest {
.customAttributeFilterIn(customAttributeFilter)
.buildReport();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfCategories(any(), any(), any(), any(), any(), any(),
any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(actualResult.getRow("EXTERN").getTotalValue(), 1);
@ -142,15 +146,17 @@ public class CategoryReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.buildReport();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfCategories(any(), any(), any(), any(), any(), any(),
any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(actualResult.getRow("EXTERN").getTotalValue(), 1);
@ -194,15 +200,17 @@ public class CategoryReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.listTaskIdsForSelectedItems(selectedItems);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1))
.getTaskIdsForSelectedItems(any(), any(), any(), any(), any(), any(), any(), any(), any(), eq(false));
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(expectedResult, actualResult);
@ -253,15 +261,17 @@ public class CategoryReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.listCustomAttributeValuesForCustomAttributeName(CustomField.CUSTOM_1);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1))
.getCustomAttributeValuesForReport(any(), any(), any(), any(), any(), any(), any(), any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(expectedResult, actualResult);

View File

@ -8,13 +8,14 @@ import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.ClassificationSummary;
import pro.taskana.TaskanaEngine;
/**
* Test for ClassificationQueryImpl.
@ -24,22 +25,18 @@ import pro.taskana.ClassificationSummary;
@RunWith(MockitoJUnitRunner.class)
public class ClassificationQueryImplTest {
@InjectMocks
private ClassificationQueryImpl classificationQueryImpl;
@Mock
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngineInternal;
@Mock
private SqlSession sqlSession;
@Before
public void setup() {
classificationQueryImpl = new ClassificationQueryImpl(taskanaEngine);
}
@Test
public void should_ReturnList_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
List<ClassificationSummary> result = classificationQueryImpl.nameIn("test", "asd", "blubber")
@ -52,7 +49,7 @@ public class ClassificationQueryImplTest {
@Test
public void should_ReturnListWithOffset_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
List<ClassificationSummary> result = classificationQueryImpl.nameIn("test", "asd", "blubber")
@ -65,7 +62,7 @@ public class ClassificationQueryImplTest {
@Test
public void should_ReturnOneItem_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectOne(any(), any())).thenReturn(new ClassificationSummaryImpl());
ClassificationSummary result = classificationQueryImpl.nameIn("test", "asd", "blubber")

View File

@ -21,12 +21,12 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.CustomField;
import pro.taskana.TaskState;
import pro.taskana.TaskanaEngine;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.NotAuthorizedException;
@ -48,7 +48,10 @@ public class ClassificationReportBuilderImplTest {
private TaskMonitorServiceImpl cut;
@Mock
private TaskanaEngineImpl taskanaEngineImplMock;
private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private TaskanaEngine taskanaEngineMock;
@Mock
private TaskanaEngineConfiguration taskanaEngineConfiguration;
@ -59,9 +62,8 @@ public class ClassificationReportBuilderImplTest {
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
Mockito.doNothing().when(taskanaEngineImplMock).openConnection();
Mockito.doNothing().when(taskanaEngineImplMock).returnConnection();
when(taskanaEngineImplMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
when(taskanaEngineMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineConfiguration.isGermanPublicHolidaysEnabled()).thenReturn(true);
when(taskanaEngineConfiguration.getCustomHolidays()).thenReturn(null);
}
@ -95,15 +97,17 @@ public class ClassificationReportBuilderImplTest {
.customAttributeFilterIn(customAttributeFilter)
.buildReport();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfClassifications(any(), any(), any(), any(), any(), any(),
any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(
@ -146,15 +150,18 @@ public class ClassificationReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.buildReport();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfClassifications(any(), any(), any(), any(), any(), any(),
any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(
@ -194,16 +201,18 @@ public class ClassificationReportBuilderImplTest {
.customAttributeFilterIn(customAttributeFilter)
.buildDetailedReport();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfDetailedClassifications(any(), any(), any(), any(), any(),
any(),
any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
FoldableRow<DetailedMonitorQueryItem> line = actualResult.getRow("CLI:000000000000000000000000000000000001");
assertNotNull(actualResult);
@ -247,16 +256,18 @@ public class ClassificationReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.buildDetailedReport();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfDetailedClassifications(any(), any(), any(), any(), any(),
any(),
any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
FoldableRow<DetailedMonitorQueryItem> line = actualResult.getRow("CLI:000000000000000000000000000000000001");
assertNotNull(actualResult);
@ -303,15 +314,17 @@ public class ClassificationReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.listTaskIdsForSelectedItems(selectedItems);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1))
.getTaskIdsForSelectedItems(any(), any(), any(), any(), any(), any(), any(), any(), any(), eq(false));
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(expectedResult, actualResult);
@ -364,15 +377,17 @@ public class ClassificationReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.listCustomAttributeValuesForCustomAttributeName(CustomField.CUSTOM_1);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1))
.getCustomAttributeValuesForReport(any(), any(), any(), any(), any(), any(), any(), any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(expectedResult, actualResult);
@ -382,7 +397,7 @@ public class ClassificationReportBuilderImplTest {
public void testListCustomAttributeValuesForCustomAttributeNameIsEmptyResult()
throws NotAuthorizedException {
List<String> result = cut.createClassificationReportBuilder()
.workbasketIdIn(Arrays.asList("DieGibtsGarantiertNed"))
.workbasketIdIn(Collections.singletonList("DieGibtsGarantiertNed"))
.listCustomAttributeValuesForCustomAttributeName(CustomField.CUSTOM_10);
assertNotNull(result);
}

View File

@ -2,13 +2,9 @@ package pro.taskana.impl;
import static junit.framework.TestCase.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -18,14 +14,12 @@ import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.Classification;
import pro.taskana.JobService;
import pro.taskana.TaskanaEngine;
import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.DomainNotFoundException;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.jobs.ScheduledJob;
import pro.taskana.mappings.ClassificationMapper;
import pro.taskana.mappings.JobMapper;
/**
* Unit Test for ClassificationServiceImpl.
@ -41,24 +35,22 @@ public class ClassificationServiceImplTest {
@Mock
private ClassificationMapper classificationMapperMock;
@Mock
private TaskanaEngineImpl taskanaEngineImplMock;
private TaskanaEngine taskanaEngineMock;
@Mock
private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private ClassificationQueryImpl classificationQueryImplMock;
@Mock
private SqlSession sqlSessionMock;
@Mock
private JobService jobServiceMock;
@Before
public void setup() {
doNothing().when(taskanaEngineImplMock).openConnection();
doNothing().when(taskanaEngineImplMock).returnConnection();
when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
}
@Test
public void testCreateClassificationQuery() {
cutSpy.createClassificationQuery();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock);
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineInternalMock, taskanaEngineMock,
classificationQueryImplMock);
}
@Test(expected = InvalidArgumentException.class)
@ -67,7 +59,7 @@ public class ClassificationServiceImplTest {
NotAuthorizedException, ClassificationAlreadyExistException {
try {
Classification classification = createDummyClassification();
when(taskanaEngineImplMock.domainExists(any())).thenReturn(true);
when(taskanaEngineInternalMock.domainExists(any())).thenReturn(true);
cutSpy.createClassification(classification);
} catch (InvalidArgumentException e) {
assertEquals(e.getMessage(), "ClassificationId should be null on creation");
@ -93,29 +85,4 @@ public class ClassificationServiceImplTest {
return classificationImpl;
}
/**
* This is the mock of a jobRunner.
*/
private class JobRunnerMock implements JobMapper {
@Override
public void insertJob(ScheduledJob job) {
}
@Override
public List<ScheduledJob> findJobsToRun() {
return null;
}
@Override
public void update(ScheduledJob job) {
}
@Override
public void delete(ScheduledJob job) {
}
}
}

View File

@ -20,12 +20,12 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.CustomField;
import pro.taskana.TaskState;
import pro.taskana.TaskanaEngine;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.NotAuthorizedException;
@ -44,7 +44,10 @@ public class CustomFieldValueReportBuilderImplTest {
private TaskMonitorServiceImpl cut;
@Mock
private TaskanaEngineImpl taskanaEngineImplMock;
private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private TaskanaEngine taskanaEngineMock;
@Mock
private TaskanaEngineConfiguration taskanaEngineConfiguration;
@ -55,9 +58,8 @@ public class CustomFieldValueReportBuilderImplTest {
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
Mockito.doNothing().when(taskanaEngineImplMock).openConnection();
Mockito.doNothing().when(taskanaEngineImplMock).returnConnection();
when(taskanaEngineImplMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
when(taskanaEngineMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineConfiguration.isGermanPublicHolidaysEnabled()).thenReturn(true);
when(taskanaEngineConfiguration.getCustomHolidays()).thenReturn(null);
}
@ -92,16 +94,18 @@ public class CustomFieldValueReportBuilderImplTest {
.customAttributeFilterIn(customAttributeFilter)
.buildReport();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfCustomFieldValues(any(), any(), any(), any(), any(),
any(), any(),
any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(actualResult.getRow("Geschaeftsstelle A").getTotalValue(), 1);
@ -143,15 +147,17 @@ public class CustomFieldValueReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.buildReport();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1))
.getTaskCountOfCustomFieldValues(any(), any(), any(), any(), any(), any(), any(), any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(actualResult.getRow("Geschaeftsstelle A").getTotalValue(), 1);
@ -195,15 +201,16 @@ public class CustomFieldValueReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.listCustomAttributeValuesForCustomAttributeName(CustomField.CUSTOM_1);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1))
.getCustomAttributeValuesForReport(any(), any(), any(), any(), any(), any(), any(), any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock, taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(expectedResult, actualResult);

View File

@ -15,6 +15,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.ObjectReference;
import pro.taskana.TaskanaEngine;
/**
* Test for ObjectReferenceQueryImpl.
@ -27,7 +28,7 @@ public class ObjectReferenceQueryImplTest {
ObjectReferenceQueryImpl objectReferenceQueryImpl;
@Mock
TaskanaEngineImpl taskanaEngine;
TaskanaEngine.Internal taskanaEngine;
@Mock
SqlSession sqlSession;

View File

@ -8,17 +8,16 @@ import java.util.List;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionManager;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.TaskState;
import pro.taskana.TaskSummary;
import pro.taskana.TaskanaEngine;
/**
* Test for TaskQueryImpl.
@ -28,34 +27,32 @@ import pro.taskana.TaskSummary;
@RunWith(MockitoJUnitRunner.class)
public class TaskQueryImplTest {
@Mock
ClassificationServiceImpl classificationService;
@Mock
TaskServiceImpl taskServiceMock;
@InjectMocks
private TaskQueryImpl taskQueryImpl;
@Mock
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngineInternal;
@Mock
private TaskanaEngine taskanaEngine;
@Mock
private SqlSession sqlSession;
@Mock
private SqlSessionManager sqlSessionManager;
@Before
public void setup() {
when(taskanaEngineInternal.getEngine()).thenReturn(taskanaEngine);
when(taskanaEngine.getTaskService()).thenReturn(taskServiceMock);
Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setDatabaseId("h2");
this.taskanaEngine.sessionManager = sqlSessionManager;
when(taskanaEngine.sessionManager.getConfiguration()).thenReturn(configuration);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.getConfiguration()).thenReturn(configuration);
taskQueryImpl = new TaskQueryImpl(taskanaEngine);
taskQueryImpl = new TaskQueryImpl(taskanaEngineInternal);
}
@Test
public void should_ReturnList_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
List<TaskSummary> intermediate = new ArrayList<>();
intermediate.add(new TaskSummaryImpl());
@ -70,7 +67,6 @@ public class TaskQueryImplTest {
@Test
public void should_ReturnListWithOffset_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
List<TaskSummary> intermediate = new ArrayList<>();
intermediate.add(new TaskSummaryImpl());
@ -85,7 +81,6 @@ public class TaskQueryImplTest {
@Test
public void should_ReturnOneItem_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectOne(any(), any())).thenReturn(new TaskSummaryImpl());
List<TaskSummary> intermediate = new ArrayList<>();
intermediate.add(new TaskSummaryImpl());

View File

@ -5,7 +5,6 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@ -15,11 +14,11 @@ import static org.mockito.Mockito.when;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
@ -27,12 +26,12 @@ import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import pro.taskana.Attachment;
import pro.taskana.Classification;
import pro.taskana.ObjectReference;
import pro.taskana.Task;
import pro.taskana.TaskState;
import pro.taskana.TaskSummary;
import pro.taskana.TaskanaEngine;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketPermission;
import pro.taskana.WorkbasketService;
@ -56,14 +55,16 @@ import pro.taskana.security.CurrentUserContext;
@PowerMockIgnore("javax.management.*")
public class TaskServiceImplTest {
@InjectMocks
private TaskServiceImpl cut;
@Mock
private TaskanaEngineConfiguration taskanaEngineConfigurationMock;
@Mock
private TaskanaEngineImpl taskanaEngineMock;
private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private TaskanaEngine taskanaEngineMock;
@Mock
private TaskMapper taskMapperMock;
@ -83,24 +84,16 @@ public class TaskServiceImplTest {
@Mock
private ClassificationQueryImpl classificationQueryImplMock;
@Mock
private WorkbasketQueryImpl workbasketQueryImplMock;
@Mock
private SqlSession sqlSessionMock;
@Before
public void setup() throws WorkbasketNotFoundException {
public void setup() {
MockitoAnnotations.initMocks(this);
when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
when(taskanaEngineMock.getWorkbasketService()).thenReturn(workbasketServiceMock);
when(taskanaEngineMock.getClassificationService()).thenReturn(classificationServiceImplMock);
try {
Mockito.doNothing().when(workbasketServiceMock).checkAuthorization(any(), any());
} catch (NotAuthorizedException e) {
e.printStackTrace();
}
Mockito.doNothing().when(taskanaEngineMock).openConnection();
Mockito.doNothing().when(taskanaEngineMock).returnConnection();
cut = new TaskServiceImpl(taskanaEngineInternalMock, taskMapperMock, attachmentMapperMock);
}
@Test
@ -118,25 +111,24 @@ public class TaskServiceImplTest {
when(taskanaEngineMock.getConfiguration()).thenReturn(taskanaEngineConfigurationMock);
when(taskanaEngineConfigurationMock.isSecurityEnabled()).thenReturn(false);
doReturn(task).when(cutSpy).getTask(task.getId());
doNothing().when(taskMapperMock).update(any());
doNothing().when(workbasketServiceMock).checkAuthorization(destinationWorkbasket.getId(),
WorkbasketPermission.APPEND);
doNothing().when(workbasketServiceMock).checkAuthorization(sourceWorkbasket.getId(),
WorkbasketPermission.TRANSFER);
Task actualTask = cutSpy.transfer(task.getId(), destinationWorkbasket.getId());
verify(taskanaEngineMock, times(1)).openConnection();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasket.getId(),
WorkbasketPermission.APPEND);
verify(workbasketServiceMock, times(1)).checkAuthorization(sourceWorkbasket.getId(),
WorkbasketPermission.TRANSFER);
verify(workbasketServiceMock, times(1)).getWorkbasket(destinationWorkbasket.getId());
verify(taskMapperMock, times(1)).update(any());
verify(taskanaEngineMock, times(1)).returnConnection();
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineMock).getHistoryEventProducer();
verify(taskanaEngineMock).getWorkbasketService();
verify(taskanaEngineMock).getClassificationService();
verifyNoMoreInteractions(attachmentMapperMock, taskanaEngineConfigurationMock, taskanaEngineMock,
taskMapperMock, objectReferenceMapperMock, workbasketServiceMock, sqlSessionMock,
classificationQueryImplMock);
taskanaEngineInternalMock, taskMapperMock, objectReferenceMapperMock, workbasketServiceMock,
sqlSessionMock, classificationQueryImplMock);
assertThat(actualTask.isRead(), equalTo(false));
assertThat(actualTask.getState(), equalTo(TaskState.READY));
@ -148,7 +140,6 @@ public class TaskServiceImplTest {
public void testTaskSummaryEqualsHashCode() throws InterruptedException {
Classification classification = createDummyClassification();
Workbasket wb = createWorkbasket("WB-ID", "WB-Key");
Attachment attachment = JunitHelper.createDefaultAttachment();
ObjectReference objectReference = JunitHelper.createDefaultObjRef();
TaskImpl taskBefore = createUnitTestTask("ID", "taskName", wb.getKey(), classification);
taskBefore.setPrimaryObjRef(objectReference);

View File

@ -5,6 +5,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.powermock.api.mockito.PowerMockito.when;
import java.util.Arrays;
@ -17,12 +18,12 @@ import org.junit.runner.RunWith;
import org.mockito.InOrder;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.TaskState;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaRole;
import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.impl.report.item.TaskQueryItem;
@ -39,10 +40,10 @@ public class TaskStatusReportBuilderImplTest {
private TaskMonitorServiceImpl cut;
@Mock
private TaskanaEngineImpl taskanaEngineImplMock;
private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private TaskanaEngineConfiguration taskanaEngineConfiguration;
private TaskanaEngine taskanaEngineMock;
@Mock
private TaskMonitorMapper taskMonitorMapperMock;
@ -50,8 +51,7 @@ public class TaskStatusReportBuilderImplTest {
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
Mockito.doNothing().when(taskanaEngineImplMock).openConnection();
Mockito.doNothing().when(taskanaEngineImplMock).returnConnection();
when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
}
@Test
@ -72,10 +72,14 @@ public class TaskStatusReportBuilderImplTest {
TaskStatusReport report = cut.createTaskStatusReportBuilder().buildReport();
// then
InOrder inOrder = inOrder(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineImplMock);
inOrder.verify(taskanaEngineImplMock).openConnection();
InOrder inOrder = inOrder(taskanaEngineMock, taskanaEngineInternalMock, taskMonitorMapperMock);
inOrder.verify(taskanaEngineInternalMock).getEngine();
inOrder.verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
inOrder.verify(taskanaEngineInternalMock).openConnection();
inOrder.verify(taskMonitorMapperMock).getTasksCountByState(eq(null), eq(null));
inOrder.verify(taskanaEngineImplMock).returnConnection();
inOrder.verify(taskanaEngineInternalMock).returnConnection();
inOrder.verifyNoMoreInteractions();
verifyNoMoreInteractions(taskanaEngineMock, taskanaEngineInternalMock, taskMonitorMapperMock);
assertNotNull(report);
assertEquals(1, report.rowSize());
@ -103,10 +107,14 @@ public class TaskStatusReportBuilderImplTest {
TaskStatusReport report = cut.createTaskStatusReportBuilder().stateIn(Collections.emptyList()).buildReport();
// then
InOrder inOrder = inOrder(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineImplMock);
inOrder.verify(taskanaEngineImplMock).openConnection();
InOrder inOrder = inOrder(taskanaEngineMock, taskMonitorMapperMock, taskanaEngineInternalMock);
inOrder.verify(taskanaEngineInternalMock).getEngine();
inOrder.verify(taskanaEngineMock).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
inOrder.verify(taskanaEngineInternalMock).openConnection();
inOrder.verify(taskMonitorMapperMock).getTasksCountByState(eq(null), eq(Collections.emptyList()));
inOrder.verify(taskanaEngineImplMock).returnConnection();
inOrder.verify(taskanaEngineInternalMock).returnConnection();
inOrder.verifyNoMoreInteractions();
verifyNoMoreInteractions(taskanaEngineMock, taskMonitorMapperMock, taskanaEngineInternalMock);
assertNotNull(report);
assertEquals(1, report.rowSize());

View File

@ -1,7 +1,11 @@
package pro.taskana.impl;
import java.lang.reflect.Field;
import org.apache.ibatis.session.SqlSession;
import pro.taskana.TaskanaEngine;
/**
* Utility class to enable unit tests to access mappers directly.
*
@ -9,14 +13,16 @@ import org.apache.ibatis.session.SqlSession;
*/
public class TaskanaEngineProxyForTest {
TaskanaEngineImpl engine;
TaskanaEngine.Internal engine;
public TaskanaEngineProxyForTest(TaskanaEngineImpl taskanaEngine) {
engine = taskanaEngine;
public TaskanaEngineProxyForTest(TaskanaEngine taskanaEngine) throws NoSuchFieldException, IllegalAccessException {
Field internal = TaskanaEngineImpl.class.getDeclaredField("internal");
internal.setAccessible(true);
engine = (TaskanaEngine.Internal) internal.get(taskanaEngine);
}
public SqlSession getSqlSession() {
return engine.sessionManager;
return engine.getSqlSession();
}
public void openConnection() {

View File

@ -8,12 +8,13 @@ import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.TaskanaEngine;
import pro.taskana.WorkbasketAccessItem;
/**
@ -24,22 +25,18 @@ import pro.taskana.WorkbasketAccessItem;
@RunWith(MockitoJUnitRunner.class)
public class WorkbasketAccessItemQueryImplTest {
@InjectMocks
private WorkbasketAccessItemQueryImpl workbasketAccessItemQueryImpl;
@Mock
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngineInternal;
@Mock
private SqlSession sqlSession;
@Before
public void setup() {
workbasketAccessItemQueryImpl = new WorkbasketAccessItemQueryImpl(taskanaEngine);
}
@Test
public void should_ReturnList_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
List<WorkbasketAccessItem> result = workbasketAccessItemQueryImpl.accessIdIn("test", "asd")
@ -49,7 +46,7 @@ public class WorkbasketAccessItemQueryImplTest {
@Test
public void should_ReturnListWithOffset_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
List<WorkbasketAccessItem> result = workbasketAccessItemQueryImpl.accessIdIn("test", "asd")
@ -59,7 +56,7 @@ public class WorkbasketAccessItemQueryImplTest {
@Test
public void should_ReturnOneItem_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectOne(any(), any())).thenReturn(new WorkbasketAccessItemImpl());
WorkbasketAccessItem result = workbasketAccessItemQueryImpl.accessIdIn("test", "asd")

View File

@ -11,9 +11,11 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.TaskanaEngine;
import pro.taskana.WorkbasketSummary;
/**
@ -24,22 +26,26 @@ import pro.taskana.WorkbasketSummary;
@RunWith(MockitoJUnitRunner.class)
public class WorkbasketQueryImplTest {
@InjectMocks
private WorkbasketQueryImpl workbasketQueryImpl;
@Mock
private TaskanaEngineImpl taskanaEngine;
private TaskanaEngine.Internal taskanaEngineInternal;
@Mock
private TaskanaEngine taskanaEngine;
@Mock
private SqlSession sqlSession;
@Before
public void setup() {
workbasketQueryImpl = new WorkbasketQueryImpl(taskanaEngine);
when(taskanaEngineInternal.getEngine()).thenReturn(taskanaEngine);
}
@Test
public void should_ReturnList_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
List<WorkbasketSummary> result = workbasketQueryImpl
@ -51,7 +57,7 @@ public class WorkbasketQueryImplTest {
@Test
public void should_ReturnListWithOffset_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
List<WorkbasketSummary> result = workbasketQueryImpl
@ -63,7 +69,7 @@ public class WorkbasketQueryImplTest {
@Test
public void should_ReturnOneItem_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectOne(any(), any())).thenReturn(new WorkbasketSummaryImpl());
WorkbasketSummary result = workbasketQueryImpl

View File

@ -21,12 +21,12 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.CustomField;
import pro.taskana.TaskState;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaRole;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.InvalidArgumentException;
@ -47,7 +47,10 @@ public class WorkbasketReportBuilderImplTest {
private TaskMonitorServiceImpl cut;
@Mock
private TaskanaEngineImpl taskanaEngineImplMock;
private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private TaskanaEngine taskanaEngineMock;
@Mock
private TaskanaEngineConfiguration taskanaEngineConfiguration;
@ -58,9 +61,8 @@ public class WorkbasketReportBuilderImplTest {
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
Mockito.doNothing().when(taskanaEngineImplMock).openConnection();
Mockito.doNothing().when(taskanaEngineImplMock).returnConnection();
when(taskanaEngineImplMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
when(taskanaEngineMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineConfiguration.isGermanPublicHolidaysEnabled()).thenReturn(true);
when(taskanaEngineConfiguration.getCustomHolidays()).thenReturn(null);
}
@ -76,8 +78,8 @@ public class WorkbasketReportBuilderImplTest {
List<String> excludedClassificationIds = Collections.singletonList("L20000");
Map<CustomField, String> customAttributeFilter = new HashMap<>();
customAttributeFilter.put(CustomField.CUSTOM_1, "Geschaeftsstelle A");
List<CombinedClassificationFilter> combinedClassificationFilter = Arrays
.asList(new CombinedClassificationFilter("CLI:000000000000000000000000000000000003",
List<CombinedClassificationFilter> combinedClassificationFilter = Collections.singletonList(
new CombinedClassificationFilter("CLI:000000000000000000000000000000000003",
"CLI:000000000000000000000000000000000008"));
List<MonitorQueryItem> expectedResult = new ArrayList<>();
@ -100,16 +102,18 @@ public class WorkbasketReportBuilderImplTest {
.combinedClassificationFilterIn(combinedClassificationFilter)
.buildReport();
verify(taskanaEngineImplMock, times(1))
verify(taskanaEngineInternalMock, times(1))
.openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfWorkbaskets(any(), any(), any(), any(),
any(), any(), any(), any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(
@ -128,8 +132,8 @@ public class WorkbasketReportBuilderImplTest {
List<String> excludedClassificationIds = Collections.singletonList("L20000");
Map<CustomField, String> customAttributeFilter = new HashMap<>();
customAttributeFilter.put(CustomField.CUSTOM_1, "Geschaeftsstelle A");
List<CombinedClassificationFilter> combinedClassificationFilter = Arrays
.asList(new CombinedClassificationFilter("CLI:000000000000000000000000000000000003",
List<CombinedClassificationFilter> combinedClassificationFilter = Collections.singletonList(
new CombinedClassificationFilter("CLI:000000000000000000000000000000000003",
"CLI:000000000000000000000000000000000008"));
List<TimeIntervalColumnHeader> columnHeaders = Collections.singletonList(
new TimeIntervalColumnHeader(0, 0));
@ -156,15 +160,17 @@ public class WorkbasketReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.buildReport();
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfWorkbaskets(any(), any(), any(), any(), any(), any(),
any(), any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(
@ -209,15 +215,17 @@ public class WorkbasketReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.listTaskIdsForSelectedItems(selectedItems);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1))
.getTaskIdsForSelectedItems(any(), any(), any(), any(), any(), any(), any(), any(), any(), eq(false));
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(expectedResult, actualResult);
@ -269,15 +277,17 @@ public class WorkbasketReportBuilderImplTest {
.withColumnHeaders(columnHeaders)
.listCustomAttributeValuesForCustomAttributeName(CustomField.CUSTOM_1);
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1))
.getCustomAttributeValuesForReport(any(), any(), any(), any(), any(), any(), any(), any());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(expectedResult, actualResult);
@ -327,10 +337,11 @@ public class WorkbasketReportBuilderImplTest {
.combinedClassificationFilterIn(combinedClassificationFilter)
.buildPlannedDateBasedReport();
verify(taskanaEngineImplMock, times(1))
verify(taskanaEngineInternalMock, times(1))
.openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
verify(taskanaEngineImplMock, times(2)).getConfiguration();
verify(taskanaEngineMock, times(1)).checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfWorkbasketsBasedOnPlannedDate(
@ -342,8 +353,9 @@ public class WorkbasketReportBuilderImplTest {
excludedClassificationIds,
customAttributeFilter,
combinedClassificationFilter);
verify(taskanaEngineImplMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration);
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult);
assertEquals(

View File

@ -5,7 +5,6 @@ import static org.hamcrest.core.IsNot.not;
import static org.hamcrest.core.StringStartsWith.startsWith;
import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.times;
@ -17,20 +16,19 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.TaskQuery;
import pro.taskana.TaskService;
import pro.taskana.TaskSummary;
import pro.taskana.TaskanaEngine;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketType;
import pro.taskana.configuration.TaskanaEngineConfiguration;
@ -42,7 +40,6 @@ import pro.taskana.exceptions.WorkbasketAlreadyExistException;
import pro.taskana.exceptions.WorkbasketInUseException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.mappings.DistributionTargetMapper;
import pro.taskana.mappings.TaskMapper;
import pro.taskana.mappings.WorkbasketAccessMapper;
import pro.taskana.mappings.WorkbasketMapper;
@ -61,12 +58,6 @@ public class WorkbasketServiceImplTest {
@Mock
private WorkbasketMapper workbasketMapperMock;
@Mock
private TaskMapper taskMapperMock;
@Mock
private SqlSession sqlSessionMock;
@Mock
private DistributionTargetMapper distributionTargetMapperMock;
@ -80,14 +71,17 @@ public class WorkbasketServiceImplTest {
private TaskQuery taskQueryMock;
@Mock
private TaskanaEngineImpl taskanaEngineImplMock;
private TaskanaEngine taskanaEngine;
@Mock
private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private TaskanaEngineConfiguration taskanaEngineConfigurationMock;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngine);
}
@Test
@ -96,26 +90,26 @@ public class WorkbasketServiceImplTest {
WorkbasketAlreadyExistException, DomainNotFoundException {
final int distTargetAmount = 2;
WorkbasketImpl expectedWb = createTestWorkbasket(null, "Key-1");
doNothing().when(workbasketMapperMock).insert(expectedWb);
doReturn(expectedWb).when(cutSpy).getWorkbasket(any());
when(taskanaEngineImplMock.domainExists(any())).thenReturn(true);
when(taskanaEngineInternalMock.domainExists(any())).thenReturn(true);
Workbasket actualWb = cutSpy.createWorkbasket(expectedWb);
cutSpy.setDistributionTargets(expectedWb.getId(), createTestDistributionTargets(distTargetAmount));
verify(taskanaEngineImplMock, times(4)).openConnection();
verify(taskanaEngineInternalMock, times(4)).openConnection();
verify(workbasketMapperMock, times(3)).insert(any());
verify(cutSpy, times(distTargetAmount + 1)).getWorkbasket(any());
verify(distributionTargetMapperMock, times(1)).deleteAllDistributionTargetsBySourceId(any());
verify(distributionTargetMapperMock, times(distTargetAmount)).insert(any(), any());
verify(workbasketMapperMock, times(3)).findByKeyAndDomain(any(), any());
verify(workbasketMapperMock, times(1)).update(any());
verify(taskanaEngineImplMock, times(4)).returnConnection();
verify(taskanaEngineImplMock, times(4)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(3)).domainExists(any());
verify(taskanaEngineInternalMock, times(4)).returnConnection();
verify(taskanaEngine, times(4)).checkRoleMembership(any());
verify(taskanaEngineInternalMock, times(4)).getEngine();
verify(taskanaEngineInternalMock, times(3)).domainExists(any());
verifyNoMoreInteractions(taskQueryMock, taskServiceMock, workbasketMapperMock, workbasketAccessMapperMock,
distributionTargetMapperMock,
taskanaEngineImplMock, taskanaEngineConfigurationMock);
taskanaEngineInternalMock, taskanaEngine, taskanaEngineConfigurationMock);
assertThat(actualWb.getId(), not(equalTo(null)));
assertThat(actualWb.getId(), startsWith("WBI"));
assertThat(actualWb.getCreated(), not(equalTo(null)));
@ -127,8 +121,7 @@ public class WorkbasketServiceImplTest {
throws WorkbasketNotFoundException, NotAuthorizedException, InvalidWorkbasketException,
WorkbasketAlreadyExistException, DomainNotFoundException {
WorkbasketImpl expectedWb = createTestWorkbasket("ID-1", "Key-1");
doNothing().when(workbasketMapperMock).insert(expectedWb);
when(taskanaEngineImplMock.domainExists(any())).thenReturn(true);
when(taskanaEngineInternalMock.domainExists(any())).thenReturn(true);
try {
cutSpy.createWorkbasket(expectedWb);
@ -138,17 +131,18 @@ public class WorkbasketServiceImplTest {
doThrow(WorkbasketNotFoundException.class).when(cutSpy).getDistributionTargets(expectedWb.getId()).get(0);
} catch (WorkbasketNotFoundException e) {
verify(taskanaEngineImplMock, times(3)).openConnection();
verify(taskanaEngineInternalMock, times(3)).openConnection();
verify(workbasketMapperMock, times(1)).insert(expectedWb);
verify(workbasketMapperMock, times(1)).findById(any());
verify(workbasketMapperMock, times(1)).findByKeyAndDomain(any(), any());
verify(cutSpy, times(1)).getWorkbasket(any());
verify(taskanaEngineImplMock, times(3)).returnConnection();
verify(taskanaEngineImplMock, times(2)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(1)).domainExists(any());
verify(taskanaEngineInternalMock, times(3)).returnConnection();
verify(taskanaEngine, times(2)).checkRoleMembership(any());
verify(taskanaEngineInternalMock, times(2)).getEngine();
verify(taskanaEngineInternalMock, times(1)).domainExists(any());
verifyNoMoreInteractions(taskQueryMock, taskServiceMock, workbasketMapperMock, workbasketAccessMapperMock,
distributionTargetMapperMock,
taskanaEngineImplMock, taskanaEngineConfigurationMock);
taskanaEngineInternalMock, taskanaEngine, taskanaEngineConfigurationMock);
throw e;
}
}
@ -159,19 +153,18 @@ public class WorkbasketServiceImplTest {
public void testCreateWorkbasket_NotCreated()
throws Exception {
WorkbasketImpl expectedWb = createTestWorkbasket(null, "Key-1");
doNothing().when(workbasketMapperMock).insert(expectedWb);
when(workbasketMapperMock.findById(any())).thenThrow(WorkbasketNotFoundException.class);
try {
cutSpy.createWorkbasket(expectedWb);
} catch (Exception e) {
verify(taskanaEngineImplMock, times(1)).openConnection();
verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(workbasketMapperMock, times(1)).insert(expectedWb);
verify(workbasketMapperMock, times(1)).findById(expectedWb.getId());
verify(taskanaEngineImplMock, times(1)).returnConnection();
verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskQueryMock, taskServiceMock, workbasketMapperMock, workbasketAccessMapperMock,
distributionTargetMapperMock,
taskanaEngineImplMock, taskanaEngineConfigurationMock);
taskanaEngineInternalMock, taskanaEngineConfigurationMock);
throw e;
}
}
@ -185,13 +178,13 @@ public class WorkbasketServiceImplTest {
try {
cutSpy.deleteWorkbasket(wb.getId());
} catch (WorkbasketNotFoundException e) {
verify(taskanaEngineImplMock, times(2)).openConnection();
verify(taskanaEngineInternalMock, times(2)).openConnection();
verify(cutSpy, times(1)).getWorkbasket(wb.getId());
verify(taskanaEngineImplMock, times(0)).getTaskService();
verify(taskanaEngine, times(0)).getTaskService();
verify(taskServiceMock, times(0)).createTaskQuery();
verify(taskQueryMock, times(0)).workbasketIdIn(wb.getId());
verify(taskQueryMock, times(0)).count();
verify(taskanaEngineImplMock, times(2)).returnConnection();
verify(taskanaEngineInternalMock, times(2)).returnConnection();
verifyNoMoreInteractions(taskQueryMock, taskServiceMock, workbasketAccessMapperMock,
distributionTargetMapperMock, taskanaEngineConfigurationMock);
throw e;

View File

@ -35,7 +35,6 @@ import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketAlreadyExistException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.TaskanaEngineProxyForTest;
import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.impl.configuration.DBCleaner;
@ -54,12 +53,9 @@ import pro.taskana.security.WithAccessId;
public class WorkbasketServiceImplIntAutocommitTest {
private static final int SLEEP_TIME = 100;
private static final int THREE = 3;
static int counter = 0;
private DataSource dataSource;
private TaskanaEngineConfiguration taskanaEngineConfiguration;
private TaskanaEngine taskanaEngine;
private TaskanaEngineImpl taskanaEngineImpl;
private WorkbasketService workBasketService;
private Instant now;
@ -76,8 +72,7 @@ public class WorkbasketServiceImplIntAutocommitTest {
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false,
TaskanaEngineConfigurationTest.getSchemaName());
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
taskanaEngine.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
workBasketService = taskanaEngine.getWorkbasketService();
DBCleaner cleaner = new DBCleaner();
cleaner.clearDb(dataSource, false);
@ -187,11 +182,11 @@ public class WorkbasketServiceImplIntAutocommitTest {
}
private void updateModifiedTimestamps(Workbasket basket2, Workbasket basket3, Workbasket basket4,
Workbasket basket1) {
Workbasket basket1) throws NoSuchFieldException, IllegalAccessException {
// created and modified timestamps are set by WorkbasketServiceImpl to 'now' when the workbasket is created
// in order to create timestamps distict from the current time, we must use the mapper directly to bypass
// WorkbasketServiceImpl
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest(taskanaEngineImpl);
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest(taskanaEngine);
SqlSession session = engineProxy.getSqlSession();
WorkbasketMapper mapper = session.getMapper(WorkbasketMapper.class);