blob: 27a627e853ed2dd811d44757ad93422ca8311981 [file] [log] [blame]
/*******************************************************************************
* 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 java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIPlugin;
import org.eclipse.emf.compare.ide.ui.internal.preferences.EMFCompareUIPreferences;
import org.eclipse.jface.preference.IPreferenceStore;
/**
* Utility class that provides a few static methods useful for resolving.
*
* @author <a href="mailto:laurent.delaigue@obeo.fr">Laurent Delaigue</a>
*/
public final class ResolutionUtil {
/**
* Private constructor (utility pattern).
*/
private ResolutionUtil() {
// Private constructor to prevent instantiation
}
/**
* Tells this resolver how much of the dependency graph should be created at once. Note that this value
* may change during a resolution, which sole "visible" effect would be to prevent resolution of further
* outgoing references if the new value is "SELF".
*
* @return The current resolution scope.
*/
public static CrossReferenceResolutionScope getResolutionScope() {
final IPreferenceStore store = EMFCompareIDEUIPlugin.getDefault().getPreferenceStore();
if (store.getBoolean(EMFCompareUIPreferences.DISABLE_RESOLVERS_PREFERENCE)) {
return CrossReferenceResolutionScope.SELF;
}
final String stringValue = store.getString(EMFCompareUIPreferences.RESOLUTION_SCOPE_PREFERENCE);
return CrossReferenceResolutionScope.valueOf(stringValue);
}
/**
* Checks if the current thread is interrupted or if the given monitor has been canceled.
*
* @param monitor
* the monitor to check
* @return true if the current thread has been canceled, false otherwise.
*/
public static boolean isInterruptedOrCanceled(IProgressMonitor monitor) {
return Thread.currentThread().isInterrupted() || monitor.isCanceled();
}
/**
* Returns the IFile located at the given URI.
*
* @param uri
* URI we need the file for.
* @return The IFile located at the given URI.
*/
public static IFile getFileAt(URI uri) {
final StringBuilder path = new StringBuilder();
List<String> segments = uri.segmentsList();
if (uri.isPlatformResource()) {
segments = segments.subList(1, segments.size());
}
for (String segment : segments) {
path.append(URI.decode(segment)).append('/');
}
return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(path.toString()));
}
}