blob: 0538d48c462e1c8f2c5ba37e09814f37a562adce [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.navigator.internal.filters;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.ui.navigator.internal.NavigatorPlugin;
/**
* <p>
* <strong>EXPERIMENTAL</strong>. This class or interface has been added as part of a work in
* progress. There is a guarantee neither that this API will work nor that it will remain the same.
* Please do not use this API without consulting with the Platform/UI team.
* </p>
*
* @since 3.2
*/
public class ExtensionFilterActivationManager {
public static final String ACTIVATED_FILTERS = "activatedFilters"; //$NON-NLS-1$
/* Associates this ExtensionFilterRegistry with a specific Common Navigator instance */
private final String viewerId;
/* Maintains a list of the active filters for the viewer with the viewerid */
private final Set activatedFilters = new HashSet();
private final ExtensionFilterViewerRegistry parentRegistry;
public ExtensionFilterActivationManager(String theViewerId, ExtensionFilterViewerRegistry theParentRegistry) {
this.viewerId = theViewerId;
this.parentRegistry = theParentRegistry;
}
public void activateFilter(ExtensionFilterDescriptor descriptor, boolean enabled) {
if (enabled)
getActivatedFilters().add(getFilterActivationPreferenceKey(descriptor));
else
getActivatedFilters().remove(getFilterActivationPreferenceKey(descriptor));
}
public boolean isFilterActive(ExtensionFilterDescriptor descriptor) {
return getActivatedFilters().contains(getFilterActivationPreferenceKey(descriptor));
}
public void revertFilterActivations(String navigatorExtensionIdKey) {
try {
Preferences preferences = NavigatorPlugin.getDefault().getPluginPreferences();
String activatedFiltersString = preferences.getString(getExtensionPreferenceKeyForFilterActivations(navigatorExtensionIdKey));
synchronized (activatedFilters) {
if (activatedFiltersString != null && activatedFiltersString.length() > 0) {
String activatedExtensionKey = null;
StringTokenizer tokenizer = new StringTokenizer(activatedFiltersString, ";"); //$NON-NLS-1$
while (tokenizer.hasMoreTokens()) {
activatedExtensionKey = tokenizer.nextToken();
if (activatedExtensionKey.length() > 0)
activatedFilters.add(activatedExtensionKey);
}
} else { // leave the filters off by default
List availableFilters = getParentRegistry().getExtensionFilterDescriptors(navigatorExtensionIdKey);
for (int i = 0; i < availableFilters.size(); i++) {
ExtensionFilterDescriptor filterDescriptor = (ExtensionFilterDescriptor) availableFilters.get(i);
if (filterDescriptor.isEnabledByDefault())
activatedFilters.add(getFilterActivationPreferenceKey(filterDescriptor));
}
}
}
} catch (RuntimeException e) {
e.printStackTrace();
}
}
public void persistFilterActivations() {
Preferences preferences = NavigatorPlugin.getDefault().getPluginPreferences();
synchronized (activatedFilters) {
/* ensure that the preference will be non-empty */
StringBuffer activatedFiltersStringBuffer = null;
Iterator navigatorExtensionIdIterator = getParentRegistry().getNavigatorFilters().keySet().iterator();
String navigatorExtensionId = null;
while (navigatorExtensionIdIterator.hasNext()) {
navigatorExtensionId = (String) navigatorExtensionIdIterator.next();
activatedFiltersStringBuffer = new StringBuffer(";"); //$NON-NLS-1$
List availableFilters = getParentRegistry().getExtensionFilterDescriptors(navigatorExtensionId);
for (int i = 0; i < availableFilters.size(); i++) {
ExtensionFilterDescriptor filterDescriptor = (ExtensionFilterDescriptor) availableFilters.get(i);
if (isFilterActive(filterDescriptor))
activatedFiltersStringBuffer.append(getFilterActivationPreferenceKey(filterDescriptor)).append(";"); //$NON-NLS-1$
}
preferences.setValue(getExtensionPreferenceKeyForFilterActivations(navigatorExtensionId), activatedFiltersStringBuffer.toString());
}
}
NavigatorPlugin.getDefault().savePluginPreferences();
}
/**
*
* @param navigatorExtensionIdKey
* @return
*/
protected String getExtensionPreferenceKeyForFilterActivations(String navigatorExtensionIdKey) {
return getViewerId() + "." + navigatorExtensionIdKey + "." + ACTIVATED_FILTERS; //$NON-NLS-1$ //$NON-NLS-2$
}
/**
* @param string
* @return
*/
private Object getFilterActivationPreferenceKey(ExtensionFilterDescriptor filterDescriptor) {
return getFilterActivationPreferenceKey(filterDescriptor.getNavigatorExtensionId(), filterDescriptor.getId());
}
/**
* @param string
* @return
*/
private Object getFilterActivationPreferenceKey(String navigatorExtensionId, String filterId) {
return getViewerId() + "." + navigatorExtensionId + "." + filterId + ".filterActivated"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
/**
* @return Returns the viewerId.
*/
protected String getViewerId() {
return viewerId;
}
/**
* @return Returns the activatedFilters.
*/
protected Set getActivatedFilters() {
return activatedFilters;
}
/**
* @return Returns the parentRegistry.
*/
protected ExtensionFilterViewerRegistry getParentRegistry() {
return parentRegistry;
}
}