blob: 9d8830554dd25914b7c56cec8c71ae465fe351e6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2011 Obeo.
* 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.docs.intent.client.synchronizer.api.contribution;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.emf.common.util.URI;
import org.eclipse.mylyn.docs.intent.client.synchronizer.internal.contribution.ISynchronizerExtensionDescriptor;
/**
* Registry containing all Lock Strategy extensions that have been parsed from the
* {@link org.eclipse.mylyn.docs.intent.client.synchronizer.internal.contribution.ISynchronizerExtensionRegistryListener
* ; #SYNCHRONIZER_EXTENSION_POINT} extension point.
*
* @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>
*/
public final class ISynchronizerExtensionRegistry {
/**
* The registered {@link ISaveDialogExtension}s.
*/
private static final Map<ISynchronizerExtension, Collection<ISynchronizerExtensionDescriptor>> EXTENSIONS = Maps
.newHashMap();
/**
* Utility classes don't need a default constructor.
*/
private ISynchronizerExtensionRegistry() {
}
/**
* Adds an extension to the registry, with the given behavior.
*
* @param extension
* The extension that is to be added to the registry
*/
public static void addExtension(ISynchronizerExtensionDescriptor extension) {
ISynchronizerExtension synchronizerExtension = extension.getSynchronizerExtension();
if (EXTENSIONS.get(synchronizerExtension) == null) {
EXTENSIONS.put(synchronizerExtension, new HashSet<ISynchronizerExtensionDescriptor>());
}
EXTENSIONS.get(synchronizerExtension).add(extension);
}
/**
* Removes all extensions from the registry. This will be called at plugin stopping.
*/
public static void clearRegistry() {
EXTENSIONS.clear();
}
/**
* Returns a copy of the registered extensions list.
*
* @return A copy of the registered extensions list.
*/
public static Collection<ISynchronizerExtensionDescriptor> getRegisteredExtensions() {
Set<ISynchronizerExtensionDescriptor> registeredExtensions = Sets.newHashSet();
for (Collection<ISynchronizerExtensionDescriptor> extensions : EXTENSIONS.values()) {
registeredExtensions.addAll(extensions);
}
return registeredExtensions;
}
/**
* Returns all the registered synchronizer extensions defined for the given uri.
*
* @param uri
* the URI of the element
* @return all the registered synchronizer extensions defined for the given uri
*/
public static Collection<ISynchronizerExtension> getSynchronizerExtensions(URI uri) {
Set<ISynchronizerExtension> registeredExtensions = Sets.newHashSet();
for (Collection<ISynchronizerExtensionDescriptor> extensions : EXTENSIONS.values()) {
for (ISynchronizerExtensionDescriptor descriptor : extensions) {
if (descriptor.getSynchronizerExtension().isExtensionFor(uri)) {
registeredExtensions.add(descriptor.getSynchronizerExtension());
}
}
}
return registeredExtensions;
}
/**
* Removes a phantom from the registry.
*
* @param extensionClassName
* Qualified class name of the sync element which corresponding phantom is to be removed from
* the registry.
*/
public static void removeExtension(String extensionClassName) {
for (ISynchronizerExtensionDescriptor extension : getRegisteredExtensions()) {
if (extension.getExtensionClassName().equals(extensionClassName)) {
EXTENSIONS.get(extension.getSynchronizerExtension()).clear();
}
}
}
}