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 javax.xml.transform.TransformerException;
import at.gv.egiz.moasig.CreateXMLSignatureRequest;
import at.gv.egiz.moasig.CreateXMLSignatureResponseType;
import at.gv.egovernment.moa.spss.MOAApplicationException;
import at.gv.egovernment.moa.spss.api.SPSSFactory;
import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureResponse;
import at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureResponseElement;
import at.gv.egovernment.moa.spss.api.xmlsign.ErrorResponse;
import at.gv.egovernment.moa.spss.api.xmlsign.SignatureEnvironmentResponse;
import at.gv.egovernment.moa.spss.server.webservice.XMLCreateSignatureBinding;
import at.gv.egovernment.moaspss.util.DOMUtils;
public class XMLCreateSignatureBindingImpl implements XMLCreateSignatureBinding {
/** The factory to create API objects. */
private SPSSFactory factory;
/**
* Create a new CreateXMLSignatureRequestParser
.
*/
public XMLCreateSignatureBindingImpl() {
this.factory = SPSSFactory.getInstance();
}
@Override
public at.gv.egovernment.moa.spss.api.xmlsign.CreateXMLSignatureRequest buildXMLRequest(
CreateXMLSignatureRequest createXMLSignatureRequest) throws MOAApplicationException {
String keyIdentifier = createXMLSignatureRequest.getKeyIdentifier();
TransformerUtils transformerUtils = new TransformerUtils();
List singleSignatureInfos = new ArrayList();
Iterator singleSignatureInfoIterator = createXMLSignatureRequest
.getSingleSignatureInfo().iterator();
while (singleSignatureInfoIterator.hasNext()) {
at.gv.egiz.moasig.CreateXMLSignatureRequestType.SingleSignatureInfo singleSignatureInfo = singleSignatureInfoIterator
.next();
singleSignatureInfos.add(transformerUtils.buildSingleSignatureInfo(singleSignatureInfo));
}
return factory.createCreateXMLSignatureRequest(keyIdentifier, singleSignatureInfos);
}
@Override
public CreateXMLSignatureResponseType buildXMLResponse(CreateXMLSignatureResponse response) throws MOAApplicationException {
CreateXMLSignatureResponseType createXMLSignatureResponseType = new CreateXMLSignatureResponseType();
List responseObjects = response.getResponseElements();
Iterator responseIterator = responseObjects.iterator();
while(responseIterator.hasNext()) {
Object responseObject = responseIterator.next();
CreateXMLSignatureResponseElement responseElement =
(CreateXMLSignatureResponseElement) responseObject;
switch (responseElement.getResponseType()) {
case CreateXMLSignatureResponseElement.SIGNATURE_ENVIRONMENT_RESPONSE :
SignatureEnvironmentResponse envResponse =
(SignatureEnvironmentResponse) responseElement;
byte[] signature;
try {
signature = DOMUtils.serializeNode(envResponse.getSignatureEnvironment(), "UTF-8");
} catch (TransformerException e) {
throw new MOAApplicationException("Failed to write xml signature to response", null, e);
} catch (IOException e) {
throw new MOAApplicationException("Failed to write xml signature to response", null, e);
}
createXMLSignatureResponseType.getSignatureEnvironmentOrErrorResponse().add(signature);
break;
case CreateXMLSignatureResponseElement.ERROR_RESPONSE :
ErrorResponse errorResponse = (ErrorResponse) responseElement;
at.gv.egiz.moasig.ErrorResponseType errorResponseType = new at.gv.egiz.moasig.ErrorResponseType();
errorResponseType.setErrorCode(BigInteger.valueOf(errorResponse.getErrorCode()));
errorResponseType.setInfo(errorResponse.getInfo());
createXMLSignatureResponseType.getSignatureEnvironmentOrErrorResponse().add(errorResponseType);
break;
}
}
return createXMLSignatureResponseType;
}
}