/*
* 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.im.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.im.datavo.i2b2message.MessageHeaderType;
import edu.harvard.i2b2.im.datavo.i2b2message.SecurityType;
import edu.harvard.i2b2.pm.ws.PMResponseMessage;
import edu.harvard.i2b2.pm.ws.PMServiceDriver;
import edu.harvard.i2b2.im.dao.DataSourceLookupHelper;
import edu.harvard.i2b2.im.ejb.DBInfoType;
import edu.harvard.i2b2.im.datavo.i2b2message.StatusType;
import edu.harvard.i2b2.im.datavo.pm.CellDataType;
import edu.harvard.i2b2.im.datavo.pm.ConfigureType;
import edu.harvard.i2b2.im.datavo.pm.GetUserConfigurationType;
import edu.harvard.i2b2.im.datavo.pm.ProjectType;
import edu.harvard.i2b2.im.datavo.pm.ProjectsType;
import edu.harvard.i2b2.im.util.IMUtil;
public abstract class RequestHandler {
protected final Log log = LogFactory.getLog(getClass());
public abstract String execute() throws I2B2Exception;
private SecurityType securityType = null;
private DBInfoType dbInfo;
private ConfigureType configureType;
public ConfigureType getConfigureType() {
return configureType;
}
public SecurityType getSecurityType() {
return securityType;
}
public ProjectType getAllProjectsInfo(MessageHeaderType header, String projectId)
{
ProjectType projectType = null;
// Are we bypassing the PM cell? Look in properties file.
Boolean pmBypass = false;
String pmBypassRole = null;
String pmBypassProject = null;
try {
pmBypass = IMUtil.getInstance().isPmBypass();
pmBypassRole = IMUtil.getInstance().getPmBypassRole();
pmBypassProject = IMUtil.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.getAllProjects(header);
log.debug(response);
procStatus = msg.processResult(response);
if(procStatus.getType().equals("ERROR"))
return null;
// check that user has access to this project.
ProjectsType pmConfigure = msg.readProjectsInfo();
Iterator it = pmConfigure.getProject().iterator();
//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.im.datavo.i2b2message.PasswordType ptype = new edu.harvard.i2b2.im.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(projectId)) {
// log.info(header.getProjectId());
// log.info(projectType.getId());
break;
}
projectType = null;
}
projectType.getRole().add("ADMIN");
// 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 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 = IMUtil.getInstance().isPmBypass();
pmBypassRole = IMUtil.getInstance().getPmBypassRole();
pmBypassProject = IMUtil.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 = msg.readUserInfo();
Iterator it = configureType.getUser().getProject().iterator();
//Set CRC Cell URL
for (CellDataType cell : configureType.getCellDatas().getCellData())
{
if (cell.getId().equals("CRC"))
{
IMUtil.getInstance().setCRCEndpointReference(cell.getUrl());
break;
}
}
//Set Security Type
log.debug("Setting security type needed for CRC");
securityType = new SecurityType();
securityType.setDomain(configureType.getUser().getDomain());
securityType.setUsername(configureType.getUser().getUserName());
edu.harvard.i2b2.im.datavo.i2b2message.PasswordType ptype = new edu.harvard.i2b2.im.datavo.i2b2message.PasswordType();
ptype.setIsToken(configureType.getUser().getPassword().isIsToken());
ptype.setTokenMsTimeout(configureType.getUser().getPassword().getTokenMsTimeout());
ptype.setValue(configureType.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());
//If admin add role of admin
if (configureType.getUser().isIsAdmin())
projectType.getRole().add("ADMIN");
break;
}
projectType = null;
}
// 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();
}
}