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 java.sql.SQLException;
import org.apache.ibatis.session.SqlSession;
import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.history.HistoryEventProducer;
/** /**
* The TaskanaEngine represents an overall set of all needed services. * The TaskanaEngine represents an overall set of all needed services.
@ -52,6 +55,12 @@ public interface TaskanaEngine {
*/ */
TaskanaEngineConfiguration getConfiguration(); 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. * sets the connection management mode for taskana.
* *
@ -112,4 +121,52 @@ public interface TaskanaEngine {
EXPLICIT 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; package pro.taskana.history;
import java.util.Iterator;
import java.util.ServiceLoader; import java.util.ServiceLoader;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -16,12 +15,22 @@ import pro.taskana.history.api.TaskanaHistoryEvent;
public final class HistoryEventProducer { public final class HistoryEventProducer {
private static final Logger LOGGER = LoggerFactory.getLogger(HistoryEventProducer.class); private static final Logger LOGGER = LoggerFactory.getLogger(HistoryEventProducer.class);
TaskanaEngineConfiguration taskanaEngineConfiguration;
private static HistoryEventProducer emitterInstance; private static HistoryEventProducer emitterInstance;
private ServiceLoader<TaskanaHistory> serviceLoader; private ServiceLoader<TaskanaHistory> serviceLoader;
private boolean enabled = false; 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) { public static synchronized HistoryEventProducer getInstance(TaskanaEngineConfiguration taskanaEngineConfiguration) {
if (emitterInstance == null) { if (emitterInstance == null) {
emitterInstance = new HistoryEventProducer(taskanaEngineConfiguration); emitterInstance = new HistoryEventProducer(taskanaEngineConfiguration);
@ -39,23 +48,6 @@ public final class HistoryEventProducer {
public void createEvent(TaskanaHistoryEvent event) { public void createEvent(TaskanaHistoryEvent event) {
LOGGER.debug("Sending event to history service providers: {}", event); LOGGER.debug("Sending event to history service providers: {}", event);
serviceLoader.forEach(historyProvider -> { serviceLoader.forEach(historyProvider -> historyProvider.create(event));
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.");
}
} }
} }

View File

@ -33,12 +33,12 @@ abstract class AbstractWorkbasketAccessItemQueryImpl<Q extends AbstractWorkbaske
private String[] workbasketIdIn; private String[] workbasketIdIn;
private String[] idIn; private String[] idIn;
private TaskanaEngineImpl taskanaEngine; private TaskanaEngine.Internal taskanaEngine;
private List<String> orderBy; private List<String> orderBy;
private List<String> orderColumns; private List<String> orderColumns;
AbstractWorkbasketAccessItemQueryImpl(TaskanaEngine taskanaEngine) { AbstractWorkbasketAccessItemQueryImpl(TaskanaEngine.Internal taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine; this.taskanaEngine = taskanaEngine;
orderBy = new ArrayList<>(); orderBy = new ArrayList<>();
orderColumns = new ArrayList<>(); orderColumns = new ArrayList<>();
} }
@ -96,7 +96,7 @@ abstract class AbstractWorkbasketAccessItemQueryImpl<Q extends AbstractWorkbaske
} finally { } finally {
taskanaEngine.returnConnection(); taskanaEngine.returnConnection();
if (LOGGER.isDebugEnabled()) { 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)); LoggerUtils.listToString(result));
} }
} }

View File

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

View File

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

View File

