/*******************************************************************************
* Copyright (c) 2008, 2009 Freescale Semiconductor 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:
* Serge Beauchamp (Freescale Semiconductor) - initial API and implementation
* IBM Corporation - ongoing development
*******************************************************************************/
package org.eclipse.core.internal.resources;
import java.util.HashMap;
import org.eclipse.core.resources.IFilterMatcherDescriptor;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.filtermatchers.AbstractFileInfoMatcher;
import org.eclipse.core.runtime.*;
/**
* This class collects all the registered {@link AbstractFileInfoMatcher} instances along with their
* properties.
*/
class FilterTypeManager implements IManager {
private static final String FILTER_ELEMENT= "filterMatcher"; //$NON-NLS-1$
private HashMap/*<String, FilterDescriptor>*/factories= new HashMap();
public FilterTypeManager() {
IExtensionPoint point= RegistryFactory.getRegistry().getExtensionPoint(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PT_FILTER_MATCHERS);
if (point != null) {
IExtension[] ext= point.getExtensions();
// initial population
for (int i= 0; i < ext.length; i++) {
IExtension extension= ext[i];
processExtension(extension);
}
RegistryFactory.getRegistry().addListener(new IRegistryEventListener() {
public void added(IExtension[] extensions) {
for (int i= 0; i < extensions.length; i++)
processExtension(extensions[i]);
}
public void added(IExtensionPoint[] extensionPoints) {
// nothing to do
}
public void removed(IExtension[] extensions) {
for (int i= 0; i < extensions.length; i++)
processRemovedExtension(extensions[i]);
}
public void removed(IExtensionPoint[] extensionPoints) {
// nothing to do
}
});
}
}
public IFilterMatcherDescriptor getFilterDescriptor(String id) {
return (IFilterMatcherDescriptor)factories.get(id);
}
public IFilterMatcherDescriptor[] getFilterDescriptors() {
return (IFilterMatcherDescriptor[])factories.values().toArray(new IFilterMatcherDescriptor[0]);
}
protected void processExtension(IExtension extension) {
IConfigurationElement[] elements= extension.getConfigurationElements();
for (int i= 0; i < elements.length; i++) {
IConfigurationElement element= elements[i];
if (element.getName().equalsIgnoreCase(FILTER_ELEMENT)) {
try {
IFilterMatcherDescriptor desc= new FilterDescriptor(element);
factories.put(desc.getId(), desc);
} catch (CoreException e) {
e.printStackTrace();
}
}
}
}
protected void processRemovedExtension(IExtension extension) {
IConfigurationElement[] elements= extension.getConfigurationElements();
for (int i= 0; i < elements.length; i++) {
IConfigurationElement element= elements[i];
if (element.getName().equalsIgnoreCase(FILTER_ELEMENT)) {
try {
IFilterMatcherDescriptor desc= new FilterDescriptor(element, false);
factories.remove(desc.getId());
} catch (CoreException e) {
e.printStackTrace();
}
}
}
}
public void shutdown(IProgressMonitor monitor) {
//nothing to do
}
public void startup(IProgressMonitor monitor) {
//nothing to do
}
}