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