/* DigiDoc4J library
*
* This software is released under either the GNU Library General Public
* License (see LICENSE.LGPL).
*
* Note that the only valid version of the LGPL license as far as this
* project is concerned is the original GNU Library General Public License
* Version 2.1, February 1999
*/
package org.digidoc4j.impl.bdoc.report;
import java.util.List;
import org.digidoc4j.SignatureProfile;
import org.digidoc4j.exceptions.DigiDoc4JException;
import org.digidoc4j.impl.bdoc.xades.validation.SignatureValidationData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import eu.europa.esig.dss.jaxb.simplereport.SimpleReport;
import eu.europa.esig.dss.jaxb.simplereport.XmlSignature;
import eu.europa.esig.dss.validation.policy.rules.Indication;
import eu.europa.esig.dss.validation.reports.Reports;
public class SignatureValidationReportCreator {
private final static Logger logger = LoggerFactory.getLogger(SignatureValidationReportCreator.class);
private SignatureValidationData validationData;
private Reports reports;
private SimpleReport simpleReport;
private SignatureValidationReport signatureValidationReport;
public SignatureValidationReportCreator(SignatureValidationData validationData) {
this.validationData = validationData;
this.reports = validationData.getReport().getReport();
this.simpleReport = reports.getSimpleReportJaxb();
}
public static SignatureValidationReport create(SignatureValidationData validationData) {
return new SignatureValidationReportCreator(validationData).createSignatureValidationReport();
}
private SignatureValidationReport createSignatureValidationReport() {
signatureValidationReport = cloneSignatureValidationReport();
updateMissingErrors();
updateDocumentName();
updateIndication();
updateSignatureFormat();
return signatureValidationReport;
}
private SignatureValidationReport cloneSignatureValidationReport() {
if (simpleReport.getSignature().size() > 1) {
logger.warn("Simple report contains more than one signature: " + simpleReport.getSignature().size());
}
XmlSignature signatureXmlReport = simpleReport.getSignature().get(0);
return SignatureValidationReport.create(signatureXmlReport);
}
private void updateMissingErrors() {
List<String> errors = signatureValidationReport.getErrors();
for (DigiDoc4JException error : validationData.getValidationResult().getErrors()) {
if (!errors.contains(error.getMessage())) {
errors.add(error.getMessage());
}
}
}
private void updateDocumentName() {
String documentName = reports.getDiagnosticData().getDocumentName();
signatureValidationReport.setDocumentName(documentName);
}
private void updateIndication() {
if (!validationData.getValidationResult().isValid() && (signatureValidationReport.getIndication() == Indication.TOTAL_PASSED || signatureValidationReport.getIndication() == Indication.PASSED)) {
signatureValidationReport.setIndication(Indication.INDETERMINATE);
}
}
private void updateSignatureFormat() {
if (validationData.getSignatureProfile() == SignatureProfile.LT_TM) {
signatureValidationReport.setSignatureFormat("XAdES_BASELINE_LT_TM");
}
if (validationData.getSignatureProfile() == SignatureProfile.B_EPES) {
signatureValidationReport.setSignatureFormat("XAdES_BASELINE_B_EPES");
}
}
}