/*******************************************************************************
* Copyright (c) 2006, 2015 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.internal.navigator.filters;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.ui.internal.navigator.extensions.NavigatorContentRegistryReader;
import org.eclipse.ui.navigator.INavigatorContentService;
/**
* @since 3.2
*
*/
public class CommonFilterDescriptorManager {
private static final CommonFilterDescriptorManager INSTANCE = new CommonFilterDescriptorManager();
private static final CommonFilterDescriptor[] NO_FILTER_DESCRIPTORS = new CommonFilterDescriptor[0];
// K(ID) V(CommonFilterDescriptor)
private final Map<String, CommonFilterDescriptor> filters = new HashMap<String, CommonFilterDescriptor>();
/**
*
* @return An initialized singleton instance of the
* CommonFilterDescriptorManager.
*/
public static CommonFilterDescriptorManager getInstance() {
return INSTANCE;
}
private CommonFilterDescriptorManager() {
new CommonFilterDescriptorRegistry().readRegistry();
}
/**
*
*/
public static final boolean FOR_UI = true;
/**
*
* @param contentService
* A content service to filter the visible filters.
* @return The set of filters that are 'visible' to the given viewer
* descriptor.
*/
public CommonFilterDescriptor[] findVisibleFilters(INavigatorContentService contentService) {
return findVisibleFilters(contentService, !FOR_UI);
}
/**
*
* @param contentService
* A content service to filter the visible filters.
* @param forUI true if only filters visible to the UI are desired
* @return The set of filters that are 'visible' to the given viewer
* descriptor.
*/
public CommonFilterDescriptor[] findVisibleFilters(INavigatorContentService contentService, boolean forUI) {
List<CommonFilterDescriptor> visibleFilters = new ArrayList<CommonFilterDescriptor>();
for (CommonFilterDescriptor descriptor : filters.values()) {
if (forUI && !descriptor.isVisibleInUi())
continue;
if (contentService.isVisible(descriptor.getId())) {
visibleFilters.add(descriptor);
}
}
if (visibleFilters.size() == 0) {
return NO_FILTER_DESCRIPTORS;
}
return visibleFilters
.toArray(new CommonFilterDescriptor[visibleFilters.size()]);
}
/**
* @param id
* @return the CommonFilterDescriptor, if found
*/
public CommonFilterDescriptor getFilterById(String id) {
return filters.get(id);
}
/**
* @param aDescriptor
* A non-null descriptor
*/
private void addCommonFilter(CommonFilterDescriptor aDescriptor) {
filters.put(aDescriptor.getId(), aDescriptor);
}
private class CommonFilterDescriptorRegistry extends
NavigatorContentRegistryReader {
@Override
protected boolean readElement(IConfigurationElement element) {
if (TAG_COMMON_FILTER.equals(element.getName())) {
addCommonFilter(new CommonFilterDescriptor(element));
return true;
}
return super.readElement(element);
}
}
}