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.moaspss.util.Base64Utils;
import at.gv.egovernment.moaspss.util.Constants;
import at.gv.egovernment.moaspss.util.DOMUtils;
import at.gv.egovernment.moaspss.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 CMSContentBaseType
kind of
* DOM element.
*
* @param contentElem
* The CMSContentBaseType
kind of element to parse.
* @return A CMSDataObject
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);
}
}