/* * 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.pm.dao; import java.io.IOException; import java.sql.Clob; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; import java.util.Random; import javax.sql.DataSource; import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; import org.jdom.output.DOMOutputter; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; import org.springframework.jdbc.core.support.JdbcDaoSupport; import org.w3c.dom.Document; import org.w3c.dom.Element; import edu.harvard.i2b2.common.exception.I2B2DAOException; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.common.util.db.JDBCUtil; import edu.harvard.i2b2.common.util.jaxb.DTOFactory; import edu.harvard.i2b2.common.util.xml.XMLUtil; import edu.harvard.i2b2.pm.ejb.DBInfoType; //import edu.harvard.i2b2.pm.services.EnvironmentData; //import edu.harvard.i2b2.pm.services.HiveParamData; //import edu.harvard.i2b2.pm.services.ProjectUserParamData; //import edu.harvard.i2b2.pm.services.RegisteredCellParam; //import edu.harvard.i2b2.pm.services.RoleData; //import edu.harvard.i2b2.pm.services.VariableData; import edu.harvard.i2b2.pm.services.HiveParamData; import edu.harvard.i2b2.pm.services.ProjectUserParamData; import edu.harvard.i2b2.pm.services.SessionData; import edu.harvard.i2b2.pm.services.UserParamData; //import edu.harvard.i2b2.pm.services.RegisteredCellParam; //import edu.harvard.i2b2.pm.services.RoleData; //import edu.harvard.i2b2.pm.services.VariableData; import edu.harvard.i2b2.pm.util.PMUtil; import edu.harvard.i2b2.pm.datavo.i2b2message.MessageHeaderType; import edu.harvard.i2b2.pm.datavo.pm.ApprovalType; import edu.harvard.i2b2.pm.datavo.pm.BlobType; import edu.harvard.i2b2.pm.datavo.pm.ConfigureType; import edu.harvard.i2b2.pm.datavo.pm.ParamType; import edu.harvard.i2b2.pm.datavo.pm.ParamsType; import edu.harvard.i2b2.pm.datavo.pm.PasswordType; import edu.harvard.i2b2.pm.datavo.pm.CellDataType; import edu.harvard.i2b2.pm.datavo.pm.GlobalDataType; import edu.harvard.i2b2.pm.datavo.pm.ProjectRequestType; import edu.harvard.i2b2.pm.datavo.pm.ProjectType; import edu.harvard.i2b2.pm.datavo.pm.RoleType; import edu.harvard.i2b2.pm.datavo.pm.RolesType; import edu.harvard.i2b2.pm.datavo.pm.UserType; public class PMDbDao extends JdbcDaoSupport { private static Log log = LogFactory.getLog(PMDbDao.class); private SimpleJdbcTemplate jt; private String database = ""; public PMDbDao() throws I2B2Exception{ DataSource ds = null; Connection conn = null; try { ds = PMUtil.getInstance().getDataSource("java:/PMBootStrapDS"); // database = ds.getConnection().getMetaData().getDatabaseProductName(); log.debug(ds.toString()); } catch (I2B2Exception e2) { log.error("bootstrap ds failure: " + e2.getMessage()); throw e2; // } catch (SQLException e2) { // log.error("bootstrap ds failure: " + e2.getMessage()); //throw e2; } try { conn = ds.getConnection(); database = conn.getMetaData().getDatabaseProductName(); conn.close(); conn = null; } catch (Exception e) { conn = null; log.error("Error geting database name:" + e.getMessage()); } finally { conn = null; } this.jt = new SimpleJdbcTemplate(ds); // ds = null; } @SuppressWarnings("unchecked") public List<DBInfoType> getUser(String userId, String caller) throws I2B2Exception, I2B2DAOException { return getUser(userId, caller, null, true); /*String sql = "select * from pm_user_data where user_id = ? and status_cd<>'D'"; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { queryResult = jt.query(sql, getUser(), userId); } catch (DataAccessException e) { log.error(e.getMessage()); throw new I2B2DAOException("Database error in getting User Data"); } return queryResult; */ } @SuppressWarnings("unchecked") public List<DBInfoType> getEnvironmentData(String domainId) throws I2B2Exception, I2B2DAOException { String sql = "select * from pm_hive_params where domain_id = ? and status_cd<>'D'"; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { queryResult = jt.query(sql, getEnvironmentParams(), domainId); } catch (DataAccessException e) { log.error(e.getMessage()); throw new I2B2DAOException("Database error"); } return queryResult; } @SuppressWarnings("unchecked") public List<DBInfoType> getEnvironment(String domainId) throws I2B2Exception, I2B2DAOException { String sql = "select * from pm_hive_data where status_cd <> 'D'"; if (domainId != null) sql += " and domain_id = ?"; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { log.debug("Start query"); if (domainId == null) queryResult = jt.query(sql, getEnvironment()); else queryResult = jt.query(sql, getEnvironment(), domainId); log.debug("Query Size: " + queryResult.size()); log.debug("End query"); } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } @SuppressWarnings("unchecked") public List<DBInfoType> getRole(String userId, String project ) throws I2B2Exception, I2B2DAOException { String sql = "select distinct" + " case upper(rr.COLUMN_CD)" + " when '@' then pur.PROJECT_ID" + " when 'PROJECT_ID' then pur.PROJECT_ID" + " else null" + " end as PROJECT_ID," + " case upper(rr.COLUMN_CD)" + " when '@' then pur.USER_ID" + " when 'USER_ID' then pur.USER_ID" + " else null" + " end as USER_ID," + " case upper(rr.COLUMN_CD)" + " when '@' then pur.USER_ROLE_CD" + " when 'USER_ROLE_CD' then pur.USER_ROLE_CD" + " else null" + " end as USER_ROLE_CD" + " from " + " pm_project_user_roles pur, pm_role_requirement rr" + " where " + " pur.status_cd<>'D' and" + " rr.status_cd<>'D' and" + " pur.user_id = ? and" + (project!=null?" pur.project_id = ? and":"") + " (rr.read_hivemgmt_CD = '@') OR (upper(rr.read_hivemgmt_CD) = upper(pur.USER_ROLE_CD)) and" + " upper(rr.table_cd) = 'PM_PROJECT_USER_ROLES'"; // String sql = "select * from pm_project_user_roles where user_id=? and project_id=? and status_cd<>'D'"; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { if (project == null) queryResult = jt.query(sql, getRole(), userId); else queryResult = jt.query(sql, getRole(), userId, project); } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } @SuppressWarnings("unchecked") public List<DBInfoType> getRole(String userId) throws I2B2Exception, I2B2DAOException { return getRole(userId, null); /* String sql = "select * from pm_project_user_roles where user_id=? and status_cd<>'D' order by project_id "; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { queryResult = jt.query(sql, getRole(), userId); } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; */ } @SuppressWarnings("unchecked") public List<DBInfoType> getProject(Object utype, boolean ignoreDeleted) throws I2B2Exception, I2B2DAOException { String sql = "select distinct" + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_ID" + " when 'PROJECT_ID' then pd.PROJECT_ID" + " else null" + " end as PROJECT_ID," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_NAME" + " when 'PROJECT_NAME' then pd.PROJECT_NAME" + " else null" + " end as PROJECT_NAME," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_WIKI" + " when 'PROJECT_WIKI' then pd.PROJECT_WIKI" + " else null" + " end as PROJECT_WIKI," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_PATH" + " when 'PROJECT_PATH' then pd.PROJECT_PATH" + " else null" + " end as PROJECT_PATH," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_KEY" + " when 'PROJECT_KEY' then pd.PROJECT_KEY" + " else null" + " end as PROJECT_KEY," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_DESCRIPTION" + " when 'PROJECT_DESCRIPTION' then pd.PROJECT_DESCRIPTION" + " else null" + " end as PROJECT_DESCRIPTION" + " from " + " pm_project_data pd, pm_project_user_roles pur, pm_role_requirement rr" + " where " + " pur.status_cd<>'D' and" + (ignoreDeleted?" pd.STATUS_CD<>'D' and ":"") + " rr.status_cd<>'D' and" + " pd.project_ID = ? and" + //" pd.project_path = ? and" + " (rr.read_hivemgmt_CD = '@') OR (upper(rr.read_hivemgmt_CD) = upper(pur.USER_ROLE_CD)) and" + " pd.PROJECT_ID = pur.project_id and" + " upper(rr.table_cd) = 'PM_PROJECT_USER_ROLES'"; // String sql = "select * from pm_project_data where project_id=? and status_cd<>'D'"; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { queryResult = jt.query(sql, getProject(), ((ProjectType) utype).getId()); //, ((ProjectType) utype).getPath()); } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } public List<DBInfoType> getUserProject(String user) throws I2B2Exception, I2B2DAOException { String sql = "select distinct" + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_ID" + " when 'PROJECT_ID' then pd.PROJECT_ID" + " else null" + " end as PROJECT_ID," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_NAME" + " when 'PROJECT_NAME' then pd.PROJECT_NAME" + " else null" + " end as PROJECT_NAME," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_WIKI" + " when 'PROJECT_WIKI' then pd.PROJECT_WIKI" + " else null" + " end as PROJECT_WIKI," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_PATH" + " when 'PROJECT_PATH' then pd.PROJECT_PATH" + " else null" + " end as PROJECT_PATH," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_KEY" + " when 'PROJECT_KEY' then pd.PROJECT_KEY" + " else null" + " end as PROJECT_KEY," + " case upper(rr.COLUMN_CD)" + " when '@' then pd.PROJECT_DESCRIPTION" + " when 'PROJECT_DESCRIPTION' then pd.PROJECT_DESCRIPTION" + " else null" + " end as PROJECT_DESCRIPTION" + " from " + " pm_project_data pd, pm_project_user_roles pur, pm_role_requirement rr" + " where " + " pd.status_cd<>'D' and" + " pur.status_cd<>'D' and" + " rr.status_cd<>'D' and" + " pur.user_ID = ? and" + " pd.PROJECT_ID = pur.PROJECT_ID and" + " (rr.read_hivemgmt_CD = '@') OR (upper(rr.read_hivemgmt_CD) = upper(pur.USER_ROLE_CD)) and" + " pd.PROJECT_ID = pur.project_id and" + " upper(rr.table_cd) = 'PM_PROJECT_DATA'"; // String sql = "select distinct pd.* from pm_project_data pd, pm_project_user_roles pur where pd.project_id=pur.project_id and pur.user_id = ? and pur.status_cd<>'D' and pd.status_cd<>'D'"; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { queryResult = jt.query(sql, getProject(), user); } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } @SuppressWarnings("unchecked") public List<DBInfoType> getProjectUserParams(String projectId, String userId) throws I2B2Exception, I2B2DAOException { String sql = "select * from pm_project_user_params where project_id=? and user_id=? and status_cd<>'D'"; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { queryResult = jt.query(sql, getProjectUserParams(), projectId, userId); } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } @SuppressWarnings("unchecked") public List<DBInfoType> getProjectParams(String projectId) throws I2B2Exception, I2B2DAOException { String sql = "select * from pm_project_params where project_id=? and status_cd<>'D'"; //log.debug(sql + projectId ); List<DBInfoType> queryResult = null; try { queryResult = jt.query(sql, getProjectParams(), projectId); } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } @SuppressWarnings("unchecked") public List<DBInfoType> getCell(String cell, String project, boolean ignoreDeleted) throws I2B2Exception, I2B2DAOException { // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; log.debug("Searching for cell: " + cell + " within project " + project); try { if (cell.equals("@")) { String sql = "select * from pm_cell_data where project_path = ?"; if (ignoreDeleted) sql += " and status_cd<>'D'"; queryResult = jt.query(sql, getCell(), project); } else if ((cell.equals("@") && !project.equals("/"))) { String sql = "select * from pm_cell_data where project_path = ?"; if (ignoreDeleted) sql += " and status_cd<>'D'"; queryResult = jt.query(sql, getCell(), project); } else { String sql = "select * from pm_cell_data where cell_id = ? and project_path = ?"; if (ignoreDeleted) sql += " and status_cd<>'D'"; queryResult = jt.query(sql, getCell(), cell, project); } } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } @SuppressWarnings("unchecked") public List<DBInfoType> getApproval(ApprovalType approval, boolean ignoreDeleted) throws I2B2Exception, I2B2DAOException { // log.info(sql + domainId + projectId + ownerId); String sql = "select a.* from pm_approvals a "; String sqlWhere = " where a.object_cd = 'APPROVAL' "; String sqlFrom = ""; List<DBInfoType> queryResult = null; try { ArrayList al = new ArrayList(); if (approval.getId() != null) { sqlWhere += "and a.approval_id = ? "; if (ignoreDeleted) sqlWhere += "and a.status_cd<>'D' "; al.add(approval.getId()); } else { // Search if user and project are set String foundUser = "", foundProject = ""; for (int i=0; i < approval.getSearch().size(); i++) { if (approval.getSearch().get(i).getBy().equalsIgnoreCase("USER")) foundUser = approval.getSearch().get(i).getValue().toUpperCase(); if (approval.getSearch().get(i).getBy().equalsIgnoreCase("PROJECT")) foundUser = approval.getSearch().get(i).getValue().toUpperCase(); } if ((foundUser != "") && (foundProject != "")) { sqlFrom += ", pm_project_user_params p "; sqlWhere += "and a.STATUS_CD = 'A' and p.STATUS_CD = 'A' and " + "p.PARAM_NAME_CD = 'APPROVAL_ID' and p.VALUE = a.APPROVAL_ID and p.USER_ID = ? and p.PROJECT_ID = ?"; al.add(foundUser); al.add(foundProject); } for (int i=0; i < approval.getSearch().size(); i++) { if ((approval.getSearch() != null) && (approval.getSearch().get(i).getBy().equalsIgnoreCase("NAME"))) { sqlWhere += "and UPPER(a.approval_name) = ? "; if (ignoreDeleted) sqlWhere += "and a.status_cd<>'D' "; al.add(approval.getSearch().get(i).getValue().toUpperCase()); // queryResult = jt.query(sql, getApproval(), approval.getActivationDate()); } if ((approval.getSearch() != null) && (approval.getSearch().get(i).getBy().equalsIgnoreCase("ACTIVATION_DATE"))) { sqlWhere += "and a.activation_date = ? "; if (ignoreDeleted) sqlWhere += "and a.status_cd<>'D' "; al.add(approval.getSearch().get(i).getValue().toUpperCase()); // queryResult = jt.query(sql, getApproval(), approval.getActivationDate()); } else if ((approval.getSearch() != null) && ((foundUser == "") || (foundProject == "")) && (approval.getSearch().get(i).getBy().equalsIgnoreCase("USER"))) { sqlFrom += ", pm_user_params p "; sqlWhere += "and a.STATUS_CD = 'A' and p.STATUS_CD = 'A' and " + "p.PARAM_NAME_CD = 'APPROVAL_ID' and p.VALUE = a.APPROVAL_ID and p.USER_ID = ? "; al.add(approval.getSearch().get(i).getValue()); //sql = "select a.* from pm_approvals a, pm_user_params p where a.STATUS_CD = 'A' and p.STATUS_CD = 'A' and " + //"p.PARAM_NAME_CD = 'APPROVAL' and p.VALUE = a.OBJECT_CD and p.USER_ID = ? "; // queryResult = jt.query(sql, getApproval(), approval.getSearch().get(0).getValue()); } else if ((approval.getSearch() != null) && ((foundUser == "") || (foundProject == "")) && (approval.getSearch().get(i).getBy().equalsIgnoreCase("PROJECT"))) { sqlFrom += ", pm_project_params p "; sqlWhere += "and a.STATUS_CD = 'A' and p.STATUS_CD = 'A' and " + "p.PARAM_NAME_CD = 'APPROVAL_ID' and p.VALUE = a.APPROVAL_ID and p.PROJECT_ID = ? "; al.add(approval.getSearch().get(i).getValue()); //sql = "select a.* from pm_approvals a, pm_project_params p where a.STATUS_CD = 'A' and p.STATUS_CD = 'A' and " + //"p.PARAM_NAME_CD = 'APPROVAL' and p.VALUE = a.OBJECT_CD and p.PROJECT_ID = ? "; // queryResult = jt.query(sql, getApproval(), approval.getSearch().get(0).getValue()); } } } sql += sqlFrom + sqlWhere; log.debug("My sql statement: " + sql); queryResult = jt.query(sql, getApproval(), al.toArray()); } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } @SuppressWarnings("unchecked") public List<DBInfoType> getCellParam(String cellId, String project) throws I2B2Exception, I2B2DAOException { String sql = "select * from pm_cell_params where cell_id = ? and project_path = ? and status_cd<>'D'"; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { queryResult = jt.query(sql, getParam(), cellId, project); } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } private boolean validateRole(String caller, String isrole, String project) throws I2B2DAOException { List response = null; if (isrole.equalsIgnoreCase("admin")) { try { String sql = "select * from pm_project_user_roles where project_id=? and user_id=? and status_cd<>'D' order by project_id"; response = jt.query(sql, getRole(), "@", caller); //response = getRole(caller, project); } catch (Exception e1) { throw new I2B2DAOException ("Database error in getting role data for validateRole"); } Iterator it = response.iterator(); while (it.hasNext()){ RoleType user = (RoleType) it.next(); if(user.getRole().equalsIgnoreCase("ADMIN")) { return(true); } } return false; } try { response = getRole(caller, project); } catch (I2B2DAOException e1) { throw new I2B2DAOException ( "Database error in getting user data for setuser"); } catch (I2B2Exception e1) { throw new I2B2DAOException ("Database error in getting user data for setuser"); } Iterator it = response.iterator(); while (it.hasNext()){ RoleType role = (RoleType) it.next(); if(role.getRole().toLowerCase().equals(isrole)) { return(true); } } return false; } // All user Process public List<DBInfoType> getUser(String user, String caller,String password, boolean ignoreDeleted) throws I2B2Exception, I2B2DAOException { String sql = null; List<DBInfoType> queryResult = null; if (caller == null) { sql = "select * from pm_user_data where user_id = ? "+ (password!=null?" and password = ? ":""); if (ignoreDeleted) sql += " and status_cd<>'D'"; try { if (password == null) queryResult = jt.query(sql, getUser(true), user); else queryResult = jt.query(sql, getUser(false), user, password); } catch (DataAccessException e) { log.error(e.getMessage()); throw new I2B2DAOException("Database error in getting userdata with password"); } } else { sql = "select distinct" + " case upper(rr.COLUMN_CD)" + " when '@' then pud.USER_ID" + " when 'USER_ID' then pud.USER_ID" + " else null" + " end as USER_ID," + " case upper(rr.COLUMN_CD)" + " when '@' then pud.FULL_NAME" + " when 'FULL_NAME' then pud.FULL_NAME" + " else null" + " end as FULL_NAME," + " case upper(rr.COLUMN_CD)" + " when '@' then pud.PASSWORD" + " when 'PASSWORD' then pud.PASSWORD" + " else null" + " end as PASSWORD," + " case upper(rr.COLUMN_CD)" + " when '@' then pud.EMAIL" + " when 'EMAIL' then pud.EMAIL" + " else null" + " end as EMAIL " + " from " + " pm_user_data pud, pm_role_requirement rr" + " where " + //" pur.status_cd<>'D' and" + " rr.status_cd<>'D' and" + (ignoreDeleted?" pud.STATUS_CD<>'D' and ":"") + //" pur.USER_ID = ? and " + " pud.user_id = ? and" + (password!=null?" password = ? and":"") + " (rr.read_hivemgmt_CD = '@') and" + //OR (upper(rr.read_hivemgmt_CD) = upper(pur.USER_ROLE_CD)) and" + " upper(rr.table_cd) = 'PM_USER_DATA'"; try { if (password == null) queryResult = jt.query(sql, getUser(true), user); else queryResult = jt.query(sql, getUser(false), user, password); } catch (DataAccessException e) { log.error(e.getMessage()); throw new I2B2DAOException("Database error in getting userdata with password"); } } // String sql = "select * from pm_user_data where user_id = ? and password = ? and status_cd <> 'D'"; // log.info(sql + domainId + projectId + ownerId); return queryResult; } public List<DBInfoType> getAllProjectRequest(String project, String caller) throws I2B2Exception, I2B2DAOException { String sql = null; List<DBInfoType> queryResult = null; if ((validateRole(caller, "admin", null)) || (validateRole(caller, "admin", null))) { sql = "select * from pm_project_request where status_cd<>'D'"; queryResult = jt.query(sql, getProjectRequest()); } return queryResult; } public List<DBInfoType> getAllUser(String project, String caller) throws I2B2Exception, I2B2DAOException { String sql = null; List<DBInfoType> queryResult = null; if ((validateRole(caller, "admin", null)) || (validateRole(caller, "admin", null))) { sql = "select * from pm_user_data where status_cd<>'D'"; queryResult = jt.query(sql, getUser(false)); } return queryResult; } public int setUser(final UserType userdata, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; if (validateRole(caller, "admin", null)) { try { if ((getUser(userdata.getUserName(), caller, null, false) == null) || (getUser(userdata.getUserName(), caller,null, false).size() == 0)) { String addSql = "insert into pm_user_data " + "(user_id, full_name, email, password, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, userdata.getUserName(), userdata.getFullName(), userdata.getEmail(), PMUtil.getInstance().getHashedPassword(userdata.getPassword().getValue()), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else if (userdata.getPassword() != null) { //user already exists, lets try to update String addSql = "update pm_user_data " + "set full_name = ?, email = ?, password = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where user_id = ?"; numRowsAdded = jt.update(addSql, userdata.getFullName(), userdata.getEmail(), PMUtil.getInstance().getHashedPassword(userdata.getPassword().getValue()), Calendar.getInstance().getTime(), caller, userdata.getUserName()); } else { //user already exists, lets try to update String addSql = "update pm_user_data " + "set full_name = ?, email = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where user_id = ?"; numRowsAdded = jt.update(addSql, userdata.getFullName(), userdata.getEmail(), Calendar.getInstance().getTime(), caller, userdata.getUserName()); } // Deal with is_admin String addSql = "update pm_project_user_roles " + " set status_cd = 'D', change_date = ?, changeby_char = ? where user_id = ? and user_role_cd = ?"; numRowsAdded += jt.update(addSql, Calendar.getInstance().getTime(), caller, userdata.getUserName(), "ADMIN"); if (userdata.isIsAdmin() == true) { try { addSql = "insert into pm_project_user_roles " + "( project_id, user_id, user_role_cd, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?)"; numRowsAdded += jt.update(addSql, "@", userdata.getUserName(), "ADMIN", Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } catch (Exception e) { addSql = "update pm_project_user_roles " + " set status_cd = 'A', change_date = ?, changeby_char = ? where project_id = ? and user_id = ? and user_role_cd = ?"; numRowsAdded += jt.update(addSql, Calendar.getInstance().getTime(), caller, "@", userdata.getUserName(), "ADMIN"); } } } catch (DataAccessException e) { log.error("Dao update setuser failed for: " + userdata.getUserName()); log.error(e.getMessage()); throw new I2B2DAOException("Data access error " , e); } } else { throw new I2B2DAOException("Access Denied for " + caller); } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows added: " + numRowsAdded); return numRowsAdded; } public int deleteUser(final String user, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; if (validateRole(caller, "admin", null)) { try { String addSql = "update pm_user_data " + "set status_cd = 'D', change_date = ?, changeby_char = ? where user_id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, user); if (numRowsAdded ==0) throw new I2B2DAOException("User not updated, does it exist?"); } catch (DataAccessException e) { log.error("Dao deleteuser failed"); log.error(e.getMessage()); throw new I2B2DAOException("Data access error " , e); } } else { throw new I2B2DAOException("Access Denied for " + caller); } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows deleted: " + numRowsAdded); return numRowsAdded; } public List<DBInfoType> setProjectRequest(final ProjectRequestType groupdata,String project, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; List<DBInfoType> queryResult = null; try { String clob = null; if (groupdata.getRequestXml() != null) { clob = groupdata.getRequestXml(); /* BlobType blobType = (BlobType)groupdata.getRequestXml(); for (int i=0; i < blobType.getContent().size(); i++) { clob = (String) blobType.getContent().get(i); //Clob myclob = (Clob) blobType.getContent().get(i); // int len = (int) myclob.length(); // clob = myclob.getSubString(Long.parseLong("1"),len); // blobType.getContent().add( // JDBCUtil.getClobString(clob)); // rData.setRequestXml(blobType); } */ } String addSql = "insert into pm_project_request " + "(title, request_xml, project_id, change_date, entry_date, submit_char, changeby_char, status_cd) values (?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, groupdata.getTitle(), clob, (project == null? "@" : project), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, caller, "A"); if (numRowsAdded != 0) { addSql = "select * from pm_project_request where id = ( select max(id) from pm_project_request)"; queryResult = jt.query(addSql, getProjectRequest()); } } catch (Exception e) { log.error("Dao deleteuser failed"); log.error(e.getMessage()); throw new I2B2DAOException("Data access error " , e); } return queryResult; } public int setPassword(final String password, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; try { String addSql = "update pm_user_data " + "set password = ?, change_date = ?, changeby_char = ? where user_id = ?"; numRowsAdded = jt.update(addSql, password, Calendar.getInstance().getTime(), caller, caller); if (numRowsAdded ==0) throw new I2B2DAOException("User not updated, does it exist?"); } catch (DataAccessException e) { log.error("Dao deleteuser failed"); log.error(e.getMessage()); throw new I2B2DAOException("Data access error " , e); } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows deleted: " + numRowsAdded); return numRowsAdded; } // All Cell Process /* public List<DBInfoType> getCell(String cell, String project, String owner) throws I2B2Exception, I2B2DAOException { String sql = "select * from cell_data where cell_id = ? and project_path = ? and owner_id = ?"; // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { queryResult = jt.query(sql, getCell(), cell, project, owner); } catch (DataAccessException e) { log.error(e.getMessage()); throw new I2B2DAOException("Database error"); } return queryResult; } */ public List<DBInfoType> getAllApproval(String project, String caller) throws I2B2Exception, I2B2DAOException { String sql = null; List<DBInfoType> queryResult = null; sql = "select * from pm_approvals where status_cd<>'D'"; queryResult = jt.query(sql, getApproval()); return queryResult; } public List<DBInfoType> getAllCell(String project, String caller) throws I2B2Exception, I2B2DAOException { String sql = null; List<DBInfoType> queryResult = null; sql = "select * from pm_cell_data where status_cd<>'D'"; queryResult = jt.query(sql, getCell()); return queryResult; } public List<DBInfoType> getSession(String userId, String sessionID) throws I2B2Exception, I2B2DAOException { String sql = "select * from pm_user_session where user_id = ? and session_id = ?"; List<DBInfoType> queryResult = null; log.debug("Searching for " + userId + " with session id of " + sessionID); queryResult = jt.query(sql, getSession(), userId, sessionID); return queryResult; } public boolean verifyNotLockedOut(String userId) { String sql = null; //get results count max sql = "select * from pm_global_params where status_cd = 'A' and param_name_cd ='PM_LOCKED_MAX_COUNT'"; int resultmax = 10; try { List<DBInfoType> queryResult = jt.query(sql, getParam()); Iterator it = queryResult.iterator(); while (it.hasNext()) { ParamType user = (ParamType)it.next(); resultmax = Integer.parseInt(user.getValue()); } } catch (Exception e) { e.printStackTrace(); } sql = "select * from pm_global_params where status_cd = 'A' and param_name_cd ='PM_LOCKED_WAIT_TIME'"; int waittime = 2; try { List<DBInfoType> queryResult = jt.query(sql, getParam()); Iterator it = queryResult.iterator(); while (it.hasNext()) { ParamType user = (ParamType)it.next(); waittime = Integer.parseInt(user.getValue()); } } catch (Exception e) { e.printStackTrace(); } if (database.equalsIgnoreCase("oracle")) sql = "select count(*) as badlogin from pm_user_login where user_id = ? and " + " attempt_cd = 'BADPASSWORD' and " + "(entry_date + interval '" + waittime + "' minute) >= CURRENT_TIMESTAMP "; else if (database.equalsIgnoreCase("Microsoft sql server")) sql = "select count(*) as badlogin from pm_user_login where user_id = ? and " + " attempt_cd = 'BADPASSWORD' and " + "dateadd(minute, " + waittime + ", entry_date) >= getdate() "; else if (database.equalsIgnoreCase("postgresql")) sql = "select count(*) as badlogin from pm_user_login where user_id = ? and " + " attempt_cd = 'BADPASSWORD' and " + "(entry_date + cast('" + waittime + " minutes' as interval)) >= now() "; int results = jt.queryForInt(sql, userId); //int results = 0; if (results >= resultmax) return true; else return false; } public int setLoginAttempt(String userId, String attemptCd) { String addSql = "insert into pm_user_login " + "(user_id, attempt_cd, changeby_char, entry_date, status_cd) values (?,?,?,?,'A')"; int numRowsAdded = jt.update(addSql, userId, attemptCd, userId, Calendar.getInstance().getTime()); return numRowsAdded; } public int setSession(String userId, String sessionId, int timeout) { String addSql = "insert into pm_user_session " + "(user_id, session_id, changeby_char, entry_date, expired_date) values (?,?,?,?,?)"; Calendar now = Calendar.getInstance(); now.add(Calendar.MILLISECOND, timeout); int numRowsAdded = jt.update(addSql, userId, sessionId, userId, Calendar.getInstance().getTime(), now.getTime()); return numRowsAdded; } public int removeSession(String userId, String sessionId) { String addSql = "delete from pm_user_session " + " where session_id = ? and user_id =?"; int numRowsAdded = jt.update(addSql, userId, sessionId); addSql = "delete from pm_user_session " + " where expired_date > ?"; int numRowsAdded2 = jt.update(addSql, Calendar.getInstance().getTime()); return numRowsAdded; } public int updateSession(String userId, String sessionId, int timeout) { int numRowsAdded = -1; String addSql = "update pm_user_session set expired_date = ? " + " where session_id = ? and user_id =?"; Calendar now = Calendar.getInstance(); now.add(Calendar.MILLISECOND, timeout); try { numRowsAdded = jt.update(addSql, now.getTime(), sessionId, userId); } catch (Exception e) { try { if (e.getMessage().contains("deadlock") || e.getMessage().contains("try restarting transaction") || e.getMessage().contains( "failed to resume the transaction")) { int tosleep = new Random().nextInt(2000); log.warn("Transaction rolled back. Restarting transaction."); Thread.sleep(tosleep); numRowsAdded = jt.update(addSql, now.getTime(), sessionId, userId); } else { throw e; } } catch (Exception ee) {} } return numRowsAdded; } public int setCell(final CellDataType groupdata, String project, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; if ((validateRole(caller, "admin", null)) || (validateRole(caller, "manager", project))) { log.debug("Setting cell with ID of " + groupdata.getId() + " and path of " + groupdata.getProjectPath()); if ((getCell(groupdata.getId(), groupdata.getProjectPath(), false) == null) || (getCell(groupdata.getId(), groupdata.getProjectPath(), false).size() == 0)) { String addSql = "insert into pm_cell_data " + "(cell_id, project_path, name, url, method_cd, can_override, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, groupdata.getId(), (groupdata.getProjectPath() == null? "@" : groupdata.getProjectPath()), groupdata.getName(), groupdata.getUrl(), groupdata.getMethod(), (groupdata.isCanOverride() == null? 1 : groupdata.isCanOverride() ? 1 : 0), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_cell_data " + "set name = ?, url = ?, method_cd = ?, can_override = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where cell_id = ? and project_path = ?"; numRowsAdded = jt.update(addSql, groupdata.getName(), groupdata.getUrl(), groupdata.getMethod(), (groupdata.isCanOverride() == null? 1 : groupdata.isCanOverride() ? 1 : 0), Calendar.getInstance().getTime(), caller, groupdata.getId(), groupdata.getProjectPath()); } } else { throw new I2B2DAOException("Access Denied for " + caller); } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows added: " + numRowsAdded); return numRowsAdded; } public int deleteCell(String cell, String project, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; if ((validateRole(caller, "admin", null)) || (validateRole(caller, "manager", project))) { try { String addSql = "update pm_cell_data " + "set status_cd = 'D' where project_path = ? and cell_id = ?"; numRowsAdded = jt.update(addSql, ((project == null || project.equals(""))? "@": project), cell); if (numRowsAdded ==0) throw new I2B2DAOException("Cell not updated, does it exist?"); } catch (DataAccessException e) { log.error("Dao deleteuser failed"); log.error(e.getMessage()); throw new I2B2DAOException("Data access error " , e); } } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows deleted: " + numRowsAdded); return numRowsAdded; } public int setApproval(final ApprovalType groupdata, String project, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; if ((validateRole(caller, "admin", null)) || (validateRole(caller, "manager", project))) { if ((getApproval(groupdata, false) == null) || (getApproval(groupdata, false).size() == 0)) { String addSql = "insert into pm_approvals " + "(approval_id, approval_name, approval_description, approval_activation_date, approval_expiration_date, object_cd, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, groupdata.getId(), groupdata.getName(), groupdata.getDescription(), groupdata.getActivationDate(), groupdata.getExpirationDate(), groupdata.getObjectCd(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_approvals " + "set approval_name = ?, approval_description = ?, approval_activation_date = ?, approval_expiration_date = ?, object_cd = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where approval_id = ?"; numRowsAdded = jt.update(addSql, groupdata.getName(), groupdata.getDescription(), groupdata.getActivationDate(), groupdata.getExpirationDate(), groupdata.getObjectCd(), Calendar.getInstance().getTime(), caller, groupdata.getId()); } } else { throw new I2B2DAOException("Access Denied for " + caller); } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows added: " + numRowsAdded); return numRowsAdded; } public int deleteApproval(String id, String project, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; if ((validateRole(caller, "admin", null)) || (validateRole(caller, "manager", project))) { try { String addSql = "update pm_approvals " + "set status_cd = 'D' where approval_id = ?"; numRowsAdded = jt.update(addSql, id); if (numRowsAdded ==0) throw new I2B2DAOException("approval not updated, does it exist?"); } catch (DataAccessException e) { log.error("Dao deleteuser failed"); log.error(e.getMessage()); throw new I2B2DAOException("Data access error " , e); } } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows deleted: " + numRowsAdded); return numRowsAdded; } public List<DBInfoType> getAllProject(String project, String caller) throws I2B2Exception, I2B2DAOException { String sql = null; List<DBInfoType> queryResult = null; if (validateRole(caller, "admin", null)) { sql = "select * from pm_project_data where status_cd<>'D'"; queryResult = jt.query(sql, getProject()); } return queryResult; } public int setProject(final ProjectType groupdata, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; if (validateRole(caller, "admin", null)) { if ((getProject(groupdata, false) == null) || (getProject(groupdata, false).size() == 0)) { String addSql = "insert into pm_project_data " + "(project_id, project_name, project_key, project_path, project_description, project_wiki, changeby_char, change_date, entry_date, status_cd) values (?,?,?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, groupdata.getId(), groupdata.getName(), groupdata.getKey(), groupdata.getPath(), groupdata.getDescription(), groupdata.getWiki(), caller, Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), "A"); } else { //project already exists, lets try to update String addSql = "update pm_project_data " + "set project_name = ?, project_key = ?, project_wiki = ?, project_description = ?, project_path = ?, changeby_char = ?, change_date = ?, status_cd = 'A' where project_id = ?"; numRowsAdded = jt.update(addSql, groupdata.getName(), groupdata.getKey(), groupdata.getWiki(), groupdata.getDescription(), groupdata.getPath(), caller, Calendar.getInstance().getTime(), groupdata.getId()); } } else { throw new I2B2DAOException("Access Denied for " + caller); } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows added: " + numRowsAdded); return numRowsAdded; } public List<DBInfoType> getAllParam(Object utype, String project, String caller) throws I2B2Exception, I2B2DAOException { String sql = null; List<DBInfoType> queryResult = null; // if (validateRole(caller, "admin", null)) // { if (utype instanceof ProjectType) { if (((ProjectType) utype).getUserName() == null) { sql = "select * from pm_project_params where status_cd<>'D' and project_id = ? order by project_id"; queryResult = jt.query(sql, getParam(), ((ProjectType) utype).getId()); } else { ArrayList al = new ArrayList(); sql = "select * from pm_project_user_params where status_cd<>'D' "; if (((ProjectType) utype).getUserName() != null) // || !((UserType) utype).getUserName().equals("")) { sql += " and user_id=?"; al.add(((ProjectType) utype).getUserName()); //sql = "select * from pm_user_params where status_cd<>'D' order by user_id"; //queryResult = jt.query(sql, getUserParams()); } if (((ProjectType) utype).getPath() != null) { sql += " and project_id=?"; al.add(((ProjectType) utype).getPath()); } if (((ProjectType) utype).getParam() != null) { for (int i=0; i < ((ProjectType) utype).getParam().size(); i++) { if (((ProjectType) utype).getParam().get(i).getName() != null) { sql += " and param_name_cd=?"; al.add((((ProjectType) utype).getParam().get(i).getName())); } if (((ProjectType) utype).getParam().get(i).getValue() != null) { sql += " and value=?"; al.add((((ProjectType) utype).getParam().get(i).getValue())); } } } log.debug("My SQL: " + sql); queryResult = jt.query(sql, getParam(), al.toArray()); /* if (((ProjectType) utype).getUserName() != null && !((ProjectType) utype).getUserName().equals("") ) { sql = "select * from pm_project_user_params where project_id=? and user_id = ? and status_cd<>'D'"; queryResult = jt.query(sql, getParam(), ((ProjectType) utype).getId(), ((ProjectType) utype).getUserName()); } else { sql = "select * from pm_project_params where project_id=? and status_cd<>'D'"; queryResult = jt.query(sql, getParam(), ((ProjectType) utype).getId()); } */ } } else if (utype instanceof UserType) { ArrayList al = new ArrayList(); sql = "select * from pm_user_params where status_cd<>'D' "; if (((UserType) utype).getUserName() != null) // || !((UserType) utype).getUserName().equals("")) { sql += " and user_id=?"; al.add(((UserType) utype).getUserName()); //sql = "select * from pm_user_params where status_cd<>'D' order by user_id"; //queryResult = jt.query(sql, getUserParams()); } if (((UserType) utype).getParam() != null) { for (int i=0; i < ((UserType) utype).getParam().size(); i++) { if (((UserType) utype).getParam().get(i).getName() != null) { sql += " and param_name_cd=?"; al.add((((UserType) utype).getParam().get(i).getName())); } if (((UserType) utype).getParam().get(i).getValue() != null) { if (database.equalsIgnoreCase("oracle")) sql += " and to_char(value)=?"; else sql += " and value=?"; al.add((((UserType) utype).getParam().get(i).getValue())); } } } queryResult = jt.query(sql, getUserParams(), al.toArray()); } else if (utype instanceof ApprovalType) { if (((ApprovalType) utype).getId() == null) { sql = "select * from pm_approvals where status_cd<>'D' order by id"; queryResult = jt.query(sql, getApproval()); } else { sql = "select * from pm_approvals_params where id=? and status_cd<>'D'"; queryResult = jt.query(sql, getParam(), ((ApprovalType) utype).getId()); } } else if (utype instanceof ConfigureType) { if (((ConfigureType) utype).getDomainId() == null) { sql = "select * from pm_hive_data where status_cd<>'D' order by domain_id"; queryResult = jt.query(sql, getEnvironment()); } else { sql = "select * from pm_hive_params where domain_id=? and status_cd<>'D'"; queryResult = jt.query(sql, getParam(), ((ConfigureType) utype).getDomainId()); } } else if (utype instanceof GlobalDataType) { if (((GlobalDataType) utype).getProjectPath() == null) { sql = "select * from pm_global_params where status_cd<>'D'"; queryResult = jt.query(sql, getParam()); } else { sql = "select * from pm_global_params where project_path = ? and status_cd<>'D'"; queryResult = jt.query(sql, getParam(), ((GlobalDataType) utype).getProjectPath()); } } else if (utype instanceof CellDataType) { if (((CellDataType) utype).getProjectPath() == null) { sql = "select * from pm_cell_params where status_cd<>'D' order by project_path"; queryResult = jt.query(sql, getParam()); } else { sql = "select * from pm_cell_params where project_path=? and cell_id=? and status_cd<>'D'"; queryResult = jt.query(sql, getParam(), ((CellDataType) utype).getProjectPath(), ((CellDataType) utype).getId()); } } else if (utype instanceof RoleType) { String addsql = " and user_id = '" + caller + "' "; if ((validateRole(caller, "admin", null)) || (validateRole(caller, "manager", project))) { addsql = ""; } if (((RoleType) utype).getProjectId() == null) { sql = "select * from pm_project_user_roles where status_cd<>'D' " + addsql + " order by project_id"; queryResult = jt.query(sql, getRole()); } else if (((RoleType) utype).getUserName() != null) { sql = "select * from pm_project_user_roles where project_id=? and user_id=? and status_cd<>'D' " + addsql + " order by project_id"; queryResult = jt.query(sql, getRole(), ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName()); } else { sql = "select * from pm_project_user_roles where project_id=? and status_cd<>'D' " + addsql; queryResult = jt.query(sql, getRole(), ((RoleType) utype).getProjectId()); } // } } return queryResult; } public List<DBInfoType> getParam(Object utype, boolean showStatus) throws I2B2Exception, I2B2DAOException { // log.info(sql + domainId + projectId + ownerId); List<DBInfoType> queryResult = null; try { if (utype instanceof ProjectType) { if (((ProjectType) utype).getUserName() != null && !((ProjectType) utype).getUserName().equals("") ) { String sql = "select * from pm_project_user_params where id=? " + (showStatus == false? "" :" and status_cd<>'D'"); if (((ProjectType) utype).getParam().get(0).getId() != null) queryResult = jt.query(sql, getParam(), ((ProjectType) utype).getParam().get(0).getId()); } else { String sql = "select * from pm_project_params where id=? " + (showStatus == false? "" :" and status_cd<>'D'"); if (((ProjectType) utype).getParam().get(0).getId() != null) queryResult = jt.query(sql, getParam(), ((ProjectType) utype).getParam().get(0).getId()); } } else if (utype instanceof GlobalDataType) { String sql = "select * from pm_global_params where id=? " + (showStatus == false? "" :" and status_cd<>'D'"); if (((GlobalDataType) utype).getParam().get(0).getId() != null) queryResult = jt.query(sql, getGlobal(), ((GlobalDataType) utype).getParam().get(0).getId()); } else if (utype instanceof ApprovalType) { String sql = "select * from pm_approval_params where id=? " + (showStatus == false? "" :" and status_cd<>'D'"); if (((ApprovalType) utype).getParam().get(0).getId() != null) queryResult = jt.query(sql, getParam(), ((UserType) utype).getParam().get(0).getId()); } else if (utype instanceof UserType) { String sql = "select * from pm_user_params where id=? " + (showStatus == false? "" :" and status_cd<>'D'"); if (((UserType) utype).getParam().get(0).getId() != null) queryResult = jt.query(sql, getParam(), ((UserType) utype).getParam().get(0).getId()); } else if (utype instanceof CellDataType) { String sql = "select * from pm_cell_params where id=? " + (showStatus == false? "" :" and status_cd<>'D'"); if (((CellDataType) utype).getParam().get(0).getId() != null) queryResult = jt.query(sql, getParam(), ((CellDataType) utype).getParam().get(0).getId()); } else if (utype instanceof RoleType) { String sql = "select * from pm_project_user_roles where project_id=? and user_id=? " + (showStatus == false? "" :" and status_cd<>'D'"); queryResult = jt.query(sql, getRole(), ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName()); } else if (utype instanceof ConfigureType) { if (((ConfigureType) utype).getParam().isEmpty() == false) // || (((ConfigureType) utype).getDomainId()).size() == 0)) { String sql = "select * from pm_hive_params where id=? " + (showStatus == false? "" :" and status_cd<>'D'"); if (((ConfigureType) utype).getParam().get(0).getId() != null) queryResult = jt.query(sql, getParam(), ((ConfigureType) utype).getParam().get(0).getId()); } else { String sql = "select * from pm_hive_data where domain_id=? " + (showStatus == false? "" :" and status_cd<>'D'"); if (((ConfigureType) utype).getParam().get(0).getId() != null) queryResult = jt.query(sql, getEnvironment(), ((ConfigureType) utype).getDomainId()); } } } catch (DataAccessException e) { log.error(e.getMessage()); e.printStackTrace(); throw new I2B2DAOException("Database error"); } return queryResult; } public int setParam(Object utype, String project, String name, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; log.debug("Caller: "+ caller); log.debug("Project: " + project); if ((utype instanceof UserType) && (caller.equals(((UserType) utype).getUserName()))) { log.debug("Searching for existing User Param"); if ((getParam(utype, false) == null) || (getParam(utype, false).size() == 0)) { String addSql = "insert into pm_user_params " + "(user_id, datatype_cd, param_name_cd, value, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?)"; log.debug("Ading new User Param"); numRowsAdded = jt.update(addSql, ((UserType) utype).getUserName(), ((UserType) utype).getParam().get(0).getDatatype(), ((UserType) utype).getParam().get(0).getName(), ((UserType) utype).getParam().get(0).getValue(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_user_params " + "set value = ?, datatype_cd = ?, change_date = ?, status_cd = 'A' where changeby_char = ? and id = ? "; log.debug("Updating User Param"); numRowsAdded = jt.update(addSql, ((UserType) utype).getParam().get(0).getValue(), ((UserType) utype).getParam().get(0).getDatatype(), Calendar.getInstance().getTime(), caller, ((UserType) utype).getParam().get(0).getId()); if (numRowsAdded == 0) throw new I2B2DAOException("Record does not exist or access denied."); } } else if ((utype instanceof ProjectType) && (((ProjectType) utype).getUserName() != null) && (((ProjectType) utype).getUserName().equals(caller) )) { if ((getParam(utype, false) == null) || (getParam(utype, false).size() == 0)) { String addSql = "insert into pm_project_user_params " + "(project_id, user_id, datatype_cd, param_name_cd, value, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, ((ProjectType) utype).getId(), ((ProjectType) utype).getUserName(), ((ProjectType) utype).getParam().get(0).getDatatype(), ((ProjectType) utype).getParam().get(0).getName(), ((ProjectType) utype).getParam().get(0).getValue(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_project_user_params " + "set value = ?, datatype_cd = ?, change_date = ?, status_cd = 'A' where changeby_char = ? and id = ?"; numRowsAdded = jt.update(addSql, ((ProjectType) utype).getParam().get(0).getValue(), ((ProjectType) utype).getParam().get(0).getDatatype(), Calendar.getInstance().getTime(), caller, ((ProjectType) utype).getParam().get(0).getId()); if (numRowsAdded == 0) throw new I2B2DAOException("Record does not exist or access denied."); } } else if (validateRole(caller, "admin", null) || validateRole(caller, "manager", project)) { if (utype instanceof ParamsType) { } else if (utype instanceof UserType) { log.debug("Searching for existing User Param"); if ((getParam(utype, false) == null) || (getParam(utype, false).size() == 0)) { String addSql = "insert into pm_user_params " + "(user_id, datatype_cd, param_name_cd, value, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?)"; log.debug("Ading new User Param"); numRowsAdded = jt.update(addSql, ((UserType) utype).getUserName(), ((UserType) utype).getParam().get(0).getDatatype(), ((UserType) utype).getParam().get(0).getName(), ((UserType) utype).getParam().get(0).getValue(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_user_params " + "set value = ?, datatype_cd = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where id = ? "; log.debug("Updating User Param"); numRowsAdded = jt.update(addSql, ((UserType) utype).getParam().get(0).getValue(), ((UserType) utype).getParam().get(0).getDatatype(), Calendar.getInstance().getTime(), caller, ((UserType) utype).getParam().get(0).getId()); } } else if (utype instanceof ProjectType) { log.debug("Testing to see if username is set: " + ((ProjectType) utype).getUserName() ); if ((((ProjectType) utype).getUserName() != null) && (!((ProjectType) utype).getUserName().equals("") )) { if ((getParam(utype, false) == null) || (getParam(utype, false).size() == 0)) { String addSql = "insert into pm_project_user_params " + "(project_id, user_id, datatype_cd, param_name_cd, value, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, ((ProjectType) utype).getId(), ((ProjectType) utype).getUserName(), ((ProjectType) utype).getParam().get(0).getDatatype(), ((ProjectType) utype).getParam().get(0).getName(), ((ProjectType) utype).getParam().get(0).getValue(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_project_user_params " + "set value = ?, datatype_cd = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where id = ?"; numRowsAdded = jt.update(addSql, ((ProjectType) utype).getParam().get(0).getValue(), ((ProjectType) utype).getParam().get(0).getDatatype(), Calendar.getInstance().getTime(), caller, ((ProjectType) utype).getParam().get(0).getId()); } } else { if ((getParam(utype, false) == null) || (getParam(utype, false).size() == 0)) { String addSql = "insert into pm_project_params " + "(project_id, datatype_cd, param_name_cd, value, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, ((ProjectType) utype).getId(), ((ProjectType) utype).getParam().get(0).getDatatype(), ((ProjectType) utype).getParam().get(0).getName(), ((ProjectType) utype).getParam().get(0).getValue(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_project_params " + "set value = ?, datatype_cd = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where id = ?"; numRowsAdded = jt.update(addSql, ((ProjectType) utype).getParam().get(0).getValue(), ((ProjectType) utype).getParam().get(0).getDatatype(), Calendar.getInstance().getTime(), caller, ((ProjectType) utype).getParam().get(0).getId()); } } } else if (utype instanceof CellDataType) { if ((getParam(utype, false) == null) || (getParam(utype, false).size() == 0)) { String addSql = "insert into pm_cell_params " + "(cell_id, datatype_cd, project_path, param_name_cd, value, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, ((CellDataType) utype).getId(), ((CellDataType) utype).getParam().get(0).getDatatype(), ((CellDataType) utype).getProjectPath(), ((CellDataType) utype).getParam().get(0).getName(), ((CellDataType) utype).getParam().get(0).getValue(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_cell_params " + "set value = ?, datatype_cd = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where id = ?"; numRowsAdded = jt.update(addSql, ((CellDataType) utype).getParam().get(0).getValue(), ((CellDataType) utype).getParam().get(0).getDatatype(), Calendar.getInstance().getTime(), caller, ((CellDataType) utype).getParam().get(0).getId()); } } else if (utype instanceof ApprovalType) { if ((getParam(utype, false) == null) || (getParam(utype, false).size() == 0)) { String addSql = "insert into pm_approval_params " + "(approval_id, datatype_cd, object_cd, param_name_cd, value, activation_date, expiration_date, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, ((ApprovalType) utype).getId(), ((ApprovalType) utype).getParam().get(0).getDatatype(), ((ApprovalType) utype).getObjectCd(), ((ApprovalType) utype).getParam().get(0).getName(), ((ApprovalType) utype).getParam().get(0).getValue(), ((ApprovalType) utype).getActivationDate(), ((ApprovalType) utype).getExpirationDate(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_approval_params " + "set value = ?, datatype_cd = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where id = ?"; numRowsAdded = jt.update(addSql, ((ApprovalType) utype).getParam().get(0).getValue(), ((ApprovalType) utype).getParam().get(0).getDatatype(), Calendar.getInstance().getTime(), caller, ((ApprovalType) utype).getParam().get(0).getId()); } } else if (utype instanceof GlobalDataType) { if ((getParam(utype, false) == null) || (getParam(utype, false).size() == 0)) { String addSql = "insert into pm_global_params " + "( param_name_cd, datatype_cd, project_path, value, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, ((GlobalDataType) utype).getParam().get(0).getName(), ((GlobalDataType) utype).getParam().get(0).getDatatype(), ((GlobalDataType) utype).getProjectPath(), ((GlobalDataType) utype).getParam().get(0).getValue(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_global_params " + "set value = ?, datatype_cd = ?, project_path = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where id = ?"; numRowsAdded = jt.update(addSql, ((GlobalDataType) utype).getParam().get(0).getValue(), ((GlobalDataType) utype).getParam().get(0).getDatatype(), ((GlobalDataType) utype).getProjectPath(), Calendar.getInstance().getTime(), caller, ((GlobalDataType) utype).getParam().get(0).getId()); } } else if (utype instanceof ConfigureType) { if (((ConfigureType) utype).getParam().isEmpty() == false) // || (((ConfigureType) utype).getDomainId()).size() == 0)) { if ((getParam(utype, false) == null) || (getParam(utype, false).size() == 0)) { String addSql = "insert into pm_hive_params " + "(domain_id, datatype_cd, param_name_cd, value, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?)"; log.debug("Ading new Hive Param"); numRowsAdded = jt.update(addSql, ((ConfigureType) utype).getDomainId(), ((ConfigureType) utype).getParam().get(0).getDatatype(), ((ConfigureType) utype).getParam().get(0).getName(), ((ConfigureType) utype).getParam().get(0).getValue(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { //user already exists, lets try to update String addSql = "update pm_hive_params " + "set value = ?, datatype_cd = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where id = ? "; log.debug("Updating Hive Param"); numRowsAdded = jt.update(addSql, ((ConfigureType) utype).getParam().get(0).getValue(), ((ConfigureType) utype).getParam().get(0).getDatatype(), Calendar.getInstance().getTime(), caller, ((ConfigureType) utype).getParam().get(0).getId()); } } else if (((ConfigureType) utype).getDomainId() == null) // || (((ConfigureType) utype).getDomainId()).size() == 0)) { //user already exists, lets try to update String addSql = ""; if ((((ConfigureType) utype).isActive() != null) && (((ConfigureType) utype).isActive() == true) ) { addSql = "update pm_hive_data " + "set status_cd = 'D', active = 0, change_date = ?, changeby_char = ? where status_cd = 'A'"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller); } addSql = "insert into pm_hive_data " + "( domain_id, environment_cd, domain_name, helpurl, active, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?,?,?)"; numRowsAdded = jt.update(addSql, PMUtil.getInstance().generateMessageId(), ((ConfigureType) utype).getEnvironment(), ((ConfigureType) utype).getDomainName(), ((ConfigureType) utype).getHelpURL(), ((ConfigureType) utype).isActive(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } else { String addSql = "update pm_hive_data " + "set environment_cd = ?, domain_name = ?, helpurl = ?, active = ?, change_date = ?, changeby_char = ?, status_cd = 'A' where domain_id = ?"; numRowsAdded = jt.update(addSql, ((ConfigureType) utype).getEnvironment(), ((ConfigureType) utype).getDomainName(), ((ConfigureType) utype).getHelpURL(), ((ConfigureType) utype).isActive(), Calendar.getInstance().getTime(), caller, ((ConfigureType) utype).getDomainId()); } } else if (utype instanceof RoleType) { try { // First try to insert if fails than update String addSql2 = "insert into pm_project_user_roles " + "( project_id, user_id, user_role_cd, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?)"; numRowsAdded += jt.update(addSql2, ((RoleType) utype).getProjectId().trim(), ((RoleType) utype).getUserName().trim(), ((RoleType) utype).getRole().trim(), Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } catch (Exception e) { String addSql2 = "update pm_project_user_roles " + " set status_cd = 'A', change_date = ?, changeby_char = ? where project_id = ? and user_id = ? and user_role_cd = ?"; numRowsAdded += jt.update(addSql2, Calendar.getInstance().getTime(), caller, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), ((RoleType) utype).getRole()); } try { if ((((RoleType) utype).getRole().equals("DATA_AGG")) || (((RoleType) utype).getRole().equals("DATA_LDS")) || (((RoleType) utype).getRole().equals("DATA_DEID")) || (((RoleType) utype).getRole().equals("DATA_PROT"))) { String addSql = "insert into pm_project_user_roles " + "( project_id, user_id, user_role_cd, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?)"; numRowsAdded += jt.update(addSql, ((RoleType) utype).getProjectId().trim(), ((RoleType) utype).getUserName().trim(), "DATA_OBFSC", Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } } catch (Exception e) { if ((((RoleType) utype).getRole().equals("DATA_AGG")) || (((RoleType) utype).getRole().equals("DATA_LDS")) || (((RoleType) utype).getRole().equals("DATA_DEID")) || (((RoleType) utype).getRole().equals("DATA_PROT"))) { String addSql = "update pm_project_user_roles " + " set status_cd = 'A', change_date = ?, changeby_char = ? where project_id = ? and user_id = ? and user_role_cd = ?"; numRowsAdded += jt.update(addSql, Calendar.getInstance().getTime(), caller, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "DATA_OBFSC"); } } try { if ((((RoleType) utype).getRole().equals("DATA_LDS")) || (((RoleType) utype).getRole().equals("DATA_DEID")) || (((RoleType) utype).getRole().equals("DATA_PROT"))) { String addSql = "insert into pm_project_user_roles " + "( project_id, user_id, user_role_cd, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?)"; numRowsAdded += jt.update(addSql, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "DATA_AGG", Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } } catch (Exception e) { if ((((RoleType) utype).getRole().equals("DATA_LDS")) || (((RoleType) utype).getRole().equals("DATA_DEID")) || (((RoleType) utype).getRole().equals("DATA_PROT"))) { String addSql = "update pm_project_user_roles " + " set status_cd = 'A', change_date = ?, changeby_char = ? where project_id = ? and user_id = ? and user_role_cd = ?"; numRowsAdded += jt.update(addSql, Calendar.getInstance().getTime(), caller, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "DATA_AGG"); } } try { if ((((RoleType) utype).getRole().equals("DATA_DEID")) || (((RoleType) utype).getRole().equals("DATA_PROT"))) { String addSql = "insert into pm_project_user_roles " + "( project_id, user_id, user_role_cd, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?)"; numRowsAdded += jt.update(addSql, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "DATA_LDS", Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } } catch (Exception e) { if ((((RoleType) utype).getRole().equals("DATA_DEID")) || (((RoleType) utype).getRole().equals("DATA_PROT"))) { String addSql = "update pm_project_user_roles " + " set status_cd = 'A', change_date = ?, changeby_char = ? where project_id = ? and user_id = ? and user_role_cd = ?"; numRowsAdded += jt.update(addSql, Calendar.getInstance().getTime(), caller, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "DATA_LDS"); } } try { if ( (((RoleType) utype).getRole().equals("DATA_PROT"))) { String addSql = "insert into pm_project_user_roles " + "( project_id, user_id, user_role_cd, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?)"; numRowsAdded += jt.update(addSql, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "DATA_DEID", Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } } catch (Exception e) { if ( (((RoleType) utype).getRole().equals("DATA_PROT"))) { String addSql = "update pm_project_user_roles " + " set status_cd = 'A', change_date = ?, changeby_char = ? where project_id = ? and user_id = ? and user_role_cd = ?"; numRowsAdded += jt.update(addSql, Calendar.getInstance().getTime(), caller, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "DATA_DEID"); } } //admin track try { if ((((RoleType) utype).getRole().equals("MANAGER")) ||(((RoleType) utype).getRole().equals("ADMIN")) ) { String addSql = "insert into pm_project_user_roles " + "( project_id, user_id, user_role_cd, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?)"; numRowsAdded += jt.update(addSql, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "USER", Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } } catch (Exception e) { //admin track if ((((RoleType) utype).getRole().equals("MANAGER")) ||(((RoleType) utype).getRole().equals("ADMIN")) ) { String addSql = "update pm_project_user_roles " + " set status_cd = 'A', change_date = ?, changeby_char = ? where project_id = ? and user_id = ? and user_role_cd = ?"; numRowsAdded += jt.update(addSql, Calendar.getInstance().getTime(), caller, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "USER"); } } try { if ((((RoleType) utype).getRole().equals("ADMIN")) ) { String addSql = "insert into pm_project_user_roles " + "( project_id, user_id, user_role_cd, change_date, entry_date, changeby_char, status_cd) values (?,?,?,?,?,?,?)"; numRowsAdded += jt.update(addSql, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "MANAGER", Calendar.getInstance().getTime(), Calendar.getInstance().getTime(), caller, "A"); } } catch (Exception e) { if ((((RoleType) utype).getRole().equals("ADMIN")) ) { String addSql = "update pm_project_user_roles " + " set status_cd = 'A', change_date = ?, changeby_char = ? where project_id = ? and user_id = ? and user_role_cd = ?"; numRowsAdded += jt.update(addSql, Calendar.getInstance().getTime(), caller, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName(), "MANAGER"); } } } } else { throw new I2B2DAOException("Access Denied for " + caller); } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows added: " + numRowsAdded); return numRowsAdded; } public int deleteParam(Object utype, final String project, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; if (validateRole(caller, "admin", null) || validateRole(caller, "manager", project)) { try { if (utype instanceof UserType) { String addSql = "update pm_user_params " + "set status_cd = 'D', change_date = ?, changeBy_char = ? where id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, ((UserType) utype).getParam().get(0).getId()); } else if (utype instanceof ProjectType) { if ((((ProjectType) utype).getUserName() != null) && (!((ProjectType) utype).getUserName().equals("") )) { String addSql = "update pm_project_user_params " + "set status_cd = 'D', change_date = ?, changeby_char = ? where id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, ((ProjectType) utype).getParam().get(0).getId()); } else { String addSql = "update pm_project_params " + "set status_cd = 'D', change_date = ?, changeby_char = ? where id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, ((ProjectType) utype).getParam().get(0).getId()); } } else if (utype instanceof ConfigureType) { if (((ConfigureType) utype).getParam().isEmpty() == false) // || (((ConfigureType) utype).getDomainId()).size() == 0)) { String addSql = "update pm_hive_params " + "set status_cd = 'D', change_date = ?, changeby_char = ? where id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, ((ConfigureType) utype).getParam().get(0).getId()); } else { String addSql = "update pm_hive_data " + "set status_cd = 'D', change_date = ?, changeby_char = ? where domain_id = ? and active = 0"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, ((ConfigureType) utype).getDomainId()); } } else if (utype instanceof CellDataType) { String addSql = "update pm_cell_params " + "set status_cd = 'D', change_date = ?, changeby_char = ? where id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, ((CellDataType) utype).getParam().get(0).getId()); } else if (utype instanceof ApprovalType) { String addSql = "update pm_approval_params " + "set status_cd = 'D', change_date = ?, changeby_char = ? where id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, ((ApprovalType) utype).getParam().get(0).getId()); } else if (utype instanceof GlobalDataType) { String addSql = "update pm_global_params " + "set status_cd = 'D', change_date = ?, changeby_char = ? where id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, ((GlobalDataType) utype).getParam().get(0).getId()); } else if (utype instanceof RoleType) { if (((RoleType) utype).getRole().equals("DATA_PROT")) { numRowsAdded += executeRemoveRole("DATA_PROT", caller, utype); } else if (((RoleType) utype).getRole().equals("DATA_DEID")) { numRowsAdded += executeRemoveRole("DATA_PROT", caller, utype); numRowsAdded += executeRemoveRole("DATA_DEID", caller, utype); } else if (((RoleType) utype).getRole().equals("DATA_LDS")) { numRowsAdded += executeRemoveRole("DATA_PROT", caller, utype); numRowsAdded += executeRemoveRole("DATA_DEID", caller, utype); numRowsAdded += executeRemoveRole("DATA_LDS", caller, utype); } else if (((RoleType) utype).getRole().equals("DATA_AGG")) { numRowsAdded += executeRemoveRole("DATA_PROT", caller, utype); numRowsAdded += executeRemoveRole("DATA_DEID", caller, utype); numRowsAdded += executeRemoveRole("DATA_LDS", caller, utype); numRowsAdded += executeRemoveRole("DATA_AGG", caller, utype); } else if (((RoleType) utype).getRole().equals("DATA_OBFSC")) { numRowsAdded += executeRemoveRole("DATA_PROT", caller, utype); numRowsAdded += executeRemoveRole("DATA_DEID", caller, utype); numRowsAdded += executeRemoveRole("DATA_LDS", caller, utype); numRowsAdded += executeRemoveRole("DATA_AGG", caller, utype); numRowsAdded += executeRemoveRole("DATA_OBFSC", caller, utype); } //admin track if ((((RoleType) utype).getRole().equals("MANAGER")) ) { numRowsAdded += executeRemoveRole("MANAGER", caller, utype); } else if ((((RoleType) utype).getRole().equals("USER")) ) { numRowsAdded += executeRemoveRole("MANAGER", caller, utype); numRowsAdded += executeRemoveRole("USER", caller, utype); } else { numRowsAdded += executeRemoveRole(((RoleType) utype).getRole(), caller, utype); } } if (numRowsAdded == 0) throw new I2B2DAOException("not updated, does it exist?"); } catch (DataAccessException e) { log.error("Dao deleteuser failed"); log.error(e.getMessage()); throw new I2B2DAOException("Data access error " , e); } } else if ((utype instanceof UserType) && (caller.equals(((UserType) utype).getUserName()))) { String addSql = "update pm_user_params " + "set status_cd = 'D', change_date = ? where user_id = ? and changeby_char = ? and id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, caller, ((UserType) utype).getParam().get(0).getId()); if (numRowsAdded == 0) throw new I2B2DAOException("Record does not exist or access denied."); } else if ((utype instanceof ProjectType) && (((ProjectType) utype).getUserName() != null) && (((ProjectType) utype).getUserName().equals(caller) )) { String addSql = "update pm_project_user_params " + "set status_cd = 'D', change_date = ? where user_id = ? and changeby_char = ? and id = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), caller, caller, ((ProjectType) utype).getParam().get(0).getId()); if (numRowsAdded == 0) throw new I2B2DAOException("Record does not exist or access denied."); } else { throw new I2B2DAOException("Access Denied for " + caller); } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows deleted: " + numRowsAdded); return numRowsAdded; } public int executeRemoveRole(String role, String caller, Object utype) { String addSql = "update pm_project_user_roles " + "set status_cd = 'D', change_date = ?, changeby_char = ? where user_role_cd = ? and project_id = ? and user_id = ?"; return jt.update(addSql, Calendar.getInstance().getTime(), caller, role, ((RoleType) utype).getProjectId(), ((RoleType) utype).getUserName()); } public int deleteProject(final Object project, String caller) throws I2B2DAOException, I2B2Exception{ int numRowsAdded = 0; if (validateRole(caller, "admin", null)) { try { String addSql = "update pm_project_data " + "set status_cd = 'D', change_date = ? where project_id = ? and project_path = ? and changeby_char = ?"; numRowsAdded = jt.update(addSql, Calendar.getInstance().getTime(), ((ProjectType) project).getId(), ((ProjectType) project).getPath(), caller ); if (numRowsAdded == 0) throw new I2B2DAOException("Project not updated, does it exist?"); } catch (DataAccessException e) { log.error("Dao deleteuser failed"); log.error(e.getMessage()); throw new I2B2DAOException("Data access error " , e); } } else { throw new I2B2DAOException("Access Denied for " + caller); } // log.info(addSql + " " + numRowsAdded); log.debug("Number of rows deleted: " + numRowsAdded); return numRowsAdded; } private ParameterizedRowMapper getEnvironmentParams() { ParameterizedRowMapper<HiveParamData> map = new ParameterizedRowMapper<HiveParamData>() { public HiveParamData mapRow(ResultSet rs, int rowNum) throws SQLException { HiveParamData eData = new HiveParamData(); eData.setDomain(rs.getString("domain_id")); eData.setName(rs.getString("param_name_cd")); eData.setValue(rs.getString("value")); return eData; } }; return map; } private ParameterizedRowMapper getProject() { ParameterizedRowMapper<ProjectType> map = new ParameterizedRowMapper<ProjectType>() { public ProjectType mapRow(ResultSet rs, int rowNum) throws SQLException { ProjectType rData = new ProjectType(); DTOFactory factory = new DTOFactory(); rData.setKey(rs.getString("project_key")); rData.setName(rs.getString("project_name")); rData.setPath(rs.getString("project_path")); rData.setDescription(rs.getString("project_description")); rData.setId(rs.getString("project_id")); rData.setWiki(rs.getString("project_wiki")); return rData; } }; return map; } private ParameterizedRowMapper getCell() { ParameterizedRowMapper<CellDataType> map = new ParameterizedRowMapper<CellDataType>() { public CellDataType mapRow(ResultSet rs, int rowNum) throws SQLException { CellDataType rData = new CellDataType(); DTOFactory factory = new DTOFactory(); rData.setId(rs.getString("cell_id")); rData.setName(rs.getString("name")); rData.setProjectPath(rs.getString("project_path")); rData.setCanOverride(rs.getBoolean("can_override")); rData.setMethod(rs.getString("method_cd")); rData.setUrl(rs.getString("url")); return rData; } }; return map; } private ParameterizedRowMapper getProjectRequest() { ParameterizedRowMapper<ProjectRequestType> map = new ParameterizedRowMapper<ProjectRequestType>() { public ProjectRequestType mapRow(ResultSet rs, int rowNum) throws SQLException { ProjectRequestType rData = new ProjectRequestType(); DTOFactory factory = new DTOFactory(); rData.setId(Integer.toString(rs.getInt("id"))); rData.setProjectId(rs.getString("project_id")); rData.setTitle(rs.getString("title")); rData.setSubmitChar(rs.getString("submit_char")); Date date = rs.getDate("entry_date"); if (date == null) rData.setEntryDate(null); else rData.setEntryDate(long2Gregorian(date.getTime())); rData.setRequestXml(rs.getString("request_xml")); /* Clob clob = rs.getClob("request_xml"); if (clob != null) { try { BlobType blobType = new BlobType(); blobType.getContent().add( JDBCUtil.getClobString(clob)); rData.setRequestXml(blobType); } catch (IOException ioe) { log.debug(ioe.getMessage()); } } */ //rData.setRequestXml(rs.getClob("request_xml")); return rData; } }; return map; } private ParameterizedRowMapper getApproval() { ParameterizedRowMapper<ApprovalType> map = new ParameterizedRowMapper<ApprovalType>() { public ApprovalType mapRow(ResultSet rs, int rowNum) throws SQLException { ApprovalType rData = new ApprovalType(); DTOFactory factory = new DTOFactory(); rData.setId(rs.getString("approval_id")); rData.setName(rs.getString("approval_name")); rData.setDescription(rs.getString("approval_description")); rData.setObjectCd(rs.getString("object_cd")); Date date = rs.getDate("approval_activation_date"); if (date == null) rData.setActivationDate(null); else rData.setActivationDate(long2Gregorian(date.getTime())); date = rs.getDate("approval_expiration_date"); if (date == null) rData.setExpirationDate(null); else rData.setExpirationDate(long2Gregorian(date.getTime())); return rData; } }; return map; } private ParameterizedRowMapper getParam() { ParameterizedRowMapper<ParamType> map = new ParameterizedRowMapper<ParamType>() { public ParamType mapRow(ResultSet rs, int rowNum) throws SQLException { ParamType eData = new ParamType(); log.debug("setting name"); eData.setName(rs.getString("param_name_cd")); eData.setValue(rs.getString("value")); eData.setId(rs.getInt("id")); eData.setDatatype(rs.getString("datatype_cd")); return eData; } }; return map; } public static XMLGregorianCalendar long2Gregorian(long date) { DatatypeFactory dataTypeFactory; try { dataTypeFactory = DatatypeFactory.newInstance(); } catch (DatatypeConfigurationException e) { throw new RuntimeException(e); } GregorianCalendar gc = new GregorianCalendar(); gc.setTimeInMillis(date); return dataTypeFactory.newXMLGregorianCalendar(gc); } private ParameterizedRowMapper getGlobal() { ParameterizedRowMapper<GlobalDataType> map = new ParameterizedRowMapper<GlobalDataType>() { public GlobalDataType mapRow(ResultSet rs, int rowNum) throws SQLException { DTOFactory factory = new DTOFactory(); GlobalDataType eData = new GlobalDataType(); log.debug("setting name"); ParamType param = new ParamType(); param.setId(rs.getInt("id")); param.setName(rs.getString("param_name_cd")); param.setValue(rs.getString("value")); param.setDatatype(rs.getString("datatype_cd")); eData.getParam().add(param); eData.setProjectPath(rs.getString("project_path")); eData.setCanOverride(rs.getBoolean("can_override")); return eData; } }; return map; } private ParameterizedRowMapper getUserParams() { ParameterizedRowMapper<UserParamData> map = new ParameterizedRowMapper<UserParamData>() { public UserParamData mapRow(ResultSet rs, int rowNum) throws SQLException { UserParamData eData = new UserParamData(); eData.setId(rs.getInt("id")); eData.setDatatype(rs.getString("datatype_cd")); eData.setUser(rs.getString("user_id")); eData.setName(rs.getString("param_name_cd")); eData.setValue(rs.getString("value")); log.debug("Found a user/param: " + rs.getString("user_id") + ":" + rs.getString("param_name_cd")); return eData; } }; return map; } private ParameterizedRowMapper getProjectUserParams() { ParameterizedRowMapper<ProjectUserParamData> map = new ParameterizedRowMapper<ProjectUserParamData>() { public ProjectUserParamData mapRow(ResultSet rs, int rowNum) throws SQLException { ProjectUserParamData eData = new ProjectUserParamData(); eData.setProject(rs.getString("project_path")); eData.setUser(rs.getString("user_id")); eData.setName(rs.getString("param_name")); eData.setValue(rs.getString("value")); return eData; } }; return map; } private ParameterizedRowMapper getProjectParams() { ParameterizedRowMapper<ParamType> map = new ParameterizedRowMapper<ParamType>() { public ParamType mapRow(ResultSet rs, int rowNum) throws SQLException { ParamType eData = new ParamType(); //eData.setProject(rs.getString("project_path")); eData.setName(rs.getString("param_name_cd")); eData.setValue(rs.getString("value")); return eData; } }; return map; } private ParameterizedRowMapper getSession() { ParameterizedRowMapper<SessionData> map = new ParameterizedRowMapper<SessionData>() { public SessionData mapRow(ResultSet rs, int rowNum) throws SQLException { SessionData rData = new SessionData(); // DTOFactory factory = new DTOFactory(); rData.setSessionID(rs.getString("session_id")); Date date = rs.getTimestamp("expired_date"); if (date == null) rData.setExpiredDate(null); else rData.setExpiredDate(date); date = rs.getTimestamp("entry_date"); if (date == null) rData.setIssuedDate(null); else rData.setIssuedDate(date); return rData; } }; return map; } private ParameterizedRowMapper getUserLogin() { ParameterizedRowMapper<SessionData> map = new ParameterizedRowMapper<SessionData>() { public SessionData mapRow(ResultSet rs, int rowNum) throws SQLException { SessionData rData = new SessionData(); // DTOFactory factory = new DTOFactory(); rData.setSessionID(rs.getString("session_id")); Date date = rs.getTimestamp("expired_date"); if (date == null) rData.setExpiredDate(null); else rData.setExpiredDate(date); date = rs.getTimestamp("entry_date"); if (date == null) rData.setIssuedDate(null); else rData.setIssuedDate(date); return rData; } }; return map; } private ParameterizedRowMapper getRole() { ParameterizedRowMapper<RoleType> map = new ParameterizedRowMapper<RoleType>() { public RoleType mapRow(ResultSet rs, int rowNum) throws SQLException { RoleType rData = new RoleType(); rData.setProjectId(rs.getString("project_id")); rData.setUserName(rs.getString("user_id")); rData.setRole(rs.getString("user_role_cd")); return rData; } }; return map; } private ParameterizedRowMapper getEnvironment() { ParameterizedRowMapper<ConfigureType> map = new ParameterizedRowMapper<ConfigureType>() { public ConfigureType mapRow(ResultSet rs, int rowNum) throws SQLException { DTOFactory factory = new DTOFactory(); ConfigureType eData = new ConfigureType(); eData.setActive(rs.getBoolean("active")); eData.setDomainId(rs.getString("domain_id")); eData.setDomainName(rs.getString("domain_name")); eData.setHelpURL(rs.getString("helpurl")); eData.setEnvironment(rs.getString("environment_cd")); return eData; } }; return map; } private ParameterizedRowMapper getUser(final boolean includePassword) { ParameterizedRowMapper<UserType> map = new ParameterizedRowMapper<UserType>() { public UserType mapRow(ResultSet rs, int rowNum) throws SQLException { DTOFactory factory = new DTOFactory(); UserType userData = new UserType(); userData.setFullName(rs.getString("full_name")); userData.setUserName(rs.getString("user_id")); try { userData.setIsAdmin(validateRole(userData.getUserName(), "ADMIN",null)); } catch (I2B2DAOException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (includePassword) { PasswordType pass = new PasswordType(); pass.setValue(rs.getString("password")); userData.setPassword(pass); } userData.setEmail(rs.getString("email")); return userData; } }; return map; } }