package at.gv.egovernment.moa.spss.server.webservice.binding; import java.io.IOException; import java.math.BigInteger; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import at.gv.egovernment.moa.spss.MOAApplicationException; import at.gv.egovernment.moa.spss.api.SPSSFactory; import at.gv.egovernment.moa.spss.api.cmssign.CMSSignatureResponse; import at.gv.egovernment.moa.spss.api.cmssign.DataObjectInfo; import at.gv.egovernment.moa.spss.api.cmssign.SingleSignatureInfo; import at.gv.egovernment.moa.spss.api.cmsverify.CMSDataObject; import at.gv.egovernment.moa.spss.api.xmlsign.ErrorResponse; import at.gv.egovernment.moaspss.util.Base64Utils; public class CMSParserUtils { private TransformerUtils transformerUtils = new TransformerUtils(); /** The factory to create API objects. */ private SPSSFactory factory; public CMSParserUtils() { this.factory = SPSSFactory.getInstance(); } /** * Add a CMSSignature element to the response. * * @param cmsSignatureResponse * The content to put under the CMSSignature * element. * @throws IOException */ public byte[] addCMSSignature(CMSSignatureResponse cmsSignatureResponse) throws MOAApplicationException { String base64Value = cmsSignatureResponse.getCMSSignature(); try { return Base64Utils.decode(base64Value, true); } catch (IOException e) { throw new MOAApplicationException("Base64 decoding failed", null); } } /** * Add a ErrorResponse element to the response. * * @param errorResponse * The API object containing the information to put into the * ErrorResponse DOM element. */ public at.gv.egiz.moasig.ErrorResponseType addErrorResponse(ErrorResponse errorResponse) { at.gv.egiz.moasig.ErrorResponseType errorResponseType = new at.gv.egiz.moasig.ErrorResponseType(); errorResponseType.setErrorCode(BigInteger.valueOf(errorResponse.getErrorCode())); errorResponseType.setInfo(errorResponse.getInfo()); return errorResponseType; } /** * Parse all SingleSignatureInfo elements of the * CreateCMSSignatureRequest. * * @param requestElem * The CreateCMSSignatureRequest to parse. * @return A List of SingleSignatureInfo API * objects. * @throws MOAApplicationException * An error occurred parsing on of the * SingleSignatureInfo elements. */ public List parseSingleSignatureInfos( List singleInfos) throws MOAApplicationException { List singleSignatureInfos = new ArrayList(); Iterator singleInfoIterator = singleInfos .iterator(); while (singleInfoIterator.hasNext()) { at.gv.egiz.moasig.CreateCMSSignatureRequestType.SingleSignatureInfo singleSignatureInfo = singleInfoIterator .next(); singleSignatureInfos.add(parseSingleSignatureInfo(singleSignatureInfo)); } return singleSignatureInfos; } /** * Parse a SingleSignatureInfo DOM element. * * @param sigInfoElem * The SingleSignatureInfo DOM element to parse. * @return A SingleSignatureInfo API object containing the * information of sigInfoElem. * @throws MOAApplicationException * An error occurred parsing the * SingleSignatureInfo. */ public SingleSignatureInfo parseSingleSignatureInfo( at.gv.egiz.moasig.CreateCMSSignatureRequestType.SingleSignatureInfo singleSignatureInfo) throws MOAApplicationException { DataObjectInfo dataObjectInfo = parseDataObjectInfo(singleSignatureInfo.getDataObjectInfo()); boolean securityLayerConform = singleSignatureInfo.isSecurityLayerConformity(); return factory.createSingleSignatureInfoCMS(dataObjectInfo, securityLayerConform); } /** * Parse the DataObjectInfo DOM elements contained in the given * SingleSignatureInfo DOM element. * * @param sigInfoElem * The SingleSignatureInfo DOM element whose * DataObjectInfos to parse. * @return A List of DataObjectInfo API objects * containing the data from the DataObjectInfo DOM * elements. * @throws MOAApplicationException * An error occurred parsing one of the * DataObjectInfos. */ public DataObjectInfo parseDataObjectInfo( at.gv.egiz.moasig.CreateCMSSignatureRequestType.SingleSignatureInfo.DataObjectInfo dataObjectInfo) throws MOAApplicationException { String structure = dataObjectInfo.getStructure(); CMSDataObject dataObject = this.transformerUtils.parseDataObject(dataObjectInfo.getDataObject()); return factory.createDataObjectInfo(structure, dataObject); } }