package eu.europa.esig.dss.signature; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import eu.europa.esig.dss.ASiCContainerType; import eu.europa.esig.dss.AbstractSignatureParameters; import eu.europa.esig.dss.DSSDocument; import eu.europa.esig.dss.DSSException; import eu.europa.esig.dss.RemoteDocument; import eu.europa.esig.dss.RemoteSignatureParameters; import eu.europa.esig.dss.SignatureForm; import eu.europa.esig.dss.SignatureLevel; import eu.europa.esig.dss.SignatureValue; import eu.europa.esig.dss.ToBeSigned; import eu.europa.esig.dss.asic.ASiCWithCAdESSignatureParameters; import eu.europa.esig.dss.asic.ASiCWithXAdESSignatureParameters; import eu.europa.esig.dss.xades.XAdESSignatureParameters; public class RemoteMultipleDocumentsSignatureServiceImpl extends AbstractRemoteSignatureServiceImpl implements RemoteMultipleDocumentsSignatureService<RemoteDocument, RemoteSignatureParameters> { private static final Logger logger = LoggerFactory.getLogger(RemoteMultipleDocumentsSignatureServiceImpl.class); private MultipleDocumentsSignatureService<XAdESSignatureParameters> xadesService; private MultipleDocumentsSignatureService<ASiCWithCAdESSignatureParameters> asicWithCAdESService; private MultipleDocumentsSignatureService<ASiCWithXAdESSignatureParameters> asicWithXAdESService; public void setXadesService(MultipleDocumentsSignatureService<XAdESSignatureParameters> xadesService) { this.xadesService = xadesService; } public void setAsicWithCAdESService(MultipleDocumentsSignatureService<ASiCWithCAdESSignatureParameters> asicWithCAdESService) { this.asicWithCAdESService = asicWithCAdESService; } public void setAsicWithXAdESService(MultipleDocumentsSignatureService<ASiCWithXAdESSignatureParameters> asicWithXAdESService) { this.asicWithXAdESService = asicWithXAdESService; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public ToBeSigned getDataToSign(List<RemoteDocument> toSignDocuments, RemoteSignatureParameters remoteParameters) throws DSSException { logger.info("GetDataToSign in process..."); AbstractSignatureParameters parameters = createParameters(remoteParameters); MultipleDocumentsSignatureService service = getServiceForSignature(remoteParameters); List<DSSDocument> dssDocuments = createDSSDocuments(toSignDocuments); ToBeSigned dataToSign = service.getDataToSign(dssDocuments, parameters); logger.info("GetDataToSign is finished"); return dataToSign; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public DSSDocument signDocument(List<RemoteDocument> toSignDocuments, RemoteSignatureParameters remoteParameters, SignatureValue signatureValue) throws DSSException { logger.info("SignDocument in process..."); AbstractSignatureParameters parameters = createParameters(remoteParameters); MultipleDocumentsSignatureService service = getServiceForSignature(remoteParameters); List<DSSDocument> dssDocuments = createDSSDocuments(toSignDocuments); DSSDocument signDocument = service.signDocument(dssDocuments, parameters, signatureValue); logger.info("SignDocument is finished"); return signDocument; } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public DSSDocument extendDocument(RemoteDocument toExtendDocument, RemoteSignatureParameters remoteParameters) throws DSSException { logger.info("ExtendDocument in process..."); AbstractSignatureParameters parameters = createParameters(remoteParameters); MultipleDocumentsSignatureService service = getServiceForSignature(remoteParameters); DSSDocument dssDocument = createDSSDocument(toExtendDocument); DSSDocument extendDocument = service.extendDocument(dssDocument, parameters); logger.info("ExtendDocument is finished"); return extendDocument; } @SuppressWarnings("rawtypes") private MultipleDocumentsSignatureService getServiceForSignature(RemoteSignatureParameters parameters) { ASiCContainerType asicContainerType = parameters.getAsicContainerType(); SignatureLevel signatureLevel = parameters.getSignatureLevel(); SignatureForm signatureForm = signatureLevel.getSignatureForm(); if (asicContainerType != null) { switch (signatureForm) { case XAdES: return asicWithXAdESService; case CAdES: return asicWithCAdESService; default: throw new DSSException("Unrecognized format (XAdES or CAdES are allowed with ASiC) : " + signatureForm); } } else { if (SignatureForm.XAdES == signatureForm) { return xadesService; } else { throw new DSSException("Unrecognized format (XAdES or CAdES are allowed with ASiC or XAdES) : " + signatureForm); } } } }