/* * Copyright (c) 2006-2012 Massachusetts General Hospital * All rights reserved. This program and the accompanying materials * are made available under the terms of the i2b2 Software License v2.1 * which accompanies this distribution. * * Contributors: * * Michael Mendis * */ package edu.harvard.i2b2.im.ws; import java.io.StringWriter; import java.util.List; import javax.xml.bind.JAXBElement; import edu.harvard.i2b2.common.util.jaxb.JAXBUnWrapHelper; import edu.harvard.i2b2.common.util.jaxb.JAXBUtil; import edu.harvard.i2b2.im.util.IMJAXBUtil; import edu.harvard.i2b2.im.datavo.i2b2message.BodyType; import edu.harvard.i2b2.im.datavo.i2b2message.MessageHeaderType; import edu.harvard.i2b2.im.datavo.i2b2message.RequestHeaderType; import edu.harvard.i2b2.im.datavo.i2b2message.RequestMessageType; import edu.harvard.i2b2.im.datavo.i2b2message.ResponseHeaderType; import edu.harvard.i2b2.im.datavo.i2b2message.ResponseMessageType; import edu.harvard.i2b2.im.datavo.i2b2message.StatusType; import edu.harvard.i2b2.im.datavo.pdo.EventSet; import edu.harvard.i2b2.im.datavo.pdo.ObservationSet; import edu.harvard.i2b2.im.datavo.pdo.PatientDataType; import edu.harvard.i2b2.im.datavo.pdo.PatientSet; import edu.harvard.i2b2.im.datavo.pdo.PidSet; import edu.harvard.i2b2.im.datavo.pdo.PidType; import edu.harvard.i2b2.im.datavo.pdo.query.GetPDOFromInputListRequestType; import edu.harvard.i2b2.im.datavo.pdo.query.PatientDataResponseType; public class PDOResponseMessage extends ResponseDataMessage{ public PDOResponseMessage() { } /** * Function to build PM Request message type and return it as an XML string * * @param GetUserConfigurationType (user config data) * @return A String data type containing the PM RequestMessage in XML format */ public String doBuildXML(PatientDataResponseType userConfig, MessageHeaderType header){ String requestString = null; try { MessageHeaderType messageHeader = getMessageHeader(); messageHeader.setSecurity(header.getSecurity()); messageHeader.setProjectId(header.getProjectId()); ResponseHeaderType reqHeader = getResponseHeader(); BodyType bodyType = getBodyType(userConfig) ; ResponseMessageType reqMessageType = getResponseMessageType(messageHeader, reqHeader, bodyType); JAXBUtil jaxbUtil = IMJAXBUtil.getJAXBUtil(); StringWriter strWriter = new StringWriter(); try { edu.harvard.i2b2.im.datavo.i2b2message.ObjectFactory of = new edu.harvard.i2b2.im.datavo.i2b2message.ObjectFactory(); jaxbUtil.marshaller(of.createResponse(reqMessageType), strWriter); } catch (Exception e) { log.error(e.getMessage()); e.printStackTrace(); } requestString = strWriter.toString(); } catch (Exception e) { log.error(e.getMessage()); } return requestString; } public BodyType getBodyType(PatientDataResponseType userConfigurationType) { edu.harvard.i2b2.im.datavo.pdo.query.ObjectFactory of = new edu.harvard.i2b2.im.datavo.pdo.query.ObjectFactory(); BodyType bodyType = new BodyType(); bodyType.getAny().add(of.createResponse(userConfigurationType)); return bodyType; } public PatientDataResponseType getPatientDataFromResponseXML(String responseXML) throws Exception { JAXBUtil jaxbUtil = IMJAXBUtil.getJAXBUtil(); JAXBElement jaxbElement = jaxbUtil.unMashallFromString(responseXML); ResponseMessageType messageType = (ResponseMessageType) jaxbElement .getValue(); BodyType bodyType = messageType.getMessageBody(); PatientDataResponseType responseType = (PatientDataResponseType) new JAXBUnWrapHelper() .getObjectByClass(bodyType.getAny(), PatientDataResponseType.class); return responseType; } }