/******************************************************************************* * 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.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import com.hangum.tadpole.commons.exception.TadpoleRuntimeException; import com.hangum.tadpole.commons.exception.TadpoleSQLManagerException; import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine; import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine.RESOURCE_TYPE; import com.hangum.tadpole.engine.Messages; import com.hangum.tadpole.engine.initialize.TadpoleSystemInitializer; import com.hangum.tadpole.engine.manager.TadpoleSQLManager; import com.hangum.tadpole.engine.query.dao.ResourceManagerDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBResourceDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBResourceDataDAO; import com.hangum.tadpole.engine.restful.RESTFulNotFoundURLException; import com.hangum.tadpole.session.manager.SessionManager; import com.ibatis.sqlmap.client.SqlMapClient; /** * user_db_erd 관련 코드 * * @author hangum * */ public class TadpoleSystem_UserDBResource { private static final Logger logger = Logger.getLogger(TadpoleSystem_UserDBResource.class); /** * Returns restful api list * * @param intUserSeq * @return * @throws SQLException * @throws TadpoleSQLManagerException, SQLException */ public static List<ResourceManagerDAO> getRESTFulAPIList() throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); return (List<ResourceManagerDAO>)sqlClient.queryForList("getRESTFulAPIList", SessionManager.getUserSeq()); //$NON-NLS-1$ } /** * find restful * * @param mapCredential * @return * @throws RESTFulNotFoundURLException * @throws SQLException * @throws TadpoleSQLManagerException * @throws TadpoleSQLManagerException, SQLException */ public static UserDBResourceDAO findRESTURL(int intUserSEQ, String strUserDomainURL) throws RESTFulNotFoundURLException, SQLException, TadpoleSQLManagerException { Map<String, Object> mapCredential = new HashMap<String, Object>(); mapCredential.put("user_seq", intUserSEQ); //$NON-NLS-1$ mapCredential.put("restapi_uri", strUserDomainURL); //$NON-NLS-1$ SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); UserDBResourceDAO userResource = (UserDBResourceDAO)sqlClient.queryForObject("findRESTURL", mapCredential); //$NON-NLS-1$ if(userResource == null) { throw new RESTFulNotFoundURLException("Not found your request url. Check your URL."); } return userResource; } /** * find api * @param strAPIKey * @return * @throws TadpoleSQLManagerException, SQLException */ public static UserDBResourceDAO findAPIKey(String strAPIKey) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); UserDBResourceDAO userResource = (UserDBResourceDAO)sqlClient.queryForObject("findAPIKey", strAPIKey); //$NON-NLS-1$ return userResource; } /** * 저장 * * @param userDB * @param userDBResource * @param contents * * @throws TadpoleSQLManagerException, SQLException */ public static UserDBResourceDAO saveResource(UserDBDAO userDB, UserDBResourceDAO userDBResource, String contents) throws TadpoleSQLManagerException, SQLException { // 기존에 등록 되어 있는지 검사한다 SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); UserDBResourceDAO retUserDBResource = (UserDBResourceDAO)sqlClient.insert("userDbResourceInsert", userDBResource); //$NON-NLS-1$ // content data를 저장합니다. insertResourceData(retUserDBResource, contents); return retUserDBResource; } /** * update resource_title & shared_type * * @param dbResource * @param content * @throws TadpoleSQLManagerException, SQLException */ public static void updateResourceHeader(ResourceManagerDAO userDBResource) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); sqlClient.update("userDbResourceUpdate", userDBResource); //$NON-NLS-1$ } // /** // * update resource_title & description // * // * @param dbResource // * @param content // * @throws TadpoleSQLManagerException, SQLException // */ // public static void userDbResourceHeadUpdate(ResourceManagerDAO userDBResource) throws TadpoleSQLManagerException, SQLException { // SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); // sqlClient.update("userDbResourceHeadUpdate", userDBResource); //$NON-NLS-1$ // } /** * updateResourceAuto * * @param dbResource * @param content * @throws TadpoleSQLManagerException, SQLException */ public static void updateResourceAuto(UserDBResourceDAO userDBResource, String contents) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); sqlClient.delete("userDbResourceDataAutoDelete", userDBResource.getResource_seq()); //$NON-NLS-1$ insertResourceData(userDBResource, contents); } /** * update * * @param dbResource * @param content * @throws TadpoleSQLManagerException, SQLException */ public static void updateResource(UserDBResourceDAO userDBResource, String contents) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); sqlClient.update("userDbResourceDataDelete", userDBResource.getResource_seq()); //$NON-NLS-1$ insertResourceData(userDBResource, contents); } /** * auto resource data * * @param userDB * @param dBResource * @param dBResource2 * @param newContents */ public static UserDBResourceDAO updateAutoResourceDate(UserDBDAO userDB, UserDBResourceDAO dBResourceAuto, UserDBResourceDAO dBResource, String newContents) throws TadpoleSQLManagerException, SQLException { // auto save 도 시작. if(dBResource == null && dBResourceAuto == null) { if(logger.isDebugEnabled()) logger.debug("=[0]===[updateAutoResourceDate][dBResource is null][dBResourceAuto is null]============"); UserDBResourceDAO defDao = new UserDBResourceDAO(); defDao.setDb_seq(userDB.getSeq()); defDao.setName(PublicTadpoleDefine.DEFAUL_RESOURCE_NAME); defDao.setResource_types(RESOURCE_TYPE.AUTO_SQL.name()); defDao.setShared_type(PublicTadpoleDefine.SHARED_TYPE.PRIVATE.name()); defDao.setRestapi_yesno(PublicTadpoleDefine.YES_NO.NO.name()); defDao.setUser_seq(SessionManager.getUserSeq()); // 기존에 등록 되어 있는지 검사한다 SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); UserDBResourceDAO retUserDBResource = (UserDBResourceDAO)sqlClient.insert("userDbResourceInsert", defDao); //$NON-NLS-1$ insertResourceData(retUserDBResource, newContents); return retUserDBResource; // auto save 가 한번이라도 있었음. } else if(dBResource == null && dBResourceAuto != null) { if(logger.isDebugEnabled()) logger.debug("=[1]===[updateAutoResourceDate][dBResource is null][dBResourceAuto is not null]============"); // 기존에 등록 되어 있는 것을 삭제하고 저장한다. updateResourceAuto(dBResourceAuto, newContents); return dBResourceAuto; } else { if(logger.isDebugEnabled()) logger.debug("=[2]===[updateAutoResourceDate][dBResource is not null]============"); // 기존에 등록 되어 있는지 검사한다 updateResource(dBResource, newContents); return dBResource; } } /** * resource data * * @param userDBResource * @param contents * @throws TadpoleSQLManagerException, SQLException */ private static void insertResourceData(UserDBResourceDAO userDBResource, String contents) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); // content data를 저장합니다. UserDBResourceDataDAO dataDao = new UserDBResourceDataDAO(); dataDao.setUser_db_resource_seq(userDBResource.getResource_seq()); dataDao.setGroup_seq(System.currentTimeMillis()); dataDao.setUser_seq(SessionManager.getUserSeq()); dataDao.setDatas(contents); sqlClient.insert("userDbResourceDataInsert", dataDao); //$NON-NLS-1$ } /** * 해당 db의 모든 erd리스트를 가져온다 * * @param userDB * @return * @throws TadpoleSQLManagerException, SQLException */ public static List<UserDBResourceDAO> userDbResourceTree(UserDBDAO userDB) throws TadpoleSQLManagerException, SQLException { List<UserDBResourceDAO> listRealResource = new ArrayList<UserDBResourceDAO>(); Map<String, Object> queryMap = new HashMap<String, Object>(); queryMap.put("seq", userDB.getSeq()); //$NON-NLS-1$ SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); List<UserDBResourceDAO> listUserDBResources = (List<UserDBResourceDAO>)sqlClient.queryForList("userDbResourceTree", queryMap); //$NON-NLS-1$ for (UserDBResourceDAO userDBResourceDAO : listUserDBResources) { if(PublicTadpoleDefine.SHARED_TYPE.PUBLIC.toString().equals(userDBResourceDAO.getShared_type())) { userDBResourceDAO.setParent(userDB); listRealResource.add(userDBResourceDAO); } else { // 리소스 중에서 개인 리소스만 넣도록 합니다. if(SessionManager.getUserSeq() == userDBResourceDAO.getUser_seq()) { userDBResourceDAO.setParent(userDB); listRealResource.add(userDBResourceDAO); } } } return listRealResource; } /** * 리소스 목록을 조회한다. * @param <ResourceManagerDAO> * @param <ResourceManagerDAO> * * @param userDB * @return * @throws TadpoleSQLManagerException, SQLException */ public static List<ResourceManagerDAO> userDbResource(UserDBDAO userDB) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); return (List<ResourceManagerDAO>)sqlClient.queryForList("userDbResourceManager", userDB); //$NON-NLS-1$ } /** * 이름 또는 api url이 중복되었는지 검사 * * @param userDB * @param retResourceDao * @return * @throws TadpoleSQLManagerException, SQLException */ public static void userDBResourceDuplication(UserDBDAO userDB, UserDBResourceDAO dbResourceDAO) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); if(!sqlClient.queryForList("userDBResourceDuplication", dbResourceDAO).isEmpty()) { //$NON-NLS-1$ throw new TadpoleRuntimeException(Messages.get().TadpoleSystem_UserDBResource_6); } if(!dbResourceDAO.getRestapi_uri().equals("")) { if(!sqlClient.queryForList("userDBResourceAPIDuplication", dbResourceDAO).isEmpty()) { //$NON-NLS-1$ throw new TadpoleRuntimeException(Messages.get().TadpoleSystem_UserDBResource_8); } } } /** * 리소스 업데이트시 중복 오류 검사. * * @param userDB * @param dao */ public static void userDBResourceDupUpdate(UserDBDAO userDB, ResourceManagerDAO dao) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); if(!sqlClient.queryForList("userDBResourceDuplicationUpdate", dao).isEmpty()) { //$NON-NLS-1$ throw new TadpoleRuntimeException(Messages.get().TadpoleSystem_UserDBResource_6); } if(!dao.getRestapi_uri().equals("")) { if(!sqlClient.queryForList("userDBResourceAPIDuplicationUpdate", dao).isEmpty()) { //$NON-NLS-1$ throw new TadpoleRuntimeException(Messages.get().TadpoleSystem_UserDBResource_8); } } } /** * default db resource data * * @param userDB * @param userSeq * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static UserDBResourceDAO getDefaultDBResourceData(UserDBDAO userDB) throws TadpoleSQLManagerException, SQLException { Map<String, Object> queryMap = new HashMap<String, Object>(); queryMap.put("db_seq", userDB.getSeq()); //$NON-NLS-1$ queryMap.put("user_seq", SessionManager.getUserSeq()); //$NON-NLS-1$ SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); UserDBResourceDAO resourcesDao = (UserDBResourceDAO)sqlClient.queryForObject("userDBResourceDefault", queryMap); //$NON-NLS-1$ if(resourcesDao == null) return null; String strResource = getResourceData(resourcesDao); resourcesDao.setDataString(strResource); return resourcesDao; } /** * user_db_resource 삭제. * user_db_resource_data 삭제. * * @param userDBErd * @throws TadpoleSQLManagerException, SQLException */ public static void delete(UserDBResourceDAO userDBErd) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); sqlClient.update("userDBResourceDelete", userDBErd); //$NON-NLS-1$ } /** * userdb의 resource data를 얻습니다. * * @param userDBResource * @throws TadpoleSQLManagerException, SQLException */ public static String getResourceData(UserDBResourceDAO userDBResource) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); List<UserDBResourceDataDAO> datas = (List<UserDBResourceDataDAO>)sqlClient.queryForList("userDBResourceData", userDBResource); //$NON-NLS-1$ StringBuffer retData = new StringBuffer(); for (UserDBResourceDataDAO userDBResourceDataDAO : datas) { retData.append(userDBResourceDataDAO.getDatas()); } return retData.toString(); } /** * resource data history * * @param userDBResource * @return * @throws TadpoleSQLManagerException * @throws SQLException */ public static List<UserDBResourceDataDAO> getResouceDataHistory(ResourceManagerDAO userDBResource) throws TadpoleSQLManagerException, SQLException { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB()); List<UserDBResourceDataDAO> datas = (List<UserDBResourceDataDAO>)sqlClient.queryForList("getResouceDataHistory", userDBResource.getResource_seq()); //$NON-NLS-1$ return datas; } }