/******************************************************************************* * Copyright (c) 2015 Obeo 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: * Obeo - initial API and implementation * Michael Borkowski - public visibility *******************************************************************************/ package org.eclipse.emf.compare.ide.ui.internal.logical.resolver; import com.google.common.eventbus.EventBus; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.compare.ide.ui.internal.util.ThreadSafeProgressMonitor; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.resource.Resource; /** * Implementation of {@link IProxyCreationListener} for local resolutions. * * @author <a href="mailto:laurent.delaigue@obeo.fr">Laurent Delaigue</a> */ // Visible for testing public class LocalMonitoredProxyCreationListener extends AbstractMonitoredProxyCreationListener { /** The event bus to use to notify interesting events. */ protected final EventBus eventBus; /** The local resolver. */ protected final IResourceDependencyLocalResolver localResolver; /** * Constructor. * * @param monitor * The progress monitor to use * @param eventBus * The event bus * @param dependencyProvider * The dependency provider * @param diagnostic * The diagnostic */ public LocalMonitoredProxyCreationListener(ThreadSafeProgressMonitor monitor, EventBus eventBus, IResourceDependencyLocalResolver localResolver, DiagnosticSupport diagnostic) { super(monitor, diagnostic); this.localResolver = localResolver; this.eventBus = eventBus; } /** * {@inheritDoc} */ public void proxyCreated(Resource source, EObject eObject, EStructuralFeature feature, EObject proxy, int position) { final URI from = source.getURI(); final URI to = ((InternalEObject)proxy).eProxyURI().trimFragment(); // TODO Does this work with relative URIs? (isPlatformResource()) if (ResolutionUtil.getResolutionScope() != CrossReferenceResolutionScope.SELF && to.isPlatformResource()) { SynchronizedResourceSet resourceSet = (SynchronizedResourceSet)source.getResourceSet(); eventBus.post(new ResourceDependencyFoundEvent(from, to, eObject, feature)); localResolver.demandResolve(resourceSet, to, diagnostic, tspm); } } }