diff --git a/plugins/org.jkiss.dbeaver.ui.app.standalone/META-INF/MANIFEST.MF b/plugins/org.jkiss.dbeaver.ui.app.standalone/META-INF/MANIFEST.MF index fefef0f318346b04695b1ecd7d1c3ea3b112de97..d611e5e14319cbdd0cc2d2a9839d0b1e8934bebd 100644 --- a/plugins/org.jkiss.dbeaver.ui.app.standalone/META-INF/MANIFEST.MF +++ b/plugins/org.jkiss.dbeaver.ui.app.standalone/META-INF/MANIFEST.MF @@ -14,6 +14,7 @@ Export-Package: org.jkiss.dbeaver.ui.app.standalone, Bundle-ClassPath: . Require-Bundle: org.eclipse.osgi, org.eclipse.equinox.app, + org.eclipse.core.filesystem, org.eclipse.core.runtime, org.eclipse.swt, org.eclipse.jface, diff --git a/plugins/org.jkiss.dbeaver.ui.app.standalone/plugin.xml b/plugins/org.jkiss.dbeaver.ui.app.standalone/plugin.xml index c8c633a01e73cc7fe0c376ed2be6c81c424bc230..72a4b88edd6e609b6726fc7d469ca5599d7e05a8 100644 --- a/plugins/org.jkiss.dbeaver.ui.app.standalone/plugin.xml +++ b/plugins/org.jkiss.dbeaver.ui.app.standalone/plugin.xml @@ -166,6 +166,7 @@ + diff --git a/plugins/org.jkiss.dbeaver.ui.app.standalone/src/org/jkiss/dbeaver/ui/app/standalone/ApplicationActionBarAdvisor.java b/plugins/org.jkiss.dbeaver.ui.app.standalone/src/org/jkiss/dbeaver/ui/app/standalone/ApplicationActionBarAdvisor.java index f0a5826ccdc9d1f1ccd2deb24eefd95bbe582ff0..94256afa9fdb487bfc19b2710b6af3de92df7ccc 100644 --- a/plugins/org.jkiss.dbeaver.ui.app.standalone/src/org/jkiss/dbeaver/ui/app/standalone/ApplicationActionBarAdvisor.java +++ b/plugins/org.jkiss.dbeaver.ui.app.standalone/src/org/jkiss/dbeaver/ui/app/standalone/ApplicationActionBarAdvisor.java @@ -92,6 +92,9 @@ public class ApplicationActionBarAdvisor extends ActionBarAdvisor //"org.eclipse.ui.NavigateActionSet", //$NON-NLS-1$ //"org.eclipse.search.searchActionSet" //$NON-NLS-1$ "org.eclipse.mylyn.tasks.ui.navigation", + + // Disable files actionset to redefine OpenLocalFileAction + "org.eclipse.ui.actionSet.openFiles" }; diff --git a/plugins/org.jkiss.dbeaver.ui.app.standalone/src/org/jkiss/dbeaver/ui/app/standalone/actions/OpenLocalFileActionExt.java b/plugins/org.jkiss.dbeaver.ui.app.standalone/src/org/jkiss/dbeaver/ui/app/standalone/actions/OpenLocalFileActionExt.java new file mode 100644 index 0000000000000000000000000000000000000000..f2c84875effbf786bf577fe327d391967b4aa008 --- /dev/null +++ b/plugins/org.jkiss.dbeaver.ui.app.standalone/src/org/jkiss/dbeaver/ui/app/standalone/actions/OpenLocalFileActionExt.java @@ -0,0 +1,103 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2021 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jkiss.dbeaver.ui.app.standalone.actions; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.filesystem.EFS; +import org.eclipse.core.filesystem.IFileInfo; +import org.eclipse.core.filesystem.IFileStore; +import org.eclipse.core.runtime.Path; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.osgi.util.NLS; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.FileDialog; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PartInitException; +import org.eclipse.ui.handlers.HandlerUtil; +import org.eclipse.ui.ide.IDE; +import org.eclipse.ui.internal.ide.IDEWorkbenchMessages; +import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; +import org.jkiss.dbeaver.ui.dialogs.DialogUtils; + +public class OpenLocalFileActionExt extends AbstractHandler { + + private IWorkbenchWindow window; + private String filterPath; + + /** + * Creates a new action for opening a local file. + */ + public OpenLocalFileActionExt() { + setEnabled(true); + this.filterPath = DialogUtils.getCurDialogFolder(); + } + + @Override + public void dispose() { + window = null; + filterPath = null; + } + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + Shell activeShell = HandlerUtil.getActiveShell(event); + FileDialog dialog = new FileDialog(activeShell, SWT.OPEN | SWT.MULTI | SWT.SHEET); + dialog.setText(IDEWorkbenchMessages.OpenLocalFileAction_title); + dialog.setFilterPath(filterPath); + dialog.open(); + String[] names = dialog.getFileNames(); + + if (names != null) { + filterPath = dialog.getFilterPath(); + DialogUtils.setCurDialogFolder(filterPath); + + int numberOfFilesNotFound = 0; + StringBuilder notFound = new StringBuilder(); + for (String name : names) { + IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(filterPath)); + fileStore = fileStore.getChild(name); + IFileInfo fetchInfo = fileStore.fetchInfo(); + if (!fetchInfo.isDirectory() && fetchInfo.exists()) { + IWorkbenchPage page = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); + try { + IDE.openEditorOnFileStore(page, fileStore); + } catch (PartInitException e) { + String msg = NLS.bind(IDEWorkbenchMessages.OpenLocalFileAction_message_errorOnOpen, fileStore.getName()); + IDEWorkbenchPlugin.log(msg, e.getStatus()); + MessageDialog.open(MessageDialog.ERROR, activeShell, IDEWorkbenchMessages.OpenLocalFileAction_title, msg, SWT.SHEET); + } + } else { + if (++numberOfFilesNotFound > 1) + notFound.append('\n'); + notFound.append(fileStore.getName()); + } + } + + if (numberOfFilesNotFound > 0) { + String msgFmt = numberOfFilesNotFound == 1 ? IDEWorkbenchMessages.OpenLocalFileAction_message_fileNotFound : IDEWorkbenchMessages.OpenLocalFileAction_message_filesNotFound; + String msg = NLS.bind(msgFmt, notFound.toString()); + MessageDialog.open(MessageDialog.ERROR, activeShell, IDEWorkbenchMessages.OpenLocalFileAction_title, msg, SWT.SHEET); + } + } + return null; + } + +} \ No newline at end of file