/******************************************************************************* * 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.util; import org.apache.log4j.Logger; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.PlatformUI; import com.hangum.tadpole.engine.query.dao.ManagerListDTO; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.query.dao.system.UserDBResourceDAO; import com.hangum.tadpole.engine.sql.util.SQLUtil; import com.hangum.tadpole.rdb.core.actions.global.SynchronizedEditorHandler; import com.hangum.tadpole.rdb.core.editors.main.MainEditor; import com.hangum.tadpole.rdb.core.viewers.connections.ManagerViewer; import com.hangum.tadpole.rdb.erd.core.editor.TadpoleRDBEditor; /** * editor utils * * @author hangum * */ public class EditorUtils { private static final Logger logger = Logger.getLogger(EditorUtils.class); /** * find SQL editor * @return */ public static IEditorPart findSQLEditor() { // First check active editor IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); if (activeEditor instanceof MainEditor) { return activeEditor; } IEditorReference[] editors = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences(); for (IEditorReference iEditorReference : editors) { // 에디터를 검색한다. if(MainEditor.ID.equals( iEditorReference.getId() )) { return (MainEditor)iEditorReference.getEditor(false); } } return null; } /** * find SQL editor * * @param dao UserDBDAO * @return */ public static IEditorPart findSQLEditor(final UserDBDAO dao) { // First check active editor IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); if (activeEditor instanceof MainEditor) { MainEditor editor = (MainEditor) activeEditor; if(editor.getUserDB().equals(dao) && SQLUtil.isSELECTEditor(editor.getDbAction())) { return activeEditor; } } IEditorReference[] editors = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences(); for (IEditorReference iEditorReference : editors) { // 에디터를 검색한다. if(MainEditor.ID.equals( iEditorReference.getId() )) { MainEditor editor = (MainEditor)iEditorReference.getEditor(false); if(editor.getUserDB().getSeq() == dao.getSeq()) { return editor; } } } return null; } /** * find sql editor * * @param dao UserDBResourceDAO * @return */ public static IEditorReference findSQLEditor(final UserDBResourceDAO dao) { return findEditor(MainEditor.ID, dao); } /** * find erd editor * @param dao * @return */ public static IEditorReference findERDEditor(UserDBResourceDAO dao) { return findEditor(TadpoleRDBEditor.ID, dao); } /** * find editor * * @param id * @param dao * @return */ public static IEditorReference findEditor(String id, UserDBResourceDAO dao) { IEditorReference[] editors = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences(); for (IEditorReference iEditorReference : editors) { if(id.equals( iEditorReference.getId() )) { IEditorPart ier = iEditorReference.getEditor(true); if(ier instanceof MainEditor) { MainEditor editor = (MainEditor)iEditorReference.getEditor(true); if(editor.getdBResource() == null) continue; if(editor.getdBResource().getResource_seq() == dao.getResource_seq()) return iEditorReference; } else if(ier instanceof TadpoleRDBEditor) { TadpoleRDBEditor editor = (TadpoleRDBEditor)iEditorReference.getEditor(true); if(editor.getUserDBErd() == null) continue; if(editor.getUserDBErd().getResource_seq() == dao.getResource_seq()) return iEditorReference; } } } return null; } /** * select connection manager * * @param userDBDAO */ public static void selectConnectionManager(final UserDBDAO userDBDAO) { if(userDBDAO == null) return; if(!SynchronizedEditorHandler.isSynchronizedState()) return; final Display display = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell().getDisplay(); display.asyncExec(new Runnable() { @Override public void run() { ManagerViewer managerView = (ManagerViewer)PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(ManagerViewer.ID); ISelection is = managerView.getManagerTV().getSelection(); if(!is.isEmpty()) { Object element = ((IStructuredSelection)is).getFirstElement(); if(element instanceof ManagerListDTO) { setSelection(managerView, userDBDAO); } else if(element instanceof UserDBDAO) { UserDBDAO currentSelectionUserDB = (UserDBDAO)element; if(currentSelectionUserDB.getSeq() != userDBDAO.getSeq()) { setSelection(managerView, userDBDAO); } } else if(element instanceof UserDBResourceDAO) { UserDBResourceDAO dao = (UserDBResourceDAO)element; if(dao.getDb_seq() != userDBDAO.getSeq()) { setSelection(managerView, userDBDAO); } } } else { setSelection(managerView, userDBDAO); } } private void setSelection(ManagerViewer managerView, final UserDBDAO userDBDAO) { IStructuredSelection iss = new StructuredSelection(userDBDAO); managerView.getManagerTV().setSelection(iss); } }); } }