TSK-261: Extend classification report by attachment classifications

- Add ClassificationReport
- Add DetailedClassificationReport
- Add DetailedReportLine
- Add DetailedMonitorItem
- Implement getDetailedClassificationReport
- Move createReport method to the Report class
- Add tests and update sample data
This commit is contained in:
Konstantin Kläger 2018-02-15 12:23:32 +01:00 committed by Holger Hagen
parent 5f460f0403
commit b78b3ccb2f
17 changed files with 873 additions and 161 deletions

View File

@ -2,7 +2,9 @@ package pro.taskana;
import java.util.List;
import pro.taskana.impl.ClassificationReport;
import pro.taskana.impl.CustomField;
import pro.taskana.impl.DetailedClassificationReport;
import pro.taskana.impl.Report;
import pro.taskana.impl.ReportLineItemDefinition;
import pro.taskana.impl.TaskState;
@ -135,26 +137,26 @@ public interface TaskMonitorService {
List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays);
/**
* Returns a {@link Report} grouped by classifications for a given list of {@link Workbasket}s and for a given list
* of {@link TaskState}s. The report only contains the number of all tasks of the respective classification as well
* as the total sum of all tasks. Only tasks with a state in the list of TaskStates are provided. Task with
* Timestamp DUE = null are not considered.
* Returns a {@link ClassificationReport} grouped by classifications for a given list of {@link Workbasket}s and for
* a given list of {@link TaskState}s. The report only contains the number of all tasks of the respective
* classification as well as the total sum of all tasks. Only tasks with a state in the list of TaskStates are
* provided. Task with Timestamp DUE = null are not considered.
*
* @param workbaskets
* a list of {@link Workbasket} objects whose task should be considered in the report
* @param states
* a list of {@link TaskState} objects that specify the states of the tasks that are provided
* @return a {@link Report} object that only contains the number of all tasks of the respective classification as
* well as the total number of all tasks
* @return a {@link ClassificationReport} object that only contains the number of all tasks of the respective
* classification as well as the total number of all tasks
*/
Report getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states);
ClassificationReport getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states);
/**
* Returns a {@link Report} grouped by classifications for a given list of {@link Workbasket}s, a given list of
* {@link TaskState}s and a given list of {@link ReportLineItemDefinition}s. For each classification the report
* contains a list of ReportLineItems that subdivides the report in to different cluster grouped by the due date. By
* default the age of the tasks is counted in working days. Only tasks with a state in the list of TaskStates are
* provided. Tasks with Timestamp DUE = null are not considered.
* Returns a {@link ClassificationReport} grouped by classifications for a given list of {@link Workbasket}s, a
* given list of {@link TaskState}s and a given list of {@link ReportLineItemDefinition}s. For each classification
* the report contains a list of ReportLineItems that subdivides the report in to different cluster grouped by the
* due date. By default the age of the tasks is counted in working days. Only tasks with a state in the list of
* TaskStates are provided. Tasks with Timestamp DUE = null are not considered.
*
* @param workbaskets
* a list of {@link Workbasket} objects whose task should be considered in the report
@ -166,16 +168,81 @@ public interface TaskMonitorService {
* as positive values. To avoid tasks are counted multiple times or not be listed in the report, these
* reportLineItemDefinitions should not overlap and should not have gaps. If the ReportLineDefinition
* should represent a single day, lowerLimit and upperLimit have to be equal.
* @return a {@link Report} object that represents an overview of all tasks of the respective classification
* @return a {@link ClassificationReport} object that represents an overview of all tasks of the respective
* classification
*/
Report getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
ClassificationReport getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
List<ReportLineItemDefinition> reportLineItemDefinitions);
/**
* Returns a {@link Report} grouped by classifications for a given list of {@link Workbasket}s, a given list of
* {@link TaskState}s and a given list of {@link ReportLineItemDefinition}s. For each classification the report
* contains a list of ReportLineItems that subdivides the report in to different cluster grouped by the due date.
* Only tasks with a state in the list of TaskStates are provided. Tasks with Timestamp DUE = null are not
* Returns a {@link DetailedClassificationReport} grouped by classifications for a given list of
* {@link Workbasket}s, a given list of {@link TaskState}s and a given list of {@link ReportLineItemDefinition}s.
* For each classification the report contains a list of ReportLineItems that subdivides the report in to different
* cluster grouped by the due date. Only tasks with a state in the list of TaskStates are provided. Tasks with
* Timestamp DUE = null are not considered.
*
* @param workbaskets
* a list of {@link Workbasket} objects whose task should be considered in the report
* @param states
* a list of {@link TaskState} objects that specify the states of the tasks that are provided
* @param reportLineItemDefinitions
* a list of {@link ReportLineItemDefinition} objects that specify the subdivision into different cluster
* of due dates. Days in past are represented as negative values and days in the future are represented
* as positive values. To avoid tasks are counted multiple times or not be listed in the report, these
* reportLineItemDefinitions should not overlap and should not have gaps. If the ReportLineDefinition
* should represent a single day, lowerLimit and upperLimit have to be equal.
* @param inWorkingDays
* a boolean parameter that specifies whether the age of the tasks should be counted in days or in
* working days.
* @return a {@link DetailedClassificationReport} object that represents an overview of all tasks of the respective
* classification
*/
DetailedClassificationReport getDetailedClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays);
/**
* Returns a {@link DetailedClassificationReport} grouped by classifications for a given list of {@link Workbasket}s
* and for a given list of {@link TaskState}s. The report only contains the number of all tasks of the respective
* classification as well as the total sum of all tasks. Only tasks with a state in the list of TaskStates are
* provided. Task with Timestamp DUE = null are not considered.
*
* @param workbaskets
* a list of {@link Workbasket} objects whose task should be considered in the report
* @param states
* a list of {@link TaskState} objects that specify the states of the tasks that are provided
* @return a {@link DetailedClassificationReport} object that only contains the number of all tasks of the
* respective classification as well as the total number of all tasks
*/
DetailedClassificationReport getDetailedClassificationReport(List<Workbasket> workbaskets, List<TaskState> states);
/**
* Returns a {@link DetailedClassificationReport} grouped by classifications for a given list of
* {@link Workbasket}s, a given list of {@link TaskState}s and a given list of {@link ReportLineItemDefinition}s.
* For each classification the report contains a list of ReportLineItems that subdivides the report in to different
* cluster grouped by the due date. By default the age of the tasks is counted in working days. Only tasks with a
* state in the list of TaskStates are provided. Tasks with Timestamp DUE = null are not considered.
*
* @param workbaskets
* a list of {@link Workbasket} objects whose task should be considered in the report
* @param states
* a list of {@link TaskState} objects that specify the states of the tasks that are provided
* @param reportLineItemDefinitions
* a list of {@link ReportLineItemDefinition} objects that specify the subdivision into different cluster
* of due dates. Days in past are represented as negative values and days in the future are represented
* as positive values. To avoid tasks are counted multiple times or not be listed in the report, these
* reportLineItemDefinitions should not overlap and should not have gaps. If the ReportLineDefinition
* should represent a single day, lowerLimit and upperLimit have to be equal.
* @return a {@link DetailedClassificationReport} object that represents an overview of all tasks of the respective
* classification
*/
DetailedClassificationReport getDetailedClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
List<ReportLineItemDefinition> reportLineItemDefinitions);
/**
* Returns a {@link ClassificationReport} grouped by classifications for a given list of {@link Workbasket}s, a
* given list of {@link TaskState}s and a given list of {@link ReportLineItemDefinition}s. For each classification
* the report contains a list of ReportLineItems that subdivides the report in to different cluster grouped by the
* due date. Only tasks with a state in the list of TaskStates are provided. Tasks with Timestamp DUE = null are not
* considered.
*
* @param workbaskets
@ -191,9 +258,10 @@ public interface TaskMonitorService {
* @param inWorkingDays
* a boolean parameter that specifies whether the age of the tasks should be counted in days or in
* working days.
* @return a {@link Report} object that represents an overview of all tasks of the respective classification
* @return a {@link ClassificationReport} object that represents an overview of all tasks of the respective
* classification
*/
Report getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
ClassificationReport getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays);
/**

View File

@ -0,0 +1,12 @@
package pro.taskana.impl;
/**
* The ClassificationReport extends the Report.
*/
public class ClassificationReport extends Report {
public ClassificationReport() {
super();
}
}

View File

@ -0,0 +1,49 @@
package pro.taskana.impl;
import java.util.List;
/**
* The DetailedClassificationReport extends the ClassificationReport. The additional addDetailedMonitoringQueryItems
* method allows to add {@link DetailedMonitorQueryItem}s to the DetailedClassificationReport.
*/
public class DetailedClassificationReport extends ClassificationReport {
public DetailedClassificationReport() {
super();
}
/**
* Adds the information of the {@link DetailedMonitorQueryItem}s to the DetailedClassificationReport.
*
* @param detailedMonitorQueryItems
* a list of {@link DetailedMonitorQueryItem} with the information of the database
* @param reportLineItemDefinitions
* a list of {@link ReportLineItemDefinition}s that is needed to create the {@link ReportLine}s.
* @param inWorkingDays
* a boolean parameter that specifies whether the age of the tasks should be counted in days or in
* working days.
*/
public void addDetailedMonitoringQueryItems(List<DetailedMonitorQueryItem> detailedMonitorQueryItems,
List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays) {
DaysToWorkingDaysConverter instance = null;
if (reportLineItemDefinitions != null && inWorkingDays) {
instance = DaysToWorkingDaysConverter.initialize(reportLineItemDefinitions);
}
for (DetailedMonitorQueryItem item : detailedMonitorQueryItems) {
if (instance != null) {
item.setAgeInDays(instance.convertDaysToWorkingDays(item.getAgeInDays()));
}
if (!this.reportLines.containsKey(item.getKey())) {
DetailedReportLine detailedReportLine = new DetailedReportLine();
detailedReportLine.create(reportLineItemDefinitions);
this.reportLines.put(item.getKey(), detailedReportLine);
}
DetailedReportLine detailedReportLine = (DetailedReportLine) this.reportLines.get(item.getKey());
detailedReportLine.addNumberOfTasks(item, reportLineItemDefinitions);
}
this.sumLine = createSumLine(reportLineItemDefinitions);
}
}

