/******************************************************************************* * Copyright (c) 2015 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.emf.compare.ide.ui.internal.logical.resolver; import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.eventbus.EventBus; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.compare.graph.IGraph; /** * Default implementation of {@link IResolutionContext}. * * @author <a href="mailto:laurent.delaigue@obeo.fr">Laurent Delaigue</a> */ public class DefaultResolutionContext implements IResolutionContext { private final EventBus eventBus; private final IGraph<URI> graph; private final DependencyGraphUpdater<URI> graphUpdater; private final ResourceComputationScheduler<URI> scheduler; private final ModelResourceListener modelResourceListener; private IResourceDependencyProvider dependencyProvider; private IResourceDependencyLocalResolver localResolver; private IResourceDependencyRemoteResolver remoteResolver; private IImplicitDependencies implicitDependencies; public DefaultResolutionContext(EventBus eventBus, IGraph<URI> graph, DependencyGraphUpdater<URI> graphUpdater, ResourceComputationScheduler<URI> scheduler, ModelResourceListener modelResourceListener) { this.eventBus = checkNotNull(eventBus); this.graph = checkNotNull(graph); this.graphUpdater = checkNotNull(graphUpdater); this.scheduler = checkNotNull(scheduler); this.modelResourceListener = checkNotNull(modelResourceListener); } public EventBus getEventBus() { return eventBus; } public IGraph<URI> getGraph() { return graph; } public DependencyGraphUpdater<URI> getGraphUpdater() { return graphUpdater; } public ResourceComputationScheduler<URI> getScheduler() { return scheduler; } public ModelResourceListener getModelResourceListener() { return modelResourceListener; } public synchronized IResourceDependencyProvider getDependencyProvider() { if (dependencyProvider == null) { dependencyProvider = new ResourceDependencyProvider(this); } return dependencyProvider; } public synchronized IResourceDependencyLocalResolver getLocalResolver() { if (localResolver == null) { localResolver = new ResourceDependencyLocalResolver(this); } return localResolver; } public synchronized IResourceDependencyRemoteResolver getRemoteResolver() { if (remoteResolver == null) { remoteResolver = new ResourceDependencyRemoteResolver(this); } return remoteResolver; } public synchronized IImplicitDependencies getImplicitDependencies() { if (implicitDependencies == null) { implicitDependencies = new DefaultImplicitDependencies(); } return implicitDependencies; } /** * {@inheritDoc} When initialized, the context will: * <ol> * <li>install a listener on the workspace to keep track of modified resources</li> * <li>Register its {@link #graphUpdater} to its {@link #eventBus}</li> * <li>initialize its {@link #scheduler}</li> * </ol> */ public void initialize() { ResourcesPlugin.getWorkspace().addResourceChangeListener(modelResourceListener); eventBus.register(graphUpdater); scheduler.initialize(); } /** * Disposes resources allocated during initialization. */ public void dispose() { scheduler.dispose(); eventBus.unregister(graphUpdater); ResourcesPlugin.getWorkspace().removeResourceChangeListener(modelResourceListener); } }