Bug 447530 - [CommonNavigator] activebydefault nonvisible commonfilter
will no longer be activated once persistFilterActivationState() is
called
When restoring the filters, add "visibleInUi=false;activeByDefault=true"
filters to the active filter. After that handle all "visibleInUi=true"
filters by checking the preferences or add all of them in case the
preference key does not exist.
Change-Id: I1b892607809dd1e2e9ab21818f55b9938e15d771
Signed-off-by: Martin SCHREIBER <m.schreiber@bachmann.info>
diff --git a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorFilterService.java b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorFilterService.java
index c54b2e0..908c4c6 100644
--- a/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorFilterService.java
+++ b/bundles/org.eclipse.ui.navigator/src/org/eclipse/ui/internal/navigator/NavigatorFilterService.java
@@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Bachmann electronic GmbH - Bug 447530 - persist the id of active non visible filters
******************************************************************************/
package org.eclipse.ui.internal.navigator;
@@ -67,9 +68,22 @@
SafeRunner.run(new NavigatorSafeRunnable() {
@Override
public void run() throws Exception {
+
+ CommonFilterDescriptor[] visibleFilterDescriptors = CommonFilterDescriptorManager.getInstance()
+ .findVisibleFilters(contentService);
+
+ // add the non visible in ui active by default filters
+ for (CommonFilterDescriptor filterDescription : visibleFilterDescriptors) {
+ if (!filterDescription.isVisibleInUi() && filterDescription.isActiveByDefault()) {
+ activeFilters.add(filterDescription.getId());
+ }
+
+ }
+
IEclipsePreferences prefs = NavigatorContentService.getPreferencesRoot();
if (prefs.get(getFilterActivationPreferenceKey(), null) != null) {
+ // add all visible ui filters that had been activated by the user
String activatedFiltersPreferenceValue = prefs.get(
getFilterActivationPreferenceKey(), null);
String[] activeFilterIds = activatedFiltersPreferenceValue.split(DELIM);
@@ -81,10 +95,10 @@
}
} else {
- ICommonFilterDescriptor[] visibleFilterDescriptors = getVisibleFilterDescriptors();
- for (ICommonFilterDescriptor visibleFilterDescriptor : visibleFilterDescriptors) {
- if (visibleFilterDescriptor.isActiveByDefault()) {
- activeFilters.add(visibleFilterDescriptor.getId());
+ // add all visible in ui filters
+ for (CommonFilterDescriptor filterDescription : visibleFilterDescriptors) {
+ if (filterDescription.isVisibleInUi() && filterDescription.isActiveByDefault()) {
+ activeFilters.add(filterDescription.getId());
}
}
}
diff --git a/tests/org.eclipse.ui.tests.navigator/plugin.xml b/tests/org.eclipse.ui.tests.navigator/plugin.xml
index 5772775..311fedb 100644
--- a/tests/org.eclipse.ui.tests.navigator/plugin.xml
+++ b/tests/org.eclipse.ui.tests.navigator/plugin.xml
@@ -1459,6 +1459,19 @@
<adapt type="org.eclipse.core.resources.IResource" />
</enablement>
</commonWizard>
+ <commonFilter
+ activeByDefault="true"
+ id="org.eclipse.ui.tests.navigator.filters.nonvisibleactive"
+ name="Non visible active filter"
+ visibleInUI="false">
+ <filterExpression>
+ <not>
+ <instanceof
+ value="java.lang.Object">
+ </instanceof>
+ </not>
+ </filterExpression>
+ </commonFilter>
</extension>
diff --git a/tests/org.eclipse.ui.tests.navigator/src/org/eclipse/ui/tests/navigator/FilterTest.java b/tests/org.eclipse.ui.tests.navigator/src/org/eclipse/ui/tests/navigator/FilterTest.java
index a14d1ce..7339680 100644
--- a/tests/org.eclipse.ui.tests.navigator/src/org/eclipse/ui/tests/navigator/FilterTest.java
+++ b/tests/org.eclipse.ui.tests.navigator/src/org/eclipse/ui/tests/navigator/FilterTest.java
@@ -8,17 +8,22 @@
* Contributors:
* Oakland Software Incorporated - initial API and implementation
* Thibault Le Ouay <thibaultleouay@gmail.com> - Bug 457870
+ * Bachmann electronic GmbH - Bug 447530 - adding a test for active non visible filters
*******************************************************************************/
package org.eclipse.ui.tests.navigator;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.internal.navigator.NavigatorContentService;
+import org.eclipse.ui.internal.navigator.NavigatorFilterService;
import org.junit.Test;
public class FilterTest extends NavigatorTestBase {
+ private static final String TEST_FILTER_ACTIVE_NOT_VISIBLE = "org.eclipse.ui.tests.navigator.filters.nonvisibleactive";
+
public FilterTest() {
_navigatorInstanceId = TEST_VIEWER_FILTER;
}
@@ -68,4 +73,15 @@
}
+ // bug 447530, when a filter is active by default but not visible in the ui,
+ // it must still be active after
+ // restoring the active filters from the preferences.
+ @Test
+ public void testNonVisibleFilters() {
+ _contentService.getFilterService().persistFilterActivationState();
+ // "restore" by creating a new instance of the serivce
+ NavigatorFilterService filterService = new NavigatorFilterService((NavigatorContentService) _contentService);
+ assertTrue(filterService.isActive(TEST_FILTER_ACTIVE_NOT_VISIBLE));
+ }
+
}