package edu.harvard.i2b2.crc.datavo.pdo.query;
import java.io.StringWriter;
import javax.xml.bind.JAXBElement;
import org.junit.BeforeClass;
import org.junit.Test;
import edu.harvard.i2b2.common.util.jaxb.JAXBUnWrapHelper;
import edu.harvard.i2b2.common.util.jaxb.JAXBUtil;
import edu.harvard.i2b2.crc.axis2.PdoQueryTest;
import edu.harvard.i2b2.crc.datavo.CRCJAXBUtil;
import edu.harvard.i2b2.crc.datavo.i2b2message.BodyType;
import edu.harvard.i2b2.crc.datavo.i2b2message.RequestMessageType;
import edu.harvard.i2b2.crc.datavo.i2b2result.DataType;
import edu.harvard.i2b2.crc.datavo.i2b2result.ResultEnvelopeType;
import edu.harvard.i2b2.crc.datavo.i2b2result.ResultType;
import edu.harvard.i2b2.crc.datavo.pdo.ObservationSet;
import edu.harvard.i2b2.crc.datavo.pdo.ObservationType;
import edu.harvard.i2b2.crc.datavo.pdo.PatientDataType;
import edu.harvard.i2b2.crc.datavo.pdo.PatientIdType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.XmlValueType;
public class PDOResponseTypeTest {
private static String testFileDir = null;
@BeforeClass
public static void init() throws Exception {
testFileDir = System.getProperty("testfiledir");
System.out.println("test file dir " + testFileDir);
if (!((testFileDir != null) && (testFileDir.trim().length() > 0))) {
throw new Exception(
"please provide test file directory info -Dtestfiledir");
}
}
@Test
public void testPDOMarshall() throws Exception {
PatientDataType patientData = new PatientDataType();
ObservationType observation = new ObservationType();
// observation.setPatientId("patientid");
// observation.setPatientIdSource("source");
PatientIdType patientIdType = new PatientIdType();
// patientIdType.setSource("soruce");
patientIdType.setValue("patient_id");
observation.setPatientId(patientIdType);
ObservationSet observationSet = new ObservationSet();
observationSet.getObservation().add(observation);
patientData.getObservationSet().add(observationSet);
try {
JAXBUtil jaxbUtil = CRCJAXBUtil.getJAXBUtil();
edu.harvard.i2b2.crc.datavo.pdo.ObjectFactory of = new edu.harvard.i2b2.crc.datavo.pdo.ObjectFactory();
StringWriter strWriter = new StringWriter();
jaxbUtil.marshaller(of.createPatientData(patientData), strWriter);
System.out.print(strWriter.toString());
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@Test
public void testResult() throws Exception {
DataType dataType = new DataType();
dataType.setValue("100");
dataType.setColumn("count");
dataType.setType("int");
ResultType resultType = new ResultType();
resultType.setName("PATIENT_DEMOGRAPHICS_COUNT");
resultType.getData().add(dataType);
edu.harvard.i2b2.crc.datavo.i2b2result.ObjectFactory of = new edu.harvard.i2b2.crc.datavo.i2b2result.ObjectFactory();
edu.harvard.i2b2.crc.datavo.i2b2result.BodyType bodyType = new edu.harvard.i2b2.crc.datavo.i2b2result.BodyType();
bodyType.getAny().add(of.createResult(resultType));
ResultEnvelopeType resultEnvelopeType = new ResultEnvelopeType();
resultEnvelopeType.setBody(bodyType);
StringWriter strWriter = new StringWriter();
JAXBUtil jaxbUtil = CRCJAXBUtil.getJAXBUtil();
jaxbUtil.marshaller(of.createI2B2ResultEnvelope(resultEnvelopeType),
strWriter);
System.out.println("Results marshalled" + strWriter.toString());
JAXBElement jaxbElement = jaxbUtil.unMashallFromString(strWriter
.toString());
ResultEnvelopeType resultEnvelopeType1 = (ResultEnvelopeType) jaxbElement
.getValue();
JAXBUnWrapHelper helper = new JAXBUnWrapHelper();
ResultType umResultType = (ResultType) helper.getObjectByClass(
resultEnvelopeType1.getBody().getAny(), ResultType.class);
XmlValueType xmlValueType = new XmlValueType();
xmlValueType.getContent().add(resultEnvelopeType);
ResultEnvelopeType resultEnvelopeType2 = (ResultEnvelopeType) helper
.getObjectByClass(xmlValueType.getContent(),
ResultEnvelopeType.class);
if (resultEnvelopeType2 == null) {
System.out.println("null");
}
}
@Test
public void pdoRequestUnMarshallTest() throws Exception {
String filename = testFileDir + "/pdo_query1.xml";
// read file as string
String requestString = PdoQueryTest.getQueryString(filename);
// unmarshall
JAXBElement responseJaxb = CRCJAXBUtil.getJAXBUtil()
.unMashallFromString(requestString);
RequestMessageType r = (RequestMessageType) responseJaxb.getValue();
BodyType bodyType = r.getMessageBody();
// get body and search for analysis definition
JAXBUnWrapHelper unWraphHelper = new JAXBUnWrapHelper();
GetPDOFromInputListRequestType pdoReqType = (GetPDOFromInputListRequestType) unWraphHelper
.getObjectByClass(bodyType.getAny(),
GetPDOFromInputListRequestType.class);
System.out.println("boolean flag " + checkForBlob(pdoReqType));
}
private boolean checkForBlob(
GetPDOFromInputListRequestType getPDOFromInputListReqType) {
boolean booleanConcept = true, booleanEid = true, booleanEvent = true, booleanObservation = true, booleanObserver = true, booleanPatient = true;
boolean booleanPid = true;
if (getPDOFromInputListReqType.getOutputOption()
.getConceptSetUsingFilterList() != null) {
booleanConcept = getPDOFromInputListReqType.getOutputOption()
.getConceptSetUsingFilterList().isBlob();
if (booleanConcept) {
booleanConcept = false;
} else {
booleanConcept = true;
}
}
if (getPDOFromInputListReqType.getOutputOption().getEidSet() != null) {
booleanEid = getPDOFromInputListReqType.getOutputOption()
.getEidSet().isBlob();
if (booleanEid) {
booleanEid = false;
} else {
booleanEid = true;
}
}
if (getPDOFromInputListReqType.getOutputOption().getEventSet() != null) {
booleanEvent = getPDOFromInputListReqType.getOutputOption()
.getEventSet().isBlob();
if (booleanEvent) {
booleanEvent = false;
} else {
booleanEvent = true;
}
}
if (getPDOFromInputListReqType.getOutputOption().getObservationSet() != null) {
booleanObservation = getPDOFromInputListReqType.getOutputOption()
.getObservationSet().isBlob();
if (booleanObservation) {
booleanObservation = false;
} else {
booleanObservation = true;
}
}
if (getPDOFromInputListReqType.getOutputOption()
.getObserverSetUsingFilterList() != null) {
booleanObserver = getPDOFromInputListReqType.getOutputOption()
.getObserverSetUsingFilterList().isBlob();
if (booleanObserver) {
booleanObserver = false;
} else {
booleanObserver = true;
}
}
if (getPDOFromInputListReqType.getOutputOption().getPatientSet() != null) {
booleanPatient = getPDOFromInputListReqType.getOutputOption()
.getPatientSet().isBlob();
if (booleanPatient) {
booleanPatient = false;
} else {
booleanPatient = true;
}
}
if (getPDOFromInputListReqType.getOutputOption().getPidSet() != null) {
booleanPid = getPDOFromInputListReqType.getOutputOption()
.getPidSet().isBlob();
if (booleanPid) {
booleanPid = false;
} else {
booleanPid = true;
}
}
if (booleanConcept && booleanEid && booleanEvent && booleanObservation
&& booleanObserver && booleanPatient && booleanPid) {
return false;
} else {
return true;
}
}
}