diff options
author | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2015-11-03 14:38:34 +0100 |
---|---|---|
committer | Andreas Fitzek <andreas.fitzek@iaik.tugraz.at> | 2015-11-03 14:38:34 +0100 |
commit | 0872d2d8a64fd701776b272f49222428d8def07f (patch) | |
tree | 0954a523ad2cc7ad615dbbae5282dd56497e4c6e /moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind | |
parent | e635718b8d6a12e4e80207c8bdf30b02eed3f2ab (diff) | |
download | moa-sig-0872d2d8a64fd701776b272f49222428d8def07f.tar.gz moa-sig-0872d2d8a64fd701776b272f49222428d8def07f.tar.bz2 moa-sig-0872d2d8a64fd701776b272f49222428d8def07f.zip |
initial commit
Diffstat (limited to 'moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind')
10 files changed, 645 insertions, 0 deletions
diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFRequest.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFRequest.java new file mode 100644 index 0000000..110665c --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFRequest.java @@ -0,0 +1,21 @@ +package at.gv.egovernment.moa.spss.server.xmlbind; + +import java.util.ArrayList; +import java.util.List; + +public class CreatePDFRequest { + private String keyIdentifier; + private List<PDFSignatureInfo> signatureInfoList = new ArrayList<PDFSignatureInfo>(); + + public CreatePDFRequest(String keyIdentifier) { + this.keyIdentifier = keyIdentifier; + } + + public synchronized String getKeyIdentifier() { + return keyIdentifier; + } + + public synchronized List<PDFSignatureInfo> getSignatureInfoList() { + return signatureInfoList; + } +} diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFRespone.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFRespone.java new file mode 100644 index 0000000..ef7e832 --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFRespone.java @@ -0,0 +1,15 @@ +package at.gv.egovernment.moa.spss.server.xmlbind; + +import java.util.ArrayList; +import java.util.List; + +public class CreatePDFRespone { + private List<SignedPDFInfo> signatureInfoList = new ArrayList<SignedPDFInfo>(); + + public CreatePDFRespone() { + } + + public synchronized List<SignedPDFInfo> getSignatureInfoList() { + return signatureInfoList; + } +} diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFSignatureRequestParser.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFSignatureRequestParser.java new file mode 100644 index 0000000..163a7ba --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFSignatureRequestParser.java @@ -0,0 +1,142 @@ +/* + * 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.server.xmlbind; + +import java.io.IOException; + +import org.w3c.dom.Element; +import org.w3c.dom.traversal.NodeIterator; + +import at.gv.egovernment.moa.spss.MOAApplicationException; +import at.gv.egovernment.moa.util.Base64Utils; +import at.gv.egovernment.moa.util.Constants; +import at.gv.egovernment.moa.util.DOMUtils; +import at.gv.egovernment.moa.util.XPathUtils; + +/** + * A parser to parse <code>CreateCMSSignatureRequest</code> DOM trees into + * <code>CreateCMSSignatureRequest</code> API objects. + * + * @author Patrick Peck + * @version $Id$ + */ +public class CreatePDFSignatureRequestParser { + + // + // XPath expresssions to select elements in the CreateCMSSignatureRequest + // + private static final String MOA = Constants.MOA_PREFIX + ":"; + private static final String KEY_IDENTIFIER_XPATH = "/" + MOA + "CreatePDFSignatureRequest/" + MOA + "KeyIdentifier"; + private static final String SINGLE_SIGNATURE_INFO_XPATH = "/" + MOA + "CreatePDFSignatureRequest/" + MOA + + "SingleSignatureInfo"; + private static final String SIGNATURE_PROFILE_XPATH = MOA + "SignatureProfile"; + private static final String SIGNATURE_POSITION_XPATH = MOA + "SignaturePosition"; + private static final String SIGNATURE_ID_XPATH = MOA + "SignatureID"; + + private static final String PDF_DOCUMENT_XPATH = MOA + "PDFDocument"; + + /** + * Create a new <code>CreateCMSSignatureRequestParser</code>. + */ + public CreatePDFSignatureRequestParser() { + } + + /** + * Parse a <code>CreateCMSSignatureRequest</code> DOM element, as defined by + * the MOA schema. + * + * @param requestElem + * The <code>CreateCMSSignatureRequest</code> to parse. The + * request must have been successfully parsed against the schema + * for this method to succeed. + * @return A <code>CreateCMSSignatureRequest</code> API object containing + * the data from the DOM element. + * @throws MOAApplicationException + * An error occurred parsing the request. + */ + public CreatePDFRequest parse(Element requestElem) throws MOAApplicationException { + + String keyIdentifier = XPathUtils.getElementValue(requestElem, KEY_IDENTIFIER_XPATH, null); + + CreatePDFRequest createPDFRequest = new CreatePDFRequest(keyIdentifier); + parseSingleSignatureInfos(requestElem, createPDFRequest); + + return createPDFRequest; + } + + /** + * Parse all <code>SingleSignatureInfo</code> elements of the + * <code>CreateCMSSignatureRequest</code>. + * + * @param requestElem + * The <code>CreateCMSSignatureRequest</code> to parse. + * @return A <code>List</code> of <code>SingleSignatureInfo</code> API + * objects. + * @throws MOAApplicationException + * An error occurred parsing on of the + * <code>SingleSignatureInfo</code> elements. + */ + private void parseSingleSignatureInfos(Element requestElem, CreatePDFRequest createPDFRequest) + throws MOAApplicationException { + + NodeIterator sigInfoElems = XPathUtils.selectNodeIterator(requestElem, SINGLE_SIGNATURE_INFO_XPATH); + Element sigInfoElem; + + while ((sigInfoElem = (Element) sigInfoElems.nextNode()) != null) { + createPDFRequest.getSignatureInfoList().add(parsePDFSignatureInfo(sigInfoElem)); + } + } + + /** + * Parse a <code>SingleSignatureInfo</code> DOM element. + * + * @param sigInfoElem + * The <code>SingleSignatureInfo</code> DOM element to parse. + * @return A <code>SingleSignatureInfo</code> API object containing the + * information of <code>sigInfoElem</code>. + * @throws MOAApplicationException + * An error occurred parsing the + * <code>SingleSignatureInfo</code>. + */ + private PDFSignatureInfo parsePDFSignatureInfo(Element sigInfoElem) throws MOAApplicationException { + + String signatureProfile = XPathUtils.getElementValue(sigInfoElem, SIGNATURE_PROFILE_XPATH, null); + String signaturePosition = XPathUtils.getElementValue(sigInfoElem, SIGNATURE_POSITION_XPATH, null); + String signatureID = XPathUtils.getElementValue(sigInfoElem, SIGNATURE_ID_XPATH, null); + + + Element base64ContentElem = (Element) XPathUtils.selectSingleNode(sigInfoElem, PDF_DOCUMENT_XPATH); + String base64Str = DOMUtils.getText(base64ContentElem); + try { + byte[] inputPDF = Base64Utils.decode(base64Str, true); + PDFSignatureInfo PDFSignatureInfo = new PDFSignatureInfo(inputPDF, + signatureProfile, signaturePosition, signatureID); + + return PDFSignatureInfo; + } catch (IOException e) { + throw new MOAApplicationException("2244", null, e); + } + + } +}
\ No newline at end of file diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFSignatureResponseBuilder.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFSignatureResponseBuilder.java new file mode 100644 index 0000000..78586ba --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/CreatePDFSignatureResponseBuilder.java @@ -0,0 +1,155 @@ +/* + * 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.server.xmlbind; + +import java.io.IOException; +import java.util.Iterator; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import at.gv.egovernment.moa.spss.MOASystemException; +import at.gv.egovernment.moa.spss.api.xmlbind.ResponseBuilderUtils; +import at.gv.egovernment.moa.util.Base64Utils; +import at.gv.egovernment.moa.util.Constants; + +/** + * Convert a <code>CreateCMSSignatureResponse</code> API object into its XML + * representation, according to the MOA XML schema. + * + * @version $Id$ + */ +public class CreatePDFSignatureResponseBuilder { + private static final String MOA_NS_URI = Constants.MOA_NS_URI; + + private static final Logger logger = LoggerFactory.getLogger(CreatePDFSignatureResponseBuilder.class); + + /** The XML document containing the response element. */ + private Document responseDoc; + /** The response <code>CreateCMSSignatureResponse</code> DOM element. */ + private Element responseElem; + + /** + * Create a new <code>CreateCMSSignatureResponseBuilder</code>: + * + * @throws MOASystemException + * An error occurred setting up the resulting XML document. + */ + public CreatePDFSignatureResponseBuilder() throws MOASystemException { + responseDoc = ResponseBuilderUtils.createResponse("CreatePDFSignatureResponse"); + responseElem = responseDoc.getDocumentElement(); + } + + /** + * Build a document containing a <code>CreateCMSSignatureResponse</code> DOM + * element being the XML representation of the given + * <code>CreateCMSSignatureResponse</code> API object. + * + * @param response + * The <code>CreateCMSSignatureResponse</code> to convert to XML. + * @return A document containing the <code>CreateCMSSignatureResponse</code> + * DOM element. + */ + public Document build(CreatePDFRespone response) { + Iterator<SignedPDFInfo> iter = response.getSignatureInfoList().iterator(); + + while (iter.hasNext()) { + SignedPDFInfo signedPDFInfo = iter.next(); + addPDFSignature(signedPDFInfo); + } + + return responseDoc; + } + + /** + * Add a <code>CMSSignature</code> element to the response. + * + * @param cmsSignatureResponse + * The content to put under the <code>CMSSignature</code> + * element. + */ + private void addPDFSignature(SignedPDFInfo signedPDFInfo) { + Element pdfSignature = responseDoc.createElementNS(MOA_NS_URI, "PDFSignature"); + + if(signedPDFInfo.getSignatureID() != null) { + Element signatureID = responseDoc.createElementNS(MOA_NS_URI, "SignatureID"); + signatureID.setTextContent(signedPDFInfo.getSignatureID()); + pdfSignature.appendChild(signatureID); + } + + switch (signedPDFInfo.getResponseType()) { + case SignedPDFInfo.SUCCESS_SIGNATURE: + pdfSignature.appendChild(addSuccessSignature(signedPDFInfo)); + break; + + default: + pdfSignature.appendChild(addErrorResponse(signedPDFInfo)); + break; + } + + responseElem.appendChild(pdfSignature); + } + + private Element addSuccessSignature(SignedPDFInfo signedPDFInfo) { + try { + String base64Value = Base64Utils.encode(signedPDFInfo.getPdfDocument()); + Element cmsSignature = responseDoc.createElementNS(MOA_NS_URI, "PDFSignature"); + cmsSignature.setTextContent(base64Value); + + return cmsSignature; + } catch (IOException e) { + logger.error("Failed to encode pdf signature", e); + signedPDFInfo.setErrorCode(2300); + signedPDFInfo.setErrorInfo("Failed to encode the signed document"); + return addErrorResponse(signedPDFInfo); + } + + + } + + /** + * Add a <code>ErrorResponse</code> element to the response. + * + * @param errorResponse + * The API object containing the information to put into the + * <code>ErrorResponse</code> DOM element. + */ + private Element addErrorResponse(SignedPDFInfo signedPDFInfo) { + Element errorElem = responseDoc.createElementNS(MOA_NS_URI, "ErrorResponse"); + Element errorCodeElem = responseDoc.createElementNS(MOA_NS_URI, "ErrorCode"); + Element infoElem = responseDoc.createElementNS(MOA_NS_URI, "Info"); + String errorCodeStr = Integer.toString(signedPDFInfo.getErrorCode()); + + errorCodeElem.appendChild(responseDoc.createTextNode(errorCodeStr)); + errorElem.appendChild(errorCodeElem); + infoElem.appendChild(responseDoc.createTextNode(signedPDFInfo.getErrorInfo())); + errorElem.appendChild(errorCodeElem); + errorElem.appendChild(infoElem); + + return errorElem; + } + +} diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/PDFSignatureInfo.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/PDFSignatureInfo.java new file mode 100644 index 0000000..fd2be7c --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/PDFSignatureInfo.java @@ -0,0 +1,33 @@ +package at.gv.egovernment.moa.spss.server.xmlbind; + +public class PDFSignatureInfo { + private String signatureProfile = null; + private String signaturePosition = null; + private String signatureID = null; + private byte[] pdfDocument = null; + + public PDFSignatureInfo(byte[] pdfDocument, + String signatureProfile, String signaturePosition, + String signatureID) { + this.pdfDocument = pdfDocument; + this.signatureProfile = signatureProfile; + this.signaturePosition = signaturePosition; + this.signatureID = signatureID; + } + + public synchronized String getSignatureProfile() { + return signatureProfile; + } + + public synchronized String getSignaturePosition() { + return signaturePosition; + } + + public synchronized String getSignatureID() { + return signatureID; + } + + public synchronized byte[] getPdfDocument() { + return pdfDocument; + } +} diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/SignedPDFInfo.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/SignedPDFInfo.java new file mode 100644 index 0000000..a950006 --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/SignedPDFInfo.java @@ -0,0 +1,53 @@ +package at.gv.egovernment.moa.spss.server.xmlbind; + +public class SignedPDFInfo { + + public static final int SUCCESS_SIGNATURE = 0; + public static final int ERROR_RESPONSE = 1; + + private String signatureID = null; + private byte[] pdfDocument = null; + private int responseType = ERROR_RESPONSE; + private int errorCode = 0; + private String errorInfo = null; + + public SignedPDFInfo(String signatureID) { + this.signatureID = signatureID; + } + + public synchronized void setPdfDocument(byte[] pdfDocument) { + this.pdfDocument = pdfDocument; + } + + public synchronized String getSignatureID() { + return signatureID; + } + + public synchronized byte[] getPdfDocument() { + return pdfDocument; + } + + public synchronized void setResponseType(int responseType) { + this.responseType = responseType; + } + + public int getResponseType() { + return this.responseType; + } + + public synchronized int getErrorCode() { + return errorCode; + } + + public synchronized void setErrorCode(int errorCode) { + this.errorCode = errorCode; + } + + public synchronized String getErrorInfo() { + return errorInfo; + } + + public synchronized void setErrorInfo(String errorInfo) { + this.errorInfo = errorInfo; + } +} diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFRequest.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFRequest.java new file mode 100644 index 0000000..c9ca89d --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFRequest.java @@ -0,0 +1,36 @@ +package at.gv.egovernment.moa.spss.server.xmlbind; + +import java.util.Date; + +public class VerifyPDFRequest { + private Date dateTime; + private byte[] signedPDF; + private String trustProfileID; + + public VerifyPDFRequest() { + } + + public synchronized Date getDateTime() { + return dateTime; + } + + public synchronized void setDateTime(Date dateTime) { + this.dateTime = dateTime; + } + + public synchronized byte[] getSignedPDF() { + return signedPDF; + } + + public synchronized void setSignedPDF(byte[] signedPDF) { + this.signedPDF = signedPDF; + } + + public synchronized String getTrustProfileID() { + return trustProfileID; + } + + public synchronized void setTrustProfileID(String trustProfileID) { + this.trustProfileID = trustProfileID; + } +} diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFRequestParser.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFRequestParser.java new file mode 100644 index 0000000..7601b31 --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFRequestParser.java @@ -0,0 +1,60 @@ +package at.gv.egovernment.moa.spss.server.xmlbind; + +import java.io.IOException; +import java.util.Date; + +import org.w3c.dom.Element; + +import at.gv.egovernment.moa.spss.MOAApplicationException; +import at.gv.egovernment.moa.spss.api.xmlbind.RequestParserUtils; +import at.gv.egovernment.moa.util.Base64Utils; +import at.gv.egovernment.moa.util.Constants; +import at.gv.egovernment.moa.util.DOMUtils; +import at.gv.egovernment.moa.util.XPathUtils; + +public class VerifyPDFRequestParser { + + // + // XPath expressions for selecting parts of the DOM message + // + private static final String MOA = Constants.MOA_PREFIX + ":"; + private static final String DATE_TIME_XPATH = MOA + "DateTime"; + private static final String PDF_SIGNATURE_XPATH = MOA + "PDFSignature"; + private static final String TRUST_PROFILE_ID_XPATH = MOA + "TrustProfileID"; + + public VerifyPDFRequest parse(Element requestElem) throws MOAApplicationException { + + VerifyPDFRequest verifyPDFRequest = new VerifyPDFRequest(); + + Date dateTime = RequestParserUtils.parseDateTime(requestElem, DATE_TIME_XPATH); + byte[] signedPDF = null; + try { + signedPDF = parsePDF(requestElem); + } catch (IOException e) { + throw new MOAApplicationException("Failed to extract signed pdf data", null, e); + } + String trustProfileID = XPathUtils.getElementValue(requestElem, TRUST_PROFILE_ID_XPATH, null); + verifyPDFRequest.setDateTime(dateTime); + verifyPDFRequest.setSignedPDF(signedPDF); + verifyPDFRequest.setTrustProfileID(trustProfileID); + + return verifyPDFRequest; + } + + /** + * Parse the content contained in a <code>CMSContentBaseType</code> kind of + * DOM element. + * + * @param contentElem + * The <code>CMSContentBaseType</code> kind of element to parse. + * @return A <code>CMSDataObject</code> API object containing the data from + * the given DOM element. + * @throws IOException + */ + private byte[] parsePDF(Element contentElem) throws IOException { + Element base64ContentElem = (Element) XPathUtils.selectSingleNode(contentElem, PDF_SIGNATURE_XPATH); + + String base64Str = DOMUtils.getText(base64ContentElem); + return Base64Utils.decode(base64Str, true); + } +} diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFResponse.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFResponse.java new file mode 100644 index 0000000..76746cf --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFResponse.java @@ -0,0 +1,20 @@ +package at.gv.egovernment.moa.spss.server.xmlbind; + +import java.util.List; + +import at.gv.egiz.pdfas.lib.api.verify.VerifyResult; + +public class VerifyPDFResponse { + private List<VerifyResult> verificationResults = null; + + public VerifyPDFResponse() { + } + + public synchronized List<VerifyResult> getVerificationResults() { + return verificationResults; + } + + public synchronized void setVerificationResults(List<VerifyResult> verificationResults) { + this.verificationResults = verificationResults; + } +} diff --git a/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFResponseBuilder.java b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFResponseBuilder.java new file mode 100644 index 0000000..705eff6 --- /dev/null +++ b/moaSig/moa-sig/src/main/java/at/gv/egovernment/moa/spss/server/xmlbind/VerifyPDFResponseBuilder.java @@ -0,0 +1,110 @@ +package at.gv.egovernment.moa.spss.server.xmlbind; + +import java.util.Iterator; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import at.gv.egiz.pdfas.lib.api.verify.VerifyResult; +import at.gv.egovernment.moa.spss.MOAApplicationException; +import at.gv.egovernment.moa.spss.MOAException; +import at.gv.egovernment.moa.spss.MOASystemException; +import at.gv.egovernment.moa.spss.api.xmlbind.ResponseBuilderUtils; +import at.gv.egovernment.moa.spss.server.pdfas.ExtendedVerifyResult; +import at.gv.egovernment.moa.util.Constants; + +public class VerifyPDFResponseBuilder { + private static final String MOA_NS_URI = Constants.MOA_NS_URI; + + //private static final Logger logger = LoggerFactory.getLogger(VerifyPDFResponseBuilder.class); + + /** The XML document containing the response element. */ + private Document responseDoc; + /** The response <code>CreateCMSSignatureResponse</code> DOM element. */ + private Element responseElem; + + /** + * Create a new <code>CreateCMSSignatureResponseBuilder</code>: + * + * @throws MOASystemException + * An error occurred setting up the resulting XML document. + */ + public VerifyPDFResponseBuilder() throws MOASystemException { + responseDoc = ResponseBuilderUtils.createResponse("VerifyPDFSignatureResponse"); + responseElem = responseDoc.getDocumentElement(); + } + + /** + * Build a document containing a <code>CreateCMSSignatureResponse</code> DOM + * element being the XML representation of the given + * <code>CreateCMSSignatureResponse</code> API object. + * + * @param response + * The <code>CreateCMSSignatureResponse</code> to convert to XML. + * @return A document containing the <code>CreateCMSSignatureResponse</code> + * DOM element. + */ + public Document build(VerifyPDFResponse response) throws MOAException { + if(response.getVerificationResults() == null) { + throw new MOAApplicationException("No verification results available", null); + } + Iterator<VerifyResult> iter = response.getVerificationResults().iterator(); + + while (iter.hasNext()) { + VerifyResult verifyResult = iter.next(); + addVerifyResult(verifyResult); + } + + return responseDoc; + } + + private void addVerifyResult(VerifyResult verifyResult) throws MOAApplicationException { + Element pdfSignature = responseDoc.createElementNS(MOA_NS_URI, "SignatureResult"); + + + String qcSource = null; + String publicAuthorityID = null; + String sscdSource = null; + boolean isPublicAuthority = false; + boolean isSSCD = false; + String issureCountryCode = null; + + if(verifyResult instanceof ExtendedVerifyResult) { + ExtendedVerifyResult extendedVerifyResult = (ExtendedVerifyResult)verifyResult; + + qcSource = extendedVerifyResult.getQcSource(); + publicAuthorityID = extendedVerifyResult.getPublicAuthorityID(); + sscdSource = extendedVerifyResult.getQcSource(); + issureCountryCode = extendedVerifyResult.getIssureCountryCode(); + + isPublicAuthority = extendedVerifyResult.isPublicAuthority(); + isSSCD = extendedVerifyResult.isSSCD(); + } + + ResponseBuilderUtils.addSignerInfo(responseDoc, pdfSignature, + verifyResult.getSignerCertificate(), + verifyResult.isQualifiedCertificate(), + qcSource, + isPublicAuthority, + publicAuthorityID, + isSSCD, + sscdSource, + issureCountryCode); + + ResponseBuilderUtils.addCodeInfoElement( + responseDoc, + pdfSignature, + "SignatureCheck", + verifyResult.getValueCheckCode().getCode(), + (String)null); + + ResponseBuilderUtils.addCodeInfoElement( + responseDoc, + pdfSignature, + "CertificateCheck", + verifyResult.getCertificateCheck().getCode(), + (String)null); + + responseElem.appendChild(pdfSignature); + } +} |