/*******************************************************************************
* Copyright (c) 2015 EclipseSource GmbH.
* 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:
* Michael Borkowski - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.mergeresolution;
import java.util.LinkedHashMap;
import java.util.Map;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.ide.ui.dependency.IDependencyProvider;
/**
* The registry managing the merge resolution extension point information.
*
* @author Michael Borkowski <mborkowski@eclipsesource.com>
*/
public class MergeResolutionListenerRegistry {
/** Keeps track of the extensions providing merge resolution listeners. */
private final Map<String, MergeResolutionListenerDescriptor> registeredDescriptors;
/**
* Constructs and initialized this registry.
*/
public MergeResolutionListenerRegistry() {
registeredDescriptors = new LinkedHashMap<String, MergeResolutionListenerDescriptor>();
}
/**
* Adds the given {@link MergeResolutionListenerDescriptor} to this registry, using the given
* {@code className} as the identifier.
*
* @param className
* The identifier for the given {@link MergeResolutionListenerDescriptor}.
* @param descriptor
* The {@link MergeResolutionListenerDescriptor} which is to be added to this registry.
*/
public void addProvider(String className, MergeResolutionListenerDescriptor descriptor) {
registeredDescriptors.put(className, descriptor);
}
/**
* Removes the {@link MergeResolutionListenerDescriptor} and its managed {@link IDependencyProvider}
* identified by the given {@code className} from this registry.
*
* @param className
* Identifier of the provider we are to remove from this registry.
* @return The removed {@link MergeResolutionListenerDescriptor}, if any.
*/
public MergeResolutionListenerDescriptor removeProvider(String className) {
return registeredDescriptors.remove(className);
}
/** Clears out all registered listeners from this registry. */
public void clear() {
registeredDescriptors.clear();
}
/**
* Notifies all registered extension point clients of the completed merge resolution.
*
* @param comparison
* the comparison now resolved
*/
public void mergeResolutionCompleted(Comparison comparison) {
for (MergeResolutionListenerDescriptor descriptor : registeredDescriptors.values()) {
descriptor.getMergeResolutionListener().mergeResolutionCompleted(comparison);
}
}
}