blob: ce751d14a7d17c8107e22f8770d5cb08c3cb2db5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006 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.services;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.eclipse.ui.ISourceProvider;
import org.eclipse.ui.services.IDisposable;
/**
* <p>
* A service holding all of the registered source providers.
* </p>
* <p>
* This class is not intended for use outside of the
* <code>org.eclipse.ui.workbench</code> plug-in.
* </p>
*
* @since 3.2
*/
public final class SourceProviderService implements ISourceProviderService,
IDisposable {
/**
* The source providers registered with this service. This value is never
* <code>null</code>. This is a map of the source name ({@link String})
* to the source provider ({@link ISourceProvider}).
*/
private final Map sourceProvidersByName = new HashMap();
/**
* All of the source providers registered with this service. This value is
* never <code>null</code>.
*/
private final Set sourceProviders = new HashSet();
public final void dispose() {
final Iterator sourceProviderItr = sourceProviders.iterator();
while (sourceProviderItr.hasNext()) {
final ISourceProvider sourceProvider = (ISourceProvider) sourceProviderItr
.next();
sourceProvider.dispose();
}
sourceProviders.clear();
sourceProvidersByName.clear();
}
public final ISourceProvider getSourceProvider(final String sourceName) {
return (ISourceProvider) sourceProvidersByName.get(sourceName);
}
public final ISourceProvider[] getSourceProviders() {
return (ISourceProvider[]) sourceProviders
.toArray(new ISourceProvider[sourceProviders.size()]);
}
public final void registerProvider(final ISourceProvider sourceProvider) {
if (sourceProvider == null) {
throw new NullPointerException("The source provider cannot be null"); //$NON-NLS-1$
}
final String[] sourceNames = sourceProvider.getProvidedSourceNames();
for (int i = 0; i < sourceNames.length; i++) {
final String sourceName = sourceNames[i];
sourceProvidersByName.put(sourceName, sourceProvider);
}
sourceProviders.add(sourceProvider);
}
}