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));
+	}
+
 }