/* * Copyright 2003 Federal Chancellery Austria * MOA-SPSS has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by * the European Commission - subsequent versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * http://www.osor.eu/eupl/ * * Unless required by applicable law or agreed to in writing, software * distributed under the Licence is distributed on an "AS IS" basis, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the Licence for the specific language governing permissions and * limitations under the Licence. * * This product combines work with different licenses. See the "NOTICE" text * file for details on the various modules and licenses. * The "NOTICE" text file is part of the distribution. Any derivative works * that you distribute must include a readable copy of the "NOTICE" text file. */ package at.gv.egovernment.moa.spss.api.xmlbind; import java.util.Iterator; import org.w3c.dom.Document; import org.w3c.dom.Element; import at.gv.egovernment.moa.spss.MOAApplicationException; import at.gv.egovernment.moa.spss.MOASystemException; import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponse; import at.gv.egovernment.moa.spss.api.cmsverify.VerifyCMSSignatureResponseElement; import at.gv.egovernment.moa.spss.api.common.CheckResult; import at.gv.egovernment.moa.spss.api.common.SignerInfo; import at.gv.egovernment.moa.spss.api.xmlverify.AdESFormResults; import at.gv.egovernment.moaspss.logging.Logger; /** * Convert a VerifyCMSSignatureResponse API object into its * XML representation, according to the MOA XML schema. * * @author Patrick Peck * @version $Id$ */ public class VerifyPDFSignatureResponseBuilder { /** The XML document containing the response element. */ private Document responseDoc; /** The response VerifyCMSSignatureResponse DOM element. */ private Element responseRootElem; /** * Create a new VerifyCMSSignatureResponseBuilder: * * @throws MOASystemException An error occurred setting up the resulting * XML document. */ public VerifyPDFSignatureResponseBuilder() throws MOASystemException { responseDoc = ResponseBuilderUtils.createResponse("VerifyPDFSignatureResponse"); responseRootElem = responseDoc.getDocumentElement(); } /** * Build a document containing a VerifyCMSSignatureResponse * DOM element being the XML representation of the given * VerifyCMSSignatureResponse API object. * * @param response The VerifyCMSSignatureResponse to convert * to XML. * @return A document containing the VerifyCMSSignatureResponse * DOM element. * @throws MOAApplicationException An error occurred building the response. */ public Document build(VerifyCMSSignatureResponse response) throws MOAApplicationException { Iterator iter; for (iter = response.getResponseElements().iterator(); iter.hasNext();) { VerifyCMSSignatureResponseElement responseElement = (VerifyCMSSignatureResponseElement) iter.next(); Element signatureResult = ResponseBuilderUtils.addChildElement("SignatureResult", responseDoc, responseRootElem); addResponseElement(responseElement, signatureResult); } return responseDoc; } /** * Add an element to the response. * * @param responseElement The element to add to the response. * @param signatureResult * @throws MOAApplicationException An error occurred adding the element. */ private void addResponseElement(VerifyCMSSignatureResponseElement responseElement, Element responseElem) throws MOAApplicationException { SignerInfo signerInfo = responseElement.getSignerInfo(); CheckResult signatureCheck = responseElement.getSignatureCheck(); CheckResult certCheck = responseElement.getCertificateCheck(); if (signerInfo != null) { ResponseBuilderUtils.addSignerInfo( responseDoc, responseElem, signerInfo.getSignerCertificate(), signerInfo.isQualifiedCertificate(), signerInfo.getQCSource(), signerInfo.isPublicAuthority(), signerInfo.getPublicAuhtorityID(), signerInfo.isSSCD(), signerInfo.getSSCDSource(), signerInfo.getIssuerCountryCode(), signerInfo.getTslInfos()); ResponseBuilderUtils.addSigningTime(responseDoc, responseElem, signerInfo.getSigningTime()); } else { Logger.info("Find signature result with no 'SignerInfo'. Maybe a signature verification Failed"); } ResponseBuilderUtils.addSignatureAlgorithm(responseDoc, responseElem, responseElement.getSignatureAlgorithm()); ResponseBuilderUtils.addCodeInfoElement( responseDoc, responseElem, "SignatureCheck", signatureCheck.getCode(), signatureCheck.getInfo()); ResponseBuilderUtils.addCodeInfoElement( responseDoc, responseElem, "CertificateCheck", certCheck.getCode(), certCheck.getInfo()); if (responseElement.getAdESFormResults() != null) { Iterator formIterator = responseElement.getAdESFormResults().iterator(); while (formIterator.hasNext()) { AdESFormResults adESFormResult = (AdESFormResults) formIterator.next(); // add the CertificateCheck ResponseBuilderUtils.addFormCheckElement(responseDoc, responseElem, "FormCheckResult", adESFormResult.getCode().intValue(), adESFormResult.getName()); } } if(responseElement.getExtendedCertificateCheck() != null) { ResponseBuilderUtils.addExtendendResult(responseDoc, responseElem, responseElement.getExtendedCertificateCheck()); } } }