提交 da016f74 编写于 作者: S Serge Rider

SQL editor command handlers refactoring

上级 5361b2b8
......@@ -111,6 +111,10 @@ command.org.jkiss.dbeaver.ui.editors.sql.run.count.name=Select row count for que
command.org.jkiss.dbeaver.ui.editors.sql.run.count.description=Select row count for query under cursor
command.org.jkiss.dbeaver.ui.editors.sql.run.explain.name=Explain Execution Plan
command.org.jkiss.dbeaver.ui.editors.sql.run.explain.description=Explain execution plan
command.org.jkiss.dbeaver.ui.editors.sql.query.next.name=Next query
command.org.jkiss.dbeaver.ui.editors.sql.query.next.description=Switch to the next query
command.org.jkiss.dbeaver.ui.editors.sql.query.prev.name=Previous query
command.org.jkiss.dbeaver.ui.editors.sql.query.prev.description=Switch to the previous query
command.org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel.name=Toggle results panel
command.org.jkiss.dbeaver.ui.editors.sql.switch.panel.name=Switch active panel
command.org.jkiss.dbeaver.ui.editors.sql.switch.panel.description=Switch active SQL editor panel
......
......@@ -225,6 +225,8 @@
<command id="org.jkiss.dbeaver.ui.editors.sql.run.scriptNew" name="%command.org.jkiss.dbeaver.ui.editors.sql.run.scriptNew.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.run.scriptNew.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.run.explain" name="%command.org.jkiss.dbeaver.ui.editors.sql.run.explain.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.run.explain.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.run.count" name="%command.org.jkiss.dbeaver.ui.editors.sql.run.count.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.run.count.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.query.next" name="%command.org.jkiss.dbeaver.ui.editors.sql.query.next.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.query.next.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.query.prev" name="%command.org.jkiss.dbeaver.ui.editors.sql.query.prev.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.query.prev.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel" name="%command.org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.switch.panel" name="%command.org.jkiss.dbeaver.ui.editors.sql.switch.panel.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.switch.panel.description" categoryId="org.jkiss.dbeaver.core.sql"/>
<command id="org.jkiss.dbeaver.ui.editors.sql.open.file" name="%command.org.jkiss.dbeaver.ui.editors.sql.open.file.name" description="%command.org.jkiss.dbeaver.ui.editors.sql.open.file.description" categoryId="org.jkiss.dbeaver.core.sql"/>
......@@ -830,7 +832,7 @@
</activeWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.core.sql.editor.open" class="org.jkiss.dbeaver.ui.editors.sql.handlers.OpenSQLEditorHandler">
<handler commandId="org.jkiss.dbeaver.core.sql.editor.open" class="org.jkiss.dbeaver.ui.editors.sql.handlers.OpenHandler">
<activeWhen>
<or>
<reference definitionId="org.jkiss.dbeaver.core.ui.navigator.part"/>
......@@ -843,10 +845,10 @@
</with>
</enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.core.sql.editor.recent" class="org.jkiss.dbeaver.ui.editors.sql.handlers.OpenRecentSQLEditorHandler">
<handler commandId="org.jkiss.dbeaver.core.sql.editor.recent" class="org.jkiss.dbeaver.ui.editors.sql.handlers.OpenHandler">
<activeWhen><reference definitionId="org.jkiss.dbeaver.core.ui.navigator.part"/></activeWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.core.sql.editor.create" class="org.jkiss.dbeaver.ui.editors.sql.handlers.OpenNewSQLEditorHandler">
<handler commandId="org.jkiss.dbeaver.core.sql.editor.create" class="org.jkiss.dbeaver.ui.editors.sql.handlers.OpenHandler">
<enabledWhen>
<with variable="activePart">
<test property="org.jkiss.dbeaver.core.global.hasActiveProject"/>
......@@ -901,6 +903,20 @@
</with>
</enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.ui.editors.sql.query.next" class="org.jkiss.dbeaver.ui.editors.sql.handlers.ExecuteHandler">
<enabledWhen>
<with variable="activeEditor">
<instanceof value="org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase"/>
</with>
</enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.ui.editors.sql.query.prev" class="org.jkiss.dbeaver.ui.editors.sql.handlers.ExecuteHandler">
<enabledWhen>
<with variable="activeEditor">
<instanceof value="org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase"/>
</with>
</enabledWhen>
</handler>
<handler commandId="org.jkiss.dbeaver.ui.editors.sql.toggle.result.panel" class="org.jkiss.dbeaver.ui.editors.sql.handlers.ToggleResultsPanelHandler">
<enabledWhen>
<with variable="activeEditor">
......
......@@ -51,6 +51,9 @@ public interface CoreCommands
String CMD_ROLLBACK = "org.jkiss.dbeaver.core.rollback";
String CMD_SQL_EDITOR_OPEN = "org.jkiss.dbeaver.core.sql.editor.open";
String CMD_SQL_EDITOR_NEW = "org.jkiss.dbeaver.core.sql.editor.create";
String CMD_SQL_EDITOR_RECENT = "org.jkiss.dbeaver.core.sql.editor.recent";
String CMD_LINK_EDITOR = "org.jkiss.dbeaver.core.navigator.linkeditor";
String CMD_SYNC_CONNECTION = "org.jkiss.dbeaver.ui.editors.sql.sync.connection";
......
......@@ -66,7 +66,7 @@ public abstract class AbstractDataSourceHandler extends AbstractHandler {
return null;
}
protected DBPDataSourceContainer getDataSourceContainer(ExecutionEvent event, boolean useEditor)
protected static DBPDataSourceContainer getDataSourceContainer(ExecutionEvent event, boolean useEditor)
{
if (useEditor) {
IEditorPart editor = HandlerUtil.getActiveEditor(event);
......
......@@ -63,7 +63,7 @@ import org.jkiss.dbeaver.registry.DataSourceRegistry;
import org.jkiss.dbeaver.runtime.qm.DefaultEventFilter;
import org.jkiss.dbeaver.ui.*;
import org.jkiss.dbeaver.ui.dialogs.sql.BaseSQLDialog;
import org.jkiss.dbeaver.ui.editors.sql.handlers.OpenNewSQLEditorHandler;
import org.jkiss.dbeaver.ui.editors.sql.handlers.OpenHandler;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.utils.CommonUtils;
import org.jkiss.utils.LongKeyMap;
......@@ -786,7 +786,7 @@ public class QueryLogViewer extends Viewer implements QMMetaListener, DBPPrefere
}
}
if (sql.length() > 0) {
OpenNewSQLEditorHandler.openSQLConsole(
OpenHandler.openSQLConsole(
DBeaverUI.getActiveWorkbenchWindow(),
dsContainer,
"QueryManager",
......
......@@ -61,7 +61,7 @@ import org.jkiss.dbeaver.ui.controls.StyledTextContentAdapter;
import org.jkiss.dbeaver.ui.editors.StringEditorInput;
import org.jkiss.dbeaver.ui.editors.SubEditorSite;
import org.jkiss.dbeaver.ui.editors.sql.SQLEditorBase;
import org.jkiss.dbeaver.ui.editors.sql.handlers.OpenNewSQLEditorHandler;
import org.jkiss.dbeaver.ui.editors.sql.handlers.OpenHandler;
import org.jkiss.dbeaver.ui.editors.sql.syntax.SQLCompletionProcessor;
import org.jkiss.dbeaver.ui.editors.sql.syntax.SQLWordPartDetector;
import org.jkiss.dbeaver.utils.GeneralUtils;
......@@ -521,7 +521,7 @@ class ResultSetFilterPanel extends Composite implements IContentProposalProvider
} else {
editorName = "Query";
}
OpenNewSQLEditorHandler.openSQLConsole(
OpenHandler.openSQLConsole(
DBeaverUI.getActiveWorkbenchWindow(),
dataContainer == null ? null : dataContainer.getDataSource().getContainer(),
editorName,
......
......@@ -27,7 +27,7 @@ import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.ui.DBeaverIcons;
import org.jkiss.dbeaver.ui.UIIcon;
import org.jkiss.dbeaver.ui.editors.sql.handlers.OpenNewSQLEditorHandler;
import org.jkiss.dbeaver.ui.editors.sql.handlers.OpenHandler;
/**
* Display Source text (Read Only)
......@@ -39,7 +39,7 @@ public class SQLSourceViewer<T extends DBPScriptObject & DBSObject> extends SQLE
public void run()
{
final DBPDataSource dataSource = getDataSource();
OpenNewSQLEditorHandler.openSQLConsole(
OpenHandler.openSQLConsole(
DBeaverUI.getActiveWorkbenchWindow(),
dataSource == null ? null : dataSource.getContainer(),
"Source",
......
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jkiss.dbeaver.ui.editors.sql.handlers;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.ui.IWorkbenchWindow;
import org.jkiss.code.NotNull;
import org.jkiss.dbeaver.Log;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.navigator.DBNResource;
import org.jkiss.dbeaver.registry.DataSourceRegistry;
import org.jkiss.dbeaver.registry.ProjectRegistry;
import org.jkiss.dbeaver.ui.actions.AbstractDataSourceHandler;
import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen;
import org.jkiss.dbeaver.ui.dialogs.connection.SelectDataSourceDialog;
import org.jkiss.dbeaver.ui.resources.ResourceUtils;
public abstract class BaseSQLEditorHandler extends AbstractDataSourceHandler {
private static final Log log = Log.getLog(BaseSQLEditorHandler.class);
@Nullable
protected DBPDataSourceContainer getCurrentConnection(ExecutionEvent event)
{
DBPDataSourceContainer dataSourceContainer = getDataSourceContainer(event, false);
final ProjectRegistry projectRegistry = DBeaverCore.getInstance().getProjectRegistry();
IProject project = dataSourceContainer != null ? dataSourceContainer.getRegistry().getProject() : projectRegistry.getActiveProject();
if (dataSourceContainer == null) {
final DataSourceRegistry dataSourceRegistry = projectRegistry.getDataSourceRegistry(project);
if (dataSourceRegistry == null) {
return null;
}
if (dataSourceRegistry.getDataSources().size() == 1) {
dataSourceContainer = dataSourceRegistry.getDataSources().get(0);
} else if (!dataSourceRegistry.getDataSources().isEmpty()) {
dataSourceContainer = SelectDataSourceDialog.selectDataSource(
HandlerUtil.getActiveShell(event), project);
}
}
return dataSourceContainer;
}
@Nullable
protected IFolder getCurrentFolder(ExecutionEvent event)
{
final ISelection selection = HandlerUtil.getCurrentSelection(event);
if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
final Object element = ((IStructuredSelection) selection).getFirstElement();
if (element instanceof DBNResource && ((DBNResource)element).getResource() instanceof IFolder) {
return (IFolder) ((DBNResource)element).getResource();
}
}
return null;
}
public static void openRecentScript(@NotNull IWorkbenchWindow workbenchWindow, @Nullable DBPDataSourceContainer dataSourceContainer, @Nullable IFolder scriptFolder) {
IProject project = dataSourceContainer != null ? dataSourceContainer.getRegistry().getProject() : DBeaverCore.getInstance().getProjectRegistry().getActiveProject();
try {
ResourceUtils.ResourceInfo res = ResourceUtils.findRecentScript(project, dataSourceContainer);
if (res != null) {
NavigatorHandlerObjectOpen.openResourceEditor(workbenchWindow, res);
} else {
IFile scriptFile = ResourceUtils.createNewScript(project, scriptFolder, dataSourceContainer);
NavigatorHandlerObjectOpen.openResource(scriptFile, workbenchWindow);
}
}
catch (CoreException e) {
log.error(e);
}
}
}
\ No newline at end of file
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jkiss.dbeaver.ui.editors.sql.handlers;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBPContextProvider;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.IDataSourceContainerProvider;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.navigator.DBNDataSource;
import org.jkiss.dbeaver.model.navigator.DBNLocalFolder;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen;
import org.jkiss.dbeaver.ui.controls.ScriptSelectorPanel;
import org.jkiss.dbeaver.ui.resources.ResourceUtils;
import org.jkiss.dbeaver.ui.resources.ResourceUtils.ResourceInfo;
import java.util.ArrayList;
import java.util.List;
public class OpenSQLEditorHandler extends BaseSQLEditorHandler {
private static final Log log = Log.getLog(OpenSQLEditorHandler.class);
@Nullable
@Override
public Object execute(ExecutionEvent event) throws ExecutionException
{
List<DBPDataSourceContainer> containers = getDataSourceContainers(event);
IWorkbenchWindow workbenchWindow = HandlerUtil.getActiveWorkbenchWindow(event);
IProject project = !containers.isEmpty() ?
containers.get(0).getRegistry().getProject() :
DBeaverCore.getInstance().getProjectRegistry().getActiveProject();
final DBPDataSourceContainer[] containerList = containers.toArray(new DBPDataSourceContainer[containers.size()]);
try {
final IFolder rootFolder = ResourceUtils.getScriptsFolder(project, false);
final List<ResourceInfo> scriptTree = ResourceUtils.findScriptTree(rootFolder, containerList.length == 0 ? null : containerList);
if (scriptTree.isEmpty() && containerList.length == 1) {
// Create new script
final IFile newScript = ResourceUtils.createNewScript(project, rootFolder, containers.isEmpty() ? null : containers.get(0));
NavigatorHandlerObjectOpen.openResource(newScript, workbenchWindow);
} else {
// Show script chooser
ScriptSelectorPanel selector = new ScriptSelectorPanel(workbenchWindow, containerList, rootFolder);
selector.showTree(scriptTree);
}
}
catch (CoreException e) {
log.error(e);
}
return null;
}
protected List<DBPDataSourceContainer> getDataSourceContainers(ExecutionEvent event)
{
List<DBPDataSourceContainer> containers = new ArrayList<>();
ISelection selection = HandlerUtil.getCurrentSelection(event);
if (selection instanceof IStructuredSelection) {
for (Object obj : ((IStructuredSelection) selection).toArray()) {
if (obj instanceof DBNLocalFolder) {
for (DBNDataSource ds : ((DBNLocalFolder) obj).getDataSources()) {
containers.add(ds.getDataSourceContainer());
}
} else {
DBSObject selectedObject = DBUtils.getFromObject(obj);
if (selectedObject != null) {
if (selectedObject instanceof DBPDataSourceContainer) {
containers.add((DBPDataSourceContainer) selectedObject);
} else {
containers.add(selectedObject.getDataSource().getContainer());
}
}
}
}
}
if (containers.isEmpty()) {
IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
DBPDataSourceContainer partContainer = getDataSourceContainers(activePart);
if (partContainer != null) {
containers.add(partContainer);
}
}
return containers;
}
public static DBPDataSourceContainer getDataSourceContainers(IWorkbenchPart activePart)
{
if (activePart instanceof IDataSourceContainerProvider) {
return ((IDataSourceContainerProvider) activePart).getDataSourceContainer();
}
if (activePart instanceof DBPContextProvider) {
DBCExecutionContext context = ((DBPContextProvider) activePart).getExecutionContext();
return context == null ? null : context.getDataSource().getContainer();
}
return null;
}
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jkiss.dbeaver.ui.editors.sql.handlers;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.core.CoreCommands;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBPContextProvider;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.DBUtils;
import org.jkiss.dbeaver.model.IDataSourceContainerProvider;
import org.jkiss.dbeaver.model.exec.DBCExecutionContext;
import org.jkiss.dbeaver.model.navigator.DBNDataSource;
import org.jkiss.dbeaver.model.navigator.DBNLocalFolder;
import org.jkiss.dbeaver.model.navigator.DBNResource;
import org.jkiss.dbeaver.model.struct.DBSObject;
import org.jkiss.dbeaver.registry.DataSourceRegistry;
import org.jkiss.dbeaver.registry.ProjectRegistry;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.actions.AbstractDataSourceHandler;
import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen;
import org.jkiss.dbeaver.ui.controls.ScriptSelectorPanel;
import org.jkiss.dbeaver.ui.dialogs.connection.SelectDataSourceDialog;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
import org.jkiss.dbeaver.ui.editors.StringEditorInput;
import org.jkiss.dbeaver.ui.editors.sql.SQLEditor;
import org.jkiss.dbeaver.ui.resources.ResourceUtils;
import org.jkiss.dbeaver.utils.ContentUtils;
import java.util.ArrayList;
import java.util.List;
public class OpenHandler extends AbstractDataSourceHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
String actionId = event.getCommand().getId();
try {
switch (actionId) {
case CoreCommands.CMD_SQL_EDITOR_OPEN:
openEditor(event);
break;
case CoreCommands.CMD_SQL_EDITOR_NEW:
openNewEditor(event);
break;
case CoreCommands.CMD_SQL_EDITOR_RECENT:
openRecentEditor(event);
break;
}
} catch (CoreException e) {
UIUtils.showErrorDialog(HandlerUtil.getActiveShell(event), "Open editor", "Can execute command '" + actionId + "'", e);
}
return null;
}
private static void openEditor(ExecutionEvent event) throws ExecutionException, CoreException {
List<DBPDataSourceContainer> containers = getDataSourceContainers(event);
IWorkbenchWindow workbenchWindow = HandlerUtil.getActiveWorkbenchWindow(event);
IProject project = !containers.isEmpty() ?
containers.get(0).getRegistry().getProject() :
DBeaverCore.getInstance().getProjectRegistry().getActiveProject();
final DBPDataSourceContainer[] containerList = containers.toArray(new DBPDataSourceContainer[containers.size()]);
final IFolder rootFolder = ResourceUtils.getScriptsFolder(project, false);
final List<ResourceUtils.ResourceInfo> scriptTree = ResourceUtils.findScriptTree(rootFolder, containerList.length == 0 ? null : containerList);
if (scriptTree.isEmpty() && containerList.length == 1) {
// Create new script
final IFile newScript = ResourceUtils.createNewScript(project, rootFolder, containers.isEmpty() ? null : containers.get(0));
NavigatorHandlerObjectOpen.openResource(newScript, workbenchWindow);
} else {
// Show script chooser
ScriptSelectorPanel selector = new ScriptSelectorPanel(workbenchWindow, containerList, rootFolder);
selector.showTree(scriptTree);
}
}
private static boolean openNewEditor(ExecutionEvent event) throws CoreException {
IWorkbenchWindow workbenchWindow = HandlerUtil.getActiveWorkbenchWindow(event);
DBPDataSourceContainer dataSourceContainer = getCurrentConnection(event);
IFolder scriptFolder = getCurrentFolder(event);
IProject project = dataSourceContainer != null ? dataSourceContainer.getRegistry().getProject() : DBeaverCore.getInstance().getProjectRegistry().getActiveProject();
IFile scriptFile = ResourceUtils.createNewScript(project, scriptFolder, dataSourceContainer);
NavigatorHandlerObjectOpen.openResource(scriptFile, workbenchWindow);
return true;
}
private static void openRecentEditor(ExecutionEvent event) throws ExecutionException, CoreException {
DBPDataSourceContainer dataSourceContainer = getCurrentConnection(event);
if (dataSourceContainer == null) {
return;
}
openRecentScript(HandlerUtil.getActiveWorkbenchWindow(event), dataSourceContainer, null);
}
@Nullable
private static DBPDataSourceContainer getCurrentConnection(ExecutionEvent event)
{
DBPDataSourceContainer dataSourceContainer = getDataSourceContainer(event, false);
final ProjectRegistry projectRegistry = DBeaverCore.getInstance().getProjectRegistry();
IProject project = dataSourceContainer != null ? dataSourceContainer.getRegistry().getProject() : projectRegistry.getActiveProject();
if (dataSourceContainer == null) {
final DataSourceRegistry dataSourceRegistry = projectRegistry.getDataSourceRegistry(project);
if (dataSourceRegistry == null) {
return null;
}
if (dataSourceRegistry.getDataSources().size() == 1) {
dataSourceContainer = dataSourceRegistry.getDataSources().get(0);
} else if (!dataSourceRegistry.getDataSources().isEmpty()) {
dataSourceContainer = SelectDataSourceDialog.selectDataSource(
HandlerUtil.getActiveShell(event), project);
}
}
return dataSourceContainer;
}
@Nullable
private static IFolder getCurrentFolder(ExecutionEvent event)
{
final ISelection selection = HandlerUtil.getCurrentSelection(event);
if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
final Object element = ((IStructuredSelection) selection).getFirstElement();
if (element instanceof DBNResource && ((DBNResource)element).getResource() instanceof IFolder) {
return (IFolder) ((DBNResource)element).getResource();
}
}
return null;
}
private static List<DBPDataSourceContainer> getDataSourceContainers(ExecutionEvent event)
{
List<DBPDataSourceContainer> containers = new ArrayList<>();
ISelection selection = HandlerUtil.getCurrentSelection(event);
if (selection instanceof IStructuredSelection) {
for (Object obj : ((IStructuredSelection) selection).toArray()) {
if (obj instanceof DBNLocalFolder) {
for (DBNDataSource ds : ((DBNLocalFolder) obj).getDataSources()) {
containers.add(ds.getDataSourceContainer());
}
} else {
DBSObject selectedObject = DBUtils.getFromObject(obj);
if (selectedObject != null) {
if (selectedObject instanceof DBPDataSourceContainer) {
containers.add((DBPDataSourceContainer) selectedObject);
} else {
containers.add(selectedObject.getDataSource().getContainer());
}
}
}
}
}
if (containers.isEmpty()) {
IWorkbenchPart activePart = HandlerUtil.getActivePart(event);
DBPDataSourceContainer partContainer = getDataSourceContainers(activePart);
if (partContainer != null) {
containers.add(partContainer);
}
}
return containers;
}
private static DBPDataSourceContainer getDataSourceContainers(IWorkbenchPart activePart)
{
if (activePart instanceof IDataSourceContainerProvider) {
return ((IDataSourceContainerProvider) activePart).getDataSourceContainer();
}
if (activePart instanceof DBPContextProvider) {
DBCExecutionContext context = ((DBPContextProvider) activePart).getExecutionContext();
return context == null ? null : context.getDataSource().getContainer();
}
return null;
}
public static void openRecentScript(@NotNull IWorkbenchWindow workbenchWindow, @Nullable DBPDataSourceContainer dataSourceContainer, @Nullable IFolder scriptFolder) throws CoreException {
IProject project = dataSourceContainer != null ? dataSourceContainer.getRegistry().getProject() : DBeaverCore.getInstance().getProjectRegistry().getActiveProject();
ResourceUtils.ResourceInfo res = ResourceUtils.findRecentScript(project, dataSourceContainer);
if (res != null) {
NavigatorHandlerObjectOpen.openResourceEditor(workbenchWindow, res);
} else {
IFile scriptFile = ResourceUtils.createNewScript(project, scriptFolder, dataSourceContainer);
NavigatorHandlerObjectOpen.openResource(scriptFile, workbenchWindow);
}
}
public static void openSQLConsole(
IWorkbenchWindow workbenchWindow,
DBPDataSourceContainer dataSourceContainer,
String name,
String sqlText)
{
StringEditorInput sqlInput = new StringEditorInput(name, sqlText, false, ContentUtils.DEFAULT_CHARSET);
EditorUtils.setInputDataSource(sqlInput, dataSourceContainer, false);
openSQLEditor(workbenchWindow, sqlInput);
}
public static void openSQLEditor(
IWorkbenchWindow workbenchWindow,
IEditorInput sqlInput)
{
try {
workbenchWindow.getActivePage().openEditor(
sqlInput,
SQLEditor.class.getName());
} catch (PartInitException e) {
UIUtils.showErrorDialog(workbenchWindow.getShell(), "Can't open editor", null, e);
}
}
}
\ No newline at end of file
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jkiss.dbeaver.ui.editors.sql.handlers;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.core.DBeaverCore;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen;
import org.jkiss.dbeaver.ui.editors.EditorUtils;
import org.jkiss.dbeaver.ui.editors.StringEditorInput;
import org.jkiss.dbeaver.ui.editors.sql.SQLEditor;
import org.jkiss.dbeaver.ui.resources.ResourceUtils;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.utils.CommonUtils;
public class OpenNewSQLEditorHandler extends BaseSQLEditorHandler {
private static final Log log = Log.getLog(OpenNewSQLEditorHandler.class);
@Override
public Object execute(ExecutionEvent event) throws ExecutionException
{
IWorkbenchWindow workbenchWindow = HandlerUtil.getActiveWorkbenchWindow(event);
DBPDataSourceContainer dataSourceContainer = getCurrentConnection(event);
IFolder scriptFolder = getCurrentFolder(event);
openNewSQLEditor(workbenchWindow, dataSourceContainer, scriptFolder, null);
return null;
}
private boolean openNewSQLEditor(
IWorkbenchWindow workbenchWindow,
DBPDataSourceContainer dataSourceContainer,
IFolder scriptFolder,
String sqlText)
{
IProject project = dataSourceContainer != null ? dataSourceContainer.getRegistry().getProject() : DBeaverCore.getInstance().getProjectRegistry().getActiveProject();
IFile scriptFile;
try {
scriptFile = ResourceUtils.createNewScript(project, scriptFolder, dataSourceContainer);
}
catch (CoreException e) {
log.error(e);
return false;
}
if (!CommonUtils.isEmpty(sqlText)) {
//scriptFile.setContents();
}
NavigatorHandlerObjectOpen.openResource(scriptFile, workbenchWindow);
return true;
}
public static void openSQLConsole(
IWorkbenchWindow workbenchWindow,
DBPDataSourceContainer dataSourceContainer,
String name,
String sqlText)
{
StringEditorInput sqlInput = new StringEditorInput(name, sqlText, false, ContentUtils.DEFAULT_CHARSET);
EditorUtils.setInputDataSource(sqlInput, dataSourceContainer, false);
openSQLEditor(workbenchWindow, sqlInput);
}
public static void openSQLEditor(
IWorkbenchWindow workbenchWindow,
IEditorInput sqlInput)
{
try {
workbenchWindow.getActivePage().openEditor(
sqlInput,
SQLEditor.class.getName());
} catch (PartInitException e) {
UIUtils.showErrorDialog(workbenchWindow.getShell(), "Can't open editor", null, e);
}
}
}
\ No newline at end of file
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2016 Serge Rieder (serge@jkiss.org)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License (version 2)
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jkiss.dbeaver.ui.editors.sql.handlers;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
public class OpenRecentSQLEditorHandler extends BaseSQLEditorHandler {
@Nullable
@Override
public Object execute(ExecutionEvent event) throws ExecutionException
{
DBPDataSourceContainer dataSourceContainer = getCurrentConnection(event);
if (dataSourceContainer == null) {
return null;
}
IWorkbenchWindow workbenchWindow = HandlerUtil.getActiveWorkbenchWindow(event);
openRecentScript(workbenchWindow, dataSourceContainer, null);
return null;
}
}
\ No newline at end of file
......@@ -18,6 +18,7 @@
package org.jkiss.dbeaver.ui.navigator.database;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
......@@ -31,12 +32,12 @@ import org.jkiss.dbeaver.core.DBeaverUI;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.IDataSourceContainerProvider;
import org.jkiss.dbeaver.model.IDataSourceContainerProviderEx;
import org.jkiss.dbeaver.model.navigator.*;
import org.jkiss.dbeaver.ui.UIUtils;
import org.jkiss.dbeaver.ui.actions.datasource.DataSourceHandler;
import org.jkiss.dbeaver.ui.actions.navigator.NavigatorHandlerObjectOpen;
import org.jkiss.dbeaver.ui.controls.PropertyPageStandard;
import org.jkiss.dbeaver.ui.editors.sql.handlers.OpenSQLEditorHandler;
import org.jkiss.dbeaver.ui.editors.sql.handlers.OpenHandler;
import org.jkiss.dbeaver.ui.navigator.INavigatorModelView;
import org.jkiss.dbeaver.ui.navigator.NavigatorUtils;
import org.jkiss.utils.CommonUtils;
......@@ -94,7 +95,7 @@ public abstract class NavigatorViewBase extends ViewPart implements INavigatorMo
protected DatabaseNavigatorTree createNavigatorTree(Composite parent, DBNNode rootNode)
{
// Create tree
DatabaseNavigatorTree navigatorTree = new DatabaseNavigatorTree(parent, rootNode, getTreeStyle());
final DatabaseNavigatorTree navigatorTree = new DatabaseNavigatorTree(parent, rootNode, getTreeStyle());
navigatorTree.getViewer().addSelectionChangedListener(
new ISelectionChangedListener()
......@@ -145,7 +146,11 @@ public abstract class NavigatorViewBase extends ViewPart implements INavigatorMo
}
break;
case SQL_EDITOR:
OpenSQLEditorHandler.openRecentScript(getSite().getWorkbenchWindow(), dataSource, null);
try {
OpenHandler.openRecentScript(getSite().getWorkbenchWindow(), dataSource, null);
} catch (CoreException e) {
UIUtils.showErrorDialog(navigatorTree.getShell(), "Open SQL editor", "Can't open SQL editor", e);
}
break;
}
} else if (node instanceof DBNDatabaseNode && ((DBNDatabaseNode)node).allowsOpen()) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册