Coverage Summary for Class: ImportConfigurationMappingValidator (org.kitodo.production.forms.validators)
Class |
Class, %
|
Method, %
|
Line, %
|
ImportConfigurationMappingValidator |
0%
(0/1)
|
0%
(0/3)
|
0%
(0/33)
|
/*
* (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.validators;
import java.util.List;
import java.util.Objects;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import org.kitodo.api.schemaconverter.MetadataFormat;
import org.kitodo.data.database.beans.MappingFile;
import org.kitodo.production.helper.Helper;
import org.primefaces.model.DualListModel;
@FacesValidator("MappingValidator")
public class ImportConfigurationMappingValidator implements Validator<DualListModel<MappingFile>> {
private static final String PROCESS_TEMPLATE = "PROCESS_TEMPLATE";
private static final String CONFIG_TYPE = "editForm:importConfigurationTabView:configurationType";
private static final String METADATA_TYPE = "editForm:importConfigurationTabView:metadataFormat";
private static final String PRESTRUCTURED_IMPORT = "editForm:importConfigurationTabView:prestructuredImport";
private static final String SAVE = "editForm:save";
@Override
public void validate(FacesContext facesContext, UIComponent uiComponent, DualListModel<MappingFile> mappingModel)
throws ValidatorException {
// only validate when saving
if (!facesContext.getExternalContext().getRequestParameterMap().containsKey(SAVE)) {
return;
}
UIInput configType = (UIInput)facesContext.getViewRoot().findComponent(CONFIG_TYPE);
// mapping files are not required for process template configurations
if (Objects.isNull(configType.getValue()) || PROCESS_TEMPLATE.equals(configType.getValue())) {
return;
}
List<MappingFile> mappingFiles = mappingModel.getTarget();
UIInput metadataFormatInput = (UIInput) facesContext.getViewRoot().findComponent(METADATA_TYPE);
String metadataFormat = (String) metadataFormatInput.getValue();
UIInput prestructuredImportInput = (UIInput) facesContext.getViewRoot().findComponent(PRESTRUCTURED_IMPORT);
Boolean prestructuredImport = (Boolean) prestructuredImportInput.getValue();
// if no mapping files are configured, the imported metadata must already be in KITODO internal format
if (!Objects.equals(metadataFormat, MetadataFormat.KITODO.name())
&& mappingFiles.isEmpty()) {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, Helper.getTranslation(
"importConfig.validation.error.missingMappingFiles", metadataFormat), null));
} else {
for (MappingFile mappingFile : mappingFiles) {
int index = mappingFiles.indexOf(mappingFile);
// first mapping file must map import configuration metadata format to some other format
if (index == 0 && !Objects.equals(metadataFormat, mappingFile.getInputMetadataFormat())) {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR,
Helper.getTranslation("importConfig.validation.error.firstMappingFormat",
mappingFile.getTitle(), metadataFormat, mappingFile.getInputMetadataFormat()), null));
}
if (index == mappingFiles.size() - 1) {
validateLastMappingFile(mappingFile, prestructuredImport);
}
// intermediate mapping files output metadata format must match next files input metadata format
if (mappingFiles.size() > index + 1 && !Objects.equals(mappingFile.getOutputMetadataFormat(),
mappingFiles.get(index + 1).getInputMetadataFormat())) {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, Helper.getTranslation(
"importConfig.validation.error.intermediateMappingFormat",
mappingFile.getTitle(), mappingFiles.get(index + 1).getInputMetadataFormat(),
mappingFile.getOutputMetadataFormat()), null));
}
}
}
}
private void validateLastMappingFile(MappingFile mappingFile, Boolean prestructuredImport) {
// last mapping file must map to KITODO internal metadata format
if (!Objects.equals(mappingFile.getOutputMetadataFormat(), MetadataFormat.KITODO.name())) {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, Helper.getTranslation(
"importConfig.validation.error.lastMappingFormat", mappingFile.getTitle(),
mappingFile.getOutputMetadataFormat()), null));
}
// 'prestructured import' flag of mapping file must be equal to corresponding flag in import configuration
if (!Objects.equals(mappingFile.getPrestructuredImport(), prestructuredImport)) {
throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, Helper.getTranslation(
"importConfig.validation.error.prestructuredImport", mappingFile.getTitle()), null));
}
}
}