View File

@ -0,0 +1,23 @@
package pro.taskana.impl;
/**
* The DetailedMonitorQueryItem extends the MonitorQueryItem. The additional attachment key is used for the detailed
* classification report.
*/
public class DetailedMonitorQueryItem extends MonitorQueryItem {
private String attachmentKey;
public DetailedMonitorQueryItem() {
super();
}
public String getAttachmentKey() {
return attachmentKey;
}
public void setAttachmentKey(String attachmentKey) {
this.attachmentKey = attachmentKey;
}
}

View File

@ -0,0 +1,58 @@
package pro.taskana.impl;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* The DetailedReportLine extends the ReportLine.
*/
public class DetailedReportLine extends ReportLine {
private Map<String, ReportLine> detailLines;
public DetailedReportLine() {
super();
this.detailLines = new LinkedHashMap<>();
}
public Map<String, ReportLine> getDetailLines() {
return detailLines;
}
public void setDetailLines(Map<String, ReportLine> reportLines) {
this.detailLines = reportLines;
}
/**
* Adds the number of tasks of the {@link DetailedMonitorQueryItem} to the respective {@link ReportLineItem} of this
* {@link DetailedReportLine} and and of the suitable sub line.
*
* @param item
* a {@link DetailedMonitorQueryItem} that contains the number of tasks, the age in days of these tasks
* and the Classification key of the corresponding attachment.
* @param reportLineItemDefinitions
* a list of {@link ReportLineItemDefinition}s that is needed to create a sub line if necessary.
*/
public void addNumberOfTasks(DetailedMonitorQueryItem item,
List<ReportLineItemDefinition> reportLineItemDefinitions) {
super.addNumberOfTasks(item);
if (item.getAttachmentKey() != null) {
if (!this.detailLines.containsKey(item.getAttachmentKey())) {
ReportLine reportLine = new ReportLine();
reportLine.create(reportLineItemDefinitions);
this.detailLines.put(item.getAttachmentKey(), reportLine);
}
this.detailLines.get(item.getAttachmentKey()).addNumberOfTasks(item);
} else {
if (!this.detailLines.containsKey("N/A")) {
ReportLine reportLine = new ReportLine();
reportLine.create(reportLineItemDefinitions);
this.detailLines.put("N/A", reportLine);
}
this.detailLines.get("N/A").addNumberOfTasks(item);
}
}
}

View File

