Coverage Summary for Class: ImportConfigurationEditView (org.kitodo.production.forms)
Class |
Class, %
|
Method, %
|
Line, %
|
ImportConfigurationEditView |
0%
(0/1)
|
0%
(0/35)
|
0%
(0/89)
|
/*
* (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.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
import javax.faces.model.SelectItem;
import javax.faces.view.ViewScoped;
import javax.inject.Named;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.kitodo.api.externaldatamanagement.ImportConfigurationType;
import org.kitodo.api.externaldatamanagement.SearchInterfaceType;
import org.kitodo.api.schemaconverter.FileFormat;
import org.kitodo.api.schemaconverter.MetadataFormat;
import org.kitodo.data.database.beans.ImportConfiguration;
import org.kitodo.data.database.beans.MappingFile;
import org.kitodo.data.database.beans.Process;
import org.kitodo.data.database.beans.SearchField;
import org.kitodo.data.database.beans.UrlParameter;
import org.kitodo.data.database.exceptions.DAOException;
import org.kitodo.data.exceptions.DataException;
import org.kitodo.production.enums.ObjectType;
import org.kitodo.production.helper.Helper;
import org.kitodo.production.services.ServiceManager;
import org.primefaces.model.DualListModel;
@Named
@ViewScoped
public class ImportConfigurationEditView extends BaseForm {
private static final Logger logger = LogManager.getLogger(ImportConfigurationEditView.class);
private ImportConfiguration importConfiguration = new ImportConfiguration();
private List<SelectItem> searchFields = new ArrayList<>();
private static final List<String> SRU_VERSIONS = List.of("1.1", "1.2", "2.0");
private static final List<String> SCHEMES = List.of("https", "http", "ftp");
private static final List<String> PARENT_ELEMENT_TYPES = Collections.singletonList("reference");
private static final List<String> PARENT_ELEMENT_TRIM_MODES = Collections.singletonList("parenthesis");
private static final List<String> DEFAULT_ID_XPATHS;
private static final List<String> DEFAULT_TITLE_XPATHS;
private static final String URL_PARAMETER_UNIQUE = "importConfig.urlParameters.conditionUnique";
static {
DEFAULT_ID_XPATHS = List.of(
".//*[local-name()='recordInfo']/*[local-name()='recordIdentifier']/text()",
".//*[local-name()='datafield'][@tag='245']/*[local-name()='subfield'][@code='a']/text()",
".//*[local-name()='datafield'][@tag='003@']/*[local-name()='subfield'][@code='0']/text()"
);
}
static {
DEFAULT_TITLE_XPATHS = List.of(
".//*[local-name()='titleInfo']/*[local-name()='title']/text()",
".//*[local-name()='controlfield'][@tag='001']/text()",
".//*[local-name()='datafield'][@tag='021A']/*[local-name()='subfield'][@code='a']/text()"
);
}
/**
* Return list of default record ID XPaths.
*
* @return list of default record ID XPaths
*/
public List<String> getRecordIdXPathDefault() {
return DEFAULT_ID_XPATHS;
}
/**
* Return list of default record title XPaths.
*
* @return list of default record title XPaths.
*/
public List<String> getRecordTitleXPathDefault() {
return DEFAULT_TITLE_XPATHS;
}
/**
* Load import configuration by ID.
*
* @param id
* ID of import configuration to load
*/
public void load(int id) {
try {
if (id > 0) {
importConfiguration = ServiceManager.getImportConfigurationService().getById(id);
} else {
importConfiguration = new ImportConfiguration();
}
setSaveDisabled(true);
} catch (DAOException e) {
Helper.setErrorMessage(ERROR_LOADING_ONE,
new Object[] { ObjectType.IMPORT_CONFIGURATION.getTranslationSingular(), id }, logger, e);
}
}
/**
* Save import configuration.
*
* @return page or empty String
*/
public String save() {
try {
ServiceManager.getImportConfigurationService().saveToDatabase(importConfiguration);
return projectsPage;
} catch (DAOException e) {
Helper.setErrorMessage(ERROR_SAVING,
new Object[] {ObjectType.IMPORT_CONFIGURATION.getTranslationSingular()}, logger, e);
return this.stayOnCurrentPage;
}
}
/**
* Get importConfiguration.
*
* @return value of importConfiguration
*/
public ImportConfiguration getImportConfiguration() {
return importConfiguration;
}
/**
* Set importConfiguration.
*
* @param importConfiguration as org.kitodo.data.database.beans.ImportConfiguration
*/
public void setImportConfiguration(ImportConfiguration importConfiguration) {
this.importConfiguration = importConfiguration;
}
/**
* Get interface types.
*
* @return interface types
*/
public List<SearchInterfaceType> getInterfaceTypes() {
return List.of(SearchInterfaceType.values());
}
/**
* Get metadata formats.
*
* @return metadata formats
*/
public List<MetadataFormat> getMetadataFormats() {
return List.of(MetadataFormat.values());
}
/**
* Get file formats. Currently only XML is supported.
*
* @return file formats
*/
public List<FileFormat> getFileFormats() {
return Collections.singletonList(FileFormat.XML);
}
/**
* Get import configuration types.
*
* @return import configuration types
*/
public List<ImportConfigurationType> getImportConfigurationTypes() {
return List.of(ImportConfigurationType.values());
}
/**
* Get schemes.
*
* @return schemes
*/
public List<String> getSchemes() {
return SCHEMES;
}
/**
* Add given SearchField to ImportConfiguration.
*
* @param searchField SearchField
*/
public void addSearchField(SearchField searchField) {
if (importConfiguration.getSearchFields().stream().map(SearchField::getLabel).collect(Collectors.toList())
.contains(searchField.getLabel())) {
Helper.setErrorMessage("SearchField labels must be unique ('" + searchField.getLabel()
+ "' already exists!)");
} else {
searchField.setImportConfiguration(importConfiguration);
importConfiguration.getSearchFields().add(searchField);
}
}
/**
* Replace SearchField with index 'searchFieldIndex' in ImportConfiguration's SearchField list with given
* SearchField 'searchField'.
* @param searchField new SearchField
* @param searchFieldIndex index in ImportConfigurations SearchField list
*/
public void updateSearchField(SearchField searchField, int searchFieldIndex) {
importConfiguration.getSearchFields().remove(searchFieldIndex);
importConfiguration.getSearchFields().add(searchFieldIndex, searchField);
}
/**
* Remove given SearchField from ImportConfiguration.
*
* @param searchField SearchField
*/
public void removeSearchField(SearchField searchField) {
searchField.setImportConfiguration(null);
importConfiguration.getSearchFields().remove(searchField);
}
/**
* Add given UrlParameter to importConfiguration.
*
* @param urlParameter UrlParameter to add
*/
public void addUrlParameter(UrlParameter urlParameter) {
if (importConfiguration.getUrlParameters().stream().map(UrlParameter::getParameterKey)
.collect(Collectors.toList()).contains(urlParameter.getParameterKey())) {
Helper.setErrorMessage(URL_PARAMETER_UNIQUE, new Object[]{urlParameter.getParameterKey()});
} else {
urlParameter.setImportConfiguration(importConfiguration);
importConfiguration.getUrlParameters().add(urlParameter);
}
}
/**
* Replace UrlParameter with index 'urlParameterIndex' in ImportConfiguration's UrlParameter list with given
* UrlParameter 'urlParameter'.
* @param urlParameter new UrlParameter
* @param urlParameterIndex index in ImportConfigurations UrlParameter list
*/
public void updateUrlParameter(UrlParameter urlParameter, int urlParameterIndex) {
importConfiguration.getUrlParameters().remove(urlParameterIndex);
importConfiguration.getUrlParameters().add(urlParameterIndex, urlParameter);
}
/**
* Remove give UrlParameter from importConfiguration.
*
* @param urlParameter UrlParameter to remove
*/
public void removeUrlParameter(UrlParameter urlParameter) {
urlParameter.setImportConfiguration(null);
importConfiguration.getUrlParameters().remove(urlParameter);
}
/**
* Get list of available trim modes.
*
* @return list of available trim modes.
*/
public List<String> getParentElementTrimModes() {
return PARENT_ELEMENT_TRIM_MODES;
}
/**
* Get list of available parent element types.
*
* @return list of available parent element types
*/
public List<String> getParentElementTypes() {
return PARENT_ELEMENT_TYPES;
}
/**
* Get mapping files that can be assigned to the current import configuration.
*
* @return list of mapping files assignable to the current import configuration
*/
public DualListModel<MappingFile> getAvailableMappingFiles() {
List<MappingFile> assignedMappingFiles = importConfiguration.getMappingFiles();
List<MappingFile> assignableMappingFiles = new ArrayList<>();
try {
assignableMappingFiles = ServiceManager.getMappingFileService().getAll();
assignableMappingFiles.removeAll(assignedMappingFiles);
} catch (DAOException e) {
Helper.setErrorMessage(e.getLocalizedMessage(), logger, e);
}
return new DualListModel<>(assignableMappingFiles
.stream().sorted(Comparator.comparing(MappingFile::getTitle)).collect(Collectors.toList()),
assignedMappingFiles);
}
/**
* Get mapping files.
*
* @return mapping files
*/
public List<MappingFile> getMappingFiles() {
try {
return ServiceManager.getMappingFileService().getAll();
} catch (DAOException e) {
Helper.setErrorMessage(e);
return new ArrayList<>();
}
}
/**
* Set mapping files that can be assigned to the current import configuration.
*
* @param mappingFilesModel DualListModel containing the mapping files assignable and assigned
* to the current import configuration
*/
public void setAvailableMappingFiles(DualListModel<MappingFile> mappingFilesModel) {
importConfiguration.setMappingFiles(new ArrayList<>(mappingFilesModel.getTarget()));
}
/**
* Get SRU versions.
*
* @return SRU versions
*/
public List<String> getSruVersions() {
return SRU_VERSIONS;
}
/**
* Return list of template processes.
*
* @return list of template processes
*/
public List<Process> getTemplateProcesses() {
try {
return ServiceManager.getProcessService().getTemplateProcesses();
} catch (DataException | DAOException e) {
Helper.setErrorMessage(e);
return new ArrayList<>();
}
}
/**
* Get searchFields.
*
* @return value of searchFields
*/
public List<SelectItem> getSearchFields() {
searchFields = new ArrayList<>();
for (SearchField searchField : importConfiguration.getSearchFields()) {
searchFields.add(new SelectItem(searchField.getLabel(), searchField.getLabel()));
}
return searchFields;
}
/**
* Set searchFields.
*
* @param searchFields as List of SelectItems
*/
public void setSearchFields(List<SelectItem> searchFields) {
this.searchFields = searchFields;
}
/**
* Get search field map.
*
* @return search field map
*/
public Map<String, SearchField> getSearchFieldMap() {
return importConfiguration.getSearchFields().parallelStream()
.collect(Collectors.toMap(SearchField::getLabel, Function.identity()));
}
/**
* Get idSearchField.
*
* @return idSearchField
*/
public String getIdSearchField() {
SearchField idSearchField = importConfiguration.getIdSearchField();
return Objects.isNull(idSearchField) ? null : idSearchField.getLabel();
}
/**
* Set idSearchField.
*
* @param idSearchField new idSearchField
*/
public void setIdSearchField(String idSearchField) {
importConfiguration.setIdSearchField(getSearchFieldMap().get(idSearchField));
}
/**
* Get defaultSearchField.
*
* @return defaultSearchField
*/
public String getDefaultSearchField() {
SearchField defaultSearchField = importConfiguration.getDefaultSearchField();
return Objects.isNull(defaultSearchField) ? null : defaultSearchField.getLabel();
}
/**
* Set defaultSearchField.
*
* @param defaultSearchField new defaultSearchField
*/
public void setDefaultSearchField(String defaultSearchField) {
importConfiguration.setDefaultSearchField(getSearchFieldMap().get(defaultSearchField));
}
/**
* Get parentIdSearchField.
*
* @return parentIdSearchField
*/
public String getParentIdSearchField() {
SearchField parentIdSearchField = importConfiguration.getParentSearchField();
return Objects.isNull(parentIdSearchField) ? null : parentIdSearchField.getLabel();
}
/**
* Set parentIdSearchField.
*
* @param parentIdSearchField new parentIdSearchField
*/
public void setParentIdSearchField(String parentIdSearchField) {
importConfiguration.setParentSearchField(getSearchFieldMap().get(parentIdSearchField));
}
}