/* * 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: * Lori Phillips */ package edu.harvard.i2b2.ontology.delegate; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import edu.harvard.i2b2.common.exception.I2B2DAOException; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.common.util.jaxb.JAXBUtilException; import edu.harvard.i2b2.ontology.dao.ConceptDao; import edu.harvard.i2b2.ontology.datavo.i2b2message.MessageHeaderType; import edu.harvard.i2b2.ontology.datavo.i2b2message.ResponseMessageType; import edu.harvard.i2b2.ontology.datavo.pm.ProjectType; import edu.harvard.i2b2.ontology.datavo.vdo.ModifierType; import edu.harvard.i2b2.ontology.datavo.vdo.ModifiersType; import edu.harvard.i2b2.ontology.datavo.vdo.VocabRequestType; import edu.harvard.i2b2.ontology.ws.GetNameInfoDataMessage; import edu.harvard.i2b2.ontology.ws.MessageFactory; public class GetModifierNameInfoHandler extends RequestHandler { private static Log log = LogFactory.getLog(GetModifierNameInfoHandler.class); private GetNameInfoDataMessage nameInfoMsg = null; private VocabRequestType vocabType = null; private ProjectType project = null; public GetModifierNameInfoHandler(GetNameInfoDataMessage requestMsg) throws I2B2Exception { try { nameInfoMsg = requestMsg; vocabType = requestMsg.getVocabRequestType(); setDbInfo(requestMsg.getMessageHeaderType()); // test case for bad user // nameInfoMsg.getMessageHeaderType().getSecurity().setUsername("aaaaaaa"); project = getRoleInfo(requestMsg.getMessageHeaderType()); } catch (JAXBUtilException e) { log.error("error setting up getNameInfoHandler"); throw new I2B2Exception("GetNameInfoHandler not configured"); } } @Override public String execute() throws I2B2Exception { // call ejb and pass input object ConceptDao conceptDao = new ConceptDao(); ModifiersType modifiers = new ModifiersType(); ResponseMessageType responseMessageType = null; // if project == null, user was not validated or PM service problem if(project == null) { String response = null; responseMessageType = MessageFactory.doBuildErrorResponse(nameInfoMsg.getMessageHeaderType(), "User was not validated"); response = MessageFactory.convertToXMLString(responseMessageType); log.debug("USER_INVALID or PM_SERVICE_PROBLEM"); return response; } List response = null; try { response = conceptDao.findModifierNameInfo(vocabType, project, this.getDbInfo()); } catch (I2B2DAOException e1) { log.error(e1.getMessage()); responseMessageType = MessageFactory.doBuildErrorResponse(nameInfoMsg.getMessageHeaderType(), "Database error"); } catch (I2B2Exception e1) { log.error(e1.getMessage()); responseMessageType = MessageFactory.doBuildErrorResponse(nameInfoMsg.getMessageHeaderType(), "Database configuration error"); } // no errors found if(responseMessageType == null) { // no db error but response is empty if (response == null) { log.debug("query results are empty"); responseMessageType = MessageFactory.doBuildErrorResponse(nameInfoMsg.getMessageHeaderType(), "Query results are empty"); } // No errors, non-empty response received // If max is specified, check that response is not > max else if(vocabType.getMax() != null) { // if max exceeded send error message if(response.size() > vocabType.getMax()){ log.debug("Max request size of " + vocabType.getMax() + " exceeded "); responseMessageType = MessageFactory.doBuildErrorResponse(nameInfoMsg.getMessageHeaderType(), "MAX_EXCEEDED"); } // otherwise send results else { Iterator itr = response.iterator(); while (itr.hasNext()) { ModifierType node = (ModifierType)itr.next(); modifiers.getModifier().add(node); } // create ResponseMessageHeader using information from request message header. MessageHeaderType messageHeader = MessageFactory.createResponseMessageHeader(nameInfoMsg.getMessageHeaderType()); responseMessageType = MessageFactory.createBuildResponse(messageHeader,modifiers); } } //max not specified so send results else { Iterator itr = response.iterator(); while (itr.hasNext()) { ModifierType node = (ModifierType)itr.next(); modifiers.getModifier().add(node); } MessageHeaderType messageHeader = MessageFactory.createResponseMessageHeader(nameInfoMsg.getMessageHeaderType()); responseMessageType = MessageFactory.createBuildResponse(messageHeader,modifiers); } } String responseVdo = null; responseVdo = MessageFactory.convertToXMLString(responseMessageType); // log.info("MODnameInfoResponse: " + responseVdo); return responseVdo; } }