/*
* 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.setfinder;
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.datavo.i2b2message.BodyType;
import edu.harvard.i2b2.crc.datavo.i2b2message.RequestMessageType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.InstanceResultResponseType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.MasterRequestType;
import edu.harvard.i2b2.crc.datavo.setfinder.query.PsmQryHeaderType;
import edu.harvard.i2b2.crc.delegate.RequestHandler;
import edu.harvard.i2b2.crc.delegate.RequestHandlerDelegate;
import edu.harvard.i2b2.crc.ejb.QueryInfoBean;
import edu.harvard.i2b2.crc.ejb.QueryManagerBean;
import edu.harvard.i2b2.crc.ejb.QueryRunBean;
import edu.harvard.i2b2.crc.util.QueryProcessorUtil;
/**
* RunQueryInstanceFromQueryMasterHandler class
* implements execute method
* $Id: RunQueryInstanceFromQueryMasterHandler.java,v 1.7 2008/03/19 22:36:37 rk903 Exp $
* @author rkuttan
*/
public class RunQueryInstanceFromQueryMasterHandler extends RequestHandler {
MasterRequestType masterRequestType = null;
String requestXml = null;
PsmQryHeaderType headerType = null;
/**
* Constuctor which accepts i2b2 request message xml
* @param requestXml
* @throws I2B2Exception
*/
public RunQueryInstanceFromQueryMasterHandler(String requestXml)
throws I2B2Exception {
try {
masterRequestType = (MasterRequestType) getRequestType(requestXml,
edu.harvard.i2b2.crc.datavo.setfinder.query.MasterRequestType.class);
headerType = (PsmQryHeaderType) this.getRequestType(requestXml,
edu.harvard.i2b2.crc.datavo.setfinder.query.PsmQryHeaderType.class);
this.requestXml = requestXml;
this.setDataSourceLookup(requestXml);
} catch (JAXBUtilException jaxbUtilEx) {
throw new I2B2Exception("Error ", jaxbUtilEx);
}
}
/**
* Perform operation for the given request
* using business class(ejb) and return response
* @see edu.harvard.i2b2.crc.delegate.RequestHandler#execute()
*/
public BodyType execute() throws I2B2Exception {
QueryProcessorUtil qpUtil = QueryProcessorUtil.getInstance();
String response = null;
BodyType bodyType = new BodyType();
InstanceResultResponseType instanceResult = null;
try {
//get userId and timeout from request xml
RequestMessageType requestMessageType = getI2B2RequestMessageType(requestXml);
long timeout = requestMessageType.getRequestHeader()
.getResultWaittimeMs();
String userId = headerType.getUser().getLogin();
String masterId = masterRequestType.getQueryMasterId();
//TODO removed ejbs
// QueryManagerLocalHome queryManagerLocalHome = qpUtil.getQueryManagerLocalHome();
// QueryManagerLocal queryManagerLocal = queryManagerLocalHome.create();
QueryManagerBean query = new QueryManagerBean();
instanceResult = query.runQueryMaster(this.getDataSourceLookup(),userId,
masterId, timeout);
instanceResult.setStatus(this.buildCRCStausType(RequestHandlerDelegate.DONE_TYPE, "DONE"));
} catch (Exception e) {
instanceResult = new InstanceResultResponseType();
instanceResult.setStatus(this.buildCRCStausType(RequestHandlerDelegate.ERROR_TYPE, e.getMessage()));
} finally {
edu.harvard.i2b2.crc.datavo.setfinder.query.ObjectFactory of = new edu.harvard.i2b2.crc.datavo.setfinder.query.ObjectFactory();
bodyType.getAny().add(of.createResponse(instanceResult));
}
return bodyType;
}
}