@ -26,7 +26,7 @@ public class ClassificationReportBuilderImpl
private static final Logger LOGGER = LoggerFactory.getLogger(ClassificationReport.Builder.class); private static final Logger LOGGER = LoggerFactory.getLogger(ClassificationReport.Builder.class);
ClassificationReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) { ClassificationReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
super(taskanaEngine, taskMonitorMapper); super(taskanaEngine, taskMonitorMapper);
} }
@ -43,7 +43,7 @@ public class ClassificationReportBuilderImpl
@Override @Override
public ClassificationReport buildReport() throws InvalidArgumentException, NotAuthorizedException { public ClassificationReport buildReport() throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to buildReport(), this = {}", this); LOGGER.debug("entry to buildReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN); this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try { try {
this.taskanaEngine.openConnection(); this.taskanaEngine.openConnection();
ClassificationReport report = new ClassificationReport(this.columnHeaders); ClassificationReport report = new ClassificationReport(this.columnHeaders);
@ -62,7 +62,7 @@ public class ClassificationReportBuilderImpl
@Override @Override
public DetailedClassificationReport buildDetailedReport() throws InvalidArgumentException, NotAuthorizedException { public DetailedClassificationReport buildDetailedReport() throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to buildDetailedReport(), this = {}", this); LOGGER.debug("entry to buildDetailedReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN); this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try { try {
this.taskanaEngine.openConnection(); this.taskanaEngine.openConnection();
DetailedClassificationReport report = new DetailedClassificationReport(this.columnHeaders); 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 static final Logger LOGGER = LoggerFactory.getLogger(ClassificationServiceImpl.class);
private ClassificationMapper classificationMapper; private ClassificationMapper classificationMapper;
private TaskMapper taskMapper; private TaskMapper taskMapper;
private TaskanaEngineImpl taskanaEngine; private TaskanaEngine.Internal taskanaEngine;
ClassificationServiceImpl(TaskanaEngine taskanaEngine, ClassificationMapper classificationMapper, ClassificationServiceImpl(TaskanaEngine.Internal taskanaEngine, ClassificationMapper classificationMapper,
TaskMapper taskMapper) { TaskMapper taskMapper) {
super(); this.taskanaEngine = taskanaEngine;
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine;
this.classificationMapper = classificationMapper; this.classificationMapper = classificationMapper;
this.taskMapper = taskMapper; this.taskMapper = taskMapper;
} }
@ -79,7 +78,7 @@ public class ClassificationServiceImpl implements ClassificationService {
throws ClassificationAlreadyExistException, NotAuthorizedException, throws ClassificationAlreadyExistException, NotAuthorizedException,
DomainNotFoundException, InvalidArgumentException { DomainNotFoundException, InvalidArgumentException {
LOGGER.debug("entry to createClassification(classification = {})", classification); 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())) { if (!taskanaEngine.domainExists(classification.getDomain()) && !"".equals(classification.getDomain())) {
throw new DomainNotFoundException(classification.getDomain(), throw new DomainNotFoundException(classification.getDomain(),
"Domain " + classification.getDomain() + " does not exist in the configuration."); "Domain " + classification.getDomain() + " does not exist in the configuration.");
@ -183,7 +182,7 @@ public class ClassificationServiceImpl implements ClassificationService {
public Classification updateClassification(Classification classification) public Classification updateClassification(Classification classification)
throws NotAuthorizedException, ConcurrencyException, ClassificationNotFoundException, InvalidArgumentException { throws NotAuthorizedException, ConcurrencyException, ClassificationNotFoundException, InvalidArgumentException {
LOGGER.debug("entry to updateClassification(Classification = {})", classification); 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; ClassificationImpl classificationImpl = null;
try { try {
taskanaEngine.openConnection(); taskanaEngine.openConnection();
@ -256,13 +255,13 @@ public class ClassificationServiceImpl implements ClassificationService {
} }
if (classification.getType() != null 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() throw new InvalidArgumentException("Given classification type " + classification.getType()
+ " is not valid according to the configuration."); + " is not valid according to the configuration.");
} }
if (classification.getCategory() != null if (classification.getCategory() != null
&& !taskanaEngine.getConfiguration() && !taskanaEngine.getEngine().getConfiguration()
.getClassificationCategoriesByType(classification.getType()) .getClassificationCategoriesByType(classification.getType())
.contains(classification.getCategory())) { .contains(classification.getCategory())) {
throw new InvalidArgumentException( throw new InvalidArgumentException(
@ -355,7 +354,7 @@ public class ClassificationServiceImpl implements ClassificationService {
public void deleteClassification(String classificationKey, String domain) public void deleteClassification(String classificationKey, String domain)
throws ClassificationInUseException, ClassificationNotFoundException, NotAuthorizedException { throws ClassificationInUseException, ClassificationNotFoundException, NotAuthorizedException {
LOGGER.debug("entry to deleteClassification(key = {}, domain = {})", classificationKey, domain); 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 { try {
taskanaEngine.openConnection(); taskanaEngine.openConnection();
Classification classification = this.classificationMapper.findByKeyAndDomain(classificationKey, domain); Classification classification = this.classificationMapper.findByKeyAndDomain(classificationKey, domain);
@ -374,7 +373,7 @@ public class ClassificationServiceImpl implements ClassificationService {
public void deleteClassification(String classificationId) public void deleteClassification(String classificationId)
throws ClassificationInUseException, ClassificationNotFoundException, NotAuthorizedException { throws ClassificationInUseException, ClassificationNotFoundException, NotAuthorizedException {
LOGGER.debug("entry to deleteClassification(id = {})", classificationId); LOGGER.debug("entry to deleteClassification(id = {})", classificationId);
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN); taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
try { try {
taskanaEngine.openConnection(); taskanaEngine.openConnection();
Classification classification = this.classificationMapper.findById(classificationId); Classification classification = this.classificationMapper.findById(classificationId);
@ -460,7 +459,7 @@ public class ClassificationServiceImpl implements ClassificationService {
*/ */
private void updateCategoryOnAssociatedTasks(ClassificationImpl classificationImpl, private void updateCategoryOnAssociatedTasks(ClassificationImpl classificationImpl,
Classification oldClassification) { Classification oldClassification) {
List<TaskSummary> taskSummaries = taskanaEngine.getTaskService() List<TaskSummary> taskSummaries = taskanaEngine.getEngine().getTaskService()
.createTaskQuery() .createTaskQuery()
.classificationIdIn(oldClassification.getId()) .classificationIdIn(oldClassification.getId())
.list(); .list();
@ -515,7 +514,7 @@ public class ClassificationServiceImpl implements ClassificationService {
ScheduledJob job = new ScheduledJob(); ScheduledJob job = new ScheduledJob();
job.setArguments(args); job.setArguments(args);
job.setType(ScheduledJob.Type.CLASSIFICATIONCHANGEDJOB); 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; private CustomField customField;
CustomFieldValueReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper, CustomFieldValueReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper,
CustomField customField) { CustomField customField) {
super(taskanaEngine, taskMonitorMapper); super(taskanaEngine, taskMonitorMapper);
this.customField = customField; this.customField = customField;
@ -47,7 +47,7 @@ public class CustomFieldValueReportBuilderImpl
public CustomFieldValueReport buildReport() public CustomFieldValueReport buildReport()
throws InvalidArgumentException, NotAuthorizedException { throws InvalidArgumentException, NotAuthorizedException {
LOGGER.debug("entry to buildReport(customField = {}), this = {}", this.customField, this); LOGGER.debug("entry to buildReport(customField = {}), this = {}", this.customField, this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR); this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR);
try { try {
this.taskanaEngine.openConnection(); this.taskanaEngine.openConnection();
CustomFieldValueReport report = new CustomFieldValueReport(this.columnHeaders); 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 static final Logger LOGGER = LoggerFactory.getLogger(JobServiceImpl.class);
private JobMapper jobMapper; private JobMapper jobMapper;
private TaskanaEngineImpl taskanaEngineImpl; private TaskanaEngine.Internal taskanaEngineImpl;
public JobServiceImpl(TaskanaEngine taskanaEngine, JobMapper jobMapper) { public JobServiceImpl(TaskanaEngine.Internal taskanaEngine, JobMapper jobMapper) {
super(); this.taskanaEngineImpl = taskanaEngine;
this.taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
this.jobMapper = jobMapper; this.jobMapper = jobMapper;
} }
@ -94,7 +93,7 @@ public class JobServiceImpl implements JobService {
if (job.getDue() == null) { if (job.getDue() == null) {
job.setDue(Instant.now()); job.setDue(Instant.now());
} }
job.setRetryCount(taskanaEngineImpl.getConfiguration().getMaxNumberOfJobRetries()); job.setRetryCount(taskanaEngineImpl.getEngine().getConfiguration().getMaxNumberOfJobRetries());
LOGGER.debug("Job after initialization: {}", job); LOGGER.debug("Job after initialization: {}", job);
return 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_COUNTER = "pro.taskana.mappings.QueryMapper.countQueryObjectReferences";
private static final String LINK_TO_VALUEMAPPER = "pro.taskana.mappings.QueryMapper.queryObjectReferenceColumnValues"; private static final String LINK_TO_VALUEMAPPER = "pro.taskana.mappings.QueryMapper.queryObjectReferenceColumnValues";
private static final Logger LOGGER = LoggerFactory.getLogger(ObjectReferenceQueryImpl.class); private static final Logger LOGGER = LoggerFactory.getLogger(ObjectReferenceQueryImpl.class);
private TaskanaEngineImpl taskanaEngine; private TaskanaEngine.Internal taskanaEngine;
private ObjectReferenceQueryColumnName columnName; private ObjectReferenceQueryColumnName columnName;
private String[] company; private String[] company;
private String[] system; private String[] system;
@ -36,8 +36,8 @@ public class ObjectReferenceQueryImpl implements ObjectReferenceQuery {
private String[] value; private String[] value;
private List<String> orderBy; private List<String> orderBy;
ObjectReferenceQueryImpl(TaskanaEngine taskanaEngine) { ObjectReferenceQueryImpl(TaskanaEngine.Internal taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine; this.taskanaEngine = taskanaEngine;
this.orderBy = new ArrayList<>(); this.orderBy = new ArrayList<>();
} }

View File

@ -2,6 +2,7 @@ package pro.taskana.impl;
import pro.taskana.CustomField; import pro.taskana.CustomField;
import pro.taskana.TaskMonitorService; import pro.taskana.TaskMonitorService;
import pro.taskana.TaskanaEngine;
import pro.taskana.mappings.TaskMonitorMapper; import pro.taskana.mappings.TaskMonitorMapper;
import pro.taskana.report.CategoryReport; import pro.taskana.report.CategoryReport;
import pro.taskana.report.ClassificationReport; import pro.taskana.report.ClassificationReport;
@ -15,43 +16,43 @@ import pro.taskana.report.WorkbasketReport;
*/ */
public class TaskMonitorServiceImpl implements TaskMonitorService { public class TaskMonitorServiceImpl implements TaskMonitorService {
private TaskanaEngineImpl taskanaEngineImpl; private TaskanaEngine.Internal taskanaEngine;
private TaskMonitorMapper taskMonitorMapper; private TaskMonitorMapper taskMonitorMapper;
TaskMonitorServiceImpl(TaskanaEngineImpl taskanaEngine, TaskMonitorMapper taskMonitorMapper) { TaskMonitorServiceImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
super(); super();
this.taskanaEngineImpl = taskanaEngine; this.taskanaEngine = taskanaEngine;
this.taskMonitorMapper = taskMonitorMapper; this.taskMonitorMapper = taskMonitorMapper;
} }
@Override @Override
public WorkbasketReport.Builder createWorkbasketReportBuilder() { public WorkbasketReport.Builder createWorkbasketReportBuilder() {
return new WorkbasketReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper); return new WorkbasketReportBuilderImpl(taskanaEngine, taskMonitorMapper);
} }
@Override @Override
public CategoryReport.Builder createCategoryReportBuilder() { public CategoryReport.Builder createCategoryReportBuilder() {
return new CategoryReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper); return new CategoryReportBuilderImpl(taskanaEngine, taskMonitorMapper);
} }
@Override @Override
public ClassificationReport.Builder createClassificationReportBuilder() { public ClassificationReport.Builder createClassificationReportBuilder() {
return new ClassificationReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper); return new ClassificationReportBuilderImpl(taskanaEngine, taskMonitorMapper);
} }
@Override @Override
public CustomFieldValueReport.Builder createCustomFieldValueReportBuilder(CustomField customField) { public CustomFieldValueReport.Builder createCustomFieldValueReportBuilder(CustomField customField) {
return new CustomFieldValueReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper, customField); return new CustomFieldValueReportBuilderImpl(taskanaEngine, taskMonitorMapper, customField);
} }
@Override @Override
public TaskStatusReport.Builder createTaskStatusReportBuilder() { public TaskStatusReport.Builder createTaskStatusReportBuilder() {
return new TaskStatusReportBuilderImpl(taskanaEngineImpl, taskMonitorMapper); return new TaskStatusReportBuilderImpl(taskanaEngine, taskMonitorMapper);
} }
@Override @Override
public TimestampReport.Builder createTimestampReportBuilder() { 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 TIME_INTERVAL = "TimeInterval ";
private static final String IS_INVALID = " is invalid."; private static final String IS_INVALID = " is invalid.";
private static final Logger LOGGER = LoggerFactory.getLogger(TaskQueryImpl.class); private static final Logger LOGGER = LoggerFactory.getLogger(TaskQueryImpl.class);
private TaskanaEngineImpl taskanaEngine; private TaskanaEngine.Internal taskanaEngine;
private TaskServiceImpl taskService; private TaskServiceImpl taskService;
private TaskQueryColumnName columnName; private TaskQueryColumnName columnName;
private String[] nameIn; private String[] nameIn;
@ -146,9 +146,9 @@ public class TaskQueryImpl implements TaskQuery {
private boolean addClassificationNameToSelectClauseForOrdering = false; private boolean addClassificationNameToSelectClauseForOrdering = false;
private boolean addAttachmentClassificationNameToSelectClauseForOrdering = false; private boolean addAttachmentClassificationNameToSelectClauseForOrdering = false;
TaskQueryImpl(TaskanaEngine taskanaEngine) { TaskQueryImpl(TaskanaEngine.Internal taskanaEngine) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine; this.taskanaEngine = taskanaEngine;
this.taskService = (TaskServiceImpl) taskanaEngine.getTaskService(); this.taskService = (TaskServiceImpl) taskanaEngine.getEngine().getTaskService();
this.orderBy = new ArrayList<>(); this.orderBy = new ArrayList<>();
this.orderColumns = new ArrayList<>(); this.orderColumns = new ArrayList<>();
this.filterByAccessIdIn = true; this.filterByAccessIdIn = true;
@ -178,7 +178,6 @@ public class TaskQueryImpl implements TaskQuery {
return this; return this;
} }
@Override @Override
public TaskQuery nameLike(String... names) { public TaskQuery nameLike(String... names) {
this.nameLike = toUpperCopy(names); this.nameLike = toUpperCopy(names);
@ -698,23 +697,23 @@ public class TaskQueryImpl implements TaskQuery {
public TaskQuery orderByClassificationName(SortDirection sortDirection) { public TaskQuery orderByClassificationName(SortDirection sortDirection) {
joinWithClassifications = true; joinWithClassifications = true;
addClassificationNameToSelectClauseForOrdering = true; addClassificationNameToSelectClauseForOrdering = true;
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2") return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? addOrderCriteria("CNAME", sortDirection) ? addOrderCriteria("CNAME", sortDirection)
: addOrderCriteria("c.NAME", sortDirection); : addOrderCriteria("c.NAME", sortDirection);
} }
@Override @Override
public TaskQuery orderByAttachmentClassificationName(SortDirection sortDirection) { public TaskQuery orderByAttachmentClassificationName(SortDirection sortDirection) {
joinWithAttachments = true; joinWithAttachments = true;
addAttachmentClassificationNameToSelectClauseForOrdering = true; addAttachmentClassificationNameToSelectClauseForOrdering = true;
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2") return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? addOrderCriteria("ACNAME", sortDirection) ? addOrderCriteria("ACNAME", sortDirection)
: addOrderCriteria("ac.NAME", sortDirection); : addOrderCriteria("ac.NAME", sortDirection);
} }
@Override @Override
public TaskQuery orderByClassificationKey(SortDirection sortDirection) { 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("TCLASSIFICATION_KEY", sortDirection)
: addOrderCriteria("t.CLASSIFICATION_KEY", sortDirection); : addOrderCriteria("t.CLASSIFICATION_KEY", sortDirection);
} }
@ -803,7 +802,7 @@ public class TaskQueryImpl implements TaskQuery {
public TaskQuery orderByAttachmentClassificationKey(SortDirection sortDirection) { public TaskQuery orderByAttachmentClassificationKey(SortDirection sortDirection) {
joinWithAttachments = true; joinWithAttachments = true;
addAttachmentColumnsToSelectClauseForOrdering = true; addAttachmentColumnsToSelectClauseForOrdering = true;
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2") return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? addOrderCriteria("ACLASSIFICATION_KEY", sortDirection) ? addOrderCriteria("ACLASSIFICATION_KEY", sortDirection)
: addOrderCriteria("a.CLASSIFICATION_KEY", sortDirection); : addOrderCriteria("a.CLASSIFICATION_KEY", sortDirection);
} }
@ -812,7 +811,7 @@ public class TaskQueryImpl implements TaskQuery {
public TaskQuery orderByAttachmentClassificationId(SortDirection sortDirection) { public TaskQuery orderByAttachmentClassificationId(SortDirection sortDirection) {
joinWithAttachments = true; joinWithAttachments = true;
addAttachmentColumnsToSelectClauseForOrdering = true; addAttachmentColumnsToSelectClauseForOrdering = true;
return this.taskanaEngine.sessionManager.getConfiguration().getDatabaseId().equals("db2") return this.taskanaEngine.getSqlSession().getConfiguration().getDatabaseId().equals("db2")
? addOrderCriteria("ACLASSIFICATION_ID", sortDirection) ? addOrderCriteria("ACLASSIFICATION_ID", sortDirection)
: addOrderCriteria("a.CLASSIFICATION_ID", sortDirection); : addOrderCriteria("a.CLASSIFICATION_ID", sortDirection);
} }
@ -976,19 +975,21 @@ public class TaskQueryImpl implements TaskQuery {
} }
public String getLinkToMapperScript() { 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_DB2
: LINK_TO_MAPPER; : LINK_TO_MAPPER;
} }
public String getLinkToCounterTaskScript() { 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_DB2
: LINK_TO_COUNTER; : LINK_TO_COUNTER;
} }
private void setupAccessIds() { private void setupAccessIds() {
if (taskanaEngine.isUserInRole(TaskanaRole.ADMIN) || !filterByAccessIdIn) { if (taskanaEngine.getEngine().isUserInRole(TaskanaRole.ADMIN) || !filterByAccessIdIn) {
this.accessIdIn = null; this.accessIdIn = null;
} else if (this.accessIdIn == null) { } else if (this.accessIdIn == null) {
String[] accessIds = new String[0]; String[] accessIds = new String[0];
@ -1154,7 +1155,7 @@ public class TaskQueryImpl implements TaskQuery {
} }
private void checkOpenAndReadPermissionForSpecifiedWorkbaskets() { 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."); LOGGER.debug("Skipping permissions check since user is in role ADMIN.");
return; return;
} }
@ -1178,7 +1179,7 @@ public class TaskQueryImpl implements TaskQuery {
private void checkOpenAndReadPermissionById(String workbasketId) throws NotAuthorizedException { private void checkOpenAndReadPermissionById(String workbasketId) throws NotAuthorizedException {
try { try {
taskanaEngine.getWorkbasketService().checkAuthorization(workbasketId, taskanaEngine.getEngine().getWorkbasketService().checkAuthorization(workbasketId,
WorkbasketPermission.OPEN, WorkbasketPermission.READ); WorkbasketPermission.OPEN, WorkbasketPermission.READ);
} catch (WorkbasketNotFoundException e) { } catch (WorkbasketNotFoundException e) {
LOGGER.warn("The workbasket with the ID '" + workbasketId + "' does not exist.", 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 { private void checkOpenAndReadPermissionByKeyDomain(KeyDomain keyDomain) throws NotAuthorizedException {
try { try {
taskanaEngine.getWorkbasketService().checkAuthorization(keyDomain.getKey(), taskanaEngine.getEngine().getWorkbasketService().checkAuthorization(keyDomain.getKey(),
keyDomain.getDomain(), WorkbasketPermission.OPEN, WorkbasketPermission.READ); keyDomain.getDomain(), WorkbasketPermission.OPEN, WorkbasketPermission.READ);
} catch (WorkbasketNotFoundException e) { } catch (WorkbasketNotFoundException e) {
LOGGER.warn("The workbasket with the KEY '" + keyDomain.getKey() + "' and DOMAIN '" 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() { public String[] getTaskIds() {
return taskIds; return taskIds;
} }
@ -1634,7 +1631,8 @@ public class TaskQueryImpl implements TaskQuery {
return addClassificationNameToSelectClauseForOrdering; return addClassificationNameToSelectClauseForOrdering;
} }
public void setAddClassificationNameToSelectClauseForOrdering(boolean addClassificationNameToSelectClauseForOrdering) { public void setAddClassificationNameToSelectClauseForOrdering(
boolean addClassificationNameToSelectClauseForOrdering) {
this.addClassificationNameToSelectClauseForOrdering = addClassificationNameToSelectClauseForOrdering; this.addClassificationNameToSelectClauseForOrdering = addClassificationNameToSelectClauseForOrdering;
} }

View File

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

View File

@ -19,13 +19,13 @@ import pro.taskana.report.TaskStatusReport;
public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder { public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
private static final Logger LOGGER = LoggerFactory.getLogger(TaskStatusReportBuilderImpl.class); private static final Logger LOGGER = LoggerFactory.getLogger(TaskStatusReportBuilderImpl.class);
private TaskanaEngineImpl taskanaEngine; private TaskanaEngine.Internal taskanaEngine;
private TaskMonitorMapper taskMonitorMapper; private TaskMonitorMapper taskMonitorMapper;
private List<String> domains; private List<String> domains;
private List<TaskState> states; private List<TaskState> states;
TaskStatusReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) { TaskStatusReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine; this.taskanaEngine = taskanaEngine;
this.taskMonitorMapper = taskMonitorMapper; this.taskMonitorMapper = taskMonitorMapper;
} }
@ -44,7 +44,7 @@ public class TaskStatusReportBuilderImpl implements TaskStatusReport.Builder {
@Override @Override
public TaskStatusReport buildReport() throws NotAuthorizedException { public TaskStatusReport buildReport() throws NotAuthorizedException {
LOGGER.debug("entry to buildReport(), this = {}", this); LOGGER.debug("entry to buildReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN); this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try { try {
this.taskanaEngine.openConnection(); this.taskanaEngine.openConnection();
List<TaskQueryItem> tasks = this.taskMonitorMapper.getTasksCountByState(this.domains, this.states); 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 ConnectionManagementMode mode = ConnectionManagementMode.PARTICIPATE;
protected java.sql.Connection connection = null; protected java.sql.Connection connection = null;
protected HistoryEventProducer historyEventProducer; protected HistoryEventProducer historyEventProducer;
private Internal internal;
protected TaskanaEngineImpl(TaskanaEngineConfiguration taskanaEngineConfiguration) { protected TaskanaEngineImpl(TaskanaEngineConfiguration taskanaEngineConfiguration) {
this.taskanaEngineConfiguration = taskanaEngineConfiguration; this.taskanaEngineConfiguration = taskanaEngineConfiguration;
createTransactionFactory(taskanaEngineConfiguration.getUseManagedTransactions()); createTransactionFactory(taskanaEngineConfiguration.getUseManagedTransactions());
this.sessionManager = createSqlSessionManager(); this.sessionManager = createSqlSessionManager();
this.historyEventProducer = HistoryEventProducer.getInstance(taskanaEngineConfiguration); this.historyEventProducer = HistoryEventProducer.getInstance(taskanaEngineConfiguration);
this.internal = new Internal();
} }
public static TaskanaEngine createTaskanaEngine(TaskanaEngineConfiguration taskanaEngineConfiguration) { public static TaskanaEngine createTaskanaEngine(TaskanaEngineConfiguration taskanaEngineConfiguration) {
@ -130,21 +132,21 @@ public class TaskanaEngineImpl implements TaskanaEngine {
@Override @Override
public TaskService getTaskService() { public TaskService getTaskService() {
SqlSession session = this.sessionManager; SqlSession session = this.sessionManager;
return new TaskServiceImpl(this, session.getMapper(TaskMapper.class), return new TaskServiceImpl(internal, session.getMapper(TaskMapper.class),
session.getMapper(AttachmentMapper.class)); session.getMapper(AttachmentMapper.class));
} }
@Override @Override
public TaskMonitorService getTaskMonitorService() { public TaskMonitorService getTaskMonitorService() {
SqlSession session = this.sessionManager; SqlSession session = this.sessionManager;
return new TaskMonitorServiceImpl(this, return new TaskMonitorServiceImpl(internal,
session.getMapper(TaskMonitorMapper.class)); session.getMapper(TaskMonitorMapper.class));
} }
@Override @Override
public WorkbasketService getWorkbasketService() { public WorkbasketService getWorkbasketService() {
SqlSession session = this.sessionManager; SqlSession session = this.sessionManager;
return new WorkbasketServiceImpl(this, return new WorkbasketServiceImpl(internal,
session.getMapper(WorkbasketMapper.class), session.getMapper(WorkbasketMapper.class),
session.getMapper(DistributionTargetMapper.class), session.getMapper(DistributionTargetMapper.class),
session.getMapper(WorkbasketAccessMapper.class)); session.getMapper(WorkbasketAccessMapper.class));
@ -153,14 +155,14 @@ public class TaskanaEngineImpl implements TaskanaEngine {
@Override @Override
public ClassificationService getClassificationService() { public ClassificationService getClassificationService() {
SqlSession session = this.sessionManager; SqlSession session = this.sessionManager;
return new ClassificationServiceImpl(this, session.getMapper(ClassificationMapper.class), return new ClassificationServiceImpl(internal, session.getMapper(ClassificationMapper.class),
session.getMapper(TaskMapper.class)); session.getMapper(TaskMapper.class));
} }
@Override @Override
public JobService getJobService() { public JobService getJobService() {
SqlSession session = this.sessionManager; SqlSession session = this.sessionManager;
return new JobServiceImpl(this, session.getMapper(JobMapper.class)); return new JobServiceImpl(internal, session.getMapper(JobMapper.class));
} }
@Override @Override
@ -168,8 +170,9 @@ public class TaskanaEngineImpl implements TaskanaEngine {
return this.taskanaEngineConfiguration; return this.taskanaEngineConfiguration;
} }
@Override
public HistoryEventProducer getHistoryEventProducer() { 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. * 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. * Internal Engine for internal operations.
*
* @param domain
* the domain specified in the configuration
* @return <code>true</code> if the domain exists
*/ */
public boolean domainExists(String domain) { private class Internal implements TaskanaEngine.Internal {
return getConfiguration().getDomains().contains(domain);
}
@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); private static final Logger LOGGER = LoggerFactory.getLogger(TimeIntervalReportBuilder.class);
protected TaskanaEngineImpl taskanaEngine; protected TaskanaEngine.Internal taskanaEngine;
protected TaskMonitorMapper taskMonitorMapper; protected TaskMonitorMapper taskMonitorMapper;
protected List<H> columnHeaders; protected List<H> columnHeaders;
protected boolean inWorkingDays; protected boolean inWorkingDays;
@ -45,8 +45,8 @@ abstract class TimeIntervalReportBuilderImpl<B extends TimeIntervalReportBuilder
protected List<String> excludedClassificationIds; protected List<String> excludedClassificationIds;
protected Map<CustomField, String> customAttributeFilter; protected Map<CustomField, String> customAttributeFilter;
TimeIntervalReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) { TimeIntervalReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
this.taskanaEngine = (TaskanaEngineImpl) taskanaEngine; this.taskanaEngine = taskanaEngine;
this.taskMonitorMapper = taskMonitorMapper; this.taskMonitorMapper = taskMonitorMapper;
this.columnHeaders = Collections.emptyList(); this.columnHeaders = Collections.emptyList();
configureDaysToWorkingDaysConverter(); configureDaysToWorkingDaysConverter();
@ -113,7 +113,7 @@ abstract class TimeIntervalReportBuilderImpl<B extends TimeIntervalReportBuilder
throws NotAuthorizedException { throws NotAuthorizedException {
LOGGER.debug("entry to listCustomAttributeValuesForCustomAttributeName(customField = {}), this = {}", LOGGER.debug("entry to listCustomAttributeValuesForCustomAttributeName(customField = {}), this = {}",
customField, this); customField, this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR); this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR);
try { try {
this.taskanaEngine.openConnection(); this.taskanaEngine.openConnection();
return taskMonitorMapper.getCustomAttributeValuesForReport(this.workbasketIds, return taskMonitorMapper.getCustomAttributeValuesForReport(this.workbasketIds,
@ -133,7 +133,7 @@ abstract class TimeIntervalReportBuilderImpl<B extends TimeIntervalReportBuilder
LoggerUtils.listToString(selectedItems), this); LoggerUtils.listToString(selectedItems), this);
} }
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR); this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR);
try { try {
this.taskanaEngine.openConnection(); this.taskanaEngine.openConnection();
if (this.columnHeaders == null) { if (this.columnHeaders == null) {
@ -161,9 +161,10 @@ abstract class TimeIntervalReportBuilderImpl<B extends TimeIntervalReportBuilder
protected abstract String determineGroupedBy(); protected abstract String determineGroupedBy();
private void configureDaysToWorkingDaysConverter() { private void configureDaysToWorkingDaysConverter() {
DaysToWorkingDaysConverter.setCustomHolidays(this.taskanaEngine.getConfiguration().getCustomHolidays()); DaysToWorkingDaysConverter.setCustomHolidays(
this.taskanaEngine.getEngine().getConfiguration().getCustomHolidays());
DaysToWorkingDaysConverter.setGermanPublicHolidaysEnabled( DaysToWorkingDaysConverter.setGermanPublicHolidaysEnabled(
this.taskanaEngine.getConfiguration().isGermanPublicHolidaysEnabled()); this.taskanaEngine.getEngine().getConfiguration().isGermanPublicHolidaysEnabled());
} }
private List<SelectedItem> convertWorkingDaysToDays(List<SelectedItem> selectedItems, 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 static final Logger LOGGER = LoggerFactory.getLogger(TimestampReport.Builder.class);
private List<Timestamp> status = Arrays.asList(Timestamp.CREATED, Timestamp.COMPLETED); private List<Timestamp> status = Arrays.asList(Timestamp.CREATED, Timestamp.COMPLETED);
TimestampReportBuilderImpl(TaskanaEngine taskanaEngine, TaskMonitorMapper taskMonitorMapper) { TimestampReportBuilderImpl(TaskanaEngine.Internal taskanaEngine, TaskMonitorMapper taskMonitorMapper) {
super(taskanaEngine, taskMonitorMapper); super(taskanaEngine, taskMonitorMapper);
} }
@ -65,7 +65,7 @@ public class TimestampReportBuilderImpl extends
@Override @Override
public TimestampReport buildReport() throws NotAuthorizedException, InvalidArgumentException { public TimestampReport buildReport() throws NotAuthorizedException, InvalidArgumentException {
LOGGER.debug("entry to buildDetailedReport(), this = {}", this); LOGGER.debug("entry to buildDetailedReport(), this = {}", this);
this.taskanaEngine.checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN); this.taskanaEngine.getEngine().checkRoleMembership(TaskanaRole.MONITOR, TaskanaRole.ADMIN);
try { try {
this.taskanaEngine.openConnection(); this.taskanaEngine.openConnection();
TimestampReport report = new TimestampReport(this.columnHeaders); TimestampReport report = new TimestampReport(this.columnHeaders);

View File

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

View File

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

View File

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

View File

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

View File

@ -33,7 +33,6 @@ import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.DaysToWorkingDaysConverter; import pro.taskana.impl.DaysToWorkingDaysConverter;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.TaskanaEngineProxyForTest; import pro.taskana.impl.TaskanaEngineProxyForTest;
import pro.taskana.impl.report.header.TimeIntervalColumnHeader; import pro.taskana.impl.report.header.TimeIntervalColumnHeader;
import pro.taskana.mappings.AttachmentMapper; import pro.taskana.mappings.AttachmentMapper;
@ -63,7 +62,8 @@ public class CreateTaskAccTest extends AbstractAccTest {
TaskService taskService = taskanaEngine.getTaskService(); TaskService taskService = taskanaEngine.getTaskService();
Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A"); Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A");
newTask.setClassificationKey("T2100"); 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.setPrimaryObjRef(objectReference);
newTask.setOwner("user_1_1"); newTask.setOwner("user_1_1");
Task createdTask = taskService.createTask(newTask); Task createdTask = taskService.createTask(newTask);
@ -90,7 +90,7 @@ public class CreateTaskAccTest extends AbstractAccTest {
@WithAccessId( @WithAccessId(
userName = "user_1_1", userName = "user_1_1",
groupNames = { "group_1" }) groupNames = {"group_1"})
@Test @Test
public void testCreateTaskWithPlanned() public void testCreateTaskWithPlanned()
throws NotAuthorizedException, InvalidArgumentException, throws NotAuthorizedException, InvalidArgumentException,
@ -108,7 +108,7 @@ public class CreateTaskAccTest extends AbstractAccTest {
assertNotNull(createdTask.getCreated()); assertNotNull(createdTask.getCreated());
assertNotNull(createdTask.getPlanned()); assertNotNull(createdTask.getPlanned());
assertEquals(createdTask.getCreated().plus(2, ChronoUnit.HOURS).truncatedTo(ChronoUnit.SECONDS), assertEquals(createdTask.getCreated().plus(2, ChronoUnit.HOURS).truncatedTo(ChronoUnit.SECONDS),
createdTask.getPlanned().truncatedTo(ChronoUnit.SECONDS)); createdTask.getPlanned().truncatedTo(ChronoUnit.SECONDS));
} }
@WithAccessId( @WithAccessId(
@ -157,7 +157,8 @@ public class CreateTaskAccTest extends AbstractAccTest {
@Test @Test
public void testCreateSimpleTaskWithCustomAttributes() public void testCreateSimpleTaskWithCustomAttributes()
throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException,
WorkbasketNotFoundException, TaskAlreadyExistException, TaskNotFoundException { WorkbasketNotFoundException, TaskAlreadyExistException, TaskNotFoundException, NoSuchFieldException,
IllegalAccessException {
TaskService taskService = taskanaEngine.getTaskService(); TaskService taskService = taskanaEngine.getTaskService();
Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A"); 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.isRead());
assertEquals(false, createdTask.isTransferred()); assertEquals(false, createdTask.isTransferred());
// verify that the database content is as expected // verify that the database content is as expected
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest((TaskanaEngineImpl) taskanaEngine); TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest(taskanaEngine);
try { try {
SqlSession session = engineProxy.getSqlSession(); SqlSession session = engineProxy.getSqlSession();
Configuration config = session.getConfiguration(); Configuration config = session.getConfiguration();
@ -224,7 +225,8 @@ public class CreateTaskAccTest extends AbstractAccTest {
@Test @Test
public void testCreateExternalTaskWithAttachment() public void testCreateExternalTaskWithAttachment()
throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException,
WorkbasketNotFoundException, TaskAlreadyExistException, TaskNotFoundException { WorkbasketNotFoundException, TaskAlreadyExistException, TaskNotFoundException, NoSuchFieldException,
IllegalAccessException {
TaskService taskService = taskanaEngine.getTaskService(); TaskService taskService = taskanaEngine.getTaskService();
Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A"); Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A");
@ -240,7 +242,7 @@ public class CreateTaskAccTest extends AbstractAccTest {
assertThat(createdTask.getCreator(), equalTo(CurrentUserContext.getUserid())); assertThat(createdTask.getCreator(), equalTo(CurrentUserContext.getUserid()));
// verify that the database content is as expected // verify that the database content is as expected
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest((TaskanaEngineImpl) taskanaEngine); TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest(taskanaEngine);
try { try {
SqlSession session = engineProxy.getSqlSession(); SqlSession session = engineProxy.getSqlSession();
AttachmentMapper mapper = session.getMapper(AttachmentMapper.class); 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.assertNotNull;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue; 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.OWNER;
import static pro.taskana.TaskQueryColumnName.STATE; 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.ArrayList;
import java.util.List; import java.util.List;
@ -43,7 +42,6 @@ import pro.taskana.exceptions.TaskAlreadyExistException;
import pro.taskana.exceptions.TaskNotFoundException; import pro.taskana.exceptions.TaskNotFoundException;
import pro.taskana.exceptions.WorkbasketNotFoundException; import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.TaskImpl; import pro.taskana.impl.TaskImpl;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.TaskanaEngineProxyForTest; import pro.taskana.impl.TaskanaEngineProxyForTest;
import pro.taskana.mappings.TaskTestMapper; import pro.taskana.mappings.TaskTestMapper;
import pro.taskana.security.JAASRunner; import pro.taskana.security.JAASRunner;
@ -63,8 +61,8 @@ public class QueryTasksAccTest extends AbstractAccTest {
} }
@WithAccessId( @WithAccessId(
userName = "teamlead_1", userName = "teamlead_1",
groupNames = {"admin"}) groupNames = {"admin"})
@Test @Test
public void testQueryTaskValuesForEveryColumn() { public void testQueryTaskValuesForEveryColumn() {
TaskService taskService = taskanaEngine.getTaskService(); TaskService taskService = taskanaEngine.getTaskService();
@ -281,7 +279,7 @@ public class QueryTasksAccTest extends AbstractAccTest {
.count(); .count();
long countAllIds = taskService.createTaskQuery().count(); long countAllIds = taskService.createTaskQuery().count();
assertEquals(countAllIds, countAllExternalIds); assertEquals(countAllIds, countAllExternalIds);
} }
@WithAccessId( @WithAccessId(
userName = "teamlead_1", userName = "teamlead_1",
@ -824,7 +822,7 @@ public class QueryTasksAccTest extends AbstractAccTest {
@Test @Test
public void testQueryTaskByCustomAttributes() public void testQueryTaskByCustomAttributes()
throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException, throws NotAuthorizedException, InvalidArgumentException, ClassificationNotFoundException,
WorkbasketNotFoundException, TaskAlreadyExistException { WorkbasketNotFoundException, TaskAlreadyExistException, NoSuchFieldException, IllegalAccessException {
TaskService taskService = taskanaEngine.getTaskService(); TaskService taskService = taskanaEngine.getTaskService();
Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A"); Task newTask = taskService.newTask("USER_1_1", "DOMAIN_A");
@ -836,7 +834,7 @@ public class QueryTasksAccTest extends AbstractAccTest {
assertNotNull(createdTask); assertNotNull(createdTask);
// query the task by custom attributes // query the task by custom attributes
TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest((TaskanaEngineImpl) taskanaEngine); TaskanaEngineProxyForTest engineProxy = new TaskanaEngineProxyForTest(taskanaEngine);
try { try {
SqlSession session = engineProxy.getSqlSession(); SqlSession session = engineProxy.getSqlSession();
Configuration config = session.getConfiguration(); Configuration config = session.getConfiguration();
@ -1526,5 +1524,4 @@ public class QueryTasksAccTest extends AbstractAccTest {
assertThat(result2.size(), equalTo(10)); assertThat(result2.size(), equalTo(10));
} }
} }

View File

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

View File

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

View File

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

View File

@ -2,13 +2,9 @@ package pro.taskana.impl;
import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertEquals;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -18,14 +14,12 @@ import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.Classification; import pro.taskana.Classification;
import pro.taskana.JobService; import pro.taskana.TaskanaEngine;
import pro.taskana.exceptions.ClassificationAlreadyExistException; import pro.taskana.exceptions.ClassificationAlreadyExistException;
import pro.taskana.exceptions.DomainNotFoundException; import pro.taskana.exceptions.DomainNotFoundException;
import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.jobs.ScheduledJob;
import pro.taskana.mappings.ClassificationMapper; import pro.taskana.mappings.ClassificationMapper;
import pro.taskana.mappings.JobMapper;
/** /**
* Unit Test for ClassificationServiceImpl. * Unit Test for ClassificationServiceImpl.
@ -41,24 +35,22 @@ public class ClassificationServiceImplTest {
@Mock @Mock
private ClassificationMapper classificationMapperMock; private ClassificationMapper classificationMapperMock;
@Mock @Mock
private TaskanaEngineImpl taskanaEngineImplMock; private TaskanaEngine taskanaEngineMock;
@Mock
private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock @Mock
private ClassificationQueryImpl classificationQueryImplMock; private ClassificationQueryImpl classificationQueryImplMock;
@Mock
private SqlSession sqlSessionMock;
@Mock
private JobService jobServiceMock;
@Before @Before
public void setup() { public void setup() {
doNothing().when(taskanaEngineImplMock).openConnection(); when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
doNothing().when(taskanaEngineImplMock).returnConnection();
} }
@Test @Test
public void testCreateClassificationQuery() { public void testCreateClassificationQuery() {
cutSpy.createClassificationQuery(); cutSpy.createClassificationQuery();
verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock); verifyNoMoreInteractions(classificationMapperMock, taskanaEngineInternalMock, taskanaEngineMock,
classificationQueryImplMock);
} }
@Test(expected = InvalidArgumentException.class) @Test(expected = InvalidArgumentException.class)
@ -67,7 +59,7 @@ public class ClassificationServiceImplTest {
NotAuthorizedException, ClassificationAlreadyExistException { NotAuthorizedException, ClassificationAlreadyExistException {
try { try {
Classification classification = createDummyClassification(); Classification classification = createDummyClassification();
when(taskanaEngineImplMock.domainExists(any())).thenReturn(true); when(taskanaEngineInternalMock.domainExists(any())).thenReturn(true);
cutSpy.createClassification(classification); cutSpy.createClassification(classification);
} catch (InvalidArgumentException e) { } catch (InvalidArgumentException e) {
assertEquals(e.getMessage(), "ClassificationId should be null on creation"); assertEquals(e.getMessage(), "ClassificationId should be null on creation");
@ -93,29 +85,4 @@ public class ClassificationServiceImplTest {
return classificationImpl; 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.junit.runner.RunWith;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.CustomField; import pro.taskana.CustomField;
import pro.taskana.TaskState; import pro.taskana.TaskState;
import pro.taskana.TaskanaEngine;
import pro.taskana.configuration.TaskanaEngineConfiguration; import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.exceptions.NotAuthorizedException;
@ -44,7 +44,10 @@ public class CustomFieldValueReportBuilderImplTest {
private TaskMonitorServiceImpl cut; private TaskMonitorServiceImpl cut;
@Mock @Mock
private TaskanaEngineImpl taskanaEngineImplMock; private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private TaskanaEngine taskanaEngineMock;
@Mock @Mock
private TaskanaEngineConfiguration taskanaEngineConfiguration; private TaskanaEngineConfiguration taskanaEngineConfiguration;
@ -55,9 +58,8 @@ public class CustomFieldValueReportBuilderImplTest {
@Before @Before
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
Mockito.doNothing().when(taskanaEngineImplMock).openConnection(); when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
Mockito.doNothing().when(taskanaEngineImplMock).returnConnection(); when(taskanaEngineMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineImplMock.getConfiguration()).thenReturn(taskanaEngineConfiguration);
when(taskanaEngineConfiguration.isGermanPublicHolidaysEnabled()).thenReturn(true); when(taskanaEngineConfiguration.isGermanPublicHolidaysEnabled()).thenReturn(true);
when(taskanaEngineConfiguration.getCustomHolidays()).thenReturn(null); when(taskanaEngineConfiguration.getCustomHolidays()).thenReturn(null);
} }
@ -92,16 +94,18 @@ public class CustomFieldValueReportBuilderImplTest {
.customAttributeFilterIn(customAttributeFilter) .customAttributeFilterIn(customAttributeFilter)
.buildReport(); .buildReport();
verify(taskanaEngineImplMock, times(1)).openConnection(); verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any()); verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration(); verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled(); verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays(); verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfCustomFieldValues(any(), any(), any(), any(), any(), verify(taskMonitorMapperMock, times(1)).getTaskCountOfCustomFieldValues(any(), any(), any(), any(), any(),
any(), any(), any(), any(),
any()); any());
verify(taskanaEngineImplMock, times(1)).returnConnection(); verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration); verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult); assertNotNull(actualResult);
assertEquals(actualResult.getRow("Geschaeftsstelle A").getTotalValue(), 1); assertEquals(actualResult.getRow("Geschaeftsstelle A").getTotalValue(), 1);
@ -143,15 +147,17 @@ public class CustomFieldValueReportBuilderImplTest {
.withColumnHeaders(columnHeaders) .withColumnHeaders(columnHeaders)
.buildReport(); .buildReport();
verify(taskanaEngineImplMock, times(1)).openConnection(); verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any()); verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration(); verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled(); verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays(); verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)) verify(taskMonitorMapperMock, times(1))
.getTaskCountOfCustomFieldValues(any(), any(), any(), any(), any(), any(), any(), any()); .getTaskCountOfCustomFieldValues(any(), any(), any(), any(), any(), any(), any(), any());
verify(taskanaEngineImplMock, times(1)).returnConnection(); verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration); verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock,
taskanaEngineConfiguration);
assertNotNull(actualResult); assertNotNull(actualResult);
assertEquals(actualResult.getRow("Geschaeftsstelle A").getTotalValue(), 1); assertEquals(actualResult.getRow("Geschaeftsstelle A").getTotalValue(), 1);
@ -195,15 +201,16 @@ public class CustomFieldValueReportBuilderImplTest {
.withColumnHeaders(columnHeaders) .withColumnHeaders(columnHeaders)
.listCustomAttributeValuesForCustomAttributeName(CustomField.CUSTOM_1); .listCustomAttributeValuesForCustomAttributeName(CustomField.CUSTOM_1);
verify(taskanaEngineImplMock, times(1)).openConnection(); verify(taskanaEngineInternalMock, times(1)).openConnection();
verify(taskanaEngineImplMock, times(1)).checkRoleMembership(any()); verify(taskanaEngineMock, times(1)).checkRoleMembership(any());
verify(taskanaEngineImplMock, times(2)).getConfiguration(); verify(taskanaEngineMock, times(2)).getConfiguration();
verify(taskanaEngineInternalMock, times(3)).getEngine();
verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled(); verify(taskanaEngineConfiguration, times(1)).isGermanPublicHolidaysEnabled();
verify(taskanaEngineConfiguration, times(1)).getCustomHolidays(); verify(taskanaEngineConfiguration, times(1)).getCustomHolidays();
verify(taskMonitorMapperMock, times(1)) verify(taskMonitorMapperMock, times(1))
.getCustomAttributeValuesForReport(any(), any(), any(), any(), any(), any(), any(), any()); .getCustomAttributeValuesForReport(any(), any(), any(), any(), any(), any(), any(), any());
verify(taskanaEngineImplMock, times(1)).returnConnection(); verify(taskanaEngineInternalMock, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineImplMock, taskMonitorMapperMock, taskanaEngineConfiguration); verifyNoMoreInteractions(taskanaEngineInternalMock, taskanaEngineMock, taskMonitorMapperMock, taskanaEngineConfiguration);
assertNotNull(actualResult); assertNotNull(actualResult);
assertEquals(expectedResult, actualResult); assertEquals(expectedResult, actualResult);

View File

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

View File

@ -8,17 +8,16 @@ import java.util.List;
import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionManager;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoJUnitRunner;
import pro.taskana.TaskState; import pro.taskana.TaskState;
import pro.taskana.TaskSummary; import pro.taskana.TaskSummary;
import pro.taskana.TaskanaEngine;
/** /**
* Test for TaskQueryImpl. * Test for TaskQueryImpl.
@ -28,34 +27,32 @@ import pro.taskana.TaskSummary;
@RunWith(MockitoJUnitRunner.class) @RunWith(MockitoJUnitRunner.class)
public class TaskQueryImplTest { public class TaskQueryImplTest {
@Mock
ClassificationServiceImpl classificationService;
@Mock @Mock
TaskServiceImpl taskServiceMock; TaskServiceImpl taskServiceMock;
@InjectMocks
private TaskQueryImpl taskQueryImpl; private TaskQueryImpl taskQueryImpl;
@Mock @Mock
private TaskanaEngineImpl taskanaEngine; private TaskanaEngine.Internal taskanaEngineInternal;
@Mock
private TaskanaEngine taskanaEngine;
@Mock @Mock
private SqlSession sqlSession; private SqlSession sqlSession;
@Mock
private SqlSessionManager sqlSessionManager;
@Before @Before
public void setup() { public void setup() {
when(taskanaEngineInternal.getEngine()).thenReturn(taskanaEngine);
when(taskanaEngine.getTaskService()).thenReturn(taskServiceMock); when(taskanaEngine.getTaskService()).thenReturn(taskServiceMock);
Configuration configuration = new org.apache.ibatis.session.Configuration(); Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setDatabaseId("h2"); configuration.setDatabaseId("h2");
this.taskanaEngine.sessionManager = sqlSessionManager; when(taskanaEngineInternal.getSqlSession()).thenReturn(sqlSession);
when(taskanaEngine.sessionManager.getConfiguration()).thenReturn(configuration); when(sqlSession.getConfiguration()).thenReturn(configuration);
taskQueryImpl = new TaskQueryImpl(taskanaEngine); taskQueryImpl = new TaskQueryImpl(taskanaEngineInternal);
} }
@Test @Test
public void should_ReturnList_when_BuilderIsUsed() { public void should_ReturnList_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>()); when(sqlSession.selectList(any(), any())).thenReturn(new ArrayList<>());
List<TaskSummary> intermediate = new ArrayList<>(); List<TaskSummary> intermediate = new ArrayList<>();
intermediate.add(new TaskSummaryImpl()); intermediate.add(new TaskSummaryImpl());
@ -70,7 +67,6 @@ public class TaskQueryImplTest {
@Test @Test
public void should_ReturnListWithOffset_when_BuilderIsUsed() { public void should_ReturnListWithOffset_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>()); when(sqlSession.selectList(any(), any(), any())).thenReturn(new ArrayList<>());
List<TaskSummary> intermediate = new ArrayList<>(); List<TaskSummary> intermediate = new ArrayList<>();
intermediate.add(new TaskSummaryImpl()); intermediate.add(new TaskSummaryImpl());
@ -85,7 +81,6 @@ public class TaskQueryImplTest {
@Test @Test
public void should_ReturnOneItem_when_BuilderIsUsed() { public void should_ReturnOneItem_when_BuilderIsUsed() {
when(taskanaEngine.getSqlSession()).thenReturn(sqlSession);
when(sqlSession.selectOne(any(), any())).thenReturn(new TaskSummaryImpl()); when(sqlSession.selectOne(any(), any())).thenReturn(new TaskSummaryImpl());
List<TaskSummary> intermediate = new ArrayList<>(); List<TaskSummary> intermediate = new ArrayList<>();
intermediate.add(new TaskSummaryImpl()); 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.assertNotEquals;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
@ -15,11 +14,11 @@ import static org.mockito.Mockito.when;
import java.time.Duration; import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSession;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mockito.MockitoAnnotations; 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.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunner;
import pro.taskana.Attachment;
import pro.taskana.Classification; import pro.taskana.Classification;
import pro.taskana.ObjectReference; import pro.taskana.ObjectReference;
import pro.taskana.Task; import pro.taskana.Task;
import pro.taskana.TaskState; import pro.taskana.TaskState;
import pro.taskana.TaskSummary; import pro.taskana.TaskSummary;
import pro.taskana.TaskanaEngine;
import pro.taskana.Workbasket; import pro.taskana.Workbasket;
import pro.taskana.WorkbasketPermission; import pro.taskana.WorkbasketPermission;
import pro.taskana.WorkbasketService; import pro.taskana.WorkbasketService;
@ -56,14 +55,16 @@ import pro.taskana.security.CurrentUserContext;
@PowerMockIgnore("javax.management.*") @PowerMockIgnore("javax.management.*")
public class TaskServiceImplTest { public class TaskServiceImplTest {
@InjectMocks
private TaskServiceImpl cut; private TaskServiceImpl cut;
@Mock @Mock
private TaskanaEngineConfiguration taskanaEngineConfigurationMock; private TaskanaEngineConfiguration taskanaEngineConfigurationMock;
@Mock @Mock
private TaskanaEngineImpl taskanaEngineMock; private TaskanaEngine.Internal taskanaEngineInternalMock;
@Mock
private TaskanaEngine taskanaEngineMock;
@Mock @Mock
private TaskMapper taskMapperMock; private TaskMapper taskMapperMock;
@ -83,24 +84,16 @@ public class TaskServiceImplTest {
@Mock @Mock
private ClassificationQueryImpl classificationQueryImplMock; private ClassificationQueryImpl classificationQueryImplMock;
@Mock
private WorkbasketQueryImpl workbasketQueryImplMock;
@Mock @Mock
private SqlSession sqlSessionMock; private SqlSession sqlSessionMock;
@Before @Before
public void setup() throws WorkbasketNotFoundException { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
when(taskanaEngineInternalMock.getEngine()).thenReturn(taskanaEngineMock);
when(taskanaEngineMock.getWorkbasketService()).thenReturn(workbasketServiceMock); when(taskanaEngineMock.getWorkbasketService()).thenReturn(workbasketServiceMock);
when(taskanaEngineMock.getClassificationService()).thenReturn(classificationServiceImplMock); when(taskanaEngineMock.getClassificationService()).thenReturn(classificationServiceImplMock);
try { cut = new TaskServiceImpl(taskanaEngineInternalMock, taskMapperMock, attachmentMapperMock);
Mockito.doNothing().when(workbasketServiceMock).checkAuthorization(any(), any());
} catch (NotAuthorizedException e) {
e.printStackTrace();
}
Mockito.doNothing().when(taskanaEngineMock).openConnection();
Mockito.doNothing().when(taskanaEngineMock).returnConnection();
} }
@Test @Test
@ -118,25 +111,24 @@ public class TaskServiceImplTest {
when(taskanaEngineMock.getConfiguration()).thenReturn(taskanaEngineConfigurationMock); when(taskanaEngineMock.getConfiguration()).thenReturn(taskanaEngineConfigurationMock);
when(taskanaEngineConfigurationMock.isSecurityEnabled()).thenReturn(false); when(taskanaEngineConfigurationMock.isSecurityEnabled()).thenReturn(false);
doReturn(task).when(cutSpy).getTask(task.getId()); 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()); 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(), verify(workbasketServiceMock, times(1)).checkAuthorization(destinationWorkbasket.getId(),
WorkbasketPermission.APPEND); WorkbasketPermission.APPEND);
verify(workbasketServiceMock, times(1)).checkAuthorization(sourceWorkbasket.getId(), verify(workbasketServiceMock, times(1)).checkAuthorization(sourceWorkbasket.getId(),
WorkbasketPermission.TRANSFER); WorkbasketPermission.TRANSFER);
verify(workbasketServiceMock, times(1)).getWorkbasket(destinationWorkbasket.getId()); verify(workbasketServiceMock, times(1)).getWorkbasket(destinationWorkbasket.getId());
verify(taskMapperMock, times(1)).update(any()); 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, verifyNoMoreInteractions(attachmentMapperMock, taskanaEngineConfigurationMock, taskanaEngineMock,
taskMapperMock, objectReferenceMapperMock, workbasketServiceMock, sqlSessionMock, taskanaEngineInternalMock, taskMapperMock, objectReferenceMapperMock, workbasketServiceMock,
classificationQueryImplMock); sqlSessionMock, classificationQueryImplMock);
assertThat(actualTask.isRead(), equalTo(false)); assertThat(actualTask.isRead(), equalTo(false));
assertThat(actualTask.getState(), equalTo(TaskState.READY)); assertThat(actualTask.getState(), equalTo(TaskState.READY));
@ -148,7 +140,6 @@ public class TaskServiceImplTest {
public void testTaskSummaryEqualsHashCode() throws InterruptedException { public void testTaskSummaryEqualsHashCode() throws InterruptedException {
Classification classification = createDummyClassification(); Classification classification = createDummyClassification();
Workbasket wb = createWorkbasket("WB-ID", "WB-Key"); Workbasket wb = createWorkbasket("WB-ID", "WB-Key");
Attachment attachment = JunitHelper.createDefaultAttachment();
ObjectReference objectReference = JunitHelper.createDefaultObjRef(); ObjectReference objectReference = JunitHelper.createDefaultObjRef();
TaskImpl taskBefore = createUnitTestTask("ID", "taskName", wb.getKey(), classification); TaskImpl taskBefore = createUnitTestTask("ID", "taskName", wb.getKey(), classification);
taskBefore.setPrimaryObjRef(objectReference); taskBefore.setPrimaryObjRef(objectReference);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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