/*
* Copyright (c) 2006-2007 Massachusetts General Hospital
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the i2b2 Software License v1.0
* which accompanies this distribution.
*
* Contributors:
* Rajesh Kuttan
*/
package edu.harvard.i2b2.crc.delegate.pdo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
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.ServiceLocatorException;
import edu.harvard.i2b2.common.util.jaxb.JAXBUtilException;
import edu.harvard.i2b2.crc.dao.pdo.MetaDataTypeMapper;
import edu.harvard.i2b2.crc.datavo.CRCJAXBUtil;
import edu.harvard.i2b2.crc.datavo.i2b2message.BodyType;
import edu.harvard.i2b2.crc.datavo.pdo.ParamType;
import edu.harvard.i2b2.crc.datavo.pdo.PatientDataType;
import edu.harvard.i2b2.crc.datavo.pdo.query.GetPDOTemplateRequestType;
import edu.harvard.i2b2.crc.datavo.pdo.query.PatientDataResponseType;
import edu.harvard.i2b2.crc.delegate.RequestHandler;
import edu.harvard.i2b2.crc.ejb.PdoQueryBean;
import edu.harvard.i2b2.crc.util.QueryProcessorUtil;
/**
* GetPDOFromInputListHandler class. $Id: GetPDOFromInputListHandler.java,v 1.10
* 2008/07/21 19:56:56 rk903 Exp $
*
* @author rkuttan
*/
public class GetPDOTemplateHandler extends RequestHandler {
private GetPDOTemplateRequestType getPDOTemplateRequestType = null;
/** log **/
protected final Log log = LogFactory.getLog(getClass());
/**
* Constuctor which accepts i2b2 request message xml
*
* @param requestXml
* @throws I2B2Exception
*/
public GetPDOTemplateHandler(String requestXml) throws I2B2Exception {
try {
getPDOTemplateRequestType = (GetPDOTemplateRequestType) this
.getRequestType(
requestXml,
edu.harvard.i2b2.crc.datavo.pdo.query.GetPDOTemplateRequestType.class);
setDataSourceLookup(requestXml);
} catch (JAXBUtilException jaxbUtilEx) {
throw new I2B2Exception("Error ", jaxbUtilEx);
}
}
/**
* Perform operation for the given request using business class(ejb) and
* return response
*/
public BodyType execute() throws I2B2Exception {
// call ejb and pass input object
QueryProcessorUtil qpUtil = QueryProcessorUtil.getInstance();
String responseString = null;
BodyType bodyType = new BodyType();
try {
InputStream resourceAsStream = getClass().getResourceAsStream("pdo_template.xml");
//.getContextClassLoader().getResourceAsStream(
// "pdo_template.xml");
if (resourceAsStream == null) {
log.debug("Unable to read pdo_template.xml, the inputstream is null");
} else {
log.debug("pdo_template.xml, the inputstream is not null");
}
// .currentThread()
// .getContextClassLoader()
// .getResourceAsStream(
// );
String pdoXmlContent = convertStreamToString(resourceAsStream);
JAXBElement pdoJaxb = null;
pdoJaxb = CRCJAXBUtil.getJAXBUtil().unMashallFromString(
pdoXmlContent);
PatientDataType patientDataType = (PatientDataType) pdoJaxb
.getValue();
//TODO removed EJBs
//PdoQueryLocalHome pdoQueryLocalHome = qpUtil.getPdoQueryLocalHome();
//PdoQueryLocal pdoQueryInfoLocal = pdoQueryLocalHome.create();
PdoQueryBean query = new PdoQueryBean();
List<ParamType> patientParamList = query.getPDOTemplate("patient_dimension",this.getDataSourceLookup(),false);
patientDataType.getPatientSet().getPatient().get(0).getParam().clear();
patientDataType.getPatientSet().getPatient().get(0).getParam().addAll(patientParamList);
List<ParamType> visitParamList = query.getPDOTemplate("visit_dimension",this.getDataSourceLookup(),false);
patientDataType.getEventSet().getEvent().get(0).getParam().clear();
patientDataType.getEventSet().getEvent().get(0).getParam().addAll(visitParamList);
PatientDataResponseType patientDataResponseType = new PatientDataResponseType();
patientDataResponseType.setPatientData(patientDataType);
edu.harvard.i2b2.crc.datavo.pdo.query.ObjectFactory objectFactory = new edu.harvard.i2b2.crc.datavo.pdo.query.ObjectFactory();
bodyType.getAny().add(
objectFactory.createResponse(patientDataResponseType));
} catch (JAXBUtilException e) {
log.error("", e);
throw new I2B2Exception("", e);
} catch (Exception e) {
log.error("", e);
throw new I2B2Exception("", e);
}
return bodyType;
}
private String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}