/* * 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.api.xmlbind; import java.util.Iterator; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import at.gv.egovernment.moa.spss.MOASystemException; 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.moaspss.util.Constants; /** * Convert a CreateXMLSignatureResponse API object into its XML * representation, according to the MOA XML schema. * * @author Patrick Peck * @version $Id$ */ public class CreateXMLSignatureResponseBuilder { private static final String MOA_NS_URI = Constants.MOA_NS_URI; /** The XML document containing the response element. */ private final Document responseDoc; /** The response CreateXMLSignatureResponse DOM element. */ private final Element responseElem; /** * Create a new CreateXMLSignatureResponseBuilder: * * @throws MOASystemException An error occurred setting up the resulting XML * document. */ public CreateXMLSignatureResponseBuilder() throws MOASystemException { responseDoc = ResponseBuilderUtils.createResponse("CreateXMLSignatureResponse"); responseElem = responseDoc.getDocumentElement(); } /** * Build a document containing a CreateXMLSignatureResponse DOM * element being the XML representation of the given * CreateXMLSignatureResponse API object. * * @param response The CreateXMLSignatureResponse to convert to * XML. * @return A document containing the CreateXMLSignatureResponse DOM * element. */ public Document build(CreateXMLSignatureResponse response) { Iterator iter; for (iter = response.getResponseElements().iterator(); iter.hasNext();) { final CreateXMLSignatureResponseElement responseElement = (CreateXMLSignatureResponseElement) iter.next(); switch (responseElement.getResponseType()) { case CreateXMLSignatureResponseElement.SIGNATURE_ENVIRONMENT_RESPONSE: final SignatureEnvironmentResponse envResponse = (SignatureEnvironmentResponse) responseElement; addSignatureEnvironment(envResponse); break; case CreateXMLSignatureResponseElement.ERROR_RESPONSE: final ErrorResponse errorResponse = (ErrorResponse) responseElement; addErrorResponse(errorResponse); break; } } return responseDoc; } /** * Add a SignatureEnvironment element to the response. * * @param envResponse The content to put under the * SignatureEnvironment element. This should * either be a dsig:Signature element (in case * of a detached signature) or the signature environment * containing the signature (in case of an enveloping * signature). */ private void addSignatureEnvironment(SignatureEnvironmentResponse envResponse) { final Element content = envResponse.getSignatureEnvironment(); final Node importedSignature = responseDoc.importNode(content, true); final Element signatureEnvironment = responseDoc.createElementNS(MOA_NS_URI, "SignatureEnvironment"); signatureEnvironment.appendChild(importedSignature); responseElem.appendChild(signatureEnvironment); } /** * Add a ErrorResponse element to the response. * * @param errorResponse The API object containing the information to put into * the ErrorResponse DOM element. */ private void addErrorResponse(ErrorResponse errorResponse) { final Element errorElem = responseDoc.createElementNS(MOA_NS_URI, "ErrorResponse"); final Element errorCodeElem = responseDoc.createElementNS(MOA_NS_URI, "ErrorCode"); final Element infoElem = responseDoc.createElementNS(MOA_NS_URI, "Info"); final String errorCodeStr = Integer.toString(errorResponse.getErrorCode()); errorCodeElem.appendChild(responseDoc.createTextNode(errorCodeStr)); errorElem.appendChild(errorCodeElem); infoElem.appendChild(responseDoc.createTextNode(errorResponse.getInfo())); errorElem.appendChild(errorCodeElem); errorElem.appendChild(infoElem); responseElem.appendChild(errorElem); } }