/* * 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.workplace.delegate; import java.util.Iterator; import org.apache.axis2.AxisFault; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.workplace.datavo.i2b2message.MessageHeaderType; import edu.harvard.i2b2.workplace.datavo.i2b2message.PasswordType; import edu.harvard.i2b2.workplace.datavo.i2b2message.SecurityType; import edu.harvard.i2b2.workplace.datavo.i2b2message.StatusType; import edu.harvard.i2b2.workplace.datavo.pm.CellDataType; import edu.harvard.i2b2.workplace.datavo.pm.ConfigureType; import edu.harvard.i2b2.workplace.datavo.pm.GetUserConfigurationType; import edu.harvard.i2b2.workplace.datavo.pm.ProjectType; import edu.harvard.i2b2.workplace.dao.DataSourceLookupHelper; import edu.harvard.i2b2.pm.ws.PMResponseMessage; import edu.harvard.i2b2.pm.ws.PMServiceDriver; import edu.harvard.i2b2.workplace.ejb.DBInfoType; import edu.harvard.i2b2.workplace.util.WorkplaceUtil; public abstract class RequestHandler { protected final Log log = LogFactory.getLog(getClass()); public abstract String execute() throws I2B2Exception; private DBInfoType dbInfo; private SecurityType securityType = null; public SecurityType getSecurityType() { return securityType; } public ProjectType getRoleInfo(MessageHeaderType header) { ProjectType projectType = null; // Are we bypassing the PM cell? Look in properties file. Boolean pmBypass = false; String pmBypassRole = null; String pmBypassProject = null; try { pmBypass = WorkplaceUtil.getInstance().isPmBypass(); pmBypassRole = WorkplaceUtil.getInstance().getPmBypassRole(); pmBypassProject = WorkplaceUtil.getInstance().getPmBypassProject(); log.debug(pmBypass + pmBypassRole + pmBypassProject); } catch (I2B2Exception e1) { pmBypass = false; log.error(e1.getMessage()); } if(pmBypass == true){ projectType = new ProjectType(); projectType.getRole().add(pmBypassRole); projectType.setId(pmBypassProject); } else { try { GetUserConfigurationType userConfigType = new GetUserConfigurationType(); PMResponseMessage msg = new PMResponseMessage(); StatusType procStatus = null; String response = PMServiceDriver.getRoles(userConfigType,header); log.debug(response); procStatus = msg.processResult(response); if(procStatus.getType().equals("ERROR")) return null; // check that user has access to this project. ConfigureType pmConfigure = msg.readUserInfo(); Iterator it = pmConfigure.getUser().getProject().iterator(); //Set CRC Cell URL for (CellDataType cell : pmConfigure.getCellDatas().getCellData()) { if (cell.getId().equals("CRC")) { WorkplaceUtil.getInstance().setCRCEndpointReference(cell.getUrl()); break; } } //Set Security Type log.debug("Setting security type needed for CRC"); securityType = new SecurityType(); securityType.setDomain(pmConfigure.getUser().getDomain()); securityType.setUsername(pmConfigure.getUser().getUserName()); edu.harvard.i2b2.workplace.datavo.i2b2message.PasswordType ptype = new edu.harvard.i2b2.workplace.datavo.i2b2message.PasswordType(); ptype.setIsToken(pmConfigure.getUser().getPassword().isIsToken()); ptype.setTokenMsTimeout(pmConfigure.getUser().getPassword().getTokenMsTimeout()); ptype.setValue(pmConfigure.getUser().getPassword().getValue()); securityType.setPassword(ptype); while (it.hasNext()) { projectType = (ProjectType)it.next(); if (projectType.getId().equals(header.getProjectId())) { // log.info(header.getProjectId()); // log.info(projectType.getId()); break; } } // projectType = pmConfigure.getUser().getProject().get(0); } catch (AxisFault e) { log.error("Cant connect to PM service"); } catch (I2B2Exception e) { log.error("Problem processing PM service address"); } catch (Exception e) { log.error("General PM processing problem: "+ e.getMessage()); } } return projectType; } public void setDbInfo(MessageHeaderType requestMessageHeader) throws I2B2Exception{ DataSourceLookupHelper dsHelper = new DataSourceLookupHelper(); this.dbInfo = dsHelper.matchDataSource(requestMessageHeader.getSecurity().getDomain(), requestMessageHeader.getProjectId(), requestMessageHeader.getSecurity().getUsername()); } public DBInfoType getDbInfo() { return this.dbInfo; } public String getMetadata_dataSource() { return dbInfo.getDb_dataSource(); } public String getMetadata_fullSchema() { return dbInfo.getDb_fullSchema(); } public String getMetadata_serverType() { return dbInfo.getDb_serverType(); } }