@ -2,6 +2,7 @@ package pro.taskana.impl;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
@ -12,20 +13,19 @@ import java.util.Map;
*/
public class Report {
private Map<String, ReportLine> detailLines;
private ReportLine sumLine;
protected Map<String, ReportLine> reportLines;
protected ReportLine sumLine;
public Report() {
this.detailLines = new LinkedHashMap<>();
this.sumLine = new ReportLine();
this.reportLines = new LinkedHashMap<String, ReportLine>();
}
public Map<String, ReportLine> getDetailLines() {
return detailLines;
public Map<String, ReportLine> getReportLines() {
return reportLines;
}
public void setDetailLines(Map<String, ReportLine> detailLines) {
this.detailLines = detailLines;
public void setReportLines(Map<String, ReportLine> reportLines) {
this.reportLines = reportLines;
}
public ReportLine getSumLine() {
@ -36,19 +36,62 @@ public class Report {
this.sumLine = sumLine;
}
public void generateSumLine(ReportLine sumLine) {
this.sumLine = sumLine;
/**
* Adds the information of the {@link MonitorQueryItem}s to the Report.
*
* @param monitorQueryItems
* a list of {@link MonitorQueryItem} with the information of the database
* @param reportLineItemDefinitions
* a list of {@link ReportLineItemDefinition}s that is needed to create the {@link ReportLine}s.
* @param inWorkingDays
* a boolean parameter that specifies whether the age of the tasks should be counted in days or in
* working days.
*/
public void addMonitoringQueryItems(List<MonitorQueryItem> monitorQueryItems,
List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays) {
DaysToWorkingDaysConverter instance = null;
if (reportLineItemDefinitions != null && inWorkingDays) {
instance = DaysToWorkingDaysConverter.initialize(reportLineItemDefinitions);
}
for (MonitorQueryItem item : monitorQueryItems) {
if (instance != null) {
item.setAgeInDays(instance.convertDaysToWorkingDays(item.getAgeInDays()));
}
if (!this.reportLines.containsKey(item.getKey())) {
ReportLine reportLine = new ReportLine();
reportLine.create(reportLineItemDefinitions);
this.reportLines.put(item.getKey(), reportLine);
}
this.reportLines.get(item.getKey()).addNumberOfTasks(item);
}
this.sumLine = createSumLine(reportLineItemDefinitions);
}
/**
* Creates the sum line of this {@link Report}.
*
* @param reportLineItemDefinitions
* a list of {@link ReportLineItemDefinition}s that specify the subdivision into different cluster of
* ages.
* @return a {@link ReportLine} that contains the sums of the different cluster of this {@link Report}.
*/
protected ReportLine createSumLine(List<ReportLineItemDefinition> reportLineItemDefinitions) {
ReportLine sumLine = new ReportLine();
sumLine.create(reportLineItemDefinitions);
int totalNumberOfTasks = 0;
for (ReportLine reportLine : this.getDetailLines().values()) {
for (ReportLine reportLine : this.reportLines.values()) {
Iterator<ReportLineItem> reportLineItemIterator = reportLine.getLineItems().iterator();
Iterator<ReportLineItem> sumLineItemIterator = this.sumLine.getLineItems().iterator();
Iterator<ReportLineItem> sumLineItemIterator = sumLine.getLineItems().iterator();
while (reportLineItemIterator.hasNext() && sumLineItemIterator.hasNext()) {
int numberOfTasks = reportLineItemIterator.next().getNumberOfTasks();
sumLineItemIterator.next().addNumberOfTasks(numberOfTasks);
}
totalNumberOfTasks += reportLine.getTotalNumberOfTasks();
}
this.sumLine.setTotalNumberOfTasks(totalNumberOfTasks);
sumLine.setTotalNumberOfTasks(totalNumberOfTasks);
return sumLine;
}
}

View File

@ -8,8 +8,8 @@ import java.util.List;
*/
public class ReportLine {
private List<ReportLineItem> lineItems;
private int totalNumberOfTasks;
protected List<ReportLineItem> lineItems;
protected int totalNumberOfTasks;
public ReportLine() {
this.lineItems = new ArrayList<>();
@ -32,6 +32,30 @@ public class ReportLine {
this.totalNumberOfTasks = totalNumberOfTasks;
}
/**
* Creates a list of {@link ReportLineItem}s for this {@link ReportLine} by using the list of
* {@link ReportLineItemDefinition}s.
*
* @param reportLineItemDefinitions
* a list of {@link ReportLineItemDefinition}s that specify the subdivision into different cluster of
* ages.
*/
public void create(List<ReportLineItemDefinition> reportLineItemDefinitions) {
if (reportLineItemDefinitions != null) {
for (ReportLineItemDefinition reportLineItemDefinition : reportLineItemDefinitions) {
ReportLineItem reportLineItem = new ReportLineItem();
reportLineItem.setReportLineItemDefinition(reportLineItemDefinition);
this.getLineItems().add(reportLineItem);
}
}
}
/**
* Adds the number of tasks of the {@link MonitorQueryItem} to the respective {@link ReportLineItem}.
*
* @param item
* a {@link MonitorQueryItem} that contains the number of tasks and the age in days of these tasks.
*/
public void addNumberOfTasks(MonitorQueryItem item) {
this.totalNumberOfTasks += item.getNumberOfTasks();
for (ReportLineItem reportLineItem : lineItems) {
@ -43,4 +67,5 @@ public class ReportLine {
}
}
}
}

View File

@ -28,6 +28,7 @@ public class ReportLineItem {
public void setNumberOfTasks(int numberOfTasks) {
this.numberOfTasks = numberOfTasks;
}
public void addNumberOfTasks(int numberOfTasks) {
this.numberOfTasks += numberOfTasks;
}

View File

@ -42,17 +42,19 @@ public class TaskMonitorServiceImpl implements TaskMonitorService {
List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"entry to getWorkbasketLevelReport(workbaskets = {}, states = {}, reportLineItemDefinitions = {})",
"entry to getWorkbasketLevelReport(workbaskets = {}, states = {}, reportLineItemDefinitions = {},"
+ " inWorkingDays = {})",
LoggerUtils.listToString(workbaskets), LoggerUtils.listToString(states),
LoggerUtils.listToString(reportLineItemDefinitions));
LoggerUtils.listToString(reportLineItemDefinitions), inWorkingDays);
}
try {
taskanaEngineImpl.openConnection();
Report report = new Report();
List<MonitorQueryItem> monitorQueryItems = taskMonitorMapper
.getTaskCountOfWorkbasketsByWorkbasketsAndStates(workbaskets, states);
return createReport(reportLineItemDefinitions, inWorkingDays, monitorQueryItems);
report.addMonitoringQueryItems(monitorQueryItems, reportLineItemDefinitions, inWorkingDays);
return report;
} finally {
taskanaEngineImpl.returnConnection();
@ -77,17 +79,19 @@ public class TaskMonitorServiceImpl implements TaskMonitorService {
List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"entry to getCategoryReport(workbaskets = {}, states = {}, reportLineItemDefinitions = {})",
"entry to getCategoryReport(workbaskets = {}, states = {}, reportLineItemDefinitions = {},"
+ " inWorkingDays = {})",
LoggerUtils.listToString(workbaskets), LoggerUtils.listToString(states),
LoggerUtils.listToString(reportLineItemDefinitions));
LoggerUtils.listToString(reportLineItemDefinitions), inWorkingDays);
}
try {
taskanaEngineImpl.openConnection();
Report report = new Report();
List<MonitorQueryItem> monitorQueryItems = taskMonitorMapper
.getTaskCountOfCategoriesByWorkbasketsAndStates(workbaskets, states);
return createReport(reportLineItemDefinitions, inWorkingDays, monitorQueryItems);
report.addMonitoringQueryItems(monitorQueryItems, reportLineItemDefinitions, inWorkingDays);
return report;
} finally {
taskanaEngineImpl.returnConnection();
@ -96,32 +100,34 @@ public class TaskMonitorServiceImpl implements TaskMonitorService {
}
@Override
public Report getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states) {
public ClassificationReport getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states) {
return getClassificationReport(workbaskets, states, null, false);
}
@Override
public Report getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
public ClassificationReport getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
List<ReportLineItemDefinition> reportLineItemDefinitions) {
return getClassificationReport(workbaskets, states, reportLineItemDefinitions, true);
}
@Override
public Report getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
public ClassificationReport getClassificationReport(List<Workbasket> workbaskets, List<TaskState> states,
List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"entry to getClassificationReport(workbaskets = {}, states = {}, reportLineItemDefinitions = {})",
"entry to getClassificationReport(workbaskets = {}, states = {}, reportLineItemDefinitions = {},"
+ " inWorkingDays = {})",
LoggerUtils.listToString(workbaskets), LoggerUtils.listToString(states),
LoggerUtils.listToString(reportLineItemDefinitions));
LoggerUtils.listToString(reportLineItemDefinitions), inWorkingDays);
}
try {
taskanaEngineImpl.openConnection();
ClassificationReport report = new ClassificationReport();
List<MonitorQueryItem> monitorQueryItems = taskMonitorMapper
.getTaskCountOfClassificationsByWorkbasketsAndStates(workbaskets, states);
return createReport(reportLineItemDefinitions, inWorkingDays, monitorQueryItems);
report.addMonitoringQueryItems(monitorQueryItems, reportLineItemDefinitions, inWorkingDays);
return report;
} finally {
taskanaEngineImpl.returnConnection();
@ -129,6 +135,45 @@ public class TaskMonitorServiceImpl implements TaskMonitorService {
}
}
@Override
public DetailedClassificationReport getDetailedClassificationReport(List<Workbasket> workbaskets,
List<TaskState> states) {
return getDetailedClassificationReport(workbaskets, states, null, false);
}
@Override
public DetailedClassificationReport getDetailedClassificationReport(List<Workbasket> workbaskets,
List<TaskState> states, List<ReportLineItemDefinition> reportLineItemDefinitions) {
return getDetailedClassificationReport(workbaskets, states, reportLineItemDefinitions, true);
}
@Override
public DetailedClassificationReport getDetailedClassificationReport(List<Workbasket> workbaskets,
List<TaskState> states, List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"entry to getDetailedClassificationReport(workbaskets = {}, states = {}, customField = {}, "
+ "reportLineItemDefinitions = {}, inWorkingDays = {})",
LoggerUtils.listToString(workbaskets), LoggerUtils.listToString(states),
LoggerUtils.listToString(reportLineItemDefinitions), inWorkingDays);
}
try {
taskanaEngineImpl.openConnection();
DetailedClassificationReport report = new DetailedClassificationReport();
List<DetailedMonitorQueryItem> detailedMonitorQueryItems = taskMonitorMapper
.getTaskCountOfDetailedClassificationsByWorkbasketsAndStates(workbaskets, states);
report.addDetailedMonitoringQueryItems(detailedMonitorQueryItems, reportLineItemDefinitions,
inWorkingDays);
return report;
} finally {
taskanaEngineImpl.returnConnection();
LOGGER.debug("exit from getDetailedClassificationReport().");
}
}
@Override
public Report getCustomFieldValueReport(List<Workbasket> workbaskets, List<TaskState> states,
CustomField customField) {
@ -146,17 +191,19 @@ public class TaskMonitorServiceImpl implements TaskMonitorService {
CustomField customField, List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(
"entry to getCustomFieldValueReport(workbaskets = {}, states = {}, customField = {}, reportLineItemDefinitions = {})",
"entry to getCustomFieldValueReport(workbaskets = {}, states = {}, customField = {}, "
+ "reportLineItemDefinitions = {}, inWorkingDays = {})",
LoggerUtils.listToString(workbaskets), LoggerUtils.listToString(states), customField,
LoggerUtils.listToString(reportLineItemDefinitions));
LoggerUtils.listToString(reportLineItemDefinitions), inWorkingDays);
}
try {
taskanaEngineImpl.openConnection();
Report report = new Report();
List<MonitorQueryItem> monitorQueryItems = taskMonitorMapper
.getTaskCountOfCustomFieldValuesByWorkbasketsAndStatesAndCustomField(workbaskets, states, customField);
return createReport(reportLineItemDefinitions, inWorkingDays, monitorQueryItems);
report.addMonitoringQueryItems(monitorQueryItems, reportLineItemDefinitions, inWorkingDays);
return report;
} finally {
taskanaEngineImpl.returnConnection();
@ -164,39 +211,4 @@ public class TaskMonitorServiceImpl implements TaskMonitorService {
}
}
private Report createReport(List<ReportLineItemDefinition> reportLineItemDefinitions, boolean inWorkingDays,
List<MonitorQueryItem> monitorQueryItems) {
Report report = new Report();
DaysToWorkingDaysConverter instance = null;
if (reportLineItemDefinitions != null && inWorkingDays) {
instance = DaysToWorkingDaysConverter.initialize(reportLineItemDefinitions);
}
for (MonitorQueryItem item : monitorQueryItems) {
if (instance != null) {
item.setAgeInDays(instance.convertDaysToWorkingDays(item.getAgeInDays()));
}
if (!report.getDetailLines().containsKey(item.getKey())) {
report.getDetailLines().put(item.getKey(), createEmptyReportLine(reportLineItemDefinitions));
}
report.getDetailLines().get(item.getKey()).addNumberOfTasks(item);
}
report.generateSumLine(createEmptyReportLine(reportLineItemDefinitions));
return report;
}
private ReportLine createEmptyReportLine(List<ReportLineItemDefinition> reportLineItemDefinitions) {
ReportLine reportLine = new ReportLine();
if (reportLineItemDefinitions != null) {
for (ReportLineItemDefinition reportLineItemDefinition : reportLineItemDefinitions) {
ReportLineItem reportLineItem = new ReportLineItem();
reportLineItem.setReportLineItemDefinition(reportLineItemDefinition);
reportLine.getLineItems().add(reportLineItem);
}
}
return reportLine;
}
}

View File

