Coverage Summary for Class: DesktopForm (org.kitodo.production.forms)
Class |
Method, %
|
Line, %
|
DesktopForm |
0%
(0/16)
|
0%
(0/78)
|
DesktopForm$1 |
0%
(0/1)
|
0%
(0/1)
|
Total |
0%
(0/17)
|
0%
(0/79)
|
/*
* (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.forms;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import javax.json.JsonException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.ElasticsearchStatusException;
import org.kitodo.data.database.exceptions.DAOException;
import org.kitodo.data.exceptions.DataException;
import org.kitodo.exceptions.ProjectDeletionException;
import org.kitodo.production.dto.ProcessDTO;
import org.kitodo.production.dto.ProjectDTO;
import org.kitodo.production.dto.TaskDTO;
import org.kitodo.production.enums.ObjectType;
import org.kitodo.production.helper.Helper;
import org.kitodo.production.helper.WebDav;
import org.kitodo.production.services.ServiceManager;
import org.kitodo.production.services.data.ProcessService;
import org.kitodo.production.services.data.ProjectService;
import org.primefaces.model.SortOrder;
@Named("DesktopForm")
@ViewScoped
public class DesktopForm extends BaseForm {
private static final Logger logger = LogManager.getLogger(DesktopForm.class);
private static final String SORT_TITLE = "title";
private static final String SORT_ID = "id";
private List<TaskDTO> taskList = new ArrayList<>();
private List<ProcessDTO> processList = new ArrayList<>();
private List<ProjectDTO> projectList = new ArrayList<>();
/**
* Default constructor.
*/
public DesktopForm() {
super();
}
/**
* Get values of ObjectType enum.
*
* @return array containing values of ObjectType enum
*/
public List<ObjectType> getObjectTypes() {
ArrayList<ObjectType> objectTypes = new ArrayList<>();
objectTypes.add(ObjectType.TASK);
objectTypes.add(ObjectType.USER);
objectTypes.add(ObjectType.PROCESS);
objectTypes.add(ObjectType.DOCKET);
objectTypes.add(ObjectType.PROJECT);
objectTypes.add(ObjectType.RULESET);
objectTypes.add(ObjectType.TEMPLATE);
objectTypes.add(ObjectType.ROLE);
objectTypes.add(ObjectType.WORKFLOW);
return objectTypes;
}
/**
* Get tasks.
*
* @return task list
*/
public List<TaskDTO> getTasks() {
try {
if (ServiceManager.getSecurityAccessService().hasAuthorityToViewTaskList() && taskList.isEmpty()) {
taskList = ServiceManager.getTaskService().loadData(0, 10, SORT_TITLE, SortOrder.ASCENDING, new HashMap<>());
}
} catch (DataException | JsonException e) {
Helper.setErrorMessage(ERROR_LOADING_MANY, new Object[] {ObjectType.TASK.getTranslationPlural() }, logger,
e);
}
return taskList;
}
/**
* Get processes.
*
* @return process list
*/
public List<ProcessDTO> getProcesses() {
try {
if (ServiceManager.getSecurityAccessService().hasAuthorityToViewProcessList() && processList.isEmpty()) {
processList = ServiceManager.getProcessService().loadData(0, 10, SORT_ID, SortOrder.DESCENDING, null);
}
} catch (DataException | JsonException e) {
Helper.setErrorMessage(ERROR_LOADING_MANY, new Object[] {ObjectType.PROCESS.getTranslationPlural() },
logger, e);
}
return processList;
}
/**
* Get projects.
*
* @return project list
*/
public List<ProjectDTO> getProjects() {
try {
if (ServiceManager.getSecurityAccessService().hasAuthorityToViewProjectList() && projectList.isEmpty()) {
projectList = ServiceManager.getProjectService().loadData(0, 10, SORT_TITLE, SortOrder.ASCENDING, null);
}
} catch (DataException | JsonException e) {
Helper.setErrorMessage(ERROR_LOADING_MANY, new Object[] {ObjectType.PROJECT.getTranslationPlural() },
logger, e);
}
return projectList;
}
/**
* Delete given Process 'process'.
*
* @param processID ID of Process to delete
*/
public void deleteProcess(int processID) {
try {
ProcessService.deleteProcess(processID);
emptyCache();
} catch (DataException | DAOException | IOException e) {
Helper.setErrorMessage(ERROR_DELETING, new Object[] {ObjectType.PROCESS.getTranslationSingular() },
logger, e);
}
}
/**
* Delete project by ID.
*
* @param projectID ID of project to be deleted
*/
public void deleteProject(int projectID) {
try {
ProjectService.delete(projectID);
emptyCache();
} catch (DataException | DAOException e) {
Helper.setErrorMessage(ERROR_DELETING, new Object[] {ObjectType.PROJECT.getTranslationSingular() }, logger,
e);
} catch (ProjectDeletionException e) {
Helper.setErrorMessage(e.getMessage());
}
}
/**
* Export METS.
*/
public void exportMets(int processId) {
try {
ProcessService.exportMets(processId);
} catch (DAOException | DataException | IOException e) {
Helper.setErrorMessage("An error occurred while trying to export METS file for process "
+ processId, logger, e);
}
}
/**
* Download to home for single process. First check if this volume is currently
* being edited by another user and placed in his home directory, otherwise
* download.
*/
public void downloadToHome(int processId) {
try {
ProcessService.downloadToHome(new WebDav(), processId);
} catch (DAOException e) {
Helper.setErrorMessage("Error downloading process " + processId + " to home directory!");
}
}
/**
* Get number of elements of given type 'objectType' in index.
*
* @param objectType
* type of elements
* @return number of elements
*/
public long getNumberOfElements(ObjectType objectType) {
try {
switch (objectType) {
case TASK:
return ServiceManager.getTaskService().countDatabaseRows();
case USER:
return ServiceManager.getUserService().countDatabaseRows();
case DOCKET:
return ServiceManager.getDocketService().countDatabaseRows();
case PROCESS:
return ServiceManager.getProcessService().countDatabaseRows();
case PROJECT:
return ServiceManager.getProjectService().countDatabaseRows();
case RULESET:
return ServiceManager.getRulesetService().countDatabaseRows();
case TEMPLATE:
return ServiceManager.getTemplateService().countDatabaseRows();
case ROLE:
return ServiceManager.getRoleService().countDatabaseRows();
case WORKFLOW:
return ServiceManager.getWorkflowService().countDatabaseRows();
default:
return 0L;
}
} catch (DAOException | JsonException | ElasticsearchStatusException e) {
Helper.setErrorMessage("Unable to load number of elements", logger, e);
}
return 0L;
}
/**
* Empties the lists for caching.
*/
public void emptyCache() {
taskList.clear();
processList.clear();
projectList.clear();
}
/**
* Empty task cache.
*/
public void emptyTaskCache() {
taskList.clear();
}
/**
* Empty process cache.
*/
public void emptyProcessCache() {
processList.clear();
}
/**
* Empty project cache.
*/
public void emptyProjectCache() {
projectList.clear();
}
/**
* Check and return whether the process with the ID 'pid' has any correction comments or not.
*
* @param pid
* ID of process to check
* @return 0, if process has no correction comment
* 1, if process has correction comments that are all corrected
* 2, if process has at least one open correction comment
*/
public int hasCorrectionTask(int pid) {
try {
return ProcessService.hasCorrectionComment(pid).getValue();
} catch (DAOException e) {
Helper.setErrorMessage(ERROR_LOADING_ONE, new Object[] {ObjectType.PROCESS.getTranslationSingular(), pid},
logger, e);
return 0;
}
}
}