/*
* 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:
* Raj Kuttan
* Lori Phillips
*/
package edu.harvard.i2b2.ontology.ws;
import org.apache.axiom.om.OMElement;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import edu.harvard.i2b2.common.exception.I2B2Exception;
import edu.harvard.i2b2.ontology.datavo.i2b2message.ResponseMessageType;
import edu.harvard.i2b2.ontology.delegate.AddChildHandler;
import edu.harvard.i2b2.ontology.delegate.AddModifierHandler;
import edu.harvard.i2b2.ontology.delegate.CRCConceptUpdateHandler;
import edu.harvard.i2b2.ontology.delegate.DeleteChildHandler;
import edu.harvard.i2b2.ontology.delegate.ExcludeModifierHandler;
import edu.harvard.i2b2.ontology.delegate.GetCategoriesHandler;
import edu.harvard.i2b2.ontology.delegate.GetChildrenHandler;
import edu.harvard.i2b2.ontology.delegate.GetCodeInfoHandler;
import edu.harvard.i2b2.ontology.delegate.GetDirtyStateHandler;
import edu.harvard.i2b2.ontology.delegate.GetModifierChildrenHandler;
import edu.harvard.i2b2.ontology.delegate.GetModifierCodeInfoHandler;
import edu.harvard.i2b2.ontology.delegate.GetModifierInfoHandler;
import edu.harvard.i2b2.ontology.delegate.GetModifierNameInfoHandler;
import edu.harvard.i2b2.ontology.delegate.GetModifiersHandler;
import edu.harvard.i2b2.ontology.delegate.GetNameInfoHandler;
import edu.harvard.i2b2.ontology.delegate.GetOntProcessStatusHandler;
import edu.harvard.i2b2.ontology.delegate.GetSchemesHandler;
import edu.harvard.i2b2.ontology.delegate.GetTermInfoHandler;
import edu.harvard.i2b2.ontology.delegate.ModifyChildHandler;
import edu.harvard.i2b2.ontology.delegate.RequestHandler;
import edu.harvard.i2b2.ontology.delegate.UpdateTotalNumHandler;
/**
* This is webservice skeleton class. It parses incoming Ontology service
* requests and generates responses in the Vocab Data Object XML format.
*
*/
public class OntologyService {
private static Log log = LogFactory.getLog(OntologyService.class);
/**
* This function is main webservice interface to get vocab data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a vocab query request object. The response is also
* will be in i2b2 message format, which will wrap vocab data object. Vocab
* data object will have all the results returned by the query.
*
*
* @param getChildren
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getChildren(OMElement getChildrenElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getChildrenElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getChildrenElement.toString();
GetChildrenDataMessage childrenDataMsg = new GetChildrenDataMessage(
requestElementString);
long waitTime = 0;
if (childrenDataMsg.getRequestMessageType() != null) {
if (childrenDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = childrenDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetChildrenHandler(childrenDataMsg), waitTime);
}
/**
* This function is main webservice interface to get vocab data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a vocab query request object. The response is also
* will be in i2b2 message format, which will wrap vocab data object. Vocab
* data object will have all the results returned by the query.
*
*
* @param OMElement
* getCategoriesElement
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getCategories(OMElement getCategoriesElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getCategoriesElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getCategoriesElement.toString();
GetCategoriesDataMessage categoriesDataMsg = new GetCategoriesDataMessage(
requestElementString);
long waitTime = 0;
if (categoriesDataMsg.getRequestMessageType() != null) {
if (categoriesDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = categoriesDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetCategoriesHandler(categoriesDataMsg), waitTime);
}
/**
* This function is main webservice interface to get vocab data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a vocab query request object. The response is also
* will be in i2b2 message format, which will wrap vocab data object. Vocab
* data object will have all the results returned by the query.
*
*
* @param OMElement
* geSchemesElement
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getSchemes(OMElement getSchemesElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getSchemesElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getSchemesElement.toString();
GetSchemesDataMessage schemesDataMsg = new GetSchemesDataMessage(
requestElementString);
long waitTime = 0;
if (schemesDataMsg.getRequestMessageType() != null) {
if (schemesDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = schemesDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetSchemesHandler(schemesDataMsg), waitTime);
}
/**
* This function is main webservice interface to get vocab data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a vocab query request object. The response is also
* will be in i2b2 message format, which will wrap vocab data object. Vocab
* data object will have all the results returned by the query.
*
*
* @param OMElement
* getCodeInfoElement
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getCodeInfo(OMElement getCodeInfoElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getCodeInfoElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getCodeInfoElement.toString();
GetCodeInfoDataMessage codeInfoDataMsg = new GetCodeInfoDataMessage(
requestElementString);
long waitTime = 0;
if (codeInfoDataMsg.getRequestMessageType() != null) {
if (codeInfoDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = codeInfoDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetCodeInfoHandler(codeInfoDataMsg), waitTime);
}
/**
* This function is main webservice interface to get vocab data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a vocab query request object. The response is also
* will be in i2b2 message format, which will wrap vocab data object. Vocab
* data object will have all the results returned by the query.
*
*
* @param OMElement
* getCodeInfoElement
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getNameInfo(OMElement getNameInfoElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getNameInfoElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getNameInfoElement.toString();
GetNameInfoDataMessage nameInfoDataMsg = new GetNameInfoDataMessage(
requestElementString);
long waitTime = 0;
if (nameInfoDataMsg.getRequestMessageType() != null) {
if (nameInfoDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = nameInfoDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetNameInfoHandler(nameInfoDataMsg), waitTime);
}
/**
* This function is main webservice interface to get vocab data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a vocab query request object. The response is also
* will be in i2b2 message format, which will wrap vocab data object. Vocab
* data object will have all the results returned by the query.
*
*
* @param getChildren
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getTermInfo(OMElement getTermInfoElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getTermInfoElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getTermInfoElement.toString();
GetTermInfoDataMessage termInfoDataMsg = new GetTermInfoDataMessage(
requestElementString);
long waitTime = 0;
if (termInfoDataMsg.getRequestMessageType() != null) {
if (termInfoDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = termInfoDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetTermInfoHandler(termInfoDataMsg), waitTime);
}
private OMElement execute(RequestHandler handler, long waitTime)
throws I2B2Exception {
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
OMElement returnElement = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
ExecutorRunnable er = new ExecutorRunnable();
er.setRequestHandler(handler);
Thread t = new Thread(er);
String ontologyDataResponse = null;
synchronized (t) {
t.start();
// try {
// if (waitTime > 0) {
// t.wait(waitTime);
// } else {
// t.wait();
// }
try {
long startTime = System.currentTimeMillis();
long deltaTime = -1;
while ((er.isJobCompleteFlag() == false)
&& (deltaTime < waitTime)) {
if (waitTime > 0) {
t.wait(waitTime - deltaTime);
deltaTime = System.currentTimeMillis() - startTime;
} else {
t.wait();
}
}
ontologyDataResponse = er.getOutputString();
if (ontologyDataResponse == null) {
if (er.getJobException() != null) {
log.error("er.jobException is "
+ er.getJobException().getMessage());
log.info("waitTime is " + waitTime);
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
} else if (er.isJobCompleteFlag() == false) {
// <result_waittime_ms>5000</result_waittime_ms>
String timeOuterror = "Remote server timed out \n"
+ "Result waittime = " + waitTime
+ " ms elapsed,\nPlease try again";
log.error(timeOuterror);
log.debug("ontology waited " + deltaTime + "ms for "
+ er.getRequestHandler().getClass().getName());
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, timeOuterror);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
} else {
log.error("ontology data response is null");
log.info("waitTime is " + waitTime);
log.debug("ontology waited " + deltaTime + "ms for "
+ er.getRequestHandler().getClass().getName());
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
}
}
} catch (InterruptedException e) {
log.error(e.getMessage());
throw new I2B2Exception(
"Thread error while running Ontology job ");
} finally {
t.interrupt();
er = null;
t = null;
}
}
returnElement = MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
return returnElement;
}
public OMElement addChild(OMElement addChildElement) throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (addChildElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = addChildElement.toString();
AddChildDataMessage childDataMsg = new AddChildDataMessage(
requestElementString);
long waitTime = 0;
if (childDataMsg.getRequestMessageType() != null) {
if (childDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = childDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new AddChildHandler(childDataMsg), waitTime);
}
public OMElement modifyChild(OMElement modifyChildElement) throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (modifyChildElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = modifyChildElement.toString();
log.debug(requestElementString);
ModifyChildDataMessage childDataMsg = new ModifyChildDataMessage(
requestElementString);
long waitTime = 0;
if (childDataMsg.getRequestMessageType() != null) {
if (childDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = childDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new ModifyChildHandler(childDataMsg), waitTime);
}
public OMElement deleteChild(OMElement deleteNodeElement) throws Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (deleteNodeElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = deleteNodeElement.toString();
DeleteChildDataMessage deleteDataMsg = new DeleteChildDataMessage(
requestElementString);
// log.info(requestElementString);
// deleteDataMsg.setRequestMessageType(requestElementString);
long waitTime = 0;
if (deleteDataMsg.getRequestMessageType() != null) {
if (deleteDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = deleteDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Workplace query processing inside thread, so that
// service could send back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new DeleteChildHandler(deleteDataMsg), waitTime);
}
public OMElement updateCRCConcept(OMElement updateCRCConceptElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (updateCRCConceptElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = updateCRCConceptElement.toString();
CRCUpdateConceptMessage childDataMsg = new CRCUpdateConceptMessage(
requestElementString);
long waitTime = 0;
if (childDataMsg.getRequestMessageType() != null) {
if (childDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = childDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new CRCConceptUpdateHandler(childDataMsg), waitTime);
}
public OMElement updateConceptTotalNum(OMElement updateConceptTotalNumElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (updateConceptTotalNumElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = updateConceptTotalNumElement.toString();
UpdateTotalNumMessage childDataMsg = new UpdateTotalNumMessage(
requestElementString);
long waitTime = 0;
if (childDataMsg.getRequestMessageType() != null) {
if (childDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = childDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new UpdateTotalNumHandler(childDataMsg), waitTime);
}
public OMElement getProcessStatus(OMElement getOntProcessStatus)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getOntProcessStatus == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getOntProcessStatus.toString();
GetOntProcessStatusMessage childDataMsg = new GetOntProcessStatusMessage(
requestElementString);
long waitTime = 0;
if (childDataMsg.getRequestMessageType() != null) {
if (childDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = childDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetOntProcessStatusHandler(childDataMsg), waitTime);
}
/**
* This function is main webservice interface to get vocab data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a vocab query request object. The response is also
* will be in i2b2 message format, which will wrap vocab data object. Vocab
* data object will have all the results returned by the query.
*
*
* @param OMElement
* getDirtyStateElement
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getDirtyState(OMElement getDirtyStateElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getDirtyStateElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getDirtyStateElement.toString();
GetDirtyStateDataMessage dirtyStateDataMsg = new GetDirtyStateDataMessage(
requestElementString);
long waitTime = 0;
if (dirtyStateDataMsg.getRequestMessageType() != null) {
if (dirtyStateDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = dirtyStateDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetDirtyStateHandler(dirtyStateDataMsg), waitTime);
}
/**
* This function is main webservice interface to get modifier data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a modifier query request object. The response is also
* will be in i2b2 message format, which will wrap modifier data object. Modifier
* data object will have all the results returned by the query.
*
*
* @param getModifiers
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getModifiers(OMElement getModifiersElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getModifiersElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getModifiersElement.toString();
GetModifiersDataMessage modifiersDataMsg = new GetModifiersDataMessage(
requestElementString);
long waitTime = 0;
if (modifiersDataMsg.getRequestMessageType() != null) {
if (modifiersDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = modifiersDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetModifiersHandler(modifiersDataMsg), waitTime);
}
/**
* This function is main webservice interface to get modifier data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a modifier query request object. The response is also
* will be in i2b2 message format, which will wrap modifier data object. Modifier
* data object will have all the results returned by the query.
*
*
* @param getModifierInfo
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getModifierInfo(OMElement getModifierInfoElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getModifierInfoElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getModifierInfoElement.toString();
GetModifierInfoDataMessage modifierInfoDataMsg = new GetModifierInfoDataMessage(
requestElementString);
long waitTime = 0;
if (modifierInfoDataMsg.getRequestMessageType() != null) {
if (modifierInfoDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = modifierInfoDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetModifierInfoHandler(modifierInfoDataMsg), waitTime);
}
/**
* This function is main webservice interface to get modifier data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a modifier query request object. The response is also
* will be in i2b2 message format, which will wrap modifier data object. Modifier
* data object will have all the results returned by the query.
*
*
* @param getModifierInfo
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getModifierChildren(OMElement getModifierChildrenElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getModifierChildrenElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getModifierChildrenElement.toString();
GetModifierChildrenDataMessage modifierChildrenDataMsg = new GetModifierChildrenDataMessage(
requestElementString);
long waitTime = 0;
if (modifierChildrenDataMsg.getRequestMessageType() != null) {
if (modifierChildrenDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = modifierChildrenDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetModifierChildrenHandler(modifierChildrenDataMsg), waitTime);
}
public OMElement addModifier(OMElement addChildElement) throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (addChildElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = addChildElement.toString();
AddChildDataMessage childDataMsg = new AddChildDataMessage(
requestElementString);
long waitTime = 0;
if (childDataMsg.getRequestMessageType() != null) {
if (childDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = childDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new AddModifierHandler(childDataMsg), waitTime);
}
public OMElement excludeModifier(OMElement addChildElement) throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (addChildElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = addChildElement.toString();
AddChildDataMessage childDataMsg = new AddChildDataMessage(
requestElementString);
long waitTime = 0;
if (childDataMsg.getRequestMessageType() != null) {
if (childDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = childDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new ExcludeModifierHandler(childDataMsg), waitTime);
}
/**
* This function is main webservice interface to get vocab data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a vocab query request object. The response is also
* will be in i2b2 message format, which will wrap vocab data object. Vocab
* data object will have all the results returned by the query.
*
*
* @param OMElement
* getModifierNameInfoElement
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getModifierNameInfo(OMElement getNameInfoElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getNameInfoElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getNameInfoElement.toString();
GetNameInfoDataMessage nameInfoDataMsg = new GetNameInfoDataMessage(
requestElementString);
long waitTime = 0;
if (nameInfoDataMsg.getRequestMessageType() != null) {
if (nameInfoDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = nameInfoDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetModifierNameInfoHandler(nameInfoDataMsg), waitTime);
}
/**
* This function is main webservice interface to get vocab data for a query.
* It uses AXIOM elements(OMElement) to conveniently parse xml messages.
*
* It excepts incoming request in i2b2 message format, which wraps an
* Ontology query inside a vocab query request object. The response is also
* will be in i2b2 message format, which will wrap vocab data object. Vocab
* data object will have all the results returned by the query.
*
*
* @param OMElement
* getModifierCodeInfoElement
* @return OMElement in i2b2message format
* @throws Exception
*/
public OMElement getModifierCodeInfo(OMElement getCodeInfoElement)
throws I2B2Exception {
OMElement returnElement = null;
String ontologyDataResponse = null;
String unknownErrorMessage = "Error message delivered from the remote server \n"
+ "You may wish to retry your last action";
if (getCodeInfoElement == null) {
log.error("Incoming Ontology request is null");
ResponseMessageType responseMsgType = MessageFactory
.doBuildErrorResponse(null, unknownErrorMessage);
ontologyDataResponse = MessageFactory
.convertToXMLString(responseMsgType);
return MessageFactory
.createResponseOMElementFromString(ontologyDataResponse);
}
String requestElementString = getCodeInfoElement.toString();
GetCodeInfoDataMessage codeInfoDataMsg = new GetCodeInfoDataMessage(
requestElementString);
long waitTime = 0;
if (codeInfoDataMsg.getRequestMessageType() != null) {
if (codeInfoDataMsg.getRequestMessageType().getRequestHeader() != null) {
waitTime = codeInfoDataMsg.getRequestMessageType()
.getRequestHeader().getResultWaittimeMs();
}
}
// do Ontology query processing inside thread, so that
// service could sends back message with timeout error.
// ExecutorRunnable er = new ExecutorRunnable();
return execute(new GetModifierCodeInfoHandler(codeInfoDataMsg), waitTime);
}
}