/******************************************************************************* * 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.rdb.core.editors.main.function; import java.util.HashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.swt.SWT; import org.eclipse.swt.browser.Browser; import org.eclipse.ui.PlatformUI; import com.hangum.tadpole.ace.editor.core.dialogs.help.RDBShortcutHelpDialog; import com.hangum.tadpole.ace.editor.core.texteditor.function.EditorFunctionService; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.sql.util.SQLUtil; import com.hangum.tadpole.engine.utils.EditorDefine; import com.hangum.tadpole.engine.utils.EditorDefine.EXECUTE_TYPE; import com.hangum.tadpole.engine.utils.RequestQuery; import com.hangum.tadpole.rdb.core.editors.main.MainEditor; import com.hangum.tadpole.rdb.core.util.DialogUtil; import com.hangum.tadpole.sql.format.SQLFormater; /** * query editor browser function * * @author hangum * */ public class MainEditorBrowserFunctionService extends EditorFunctionService { private static final Logger logger = Logger.getLogger(MainEditorBrowserFunctionService.class); protected UserDBDAO userDB; protected MainEditor editor; public MainEditorBrowserFunctionService(UserDBDAO userDB, Browser browser, String name, MainEditor editor) { super(browser, name, editor); this.userDB = userDB; this.editor = editor; } @Override protected Object doSave(Object[] arguments) { boolean result = false; try { String newContents = (String) arguments[1]; result = editor.calledDoSave(newContents); } catch(Exception e) { logger.error("do not save", e); } return result; } @Override protected Object doAutoSave(Object[] arguments) { boolean result = false; try { String newContents = (String) arguments[1]; result = editor.calledDoAutoSave(newContents); } catch(Exception e) { logger.error("do not save", e); } return result; } @Override protected void doDirtyChanged(Object[] arguments) { editor.setDirty(true); } @Override protected String getContentAssist(Object[] arguments) { String strSQL = (String) arguments[1]; int intPosition = ((Double)arguments[2]).intValue(); return editor.getContentAssist(strSQL, intPosition); } @Override protected void doExecuteQuery(Object[] arguments) { String strSQL = (String) arguments[1]; EditorDefine.EXECUTE_TYPE exeType = EXECUTE_TYPE.NONE; if((Boolean) arguments[2]) exeType = EXECUTE_TYPE.BLOCK; RequestQuery rq = new RequestQuery(userDB, strSQL, editor.getDbAction(), EditorDefine.QUERY_MODE.QUERY, exeType, editor.isAutoCommit()); editor.executeCommand(rq); } /** * execute plan */ @Override protected void doExecutePlan(Object[] arguments) { String strSQL = (String) arguments[1]; RequestQuery rq = new RequestQuery(userDB, strSQL, editor.getDbAction(), EditorDefine.QUERY_MODE.EXPLAIN_PLAN, EditorDefine.EXECUTE_TYPE.NONE, editor.isAutoCommit()); editor.executeCommand(rq); } /** * SQL formatting */ @Override protected String doExecuteFormat(Object[] arguments) { String newContents = (String) arguments[1]; try { return SQLFormater.format(newContents ); } catch (Exception e) { logger.error("sql format", e); } return newContents; } /** * help popup */ @Override protected void helpPopup() { RDBShortcutHelpDialog dialog = new RDBShortcutHelpDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.NONE); dialog.open(); editor.setFocus(); } /* (non-Javadoc) * @see com.hangum.tadpole.ace.editor.core.texteditor.function.EditorFunctionService#f4DMLOpen(java.lang.Object[]) */ @Override protected void f4DMLOpen(Object[] arguments) { String strObject = parseLastObject((String) arguments[1]); strObject = SQLUtil.removeIdentifierQuoteString(userDB, strObject); if(logger.isDebugEnabled()) logger.debug("select editor content is [" + strObject + "]"); /* TableDAO tableDAO = new TableDAO(); tableDAO.setSchema_name(userDB.getSchema()); if(StringUtils.contains(strObject, ".")) { tableDAO.setSchema_name(StringUtils.substringBefore(strObject, ".")); tableDAO.setSysName(StringUtils.substringAfter(strObject, ".")); tableDAO.setTab_name(StringUtils.substringAfter(strObject, ".")); tableDAO.setTable_name(StringUtils.substringAfter(strObject, ".")); }else{ tableDAO.setSysName(strObject); tableDAO.setTab_name(strObject); tableDAO.setTable_name(strObject); } */ Map<String,String> paramMap = new HashMap<String, String>(); if(StringUtils.contains(strObject, ".")) { paramMap.put("OBJECT_OWNER", StringUtils.substringBefore(strObject, ".")); paramMap.put("OBJECT_NAME", StringUtils.substringAfter(strObject, ".")); }else{ //paramMap.put("OBJECT_OWNER", userDB.getSchema()); paramMap.put("OBJECT_NAME", strObject); } paramMap.put("_SCHEMA", getUserDB().getSchema()); DialogUtil.popupObjectInformationDialog(editor.getUserDB(), paramMap); } /* (non-Javadoc) * @see com.hangum.tadpole.ace.editor.core.texteditor.function.EditorFunctionService#generateSelect(java.lang.Object[]) */ @Override protected void generateSelect(Object[] arguments) { String strObject = parseLastObject((String) arguments[1]); String strSQL = "select * from " + strObject; EditorDefine.EXECUTE_TYPE exeType = EXECUTE_TYPE.NONE; exeType = EXECUTE_TYPE.BLOCK; RequestQuery rq = new RequestQuery(userDB, strSQL, editor.getDbAction(), EditorDefine.QUERY_MODE.QUERY, exeType, editor.isAutoCommit()); editor.executeCommand(rq); } /** * parse last object */ private String parseLastObject(String obj) { String strObject = StringUtils.remove((String)obj, ","); if(StringUtils.contains(strObject, '(')) { strObject = StringUtils.substringBefore(strObject, "("); } if(StringUtils.contains(strObject, ')')) { strObject = StringUtils.substringAfter(strObject, ")"); } return strObject; } public UserDBDAO getUserDB() { return userDB; } }