package eu.europa.esig.dss.asic.validation;
import java.util.ArrayList;
import java.util.List;
import eu.europa.esig.dss.DSSDocument;
import eu.europa.esig.dss.asic.ASiCUtils;
import eu.europa.esig.dss.asic.ASiCWithXAdESContainerExtractor;
import eu.europa.esig.dss.asic.AbstractASiCContainerExtractor;
import eu.europa.esig.dss.validation.DocumentValidator;
import eu.europa.esig.dss.validation.ManifestFile;
/**
* This class is an implementation to validate ASiC containers with XAdES signature(s)
*
*/
public class ASiCContainerWithXAdESValidator extends AbstractASiCContainerValidator {
private ASiCContainerWithXAdESValidator() {
super(null);
}
public ASiCContainerWithXAdESValidator(final DSSDocument asicContainer) {
super(asicContainer);
analyseEntries();
}
@Override
public boolean isSupported(DSSDocument dssDocument) {
return ASiCUtils.isASiCContainer(dssDocument) && ASiCUtils.isArchiveContainsCorrectSignatureExtension(dssDocument, ".xml");
}
@Override
AbstractASiCContainerExtractor getArchiveExtractor() {
return new ASiCWithXAdESContainerExtractor(document);
}
@Override
List<DocumentValidator> getValidators() {
if (validators == null) {
validators = new ArrayList<DocumentValidator>();
for (final DSSDocument signature : getSignatureDocuments()) {
XMLDocumentForASiCValidator xadesValidator = new XMLDocumentForASiCValidator(signature);
xadesValidator.setCertificateVerifier(certificateVerifier);
xadesValidator.setProcessExecutor(processExecutor);
xadesValidator.setValidationCertPool(validationCertPool);
xadesValidator.setSignaturePolicyProvider(signaturePolicyProvider);
xadesValidator.setDetachedContents(getSignedDocuments());
validators.add(xadesValidator);
}
}
return validators;
}
@Override
protected List<ManifestFile> getManifestFilesDecriptions() {
List<ManifestFile> descriptions = new ArrayList<ManifestFile>();
List<DSSDocument> signatureDocuments = getSignatureDocuments();
List<DSSDocument> manifestDocuments = getManifestDocuments();
// All signatures uses the same file : manifest.xml
for (DSSDocument signatureDoc : signatureDocuments) {
for (DSSDocument manifestDoc : manifestDocuments) {
ASiCEWithXAdESManifestParser manifestParser = new ASiCEWithXAdESManifestParser(signatureDoc, manifestDoc);
descriptions.add(manifestParser.getDescription());
}
}
return descriptions;
}
}