diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/ModelPreferences.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/ModelPreferences.java index fa23f2ac5bf515c99b844d71bf4edb9c4af85d26..51b750272bd4184a68b8e30a95c244165a5e74f1 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/ModelPreferences.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/ModelPreferences.java @@ -117,6 +117,8 @@ public final class ModelPreferences public static final String UI_DRIVERS_SOURCES = "ui.drivers.sources"; //$NON-NLS-1$ public static final String UI_MAVEN_REPOSITORIES = "ui.maven.repositories"; //$NON-NLS-1$ + public static final String NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS = "navigator.show.folder.placeholders"; //$NON-NLS-1$ + private static Bundle mainBundle; private static DBPPreferenceStore preferences; @@ -223,5 +225,7 @@ public final class ModelPreferences PrefUtils.setDefaultPreferenceValue(store, UI_DRIVERS_VERSION_UPDATE, false); PrefUtils.setDefaultPreferenceValue(store, UI_DRIVERS_HOME, ""); PrefUtils.setDefaultPreferenceValue(store, UI_DRIVERS_SOURCES, "https://dbeaver.io/files/jdbc/"); + + PrefUtils.setDefaultPreferenceValue(store, ModelPreferences.NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS, true); } } diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProject.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProject.java index 2e7509cf67a4ce3b3beca9507ce29ce3ce5ad697..62b9f86048774b83a2417eba001d1a73a81cff2b 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProject.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNProject.java @@ -20,6 +20,7 @@ import org.eclipse.core.resources.*; import org.eclipse.core.runtime.CoreException; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; +import org.jkiss.dbeaver.ModelPreferences; import org.jkiss.dbeaver.model.DBIcon; import org.jkiss.dbeaver.model.DBPImage; import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry; @@ -28,6 +29,7 @@ import org.jkiss.dbeaver.model.app.DBPResourceHandler; import org.jkiss.dbeaver.model.app.DBPResourceHandlerDescriptor; import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.runtime.VoidProgressMonitor; +import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.utils.ArrayUtils; import java.util.ArrayList; @@ -146,12 +148,15 @@ public class DBNProject extends DBNResource @Override protected IResource[] addImplicitMembers(IResource[] members) { - DBPProjectManager projectManager = getModel().getPlatform().getProjectManager(); - for (DBPResourceHandlerDescriptor rh : projectManager.getAllResourceHandlers()) { - IFolder rhDefaultRoot = projectManager.getResourceDefaultRoot(getProject(), rh, false); - if (rhDefaultRoot != null && !rhDefaultRoot.exists()) { - // Add as explicit member - members = ArrayUtils.add(IResource.class, members, rhDefaultRoot); + if (DBWorkbench.getPlatform().getPreferenceStore().getBoolean(ModelPreferences.NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS)) { + // Add non-existing folders + DBPProjectManager projectManager = getModel().getPlatform().getProjectManager(); + for (DBPResourceHandlerDescriptor rh : projectManager.getAllResourceHandlers()) { + IFolder rhDefaultRoot = projectManager.getResourceDefaultRoot(getProject(), rh, false); + if (rhDefaultRoot != null && !rhDefaultRoot.exists()) { + // Add as explicit member + members = ArrayUtils.add(IResource.class, members, rhDefaultRoot); + } } } return super.addImplicitMembers(members); diff --git a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNResource.java b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNResource.java index 95a91ce6606885d08debc473af209c415d88e60e..0a5736b1405aa286f587539514e83d77225608e7 100644 --- a/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNResource.java +++ b/plugins/org.jkiss.dbeaver.model/src/org/jkiss/dbeaver/model/navigator/DBNResource.java @@ -167,7 +167,7 @@ public class DBNResource extends DBNNode// implements IContributorResourceAdapte return EMPTY_NODES; } else { filterChildren(result); - final DBNNode[] childNodes = result.toArray(new DBNNode[result.size()]); + final DBNNode[] childNodes = result.toArray(new DBNNode[0]); sortChildren(childNodes); return childNodes; } diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorMessages.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorMessages.java index badd3f73509efe2cdde040b81fb835ed65377345..cf3e26a292ea2da3f08e651f2c1e60c27de78a45 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorMessages.java +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorMessages.java @@ -77,6 +77,8 @@ public class UINavigatorMessages extends NLS { public static String pref_page_database_general_label_order_elements_alphabetically; public static String pref_page_database_general_label_folders_first; public static String pref_page_database_general_label_folders_first_tip; + public static String pref_page_database_general_label_show_folder_placeholders; + public static String pref_page_database_general_label_show_folder_placeholders_tip; public static String pref_page_database_general_label_group_database_by_driver; public static String pref_page_database_general_label_long_list_fetch_size; public static String pref_page_database_general_label_long_list_fetch_size_tip; diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorMessages.properties b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorMessages.properties index c49aeccd26060b1e9a48922af18601c31a353428..8612bd48ca32bb295e0be3e77383e661c6cbd20d 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorMessages.properties +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorMessages.properties @@ -53,6 +53,8 @@ pref_page_database_general_label_show_tips_in_tree_tip = Show object tips (e.g. pref_page_database_general_label_order_elements_alphabetically = Order elements alphabetically pref_page_database_general_label_folders_first = Folders first pref_page_database_general_label_folders_first_tip = Show folders before regular elements +pref_page_database_general_label_show_folder_placeholders = Show placeholders for special folders +pref_page_database_general_label_show_folder_placeholders_tip = Show special folders (e.g. Scripts) even if they wasn't created yet pref_page_database_general_label_group_database_by_driver = Group databases by driver pref_page_database_general_label_long_list_fetch_size = Elements fetch size pref_page_database_general_label_long_list_fetch_size_tip = Children elements fetch size for long lists. Rest of elements can be read by double clicking on the last element. diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorPreferencesInitializer.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorPreferencesInitializer.java index 65db2fb32d093949975f2e0ee676b73f0e18065e..cda7aff733287600d4c2f24987f0799f23225f40 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorPreferencesInitializer.java +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/internal/UINavigatorPreferencesInitializer.java @@ -17,12 +17,12 @@ package org.jkiss.dbeaver.ui.internal; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; +import org.jkiss.dbeaver.ModelPreferences; import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.dbeaver.ui.navigator.NavigatorPreferences; import org.jkiss.dbeaver.ui.navigator.database.NavigatorViewBase; import org.jkiss.dbeaver.utils.PrefUtils; -import org.jkiss.dbeaver.utils.RuntimeUtils; /** * Preference initializer. diff --git a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/preferences/PrefPageDatabaseNavigator.java b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/preferences/PrefPageDatabaseNavigator.java index 898a88524fb06bcda1e2c973dddd40858fc41a08..e10b87a0d4c548cfa3a8457faa5513122b28aaac 100644 --- a/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/preferences/PrefPageDatabaseNavigator.java +++ b/plugins/org.jkiss.dbeaver.ui.navigator/src/org/jkiss/dbeaver/ui/preferences/PrefPageDatabaseNavigator.java @@ -24,6 +24,7 @@ import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.IWorkbenchPropertyPage; import org.jkiss.code.Nullable; +import org.jkiss.dbeaver.ModelPreferences; import org.jkiss.dbeaver.ui.internal.UINavigatorMessages; import org.jkiss.dbeaver.model.preferences.DBPPreferenceStore; import org.jkiss.dbeaver.runtime.DBWorkbench; @@ -46,6 +47,7 @@ public class PrefPageDatabaseNavigator extends AbstractPrefPage implements IWork private Button showObjectTipsCheck; private Button sortCaseInsensitiveCheck; private Button sortFoldersFirstCheck; + private Button showResourceFolderPlaceholdersCheck; private Button groupByDriverCheck; private Text longListFetchSizeText; private Combo dsDoubleClickBehavior; @@ -76,7 +78,7 @@ public class PrefPageDatabaseNavigator extends AbstractPrefPage implements IWork sortCaseInsensitiveCheck = UIUtils.createCheckbox(navigatorGroup, UINavigatorMessages.pref_page_database_general_label_order_elements_alphabetically, "", false, 2); sortFoldersFirstCheck = UIUtils.createCheckbox(navigatorGroup, UINavigatorMessages.pref_page_database_general_label_folders_first, UINavigatorMessages.pref_page_database_general_label_folders_first_tip, false, 2); - + showResourceFolderPlaceholdersCheck = UIUtils.createCheckbox(navigatorGroup, UINavigatorMessages.pref_page_database_general_label_show_folder_placeholders, UINavigatorMessages.pref_page_database_general_label_show_folder_placeholders_tip, false, 2); groupByDriverCheck = UIUtils.createCheckbox(navigatorGroup, UINavigatorMessages.pref_page_database_general_label_group_database_by_driver, "", false, 2); groupByDriverCheck.setEnabled(false); @@ -110,6 +112,7 @@ public class PrefPageDatabaseNavigator extends AbstractPrefPage implements IWork showObjectTipsCheck.setSelection(store.getBoolean(NavigatorPreferences.NAVIGATOR_SHOW_OBJECT_TIPS)); sortCaseInsensitiveCheck.setSelection(store.getBoolean(NavigatorPreferences.NAVIGATOR_SORT_ALPHABETICALLY)); sortFoldersFirstCheck.setSelection(store.getBoolean(NavigatorPreferences.NAVIGATOR_SORT_FOLDERS_FIRST)); + showResourceFolderPlaceholdersCheck.setSelection(store.getBoolean(ModelPreferences.NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS)); groupByDriverCheck.setSelection(store.getBoolean(NavigatorPreferences.NAVIGATOR_GROUP_BY_DRIVER)); longListFetchSizeText.setText(store.getString(NavigatorPreferences.NAVIGATOR_LONG_LIST_FETCH_SIZE)); NavigatorViewBase.DoubleClickBehavior objDCB = NavigatorViewBase.DoubleClickBehavior.valueOf(store.getString(NavigatorPreferences.NAVIGATOR_OBJECT_DOUBLE_CLICK)); @@ -127,6 +130,7 @@ public class PrefPageDatabaseNavigator extends AbstractPrefPage implements IWork store.setValue(NavigatorPreferences.NAVIGATOR_SHOW_OBJECT_TIPS, showObjectTipsCheck.getSelection()); store.setValue(NavigatorPreferences.NAVIGATOR_SORT_ALPHABETICALLY, sortCaseInsensitiveCheck.getSelection()); store.setValue(NavigatorPreferences.NAVIGATOR_SORT_FOLDERS_FIRST, sortFoldersFirstCheck.getSelection()); + store.setValue(ModelPreferences.NAVIGATOR_SHOW_FOLDER_PLACEHOLDERS, showResourceFolderPlaceholdersCheck.getSelection()); store.setValue(NavigatorPreferences.NAVIGATOR_GROUP_BY_DRIVER, groupByDriverCheck.getSelection()); store.setValue(NavigatorPreferences.NAVIGATOR_LONG_LIST_FETCH_SIZE, longListFetchSizeText.getText()); NavigatorViewBase.DoubleClickBehavior objDCB = NavigatorViewBase.DoubleClickBehavior.EXPAND;