Coverage Summary for Class: BatchTaskHelper (org.kitodo.production.helper.batch)
Class |
Class, %
|
Method, %
|
Line, %
|
BatchTaskHelper |
0%
(0/1)
|
0%
(0/22)
|
0%
(0/103)
|
/*
* (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
*
* This file is part of the Kitodo project.
*
* It is licensed under GNU General Public License version 3 or later.
*
* For the full copyright and license information, please read the
* GPL3-License.txt file that was distributed with this source code.
*/
package org.kitodo.production.helper.batch;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.kitodo.config.ConfigCore;
import org.kitodo.config.enums.ParameterCore;
import org.kitodo.data.database.beans.Process;
import org.kitodo.data.database.beans.Property;
import org.kitodo.data.database.beans.Task;
import org.kitodo.data.database.beans.User;
import org.kitodo.data.database.enums.TaskEditType;
import org.kitodo.data.database.enums.TaskStatus;
import org.kitodo.data.database.exceptions.DAOException;
import org.kitodo.data.exceptions.DataException;
import org.kitodo.export.ExportDms;
import org.kitodo.production.enums.ObjectType;
import org.kitodo.production.helper.Helper;
import org.kitodo.production.helper.WebDav;
import org.kitodo.production.helper.metadata.ImageHelper;
import org.kitodo.production.services.ServiceManager;
import org.kitodo.production.services.workflow.WorkflowControllerService;
public class BatchTaskHelper extends BatchHelper {
private List<Task> steps;
private static final Logger logger = LogManager.getLogger(BatchTaskHelper.class);
private Task currentStep;
private String processName = "";
private String script;
private final WebDav myDav = new WebDav();
private List<String> processNameList = new ArrayList<>();
/**
* Constructor.
*
* @param steps
* list of tasks
*/
public BatchTaskHelper(List<Task> steps) {
this.steps = steps;
for (Task s : steps) {
this.processNameList.add(s.getProcess().getTitle());
}
if (!steps.isEmpty()) {
this.currentStep = steps.get(0);
this.processName = this.currentStep.getProcess().getTitle();
loadProcessProperties(this.currentStep);
}
}
public List<Task> getSteps() {
return this.steps;
}
public void setSteps(List<Task> steps) {
this.steps = steps;
}
public Task getCurrentStep() {
return this.currentStep;
}
public void setCurrentStep(Task currentStep) {
this.currentStep = currentStep;
}
public List<String> getProcessNameList() {
return this.processNameList;
}
public void setProcessNameList(List<String> processNameList) {
this.processNameList = processNameList;
}
public String getProcessName() {
return this.processName;
}
/**
* Set process' name.
*
* @param processName
* String
*/
public void setProcessName(String processName) {
this.processName = processName;
for (Task s : this.steps) {
if (s.getProcess().getTitle().equals(processName)) {
this.currentStep = s;
loadProcessProperties(this.currentStep);
break;
}
}
}
private void loadProcessProperties(Task task) {
Process process = task.getProcess();
this.properties = process.getProperties();
}
public String getScript() {
return this.script;
}
public void setScript(String script) {
this.script = script;
}
/**
* Execute script.
*/
public void executeScript() throws DataException {
for (Task task : this.steps) {
if (task.getScriptName().equals(this.script)) {
String scriptPath = task.getScriptPath();
ServiceManager.getTaskService().executeScript(task, scriptPath, false);
}
}
}
/**
* Export DMS.
*/
public void exportDMS() {
for (Task step : this.steps) {
ExportDms export = new ExportDms();
try {
export.startExport(step.getProcess());
} catch (DataException e) {
Helper.setErrorMessage("errorExporting",
new Object[] {Helper.getTranslation("task"), step.getId() }, logger, e);
}
}
}
/**
* Not sure.
*
* @return String
*/
public String openBatchTasksByUser() {
for (Task task : this.steps) {
if (task.isTypeImagesRead() || task.isTypeImagesWrite()) {
this.myDav.uploadFromHome(task.getProcess());
}
task.setProcessingStatus(TaskStatus.OPEN);
if (task.isCorrection()) {
task.setProcessingBegin(null);
}
task.setEditType(TaskEditType.MANUAL_MULTI);
task.setProcessingTime(new Date());
User user = ServiceManager.getUserService().getAuthenticatedUser();
ServiceManager.getTaskService().replaceProcessingUser(task, user);
try {
ServiceManager.getTaskService().save(task);
} catch (DataException e) {
Helper.setErrorMessage("errorSaving", new Object[] {ObjectType.TASK.getTranslationSingular()}, logger, e);
}
}
return "";
}
/**
* Not sure.
*
* @return String
*/
public String closeBatchTasksByUser() {
for (Task task : this.steps) {
try {
boolean valid = isTaskValid(task);
if (valid) {
if (task.isTypeImagesRead() || task.isTypeImagesWrite()) {
this.myDav.uploadFromHome(task.getProcess());
}
task.setEditType(TaskEditType.MANUAL_MULTI);
new WorkflowControllerService().close(task);
}
} catch (DataException | IOException | DAOException e) {
Helper.setErrorMessage(e.getLocalizedMessage(), logger, e);
}
}
return "";
}
private boolean isTaskValid(Task task) {
boolean valid = true;
if (task.isTypeCloseVerify()) {
if (invalidMetadataExists(task)) {
valid = false;
}
if (invalidImageExists(task)) {
valid = false;
}
loadProcessProperties(task);
if (invalidPropertyExists(task)) {
valid = false;
}
}
return valid;
}
private boolean invalidMetadataExists(Task task) {
if (task.isTypeMetadata()
&& ConfigCore.getBooleanParameterOrDefaultValue(ParameterCore.USE_META_DATA_VALIDATION)) {
return !ServiceManager.getMetadataValidationService().validate(task.getProcess());
}
return false;
}
private boolean invalidImageExists(Task task) {
if (task.isTypeImagesWrite()) {
ImageHelper mih = new ImageHelper();
if (!mih.checkIfImagesValid(task.getProcess().getTitle(),
ServiceManager.getProcessService().getImagesOriginDirectory(false, task.getProcess()))) {
Helper.setErrorMessage("errorImageValidation");
return true;
}
}
return false;
}
private boolean invalidPropertyExists(Task task) {
for (Property prop : this.properties) {
if (isPropertyInvalid(prop, task)) {
return true;
}
}
return false;
}
private boolean isPropertyInvalid(Property property, Task task) {
if (Objects.isNull(property.getValue()) || property.getValue().isEmpty()) {
Helper.setErrorMessage("batchPropertyEmpty",
new Object[] {property.getTitle(), task.getProcess().getTitle() });
return true;
}
return false;
}
}