/*******************************************************************************
* Copyright (c) 2013 hangum.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v2.1
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* Contributors:
* hangum - initial API and implementation
******************************************************************************/
package com.hangum.tadpole.engine.query.sql;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.hangum.tadpole.cipher.core.manager.CipherManager;
import com.hangum.tadpole.commons.exception.TadpoleSQLManagerException;
import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine;
import com.hangum.tadpole.engine.initialize.TadpoleSystemInitializer;
import com.hangum.tadpole.engine.manager.TadpoleSQLManager;
import com.hangum.tadpole.engine.query.dao.system.ExternalBrowserInfoDAO;
import com.hangum.tadpole.engine.query.dao.system.TadpoleUserDbRoleDAO;
import com.hangum.tadpole.engine.query.dao.system.UserDAO;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.engine.query.dao.system.UserDBOriginalDAO;
import com.hangum.tadpole.engine.query.dao.system.accesscontrol.DBAccessControlDAO;
import com.hangum.tadpole.preference.define.GetAdminPreference;
import com.hangum.tadpole.session.manager.SessionManager;
import com.ibatis.sqlmap.client.SqlMapClient;
/**
* user_db table 관련
*
* @author hangum
*
*/
public class TadpoleSystem_UserDBQuery {
private static final Logger logger = Logger.getLogger(TadpoleSystem_UserDBQuery.class);
/**
* update db other information
* ex) db lock? visible
*
* @param userDB
* @throws TadpoleSQLManagerException, SQLException
*/
public static void updateDBOtherInformation(final UserDBDAO userDB) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("updateDBOtherInformation", userDB);
}
/**
* Registered Database(Not include sqlite)
*
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List getRegisteredDB() throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
return sqlClient.queryForList("getRegisteredDB");
}
/**
* 기존 디비 수정할 수 있는지 검사합니다.
*
* @param user_seq
* @param userDBDao
* @param oldUserDBDao
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static boolean isOldDBValidate(int user_seq, UserDBDAO userDBDao, UserDBDAO oldUserDBDao) throws TadpoleSQLManagerException, SQLException {
Map<String, Object> queryMap = new HashMap<String, Object>();
queryMap.put("user_seq", user_seq);
queryMap.put("seq", oldUserDBDao.getSeq());
queryMap.put("group_name", userDBDao.getGroup_name());
queryMap.put("display_name", userDBDao.getDisplay_name());
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List<Object> listUserDB = sqlClient.queryForList("isOldDBValidate", queryMap);
if(listUserDB.isEmpty()) return false;
else return true;
}
// /**
// * 신규디비 등록할 수 있는지 검사합니다.
// *
// * @param user_seq
// * @param userDBDao
// * @return
// * @throws TadpoleSQLManagerException, SQLException
// */
// public static boolean isNewDBValidate(int user_seq, UserDBDAO userDBDao) throws TadpoleSQLManagerException, SQLException {
// Map<String, Object> queryMap = new HashMap<String, Object>();
// queryMap.put("user_seq", user_seq);
// queryMap.put("group_name", userDBDao.getGroup_name());
// queryMap.put("display_name", userDBDao.getDisplay_name());
//
// SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
// List<Object> listUserDB = sqlClient.queryForList("isNewDBValidate", queryMap);
//
// if(listUserDB.isEmpty()) return false;
// else return true;
// }
/**
* 신규 유저디비를 등록합니다.
*
* @param userDb
* @param userSeq
*/
public static UserDBDAO newUserDB(UserDBDAO userDb, int userSeq) throws TadpoleSQLManagerException, SQLException {
userDb.setUser_seq(userSeq);
// data encryption
UserDBOriginalDAO userEncryptDao = new UserDBOriginalDAO();
userEncryptDao.setUser_seq(userDb.getUser_seq());
userEncryptDao.setDbms_type(userDb.getDbms_type());
userEncryptDao.setUrl(CipherManager.getInstance().encryption(userDb.getUrl()));
userEncryptDao.setDb(CipherManager.getInstance().encryption(userDb.getDb()));
userEncryptDao.setGroup_name(userDb.getGroup_name());
userEncryptDao.setDisplay_name(userDb.getDisplay_name());
userEncryptDao.setOperation_type(userDb.getOperation_type());
userEncryptDao.setIs_lock(userDb.getIs_lock());
userEncryptDao.setHost(CipherManager.getInstance().encryption(userDb.getHost()));
userEncryptDao.setPort(CipherManager.getInstance().encryption(userDb.getPort()));
userEncryptDao.setUsers(CipherManager.getInstance().encryption(userDb.getUsers()));
if(PublicTadpoleDefine.YES_NO.YES.name().equals(GetAdminPreference.getSaveDBPassword())) {
userEncryptDao.setPasswd(CipherManager.getInstance().encryption(userDb.getPasswd()));
} else {
userEncryptDao.setPasswd("");
}
userEncryptDao.setUrl_user_parameter(userDb.getUrl_user_parameter());
userEncryptDao.setLocale(userDb.getLocale());
// ext information
userEncryptDao.setIs_readOnlyConnect(userDb.getIs_readOnlyConnect());
userEncryptDao.setIs_autocommit(userDb.getIs_autocommit());
userEncryptDao.setIs_showtables(userDb.getIs_showtables());
userEncryptDao.setIs_profile(userDb.getIs_profile());
userEncryptDao.setQuestion_dml(userDb.getQuestion_dml());
userEncryptDao.setIs_external_browser(userDb.getIs_external_browser());
// userEncryptDao.setIs_visible(userDb.getIs_visible());
userEncryptDao.setIs_summary_report(userDb.getIs_summary_report());
userEncryptDao.setIs_monitoring(userDb.getIs_monitoring());
//
userEncryptDao.setExt1(userDb.getExt1());
userEncryptDao.setCreate_time(new Timestamp(System.currentTimeMillis()));
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
UserDBDAO insertedUserDB = (UserDBDAO)sqlClient.insert("userDBInsert", userEncryptDao); //$NON-NLS-1$
userDb.setSeq(insertedUserDB.getSeq());
// tadpole_user_db_role
TadpoleUserDbRoleDAO roleDao = TadpoleSystem_UserRole.insertTadpoleUserDBRole(userSeq,
insertedUserDB.getSeq(),
PublicTadpoleDefine.USER_ROLE_TYPE.ADMIN.toString()
);
// to save access control
DBAccessControlDAO dbAccessCtl = TadpoleSystem_AccessControl.saveDBAccessControl(roleDao);
userDb.setDbAccessCtl(dbAccessCtl);
// 데이터베이스 확장속성 등록
sqlClient.insert("userDBEXTInsert", userDb);
for(ExternalBrowserInfoDAO extDao : userDb.getListExternalBrowserdao()) {
extDao.setDb_seq(userDb.getSeq());
sqlClient.insert("externalBrowserInsert", extDao);
}
return insertedUserDB;
}
/**
* userDAO 수정
*
* @param newUserDb
* @param oldUserDb
* @param userSeq
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static UserDBDAO updateUserDB(UserDBDAO newUserDb, UserDBDAO oldUserDb, int userSeq) throws TadpoleSQLManagerException, SQLException {
UserDBOriginalDAO userEncryptDao = new UserDBOriginalDAO();
userEncryptDao.setUser_seq(userSeq);
userEncryptDao.setSeq(oldUserDb.getSeq());
userEncryptDao.setDbms_type(newUserDb.getDbms_type());
userEncryptDao.setUrl(CipherManager.getInstance().encryption(newUserDb.getUrl()));
userEncryptDao.setDb(CipherManager.getInstance().encryption(newUserDb.getDb()));
userEncryptDao.setGroup_name(newUserDb.getGroup_name());
userEncryptDao.setDisplay_name(newUserDb.getDisplay_name());
userEncryptDao.setOperation_type(newUserDb.getOperation_type());
userEncryptDao.setHost(CipherManager.getInstance().encryption(newUserDb.getHost()));
userEncryptDao.setPort(CipherManager.getInstance().encryption(newUserDb.getPort()));
userEncryptDao.setUsers(CipherManager.getInstance().encryption(newUserDb.getUsers()));
// 시스템 어드민의 패스워드 저장 여부에 따라 저장
if(PublicTadpoleDefine.YES_NO.YES.name().equals(GetAdminPreference.getSaveDBPassword())) {
userEncryptDao.setPasswd(CipherManager.getInstance().encryption(newUserDb.getPasswd()));
} else {
userEncryptDao.setPasswd("");
}
userEncryptDao.setUrl_user_parameter(newUserDb.getUrl_user_parameter());
userEncryptDao.setLocale(newUserDb.getLocale());
// ext information
userEncryptDao.setIs_readOnlyConnect(newUserDb.getIs_readOnlyConnect());
userEncryptDao.setIs_autocommit(newUserDb.getIs_autocommit());
userEncryptDao.setIs_showtables(newUserDb.getIs_showtables());
userEncryptDao.setIs_profile(newUserDb.getIs_profile());
userEncryptDao.setQuestion_dml(newUserDb.getQuestion_dml());
userEncryptDao.setIs_visible(newUserDb.getIs_visible());
userEncryptDao.setIs_summary_report(newUserDb.getIs_summary_report());
userEncryptDao.setIs_monitoring(newUserDb.getIs_monitoring());
userEncryptDao.setExt1(newUserDb.getExt1());
userEncryptDao.setExt2(newUserDb.getExt2());
userEncryptDao.setExt3(newUserDb.getExt3());
userEncryptDao.setExt4(newUserDb.getExt4());
userEncryptDao.setExt5(newUserDb.getExt5());
userEncryptDao.setExt6(newUserDb.getExt6());
userEncryptDao.setExt7(newUserDb.getExt7());
userEncryptDao.setExt8(newUserDb.getExt8());
userEncryptDao.setExt9(newUserDb.getExt9());
userEncryptDao.setExt10(newUserDb.getExt10());
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("userDBUpdate", userEncryptDao); //$NON-NLS-1$
// 데이터베이스 확장속성 등록
sqlClient.update("userDBEXTUpdate", userEncryptDao);
return newUserDb;
}
/**
* group의 그룹명을 리턴합니다.
*
* @param groupSeqs
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<String> getUserGroupName() throws TadpoleSQLManagerException, SQLException {
Map<String, Object> mapParam = new HashMap<String, Object>();
mapParam.put("user_seq", SessionManager.getUserSeq());
mapParam.put("thisTime", System.currentTimeMillis());
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List<UserDBDAO> listUserDB = sqlClient.queryForList("userDB", mapParam);
// set db access control
List<String> listGroupName = new ArrayList<String>();
for (UserDBDAO userDB : listUserDB) {
if(!listGroupName.contains(userDB.getGroup_name())) {
listGroupName.add(userDB.getGroup_name());
}
}
return listGroupName;
}
/**
* 유저그룹의 디비 리스트
*
* @param strGoupName
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<UserDBDAO> getUserGroupDB(String strGoupName) throws TadpoleSQLManagerException, SQLException {
Map<String, Object> mapParam = new HashMap<String, Object>();
mapParam.put("group_name", strGoupName);
mapParam.put("user_seq", SessionManager.getUserSeq());
mapParam.put("thisTime", System.currentTimeMillis());
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List<UserDBDAO> listUserDB = sqlClient.queryForList("userGroupDB", mapParam);
// set db access control
for (UserDBDAO userDBDAO : listUserDB) {
DBAccessControlDAO dbAccessCtl = TadpoleSystem_AccessControl.getDBAccessControl(userDBDAO.getRole_seq());
userDBDAO.setDbAccessCtl(dbAccessCtl);
}
return listUserDB;
}
/**
* session userdb
*
* @return
* @throws TadpoleSQLManagerException
* @throws SQLException
*/
public static List<UserDBDAO> getSessionUserDB() throws TadpoleSQLManagerException, SQLException {
UserDAO userDB = new UserDAO();
userDB.setSeq(SessionManager.getUserSeq());
return getUserDB(userDB);
}
/**
* 유저디비
*
* @param userDB
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<UserDBDAO> getUserDB(UserDAO userDB) throws TadpoleSQLManagerException, SQLException {
Map<String, Object> mapParam = new HashMap<String, Object>();
mapParam.put("user_seq", userDB.getSeq());
mapParam.put("thisTime", System.currentTimeMillis());
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List<UserDBDAO> listUserDB = sqlClient.queryForList("userDB", mapParam);
// set db access control
for (UserDBDAO userDBDAO : listUserDB) {
DBAccessControlDAO dbAccessCtl = TadpoleSystem_AccessControl.getDBAccessControl(userDBDAO.getRole_seq());
userDBDAO.setDbAccessCtl(dbAccessCtl);
}
return listUserDB;
}
/**
* get already registered
* @return
*/
public static Map<String, UserDBDAO> getUserDBByHost() {
Map<String, UserDBDAO> mapRegisterdDB = new HashMap<String, UserDBDAO>();
try {
for (UserDBDAO userDBDAO : getSessionUserDB()) {
mapRegisterdDB.put(userDBDAO.getHost(), userDBDAO);
}
} catch(Exception e) {
logger.error("get alredy regist db", e);
}
return mapRegisterdDB;
}
/**
* 자신이 생성한 사용자 리스트
*
* @param userDB
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<UserDBDAO> getCreateUserDB(UserDAO userDB) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
return (List<UserDBDAO>)sqlClient.queryForList("getCreateUserDB", userDB.getSeq());
}
/**
* 자신이 생성한 사용자 리스트
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<UserDBDAO> getCreateUserDB() throws TadpoleSQLManagerException, SQLException {
UserDAO userDAO = new UserDAO();
userDAO.setSeq(SessionManager.getUserSeq());
return getCreateUserDB(userDAO);
}
/**
* 모든 유저의 디비를 보여 줍니다.
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<UserDBDAO> getAllUserDB() throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
return (List<UserDBDAO>)sqlClient.queryForList("userDBPermissions"); //$NON-NLS-1$
}
/**
* 일별 보고서 종류.
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<UserDBDAO> getDailySummaryReportDB() throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
return (List<UserDBDAO>)sqlClient.queryForList("dailySummaryReportDB"); //$NON-NLS-1$
}
/**
* Get instance of database by sequence id
*
* @param dbSeq
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static UserDBDAO getUserDBInstance(int dbSeq) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
UserDBDAO userDB = (UserDBDAO)sqlClient.queryForObject("userDBInstance", dbSeq);
return userDB;
}
/**
* 유저 삭제
* @param seq
* @throws TadpoleSQLManagerException, SQLException
*/
public static void removeUserDB(int seq) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("userDBDelete", seq); //$NON-NLS-1$
}
/**
* 사용자 디비 롤을 삭제합니다.
*
* @param seq
* @throws TadpoleSQLManagerException, SQLException
*/
public static void removeUserRoleDB(int seq) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("userDBRoleRemove", seq); //$NON-NLS-1$
}
}