/*******************************************************************************
* 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.actions.object;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine;
import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine.OBJECT_TYPE;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.rdb.core.Messages;
import com.hangum.tadpole.rdb.core.dialog.msg.TDBErroDialog;
import com.hangum.tadpole.rdb.core.viewers.object.ExplorerViewer;
/**
* Object view를 컨트롤 하기위한 Abstract action
*
* @author hangum
*
*/
public abstract class AbstractObjectAction extends Action implements ISelectionListener, IWorkbenchAction {
protected IWorkbenchWindow window;
protected UserDBDAO userDB = null;
protected IStructuredSelection selection;
private PublicTadpoleDefine.OBJECT_TYPE actionType;
public AbstractObjectAction() {
}
/**
*
* @param window
* @param actionType view의 작업 타입
* @param userDB
*/
public AbstractObjectAction(IWorkbenchWindow window, PublicTadpoleDefine.OBJECT_TYPE actionType) {
this.window = window;
this.actionType = actionType;
setEnabled(false);//userDB != null);
window.getSelectionService().addSelectionListener(this);
}
/**
* explorer viewe
* @return
*/
protected ExplorerViewer getExplorerView() {
try {
return (ExplorerViewer)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(ExplorerViewer.ID);
} catch(Exception e) {
return null;
}
}
/**
* delete message
*
* @param msgHead
* @param e
*/
protected void exeMessage(String msgHead, Exception e) {
TDBErroDialog errDialog = new TDBErroDialog(null, msgHead + Messages.get().ObjectDeleteAction_25, e.getMessage());
errDialog.open();
}
/**
* table 최신정보로 갱신
*/
protected void refreshTable() {
refreshTable("");
}
/**
* table 최신정보로 갱신
*/
protected void refreshTable(String strTableName) {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshTable(true, strTableName);
}
/**
* Refresh table column
*/
protected void refreshTableColumn() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshTableColumn();
}
/**
* View 최신정보로 갱신
*/
protected void refreshView() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshView(true, "");
}
/**
* Synonym 최신정보로 갱신
*/
protected void refreshSynonym() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshSynonym(true, "");
}
/**
* Sequence 최신정보로 갱신
*/
protected void refreshSequence() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshSequence(true, "");
}
/**
* Database Link 최신정보로 갱신
*/
protected void refreshDBLink() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshDBLink(true, "");
}
/**
* Job 최신정보로 갱신
*/
protected void refreshJobs() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshJobs(true, "");
}
/**
* Java 최신정보로 갱신
*/
protected void refreshJava() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshJava(true, "");
}
/**
* graph 최신 정보로 갱신.
*/
protected void refreshGraph() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshGraph(true, "");
}
/**
* vertex 최신 정보로 갱신.
*/
protected void refreshVertex() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshVertex(true, "");
}
protected void refreshEdge() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshEdge(true, "");
}
/**
* Indexes 최신정보로 갱신
*/
protected void refreshIndexes() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshIndexes(true, "");
}
/**
* Indexes 최신정보로 갱신
*/
protected void refreshConstraints() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshConstraints(true, "");
}
/**
* Procedure 최신정보로 갱신
*/
protected void refreshProcedure() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshProcedure(true, "");
}
/**
* Procedure 최신정보로 갱신
*/
protected void refreshPackage() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshPackage(true, "");
}
/**
* Function 최신정보로 갱신
*/
protected void refreshFunction() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshFunction(true, "");
}
/**
* refresh object
*
* @param actionType
* @param objName
* @param userDB
*/
protected void refreshObject(PublicTadpoleDefine.QUERY_DDL_TYPE actionType, String objName, UserDBDAO userDB) {
ExplorerViewer ev = getExplorerView();
ev.refreshCurrentTab(actionType, objName, userDB);
}
/**
* Trigger 최신정보로 갱신
*/
protected void refreshTrigger() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshTrigger(true, "");
//TODO:무조건 리프레쉬 하는것이 아니라 전체트리거 탭이 선택되어 있을때만 리프레쉬 해야하나?
if(ev != null) ev.refreshAllTrigger(true, "");
}
/**
* mongodb javascript 최신정보로 갱신
*/
protected void refreshJS() {
ExplorerViewer ev = getExplorerView();
if(ev != null) ev.refreshJS(true, "");
}
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if(ExplorerViewer.ID.equals( part.getSite().getId() )) {
this.selection = (IStructuredSelection)selection;
if(userDB != null) {
setEnabled(true);
return;
}
}
setEnabled(false);
}
@Override
public void run() {
if (null != this.selection) {
run(selection, userDB, actionType);
}
}
/**
* Convenience method for Deduplication.<br>
* There is no need to check null. If selection is null, don't execute this
* method.<br>
* <br>
*
* @param selection selection of ExplorerViewer
* @param actionType
*/
abstract public void run(IStructuredSelection selection, UserDBDAO userDB, OBJECT_TYPE actionType);
@Override
public void dispose() {
window.getSelectionService().removePostSelectionListener(this);
}
public IWorkbenchWindow getWindow() {
return window;
}
public void setWindow(IWorkbenchWindow window) {
this.window = window;
}
public UserDBDAO getUserDB() {
return userDB;
}
public void setUserDB(UserDBDAO userDB) {
this.userDB = userDB;
}
}