@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Select;
import pro.taskana.Workbasket;
import pro.taskana.impl.CustomField;
import pro.taskana.impl.DetailedMonitorQueryItem;
import pro.taskana.impl.MonitorQueryItem;
import pro.taskana.impl.TaskState;
@ -71,6 +72,25 @@ public interface TaskMonitorMapper {
@Param("workbaskets") List<Workbasket> workbaskets,
@Param("states") List<TaskState> states);
@Select("<script>"
+ "<if test=\"_databaseId == 'db2'\">SELECT T.CLASSIFICATION_KEY as TASK_CLASSIFICATION_KEY, A.CLASSIFICATION_KEY as ATTACHMENT_CLASSIFICATION_KEY, (DAYS(DUE) - DAYS(CURRENT_TIMESTAMP)) as AGE_IN_DAYS, COUNT(*) as NUMBER_OF_TASKS</if> "
+ "<if test=\"_databaseId == 'h2'\">SELECT T.CLASSIFICATION_KEY as TASK_CLASSIFICATION_KEY, A.CLASSIFICATION_KEY as ATTACHMENT_CLASSIFICATION_KEY, DATEDIFF('DAY', CURRENT_TIMESTAMP, DUE) as AGE_IN_DAYS, COUNT(*) as NUMBER_OF_TASKS</if> "
+ "FROM TASK AS T LEFT JOIN ATTACHMENT AS A ON T.ID = A.TASK_ID "
+ "WHERE WORKBASKET_KEY IN (<foreach collection='workbaskets' item='workbasket' separator=','>#{workbasket.key}</foreach>) "
+ "AND STATE IN (<foreach collection='states' item='state' separator=','>#{state}</foreach>) "
+ "AND DUE IS NOT NULL "
+ "<if test=\"_databaseId == 'db2'\">GROUP BY T.CLASSIFICATION_KEY, A.CLASSIFICATION_KEY, (DAYS(DUE) - DAYS(CURRENT_TIMESTAMP))</if> "
+ "<if test=\"_databaseId == 'h2'\">GROUP BY T.CLASSIFICATION_KEY, A.CLASSIFICATION_KEY, DATEDIFF('DAY', CURRENT_TIMESTAMP, DUE)</if> "
+ "</script>")
@Results({
@Result(column = "TASK_CLASSIFICATION_KEY", property = "key"),
@Result(column = "ATTACHMENT_CLASSIFICATION_KEY", property = "attachmentKey"),
@Result(column = "AGE_IN_DAYS", property = "ageInDays"),
@Result(column = "NUMBER_OF_TASKS", property = "numberOfTasks") })
List<DetailedMonitorQueryItem> getTaskCountOfDetailedClassificationsByWorkbasketsAndStates(
@Param("workbaskets") List<Workbasket> workbaskets,
@Param("states") List<TaskState> states);
@Select("<script>"
+ "<if test=\"_databaseId == 'db2'\">SELECT ${customField} as CUSTOM_FIELD, (DAYS(DUE) - DAYS(CURRENT_TIMESTAMP)) as AGE_IN_DAYS, COUNT(*) as NUMBER_OF_TASKS</if> "
+ "<if test=\"_databaseId == 'h2'\">SELECT ${customField} as CUSTOM_FIELD, DATEDIFF('DAY', CURRENT_TIMESTAMP, DUE) as AGE_IN_DAYS, COUNT(*) as NUMBER_OF_TASKS</if> "

View File

@ -76,12 +76,12 @@ public class ProvideCategoryReportAccTest {
Report report = taskMonitorService.getCategoryReport(workbaskets, states);
assertNotNull(report);
assertEquals(33, report.getDetailLines().get(categories.get(0)).getTotalNumberOfTasks());
assertEquals(7, report.getDetailLines().get(categories.get(1)).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(categories.get(2)).getTotalNumberOfTasks());
assertEquals(0, report.getDetailLines().get(categories.get(0)).getLineItems().size());
assertEquals(0, report.getDetailLines().get(categories.get(1)).getLineItems().size());
assertEquals(0, report.getDetailLines().get(categories.get(2)).getLineItems().size());
assertEquals(33, report.getReportLines().get(categories.get(0)).getTotalNumberOfTasks());
assertEquals(7, report.getReportLines().get(categories.get(1)).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(categories.get(2)).getTotalNumberOfTasks());
assertEquals(0, report.getReportLines().get(categories.get(0)).getLineItems().size());
assertEquals(0, report.getReportLines().get(categories.get(1)).getLineItems().size());
assertEquals(0, report.getReportLines().get(categories.get(2)).getLineItems().size());
assertEquals(50, report.getSumLine().getTotalNumberOfTasks());
}
@ -112,9 +112,9 @@ public class ProvideCategoryReportAccTest {
assertNotNull(report);
assertEquals(33, report.getDetailLines().get(categories.get(0)).getTotalNumberOfTasks());
assertEquals(7, report.getDetailLines().get(categories.get(1)).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(categories.get(2)).getTotalNumberOfTasks());
assertEquals(33, report.getReportLines().get(categories.get(0)).getTotalNumberOfTasks());
assertEquals(7, report.getReportLines().get(categories.get(1)).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(categories.get(2)).getTotalNumberOfTasks());
assertEquals(10, report.getSumLine().getLineItems().get(0).getNumberOfTasks());
assertEquals(9, report.getSumLine().getLineItems().get(1).getNumberOfTasks());

View File

@ -82,16 +82,16 @@ public class ProvideClassificationReportAccTest {
Report report = taskMonitorService.getClassificationReport(workbaskets, states);
assertNotNull(report);
assertEquals(10, report.getDetailLines().get(classifications.get(0).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(classifications.get(1).getKey()).getTotalNumberOfTasks());
assertEquals(7, report.getDetailLines().get(classifications.get(2).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(classifications.get(3).getKey()).getTotalNumberOfTasks());
assertEquals(13, report.getDetailLines().get(classifications.get(4).getKey()).getTotalNumberOfTasks());
assertEquals(0, report.getDetailLines().get(classifications.get(0).getKey()).getLineItems().size());
assertEquals(0, report.getDetailLines().get(classifications.get(1).getKey()).getLineItems().size());
assertEquals(0, report.getDetailLines().get(classifications.get(2).getKey()).getLineItems().size());
assertEquals(0, report.getDetailLines().get(classifications.get(3).getKey()).getLineItems().size());
assertEquals(0, report.getDetailLines().get(classifications.get(4).getKey()).getLineItems().size());
assertEquals(10, report.getReportLines().get(classifications.get(0).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(classifications.get(1).getKey()).getTotalNumberOfTasks());
assertEquals(7, report.getReportLines().get(classifications.get(2).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(classifications.get(3).getKey()).getTotalNumberOfTasks());
assertEquals(13, report.getReportLines().get(classifications.get(4).getKey()).getTotalNumberOfTasks());
assertEquals(0, report.getReportLines().get(classifications.get(0).getKey()).getLineItems().size());
assertEquals(0, report.getReportLines().get(classifications.get(1).getKey()).getLineItems().size());
assertEquals(0, report.getReportLines().get(classifications.get(2).getKey()).getLineItems().size());
assertEquals(0, report.getReportLines().get(classifications.get(3).getKey()).getLineItems().size());
assertEquals(0, report.getReportLines().get(classifications.get(4).getKey()).getLineItems().size());
assertEquals(50, report.getSumLine().getTotalNumberOfTasks());
}
@ -121,11 +121,11 @@ public class ProvideClassificationReportAccTest {
assertNotNull(report);
assertEquals(10, report.getDetailLines().get(classifications.get(0).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(classifications.get(1).getKey()).getTotalNumberOfTasks());
assertEquals(7, report.getDetailLines().get(classifications.get(2).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(classifications.get(3).getKey()).getTotalNumberOfTasks());
assertEquals(13, report.getDetailLines().get(classifications.get(4).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(classifications.get(0).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(classifications.get(1).getKey()).getTotalNumberOfTasks());
assertEquals(7, report.getReportLines().get(classifications.get(2).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(classifications.get(3).getKey()).getTotalNumberOfTasks());
assertEquals(13, report.getReportLines().get(classifications.get(4).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getSumLine().getLineItems().get(0).getNumberOfTasks());
assertEquals(9, report.getSumLine().getLineItems().get(1).getNumberOfTasks());
@ -154,35 +154,35 @@ public class ProvideClassificationReportAccTest {
Report report = taskMonitorService.getClassificationReport(workbaskets, states, reportLineItemDefinitions);
List<ReportLineItem> line1 = report.getDetailLines().get(classifications.get(0).getKey()).getLineItems();
List<ReportLineItem> line1 = report.getReportLines().get(classifications.get(0).getKey()).getLineItems();
assertEquals(7, line1.get(0).getNumberOfTasks());
assertEquals(2, line1.get(1).getNumberOfTasks());
assertEquals(1, line1.get(2).getNumberOfTasks());
assertEquals(0, line1.get(3).getNumberOfTasks());
assertEquals(0, line1.get(4).getNumberOfTasks());
List<ReportLineItem> line2 = report.getDetailLines().get(classifications.get(1).getKey()).getLineItems();
List<ReportLineItem> line2 = report.getReportLines().get(classifications.get(1).getKey()).getLineItems();
assertEquals(5, line2.get(0).getNumberOfTasks());
assertEquals(3, line2.get(1).getNumberOfTasks());
assertEquals(1, line2.get(2).getNumberOfTasks());
assertEquals(1, line2.get(3).getNumberOfTasks());
assertEquals(0, line2.get(4).getNumberOfTasks());
List<ReportLineItem> line3 = report.getDetailLines().get(classifications.get(2).getKey()).getLineItems();
List<ReportLineItem> line3 = report.getReportLines().get(classifications.get(2).getKey()).getLineItems();
assertEquals(2, line3.get(0).getNumberOfTasks());
assertEquals(1, line3.get(1).getNumberOfTasks());
assertEquals(0, line3.get(2).getNumberOfTasks());
assertEquals(1, line3.get(3).getNumberOfTasks());
assertEquals(3, line3.get(4).getNumberOfTasks());
List<ReportLineItem> line4 = report.getDetailLines().get(classifications.get(3).getKey()).getLineItems();
List<ReportLineItem> line4 = report.getReportLines().get(classifications.get(3).getKey()).getLineItems();
assertEquals(2, line4.get(0).getNumberOfTasks());
assertEquals(2, line4.get(1).getNumberOfTasks());
assertEquals(2, line4.get(2).getNumberOfTasks());
assertEquals(0, line4.get(3).getNumberOfTasks());
assertEquals(4, line4.get(4).getNumberOfTasks());
List<ReportLineItem> line5 = report.getDetailLines().get(classifications.get(4).getKey()).getLineItems();
List<ReportLineItem> line5 = report.getReportLines().get(classifications.get(4).getKey()).getLineItems();
assertEquals(3, line5.get(0).getNumberOfTasks());
assertEquals(3, line5.get(1).getNumberOfTasks());
assertEquals(0, line5.get(2).getNumberOfTasks());

View File

@ -84,13 +84,13 @@ public class ProvideCustomFieldValueReportAccTest {
Report report = taskMonitorService.getCustomFieldValueReport(workbaskets, states, customField);
assertNotNull(report);
assertEquals(25, report.getDetailLines().get(customFieldValue1).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(customFieldValue2).getTotalNumberOfTasks());
assertEquals(15, report.getDetailLines().get(customFieldValue3).getTotalNumberOfTasks());
assertEquals(0, report.getDetailLines().get(customFieldValue1).getLineItems().size());
assertEquals(0, report.getDetailLines().get(customFieldValue2).getLineItems().size());
assertEquals(0, report.getDetailLines().get(customFieldValue3).getLineItems().size());
assertEquals(3, report.getDetailLines().size());
assertEquals(25, report.getReportLines().get(customFieldValue1).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(customFieldValue2).getTotalNumberOfTasks());
assertEquals(15, report.getReportLines().get(customFieldValue3).getTotalNumberOfTasks());
assertEquals(0, report.getReportLines().get(customFieldValue1).getLineItems().size());
assertEquals(0, report.getReportLines().get(customFieldValue2).getLineItems().size());
assertEquals(0, report.getReportLines().get(customFieldValue3).getLineItems().size());
assertEquals(3, report.getReportLines().size());
assertEquals(50, report.getSumLine().getTotalNumberOfTasks());
}
@ -110,13 +110,13 @@ public class ProvideCustomFieldValueReportAccTest {
Report report = taskMonitorService.getCustomFieldValueReport(workbaskets, states, customField);
assertNotNull(report);
assertEquals(21, report.getDetailLines().get(customFieldValue1).getTotalNumberOfTasks());
assertEquals(29, report.getDetailLines().get(customFieldValue2).getTotalNumberOfTasks());
assertEquals(21, report.getReportLines().get(customFieldValue1).getTotalNumberOfTasks());
assertEquals(29, report.getReportLines().get(customFieldValue2).getTotalNumberOfTasks());
assertEquals(0, report.getDetailLines().get(customFieldValue1).getLineItems().size());
assertEquals(0, report.getDetailLines().get(customFieldValue2).getLineItems().size());
assertEquals(0, report.getReportLines().get(customFieldValue1).getLineItems().size());
assertEquals(0, report.getReportLines().get(customFieldValue2).getLineItems().size());
assertEquals(2, report.getDetailLines().size());
assertEquals(2, report.getReportLines().size());
assertEquals(50, report.getSumLine().getTotalNumberOfTasks());
}
@ -142,9 +142,9 @@ public class ProvideCustomFieldValueReportAccTest {
assertNotNull(report);
assertEquals(25, report.getDetailLines().get(customFieldValue1).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(customFieldValue2).getTotalNumberOfTasks());
assertEquals(15, report.getDetailLines().get(customFieldValue3).getTotalNumberOfTasks());
assertEquals(25, report.getReportLines().get(customFieldValue1).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(customFieldValue2).getTotalNumberOfTasks());
assertEquals(15, report.getReportLines().get(customFieldValue3).getTotalNumberOfTasks());
assertEquals(10, report.getSumLine().getLineItems().get(0).getNumberOfTasks());
assertEquals(9, report.getSumLine().getLineItems().get(1).getNumberOfTasks());
@ -156,7 +156,7 @@ public class ProvideCustomFieldValueReportAccTest {
assertEquals(4, report.getSumLine().getLineItems().get(7).getNumberOfTasks());
assertEquals(5, report.getSumLine().getLineItems().get(8).getNumberOfTasks());
assertEquals(3, report.getDetailLines().size());
assertEquals(3, report.getReportLines().size());
assertEquals(50, report.getSumLine().getTotalNumberOfTasks());
}
@ -182,9 +182,9 @@ public class ProvideCustomFieldValueReportAccTest {
assertNotNull(report);
assertEquals(25, report.getDetailLines().get(customFieldValue1).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(customFieldValue2).getTotalNumberOfTasks());
assertEquals(15, report.getDetailLines().get(customFieldValue3).getTotalNumberOfTasks());
assertEquals(25, report.getReportLines().get(customFieldValue1).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(customFieldValue2).getTotalNumberOfTasks());
assertEquals(15, report.getReportLines().get(customFieldValue3).getTotalNumberOfTasks());
assertEquals(19, report.getSumLine().getLineItems().get(0).getNumberOfTasks());
assertEquals(11, report.getSumLine().getLineItems().get(1).getNumberOfTasks());
@ -196,7 +196,7 @@ public class ProvideCustomFieldValueReportAccTest {
assertEquals(7, report.getSumLine().getLineItems().get(7).getNumberOfTasks());
assertEquals(9, report.getSumLine().getLineItems().get(8).getNumberOfTasks());
assertEquals(3, report.getDetailLines().size());
assertEquals(3, report.getReportLines().size());
assertEquals(50, report.getSumLine().getTotalNumberOfTasks());
}
@ -219,21 +219,21 @@ public class ProvideCustomFieldValueReportAccTest {
Report report = taskMonitorService.getCustomFieldValueReport(workbaskets, states, customField,
reportLineItemDefinitions);
List<ReportLineItem> line1 = report.getDetailLines().get(customFieldValue1).getLineItems();
List<ReportLineItem> line1 = report.getReportLines().get(customFieldValue1).getLineItems();
assertEquals(11, line1.get(0).getNumberOfTasks());
assertEquals(4, line1.get(1).getNumberOfTasks());
assertEquals(3, line1.get(2).getNumberOfTasks());
assertEquals(4, line1.get(3).getNumberOfTasks());
assertEquals(3, line1.get(4).getNumberOfTasks());
List<ReportLineItem> line2 = report.getDetailLines().get(customFieldValue2).getLineItems();
List<ReportLineItem> line2 = report.getReportLines().get(customFieldValue2).getLineItems();
assertEquals(5, line2.get(0).getNumberOfTasks());
assertEquals(3, line2.get(1).getNumberOfTasks());
assertEquals(0, line2.get(2).getNumberOfTasks());
assertEquals(2, line2.get(3).getNumberOfTasks());
assertEquals(0, line2.get(4).getNumberOfTasks());
List<ReportLineItem> line3 = report.getDetailLines().get(customFieldValue3).getLineItems();
List<ReportLineItem> line3 = report.getReportLines().get(customFieldValue3).getLineItems();
assertEquals(3, line3.get(0).getNumberOfTasks());
assertEquals(4, line3.get(1).getNumberOfTasks());
assertEquals(1, line3.get(2).getNumberOfTasks());

View File

@ -0,0 +1,311 @@
package acceptance.monitoring;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.sql.DataSource;
import org.h2.store.fs.FileUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import pro.taskana.TaskMonitorService;
import pro.taskana.TaskanaEngine;
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
import pro.taskana.Workbasket;
import pro.taskana.WorkbasketService;
import pro.taskana.configuration.TaskanaEngineConfiguration;
import pro.taskana.database.TestDataGenerator;
import pro.taskana.exceptions.ClassificationNotFoundException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.impl.DetailedClassificationReport;
import pro.taskana.impl.DetailedReportLine;
import pro.taskana.impl.ReportLine;
import pro.taskana.impl.ReportLineItemDefinition;
import pro.taskana.impl.TaskState;
import pro.taskana.impl.TaskanaEngineImpl;
import pro.taskana.impl.WorkbasketImpl;
import pro.taskana.impl.configuration.DBCleaner;
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
import pro.taskana.security.JAASRunner;
import pro.taskana.security.WithAccessId;
/**
* Acceptance test for all "classification report" scenarios.
*/
@RunWith(JAASRunner.class)
public class ProvideDetailedClassificationReportAccTest {
protected static TaskanaEngineConfiguration taskanaEngineConfiguration;
protected static TaskanaEngine taskanaEngine;
@BeforeClass
public static void setupTest() throws Exception {
resetDb();
}
public static void resetDb() throws SQLException, IOException {
DataSource dataSource = TaskanaEngineConfigurationTest.getDataSource();
DBCleaner cleaner = new DBCleaner();
cleaner.clearDb(dataSource, true);
dataSource = TaskanaEngineConfigurationTest.getDataSource();
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false);
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
((TaskanaEngineImpl) taskanaEngine).setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
cleaner.clearDb(dataSource, false);
TestDataGenerator testDataGenerator = new TestDataGenerator();
testDataGenerator.generateMonitoringTestData(dataSource);
}
@WithAccessId(userName = "monitor_user_1")
@Test
public void testGetTotalNumbersOfTasksOfClassificationReport()
throws WorkbasketNotFoundException, NotAuthorizedException, ClassificationNotFoundException {
TaskMonitorService taskMonitorService = taskanaEngine.getTaskMonitorService();
List<Workbasket> workbaskets = getListOfWorkbaskets();
List<TaskState> states = Arrays.asList(TaskState.READY, TaskState.CLAIMED);
DetailedClassificationReport report = taskMonitorService.getDetailedClassificationReport(workbaskets, states);
assertNotNull(report);
DetailedReportLine line1 = (DetailedReportLine) report.getReportLines().get("L10000");
assertEquals(10, line1.getTotalNumberOfTasks());
assertEquals(3, line1.getDetailLines().get("L11000").getTotalNumberOfTasks());
assertEquals(7, line1.getDetailLines().get("N/A").getTotalNumberOfTasks());
assertEquals(0, line1.getLineItems().size());
assertEquals(2, line1.getDetailLines().size());
DetailedReportLine line2 = (DetailedReportLine) report.getReportLines().get("L20000");
assertEquals(10, line2.getTotalNumberOfTasks());
assertEquals(4, line2.getDetailLines().get("L22000").getTotalNumberOfTasks());
assertEquals(6, line2.getDetailLines().get("N/A").getTotalNumberOfTasks());
assertEquals(0, line2.getLineItems().size());
assertEquals(2, line2.getDetailLines().size());
DetailedReportLine line3 = (DetailedReportLine) report.getReportLines().get("L30000");
assertEquals(7, line3.getTotalNumberOfTasks());
assertEquals(3, line3.getDetailLines().get("L33000").getTotalNumberOfTasks());
assertEquals(1, line3.getDetailLines().get("L99000").getTotalNumberOfTasks());
assertEquals(3, line3.getDetailLines().get("N/A").getTotalNumberOfTasks());
assertEquals(0, line3.getLineItems().size());
assertEquals(3, line3.getDetailLines().size());
DetailedReportLine line4 = (DetailedReportLine) report.getReportLines().get("L40000");
assertEquals(10, line4.getTotalNumberOfTasks());
assertEquals(10, line4.getDetailLines().get("N/A").getTotalNumberOfTasks());
assertEquals(0, line4.getLineItems().size());
assertEquals(1, line4.getDetailLines().size());
DetailedReportLine line5 = (DetailedReportLine) report.getReportLines().get("L50000");
assertEquals(13, line5.getTotalNumberOfTasks());
assertEquals(13, line5.getDetailLines().get("N/A").getTotalNumberOfTasks());
assertEquals(0, line5.getLineItems().size());
assertEquals(1, line5.getDetailLines().size());
assertEquals(50, report.getSumLine().getTotalNumberOfTasks());
}
@WithAccessId(userName = "monitor_user_1")
@Test
public void testGetClassificationReportWithReportLineItemDefinitions()
throws WorkbasketNotFoundException, NotAuthorizedException, ClassificationNotFoundException {
TaskMonitorService taskMonitorService = taskanaEngine.getTaskMonitorService();
List<Workbasket> workbaskets = getListOfWorkbaskets();
List<TaskState> states = Arrays.asList(TaskState.READY, TaskState.CLAIMED);
List<ReportLineItemDefinition> reportLineItemDefinitions = getListOfReportLineItemDefinitions();
DetailedClassificationReport report = taskMonitorService.getDetailedClassificationReport(workbaskets, states,
reportLineItemDefinitions);
assertNotNull(report);
assertEquals(10, report.getReportLines().get("L10000").getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get("L20000").getTotalNumberOfTasks());
assertEquals(7, report.getReportLines().get("L30000").getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get("L40000").getTotalNumberOfTasks());
assertEquals(13, report.getReportLines().get("L50000").getTotalNumberOfTasks());
assertEquals(10, report.getSumLine().getLineItems().get(0).getNumberOfTasks());
assertEquals(9, report.getSumLine().getLineItems().get(1).getNumberOfTasks());
assertEquals(11, report.getSumLine().getLineItems().get(2).getNumberOfTasks());
assertEquals(0, report.getSumLine().getLineItems().get(3).getNumberOfTasks());
assertEquals(4, report.getSumLine().getLineItems().get(4).getNumberOfTasks());
assertEquals(0, report.getSumLine().getLineItems().get(5).getNumberOfTasks());
assertEquals(7, report.getSumLine().getLineItems().get(6).getNumberOfTasks());
assertEquals(4, report.getSumLine().getLineItems().get(7).getNumberOfTasks());
assertEquals(5, report.getSumLine().getLineItems().get(8).getNumberOfTasks());
assertEquals(50, report.getSumLine().getTotalNumberOfTasks());
}
@WithAccessId(userName = "monitor_user_1")
@Test
public void testEachItemOfClassificationReport()
throws WorkbasketNotFoundException, NotAuthorizedException, ClassificationNotFoundException {
TaskMonitorService taskMonitorService = taskanaEngine.getTaskMonitorService();
List<Workbasket> workbaskets = getListOfWorkbaskets();
List<TaskState> states = Arrays.asList(TaskState.READY, TaskState.CLAIMED);
List<ReportLineItemDefinition> reportLineItemDefinitions = getShortListOfReportLineItemDefinitions();
DetailedClassificationReport report = taskMonitorService.getDetailedClassificationReport(workbaskets, states,
reportLineItemDefinitions);
DetailedReportLine line1 = (DetailedReportLine) report.getReportLines().get("L10000");
assertEquals(7, line1.getLineItems().get(0).getNumberOfTasks());
assertEquals(2, line1.getLineItems().get(1).getNumberOfTasks());
assertEquals(1, line1.getLineItems().get(2).getNumberOfTasks());
assertEquals(0, line1.getLineItems().get(3).getNumberOfTasks());
assertEquals(0, line1.getLineItems().get(4).getNumberOfTasks());
ReportLine detailedLine1 = line1.getDetailLines().get("L11000");
assertEquals(2, detailedLine1.getLineItems().get(0).getNumberOfTasks());
assertEquals(0, detailedLine1.getLineItems().get(1).getNumberOfTasks());
assertEquals(1, detailedLine1.getLineItems().get(2).getNumberOfTasks());
assertEquals(0, detailedLine1.getLineItems().get(3).getNumberOfTasks());
assertEquals(0, detailedLine1.getLineItems().get(4).getNumberOfTasks());
ReportLine detailedLineNoAttachment1 = line1.getDetailLines().get("N/A");
assertEquals(5, detailedLineNoAttachment1.getLineItems().get(0).getNumberOfTasks());
assertEquals(2, detailedLineNoAttachment1.getLineItems().get(1).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment1.getLineItems().get(2).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment1.getLineItems().get(3).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment1.getLineItems().get(4).getNumberOfTasks());
DetailedReportLine line2 = (DetailedReportLine) report.getReportLines().get("L20000");
assertEquals(5, line2.getLineItems().get(0).getNumberOfTasks());
assertEquals(3, line2.getLineItems().get(1).getNumberOfTasks());
assertEquals(1, line2.getLineItems().get(2).getNumberOfTasks());
assertEquals(1, line2.getLineItems().get(3).getNumberOfTasks());
assertEquals(0, line2.getLineItems().get(4).getNumberOfTasks());
ReportLine detailedLine2 = line2.getDetailLines().get("L22000");
assertEquals(1, detailedLine2.getLineItems().get(0).getNumberOfTasks());
assertEquals(1, detailedLine2.getLineItems().get(1).getNumberOfTasks());
assertEquals(1, detailedLine2.getLineItems().get(2).getNumberOfTasks());
assertEquals(1, detailedLine2.getLineItems().get(3).getNumberOfTasks());
assertEquals(0, detailedLine2.getLineItems().get(4).getNumberOfTasks());
ReportLine detailedLineNoAttachment2 = line2.getDetailLines().get("N/A");
assertEquals(4, detailedLineNoAttachment2.getLineItems().get(0).getNumberOfTasks());
assertEquals(2, detailedLineNoAttachment2.getLineItems().get(1).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment2.getLineItems().get(2).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment2.getLineItems().get(3).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment2.getLineItems().get(4).getNumberOfTasks());
DetailedReportLine line3 = (DetailedReportLine) report.getReportLines().get("L30000");
assertEquals(2, line3.getLineItems().get(0).getNumberOfTasks());
assertEquals(1, line3.getLineItems().get(1).getNumberOfTasks());
assertEquals(0, line3.getLineItems().get(2).getNumberOfTasks());
assertEquals(1, line3.getLineItems().get(3).getNumberOfTasks());
assertEquals(3, line3.getLineItems().get(4).getNumberOfTasks());
ReportLine detailedLine3a = line3.getDetailLines().get("L33000");
assertEquals(0, detailedLine3a.getLineItems().get(0).getNumberOfTasks());
assertEquals(1, detailedLine3a.getLineItems().get(1).getNumberOfTasks());
assertEquals(0, detailedLine3a.getLineItems().get(2).getNumberOfTasks());
assertEquals(1, detailedLine3a.getLineItems().get(3).getNumberOfTasks());
assertEquals(1, detailedLine3a.getLineItems().get(4).getNumberOfTasks());
ReportLine detailedLine3b = line3.getDetailLines().get("L99000");
assertEquals(0, detailedLine3b.getLineItems().get(0).getNumberOfTasks());
assertEquals(0, detailedLine3b.getLineItems().get(1).getNumberOfTasks());
assertEquals(0, detailedLine3b.getLineItems().get(2).getNumberOfTasks());
assertEquals(0, detailedLine3b.getLineItems().get(3).getNumberOfTasks());
assertEquals(1, detailedLine3b.getLineItems().get(4).getNumberOfTasks());
ReportLine detailedLineNoAttachment3 = line3.getDetailLines().get("N/A");
assertEquals(2, detailedLineNoAttachment3.getLineItems().get(0).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment3.getLineItems().get(1).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment3.getLineItems().get(2).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment3.getLineItems().get(3).getNumberOfTasks());
assertEquals(1, detailedLineNoAttachment3.getLineItems().get(4).getNumberOfTasks());
DetailedReportLine line4 = (DetailedReportLine) report.getReportLines().get("L40000");
assertEquals(2, line4.getLineItems().get(0).getNumberOfTasks());
assertEquals(2, line4.getLineItems().get(1).getNumberOfTasks());
assertEquals(2, line4.getLineItems().get(2).getNumberOfTasks());
assertEquals(0, line4.getLineItems().get(3).getNumberOfTasks());
assertEquals(4, line4.getLineItems().get(4).getNumberOfTasks());
ReportLine detailedLineNoAttachment4 = line4.getDetailLines().get("N/A");
assertEquals(2, detailedLineNoAttachment4.getLineItems().get(0).getNumberOfTasks());
assertEquals(2, detailedLineNoAttachment4.getLineItems().get(1).getNumberOfTasks());
assertEquals(2, detailedLineNoAttachment4.getLineItems().get(2).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment4.getLineItems().get(3).getNumberOfTasks());
assertEquals(4, detailedLineNoAttachment4.getLineItems().get(4).getNumberOfTasks());
DetailedReportLine line5 = (DetailedReportLine) report.getReportLines().get("L50000");
assertEquals(3, line5.getLineItems().get(0).getNumberOfTasks());
assertEquals(3, line5.getLineItems().get(1).getNumberOfTasks());
assertEquals(0, line5.getLineItems().get(2).getNumberOfTasks());
assertEquals(5, line5.getLineItems().get(3).getNumberOfTasks());
assertEquals(2, line5.getLineItems().get(4).getNumberOfTasks());
ReportLine detailedLineNoAttachment5 = line5.getDetailLines().get("N/A");
assertEquals(3, detailedLineNoAttachment5.getLineItems().get(0).getNumberOfTasks());
assertEquals(3, detailedLineNoAttachment5.getLineItems().get(1).getNumberOfTasks());
assertEquals(0, detailedLineNoAttachment5.getLineItems().get(2).getNumberOfTasks());
assertEquals(5, detailedLineNoAttachment5.getLineItems().get(3).getNumberOfTasks());
assertEquals(2, detailedLineNoAttachment5.getLineItems().get(4).getNumberOfTasks());
}
private List<Workbasket> getListOfWorkbaskets() throws WorkbasketNotFoundException, NotAuthorizedException {
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
WorkbasketImpl workbasket1 = (WorkbasketImpl) workbasketService
.getWorkbasket("WBI:000000000000000000000000000000000001");
WorkbasketImpl workbasket2 = (WorkbasketImpl) workbasketService
.getWorkbasket("WBI:000000000000000000000000000000000002");
WorkbasketImpl workbasket3 = (WorkbasketImpl) workbasketService
.getWorkbasket("WBI:000000000000000000000000000000000003");
WorkbasketImpl workbasket4 = (WorkbasketImpl) workbasketService
.getWorkbasket("WBI:000000000000000000000000000000000004");
return Arrays.asList(workbasket1, workbasket2, workbasket3, workbasket4);
}
private List<ReportLineItemDefinition> getListOfReportLineItemDefinitions() {
List<ReportLineItemDefinition> reportLineItemDefinitions = new ArrayList<>();
reportLineItemDefinitions.add(new ReportLineItemDefinition(Integer.MIN_VALUE, -11));
reportLineItemDefinitions.add(new ReportLineItemDefinition(-10, -6));
reportLineItemDefinitions.add(new ReportLineItemDefinition(-5, -2));
reportLineItemDefinitions.add(new ReportLineItemDefinition(-1));
reportLineItemDefinitions.add(new ReportLineItemDefinition(0));
reportLineItemDefinitions.add(new ReportLineItemDefinition(1));
reportLineItemDefinitions.add(new ReportLineItemDefinition(2, 5));
reportLineItemDefinitions.add(new ReportLineItemDefinition(6, 10));
reportLineItemDefinitions.add(new ReportLineItemDefinition(11, Integer.MAX_VALUE));
return reportLineItemDefinitions;
}
private List<ReportLineItemDefinition> getShortListOfReportLineItemDefinitions() {
List<ReportLineItemDefinition> reportLineItemDefinitions = new ArrayList<>();
reportLineItemDefinitions.add(new ReportLineItemDefinition(Integer.MIN_VALUE, -6));
reportLineItemDefinitions.add(new ReportLineItemDefinition(-5, -1));
reportLineItemDefinitions.add(new ReportLineItemDefinition(0));
reportLineItemDefinitions.add(new ReportLineItemDefinition(1, 5));
reportLineItemDefinitions.add(new ReportLineItemDefinition(6, Integer.MAX_VALUE));
return reportLineItemDefinitions;
}
@AfterClass
public static void cleanUpClass() {
FileUtils.deleteRecursive("~/data", true);
}
}

View File

@ -75,9 +75,9 @@ public class ProvideWorkbasketLevelReportAccTest {
Report report = taskMonitorService.getWorkbasketLevelReport(workbaskets, states);
assertNotNull(report);
assertEquals(20, report.getDetailLines().get(workbaskets.get(0).getKey()).getTotalNumberOfTasks());
assertEquals(20, report.getDetailLines().get(workbaskets.get(1).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(workbaskets.get(2).getKey()).getTotalNumberOfTasks());
assertEquals(20, report.getReportLines().get(workbaskets.get(0).getKey()).getTotalNumberOfTasks());
assertEquals(20, report.getReportLines().get(workbaskets.get(1).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(workbaskets.get(2).getKey()).getTotalNumberOfTasks());
assertEquals(50, report.getSumLine().getTotalNumberOfTasks());
}
@ -107,9 +107,9 @@ public class ProvideWorkbasketLevelReportAccTest {
assertNotNull(report);
assertEquals(20, report.getDetailLines().get(workbaskets.get(0).getKey()).getTotalNumberOfTasks());
assertEquals(20, report.getDetailLines().get(workbaskets.get(1).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getDetailLines().get(workbaskets.get(2).getKey()).getTotalNumberOfTasks());
assertEquals(20, report.getReportLines().get(workbaskets.get(0).getKey()).getTotalNumberOfTasks());
assertEquals(20, report.getReportLines().get(workbaskets.get(1).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getReportLines().get(workbaskets.get(2).getKey()).getTotalNumberOfTasks());
assertEquals(10, report.getSumLine().getLineItems().get(0).getNumberOfTasks());
assertEquals(9, report.getSumLine().getLineItems().get(1).getNumberOfTasks());

View File

@ -86,7 +86,7 @@ public class TaskMonitorServiceImplTest {
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
assertNotNull(actualResult);
assertEquals(actualResult.getDetailLines().get(workbasket.getKey()).getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get(workbasket.getKey()).getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
}
@ -118,8 +118,8 @@ public class TaskMonitorServiceImplTest {
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
assertNotNull(actualResult);
assertEquals(actualResult.getDetailLines().get(workbasket.getKey()).getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getDetailLines().get(workbasket.getKey()).getLineItems().get(0).getNumberOfTasks(),
assertEquals(actualResult.getReportLines().get(workbasket.getKey()).getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get(workbasket.getKey()).getLineItems().get(0).getNumberOfTasks(),
1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
}
@ -149,7 +149,7 @@ public class TaskMonitorServiceImplTest {
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
assertNotNull(actualResult);
assertEquals(actualResult.getDetailLines().get("EXTERN").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get("EXTERN").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
}
@ -181,8 +181,8 @@ public class TaskMonitorServiceImplTest {
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
assertNotNull(actualResult);
assertEquals(actualResult.getDetailLines().get("EXTERN").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getDetailLines().get("EXTERN").getLineItems().get(0).getNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get("EXTERN").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get("EXTERN").getLineItems().get(0).getNumberOfTasks(), 1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
}
@ -202,7 +202,7 @@ public class TaskMonitorServiceImplTest {
doReturn(expectedResult).when(taskMonitorMapperMock).getTaskCountOfClassificationsByWorkbasketsAndStates(
workbaskets, states);
Report actualResult = cut.getClassificationReport(workbaskets, states);
ClassificationReport actualResult = cut.getClassificationReport(workbaskets, states);
verify(taskanaEngineImpl, times(1)).openConnection();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfClassificationsByWorkbasketsAndStates(any(), any());
@ -211,7 +211,7 @@ public class TaskMonitorServiceImplTest {
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
assertNotNull(actualResult);
assertEquals(actualResult.getDetailLines().get("L10000").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get("L10000").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
}
@ -234,7 +234,7 @@ public class TaskMonitorServiceImplTest {
doReturn(expectedResult).when(taskMonitorMapperMock).getTaskCountOfClassificationsByWorkbasketsAndStates(
workbaskets, states);
Report actualResult = cut.getClassificationReport(workbaskets, states, reportLineItemDefinitions);
ClassificationReport actualResult = cut.getClassificationReport(workbaskets, states, reportLineItemDefinitions);
verify(taskanaEngineImpl, times(1)).openConnection();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfClassificationsByWorkbasketsAndStates(any(), any());
@ -243,11 +243,84 @@ public class TaskMonitorServiceImplTest {
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
assertNotNull(actualResult);
assertEquals(actualResult.getDetailLines().get("L10000").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getDetailLines().get("L10000").getLineItems().get(0).getNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get("L10000").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get("L10000").getLineItems().get(0).getNumberOfTasks(), 1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
}
@Test
public void testGetTotalNumbersOfDetailedClassificationReport() {
WorkbasketImpl workbasket = new WorkbasketImpl();
workbasket.setName("workbasket");
workbasket.setKey("wb1");
List<Workbasket> workbaskets = Arrays.asList(workbasket);
List<TaskState> states = Arrays.asList(TaskState.CLAIMED, TaskState.READY);
List<DetailedMonitorQueryItem> expectedResult = new ArrayList<>();
DetailedMonitorQueryItem detailedMonitorQueryItem = new DetailedMonitorQueryItem();
detailedMonitorQueryItem.setKey("L10000");
detailedMonitorQueryItem.setAttachmentKey("L11000");
detailedMonitorQueryItem.setNumberOfTasks(1);
expectedResult.add(detailedMonitorQueryItem);
doReturn(expectedResult).when(taskMonitorMapperMock)
.getTaskCountOfDetailedClassificationsByWorkbasketsAndStates(workbaskets, states);
DetailedClassificationReport actualResult = cut.getDetailedClassificationReport(workbaskets, states);
verify(taskanaEngineImpl, times(1)).openConnection();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfDetailedClassificationsByWorkbasketsAndStates(any(),
any());
verify(taskanaEngineImpl, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
DetailedReportLine line = (DetailedReportLine) actualResult.getReportLines().get("L10000");
assertNotNull(actualResult);
assertEquals(line.getTotalNumberOfTasks(), 1);
assertEquals(line.getDetailLines().get("L11000").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
}
@Test
public void testGetDetailedClassificationReportWithReportLineItemDefinitions() {
WorkbasketImpl workbasket = new WorkbasketImpl();
workbasket.setName("workbasket");
workbasket.setKey("wb1");
List<Workbasket> workbaskets = Arrays.asList(workbasket);
List<TaskState> states = Arrays.asList(TaskState.CLAIMED, TaskState.READY);
List<ReportLineItemDefinition> reportLineItemDefinitions = Arrays.asList(new ReportLineItemDefinition(),
new ReportLineItemDefinition());
List<DetailedMonitorQueryItem> expectedResult = new ArrayList<>();
DetailedMonitorQueryItem detailedMonitorQueryItem = new DetailedMonitorQueryItem();
detailedMonitorQueryItem.setKey("L10000");
detailedMonitorQueryItem.setAttachmentKey("L11000");
detailedMonitorQueryItem.setAgeInDays(0);
detailedMonitorQueryItem.setNumberOfTasks(1);
expectedResult.add(detailedMonitorQueryItem);
doReturn(expectedResult).when(taskMonitorMapperMock)
.getTaskCountOfDetailedClassificationsByWorkbasketsAndStates(workbaskets, states);
DetailedClassificationReport actualResult = cut.getDetailedClassificationReport(workbaskets, states,
reportLineItemDefinitions);
verify(taskanaEngineImpl, times(1)).openConnection();
verify(taskMonitorMapperMock, times(1)).getTaskCountOfDetailedClassificationsByWorkbasketsAndStates(any(),
any());
verify(taskanaEngineImpl, times(1)).returnConnection();
verifyNoMoreInteractions(taskanaEngineConfigurationMock, taskanaEngineMock, taskanaEngineImpl,
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
DetailedReportLine line = (DetailedReportLine) actualResult.getReportLines().get("L10000");
assertNotNull(actualResult);
assertEquals(line.getTotalNumberOfTasks(), 1);
assertEquals(line.getDetailLines().get("L11000").getTotalNumberOfTasks(), 1);
assertEquals(line.getLineItems().get(0).getNumberOfTasks(), 1);
assertEquals(line.getDetailLines().get("L11000").getLineItems().get(0).getNumberOfTasks(), 1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getSumLine().getLineItems().get(0).getNumberOfTasks(), 1);
}
@Test
public void testGetTotalNumbersOfCustomFieldValueReport() {
WorkbasketImpl workbasket = new WorkbasketImpl();
@ -275,7 +348,7 @@ public class TaskMonitorServiceImplTest {
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
assertNotNull(actualResult);
assertEquals(actualResult.getDetailLines().get("Geschaeftsstelle A").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get("Geschaeftsstelle A").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
}
@ -310,8 +383,8 @@ public class TaskMonitorServiceImplTest {
taskMonitorMapperMock, objectReferenceMapperMock, workbasketServiceMock);
assertNotNull(actualResult);
assertEquals(actualResult.getDetailLines().get("Geschaeftsstelle A").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getDetailLines().get("Geschaeftsstelle A").getLineItems().get(0).getNumberOfTasks(),
assertEquals(actualResult.getReportLines().get("Geschaeftsstelle A").getTotalNumberOfTasks(), 1);
assertEquals(actualResult.getReportLines().get("Geschaeftsstelle A").getLineItems().get(0).getNumberOfTasks(),
1);
assertEquals(actualResult.getSumLine().getTotalNumberOfTasks(), 1);
}

View File

@ -68,3 +68,20 @@ INSERT INTO CLASSIFICATION VALUES('CLI:000000000000000000000000000000000002', 'L
INSERT INTO CLASSIFICATION VALUES('CLI:000000000000000000000000000000000003', 'L30000', 'CLI:000000000000000000000000000000000001' , 'AUTOMATIC', 'TASK', 'DOMAIN_A', TRUE , CURRENT_TIMESTAMP, 'Widerruf' , 'Widerruf' , 1 , 'P1D' , '' , 'VNR,RVNR,KOLVNR' , '' , '' , '' , '' , '' , '' , '' );
INSERT INTO CLASSIFICATION VALUES('CLI:000000000000000000000000000000000004', 'L40000', 'CLI:000000000000000000000000000000000001' , 'MANUAL' , 'TASK', 'DOMAIN_A', TRUE , CURRENT_TIMESTAMP, 'Dynamikaenderung' , 'Dynamikaenderung' , 1 , 'P1D' , '' , 'VNR,RVNR,KOLVNR' , '' , '' , '' , '' , '' , '' , '' );
INSERT INTO CLASSIFICATION VALUES('CLI:000000000000000000000000000000000005', 'L50000', 'CLI:000000000000000000000000000000000001' , 'EXTERN' , 'TASK', 'DOMAIN_A', TRUE , CURRENT_TIMESTAMP, 'Dynamik-Ablehnung' , 'Dynamik-Ablehnung' , 5 , 'P5D' , '' , 'VNR,RVNR,KOLVNR' , '' , '' , '' , '' , '' , '' , '' );
INSERT INTO CLASSIFICATION VALUES('CLI:000000000000000000000000000000000006', 'L11000', '' , 'Anhang' , 'TASK', 'DOMAIN_A', TRUE , CURRENT_TIMESTAMP, 'Anhang 1' , 'Anhang 1' , 3 , 'P1D' , '' , 'VNR,RVNR,KOLVNR' , '' , '' , '' , '' , '' , '' , '' );
INSERT INTO CLASSIFICATION VALUES('CLI:000000000000000000000000000000000007', 'L22000', '' , 'Anhang' , 'TASK', 'DOMAIN_A', TRUE , CURRENT_TIMESTAMP, 'Anhang 2' , 'Anhang 2' , 1 , 'P1D' , '' , 'VNR,RVNR,KOLVNR, ANR', '' , '' , '' , '' , '' , '' , '' );
INSERT INTO CLASSIFICATION VALUES('CLI:000000000000000000000000000000000008', 'L33000', '' , 'Anhang' , 'TASK', 'DOMAIN_A', TRUE , CURRENT_TIMESTAMP, 'Anhang 3' , 'Anhang 3' , 1 , 'P1D' , '' , 'VNR,RVNR,KOLVNR, ANR', '' , '' , '' , '' , '' , '' , '' );
INSERT INTO CLASSIFICATION VALUES('CLI:000000000000000000000000000000000009', 'L99000', '' , 'Anhang' , 'TASK', 'DOMAIN_A', TRUE , CURRENT_TIMESTAMP, 'Anhang 9' , 'Anhang 9' , 1 , 'P1D' , '' , 'VNR,RVNR,KOLVNR, ANR', '' , '' , '' , '' , '' , '' , '' );
-- ATTACHMENT TABLE (ID , TASK_ID , CREATED , MODIFIED , CLASSIFICATION_KEY, REF_COMPANY, REF_SYSTEM, REF_INSTANCE, REF_TYPE, REF_VALUE, CHANNEL, RECEIVED , CUSTOM_ATTRIBUTES );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000001', 'TKI:000000000000000000000000000000000001', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L11000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000002', 'TKI:000000000000000000000000000000000013', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L11000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000003', 'TKI:000000000000000000000000000000000014', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L22000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000004', 'TKI:000000000000000000000000000000000024', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L22000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000005', 'TKI:000000000000000000000000000000000025', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L33000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000006', 'TKI:000000000000000000000000000000000033', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L11000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000007', 'TKI:000000000000000000000000000000000034', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L22000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000008', 'TKI:000000000000000000000000000000000035', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L22000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000009', 'TKI:000000000000000000000000000000000036', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L33000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000010', 'TKI:000000000000000000000000000000000044', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L33000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );
INSERT INTO ATTACHMENT VALUES('ATT:000000000000000000000000000000000011', 'TKI:000000000000000000000000000000000045', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'L99000' , '' , '' , '' , '' , '' , '' , CURRENT_TIMESTAMP, null );