/******************************************************************************* * 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.sql.util.executer; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.MessageDialog; import com.hangum.tadpole.commons.libs.core.message.CommonMessages; import com.hangum.tadpole.engine.Messages; import com.hangum.tadpole.engine.define.DBGroupDefine; import com.hangum.tadpole.engine.manager.TadpoleSQLManager; import com.hangum.tadpole.engine.query.dao.DBInfoDAO; import com.hangum.tadpole.engine.query.dao.mysql.ProcedureFunctionDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.sql.util.executer.procedure.MSSQLProcedureExecuter; import com.hangum.tadpole.engine.sql.util.executer.procedure.MySqlProcedureExecuter; import com.hangum.tadpole.engine.sql.util.executer.procedure.OracleProcedureExecuter; import com.hangum.tadpole.engine.sql.util.executer.procedure.PostgreSQLProcedureExecuter; import com.hangum.tadpole.engine.sql.util.executer.procedure.ProcedureExecutor; import com.ibatis.sqlmap.client.SqlMapClient; /** * RDB procedure executer manager * * @author hangum * */ public class ProcedureExecuterManager { /** * Logger for this class */ private static final Logger logger = Logger .getLogger(ProcedureExecuterManager.class); protected UserDBDAO userDB; protected ProcedureFunctionDAO procedureDAO; public ProcedureExecuterManager(UserDBDAO userDB, ProcedureFunctionDAO procedureDAO) { this.userDB = userDB; this.procedureDAO = procedureDAO; } /** * return procedure executer * * @return * @throws Exception */ public ProcedureExecutor getExecuter() throws Exception { if(DBGroupDefine.ORACLE_GROUP == userDB.getDBGroup()) { return new OracleProcedureExecuter(procedureDAO, userDB); } else if(DBGroupDefine.MSSQL_GROUP == userDB.getDBGroup()) { return new MSSQLProcedureExecuter(procedureDAO, userDB); } else if(DBGroupDefine.MYSQL_GROUP == userDB.getDBGroup()) { return new MySqlProcedureExecuter(procedureDAO, userDB); } else if(DBGroupDefine.POSTGRE_GROUP == userDB.getDBGroup()) { return new PostgreSQLProcedureExecuter(procedureDAO, userDB); } else { throw new Exception(Messages.get().ProcedureExecuterManager_0); } } /** * DB is that it supports? * * @return */ public boolean isSupport() { try { getExecuter(); return true; } catch(Exception e) { return false; } } /** * Is executed procedure? * * @param procedureDAO * @param useDB * @return */ public boolean isExecuted(ProcedureFunctionDAO procedureDAO, UserDBDAO selectUseDB) { if(!isSupport()) { MessageDialog.openWarning(null, CommonMessages.get().Warning, Messages.get().ProcedureExecuterManager_0); return false; } if(!procedureDAO.isValid()) { MessageDialog.openWarning(null, CommonMessages.get().Warning, Messages.get().ProcedureExecuterManager_4); return false; } if(DBGroupDefine.MYSQL_GROUP == userDB.getDBGroup()) { double dbVersion = 0.0; try { SqlMapClient sqlClient = TadpoleSQLManager.getInstance(userDB); DBInfoDAO dbInfo = (DBInfoDAO)sqlClient.queryForObject("findDBInfo"); //$NON-NLS-1$ dbVersion = Double.parseDouble( StringUtils.substring(dbInfo.getProductversion(), 0, 3) ); if (dbVersion < 5.5){ MessageDialog.openInformation(null, CommonMessages.get().Information, Messages.get().ProcedureExecuterManager_6); return false; } } catch (Exception e) { logger.error("find DB info", e); //$NON-NLS-1$ return false; } } try { ProcedureExecutor procedureExecutor = getExecuter(); procedureExecutor.getInParameters(); } catch(Exception e) { MessageDialog.openError(null,CommonMessages.get().Error, e.getMessage()); return false; } return true; } }