package edu.harvard.i2b2.crc.util; import java.io.StringWriter; import javax.xml.bind.JAXBElement; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.common.util.jaxb.JAXBUnWrapHelper; import edu.harvard.i2b2.common.util.jaxb.JAXBUtil; import edu.harvard.i2b2.common.util.jaxb.JAXBUtilException; import edu.harvard.i2b2.crc.datavo.CRCJAXBUtil; import edu.harvard.i2b2.crc.datavo.i2b2message.BodyType; import edu.harvard.i2b2.crc.datavo.i2b2message.RequestHeaderType; import edu.harvard.i2b2.crc.datavo.i2b2message.RequestMessageType; import edu.harvard.i2b2.crc.datavo.i2b2message.SecurityType; import edu.harvard.i2b2.crc.datavo.setfinder.query.AnalysisDefinitionRequestType; import edu.harvard.i2b2.crc.datavo.setfinder.query.AnalysisDefinitionType; import edu.harvard.i2b2.crc.datavo.setfinder.query.AnalysisResultOptionListType; import edu.harvard.i2b2.crc.datavo.setfinder.query.AnalysisResultOptionType; import edu.harvard.i2b2.crc.datavo.setfinder.query.QueryDefinitionRequestType; import edu.harvard.i2b2.crc.datavo.setfinder.query.QueryDefinitionType; import edu.harvard.i2b2.crc.datavo.setfinder.query.ResultOutputOptionListType; import edu.harvard.i2b2.crc.datavo.setfinder.query.ResultOutputOptionType; import edu.harvard.i2b2.crc.datavo.setfinder.query.UserType; public class I2B2RequestMessageHelper { private static Log log = LogFactory.getLog(I2B2RequestMessageHelper.class); String requestXml = null; JAXBUnWrapHelper unWrapHelper = null; JAXBUtil jaxbUtil = CRCJAXBUtil.getJAXBUtil(); JAXBElement jaxbElement = null; RequestMessageType requestMessageType = null; public I2B2RequestMessageHelper(String requestXml) throws I2B2Exception { this.requestXml = requestXml; unWrapHelper = new JAXBUnWrapHelper(); try { jaxbElement = jaxbUtil.unMashallFromString(requestXml); if (jaxbElement == null) { throw new I2B2Exception( "null value in after unmarshalling request string "); } requestMessageType = (RequestMessageType) jaxbElement .getValue(); } catch (JAXBUtilException jaxbUtilEx) { log.error("Error processing request xml [" + requestXml + "]", jaxbUtilEx); throw new I2B2Exception(jaxbUtilEx.getMessage()); } } public RequestMessageType getI2B2RequestMessageType() { return this.requestMessageType; } private BodyType getBodyType() { return requestMessageType.getMessageBody(); } public QueryDefinitionType getQueryDefinition() throws JAXBUtilException { BodyType bodyType = getBodyType(); QueryDefinitionRequestType queryDefReqType = (QueryDefinitionRequestType) unWrapHelper .getObjectByClass(bodyType.getAny(), QueryDefinitionRequestType.class); QueryDefinitionType queryDef = null; if (queryDefReqType != null) { queryDef = queryDefReqType.getQueryDefinition(); } return queryDef; } public AnalysisDefinitionType getAnalysisDefinition() throws JAXBUtilException { BodyType bodyType = getBodyType(); AnalysisDefinitionRequestType analysisDefReqType = (AnalysisDefinitionRequestType) unWrapHelper .getObjectByClass(bodyType.getAny(), AnalysisDefinitionRequestType.class); AnalysisDefinitionType analysisDef = null; if (analysisDefReqType != null) { analysisDef = analysisDefReqType.getAnalysisDefinition(); } return analysisDef; } public UserType getUserType() { RequestMessageType requestMessageType = (RequestMessageType) jaxbElement .getValue(); UserType userType = new UserType(); userType.setLogin(requestMessageType.getMessageHeader().getSecurity() .getUsername()); userType.setGroup(requestMessageType.getMessageHeader().getSecurity() .getDomain()); return userType; } public SecurityType getSecurityType() { RequestMessageType requestMessageType = (RequestMessageType) jaxbElement .getValue(); return requestMessageType.getMessageHeader().getSecurity(); } public String getProjectId() { String projectId = null; RequestMessageType requestMessageType = (RequestMessageType) jaxbElement .getValue(); projectId = requestMessageType.getMessageHeader().getProjectId(); return projectId; } public long getTimeout() { RequestMessageType requestMessageType = (RequestMessageType) jaxbElement .getValue(); RequestHeaderType requestHeader = requestMessageType.getRequestHeader(); long timeOut = 1; if (requestHeader != null && requestHeader.getResultWaittimeMs() > -1) { timeOut = requestHeader.getResultWaittimeMs(); } return timeOut; } public String getVersion() { RequestMessageType requestMessageType = (RequestMessageType) jaxbElement .getValue(); String version = ""; if (requestMessageType.getMessageHeader().getSendingApplication() != null) { version = requestMessageType.getMessageHeader().getSendingApplication().getApplicationVersion(); if (version == null) { version = ""; } else { version = version.trim(); } } return version; } public static String getAnalysisDefinitionXml( AnalysisDefinitionType analysisDefinition) throws JAXBUtilException { StringWriter queryDefWriter = new StringWriter(); edu.harvard.i2b2.crc.datavo.setfinder.query.ObjectFactory of = new edu.harvard.i2b2.crc.datavo.setfinder.query.ObjectFactory(); JAXBUtil jaxbUtil = CRCJAXBUtil.getAnalysisDefJAXBUtil(); jaxbUtil.marshaller(of.createAnalysisDefinition(analysisDefinition), queryDefWriter); return queryDefWriter.toString(); } public static AnalysisDefinitionType getAnalysisDefinitionFromXml( String defXml) throws JAXBUtilException { JAXBUtil jaxbUtil = CRCJAXBUtil.getJAXBUtil(); JAXBElement analysisDef = jaxbUtil.unMashallFromString(defXml); return (AnalysisDefinitionType) analysisDef.getValue(); } public static ResultOutputOptionListType buildResultOptionListFromAnalysisResultList( AnalysisResultOptionListType analysisResultListType) { ResultOutputOptionListType resultOutputOptionList = new ResultOutputOptionListType(); if (analysisResultListType == null) { return resultOutputOptionList; } for (AnalysisResultOptionType analysisResultType : analysisResultListType .getResultOutput()) { ResultOutputOptionType resultOuputOptionType = new ResultOutputOptionType(); resultOuputOptionType.setName(analysisResultType.getName()); resultOuputOptionType.setFullName(analysisResultType.getFullName()); resultOuputOptionType.setDisplayType(analysisResultType .getDisplayType()); resultOuputOptionType.setPriorityIndex(analysisResultType .getPriorityIndex()); resultOutputOptionList.getResultOutput().add(resultOuputOptionType); } return resultOutputOptionList; } }