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
* DataObjectInfo
s 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
* DataObjectInfo
s.
*/
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);
}
}