package edu.harvard.i2b2.crc.dao.setfinder;
import static org.junit.Assert.assertNotNull;
import java.io.StringReader;
import java.sql.Connection;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.w3c.dom.Document;
import edu.harvard.i2b2.common.util.jaxb.JAXBUnWrapHelper;
import edu.harvard.i2b2.common.util.jaxb.JAXBUtil;
import edu.harvard.i2b2.crc.axis2.CRCAxisAbstract;
import edu.harvard.i2b2.crc.dao.setfinder.querybuilder.QueryToolUtil;
import edu.harvard.i2b2.crc.datavo.CRCJAXBUtil;
import edu.harvard.i2b2.crc.datavo.db.DataSourceLookup;
import edu.harvard.i2b2.crc.datavo.i2b2message.RequestMessageType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.QueryDefinitionRequestType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.QueryDefinitionType;
import edu.harvard.i2b2.crc.util.QueryProcessorUtil;
public class QueryProcessorUtilTest {
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 testSetfinderQueryBuilder() throws Exception {
DataSourceLookup dataSourceLookup = (DataSourceLookup) QueryProcessorUtil
.getInstance().getSpringBeanFactory().getBean(
"TestDataSourceLookup");
QueryToolUtil queryUtil = new QueryToolUtil(dataSourceLookup);
// QueryProcessorUtil qpUtil = QueryProcessorUtil.getInstance();
// Connection conn = qpUtil.getManualConnection();
Connection conn = null;
// assertNotNull("check database connection not null",conn);
// String filename = testFileDir
// +
// "/edu.harvard.i2b2.crc.dao.setfinder.querybuilder/setfinder_query_old.xml"
// ;
// String filename = testFileDir + "/setfinder_250_concepts_1.xml";
// String filename = testFileDir + "/setfinder_query.xml";
// String filename = testFileDir + "/setfinder_item_nonexist.xml";
String filename = testFileDir + "/setfinder_query_1.xml";
String xml = CRCAxisAbstract.getQueryString(filename);
String sql = queryUtil.generateSQL(conn, xml, true);
assertNotNull("check sql not null", sql);
System.out.println("Generated SQL " + sql);
System.out.println("Ignored Message "
+ queryUtil.getIgnoredItemMessage());
}
@Ignore
@Test
public void testQueryDefinitionDOM() throws Exception {
QueryToolUtil queryUtil = new QueryToolUtil();
QueryProcessorUtil qpUtil = QueryProcessorUtil.getInstance();
Connection conn = qpUtil.getManualConnection();
assertNotNull("check database connection not null", conn);
String filename = testFileDir
+ "\\edu.harvard.i2b2.crc.dao.setfinder.querybuilder\\setfinder_query.xml";
String xml = CRCAxisAbstract.getQueryString(filename);
JAXBUtil jaxbUtil = CRCJAXBUtil.getJAXBUtil();
RequestMessageType reqMsgType = (RequestMessageType) jaxbUtil
.unMashallFromString(xml).getValue();
System.out.println(reqMsgType.getMessageHeader().getMessageControlId());
JAXBUnWrapHelper unWrapHelper = new JAXBUnWrapHelper();
QueryDefinitionRequestType queryDefinitionType = (QueryDefinitionRequestType) unWrapHelper
.getObjectByClass(
reqMsgType.getMessageBody().getAny(),
edu.harvard.i2b2.crc.datavo.setfinder.query.QueryDefinitionRequestType.class);
System.out.println("query namef"
+ queryDefinitionType.getQueryDefinition().getQueryName());
JAXBContext jc = JAXBContext
.newInstance(edu.harvard.i2b2.crc.datavo.setfinder.query.QueryDefinitionType.class);
Marshaller m = jc.createMarshaller();
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = f.newDocumentBuilder();
Document doc = builder.newDocument();
m
.marshal(
(new edu.harvard.i2b2.crc.datavo.setfinder.query.ObjectFactory())
.createQueryDefinition(queryDefinitionType
.getQueryDefinition()), doc);
String domString = edu.harvard.i2b2.common.util.xml.XMLUtil
.convertDOMToString(doc);
System.out.println("string output" + domString);
Document doc1 = edu.harvard.i2b2.common.util.xml.XMLUtil
.convertStringToDOM(domString);
System.out.println("string output"
+ edu.harvard.i2b2.common.util.xml.XMLUtil
.convertDOMToString(doc1));
JAXBContext jc1 = JAXBContext
.newInstance(edu.harvard.i2b2.crc.datavo.setfinder.query.ObjectFactory.class);
Unmarshaller unMarshaller = jc1.createUnmarshaller();
JAXBElement jaxbElement = (JAXBElement) unMarshaller
.unmarshal(new StringReader(domString));
QueryDefinitionType qftype = (QueryDefinitionType) jaxbElement
.getValue();
System.out.println("query name " + qftype.getQueryName());
}
@Test
public void testXmlToSqlDateConverion() throws Exception {
DatatypeFactory dataTypeFactory = DatatypeFactory.newInstance();
XMLGregorianCalendar cal = dataTypeFactory
.newXMLGregorianCalendar("2004-07-15T00:00:00.000-04:00");
System.out.println("XMLCalendar Hour " + cal.getHour()
+ " Gregorian calendar hour "
+ cal.toGregorianCalendar().get(Calendar.HOUR_OF_DAY));
SimpleDateFormat dateFormat = new SimpleDateFormat(
"dd-MMM-yyyy HH:mm:ss");
System.out.println("SimpleDate Format "
+ dateFormat.format(cal.toGregorianCalendar().getTime())
+ " orginal XML string " + "2004-07-15T00:00:00.000-04:00");
System.out.println("DateFormat Format "
+ DateFormat.getInstance().format(
cal.toGregorianCalendar().getTime()));
}
}