/******************************************************************************* * Copyright (c) 2009 Google, Inc 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: * Sergey Prigogin (Google) - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.resources; import java.io.File; import java.io.IOException; /** * Configurable strategy for canonicalizing file paths. File paths can be canonicalized by calling * either File.getCanonicalPath or File.getAbsolutePath. File.getCanonicalPath resolves symbolic * links and guarantees path uniqueness. File.getAbsolutePath can be used when resolution of * symbolic links is undesirable. The default is to use File.getCanonicalPath. */ public abstract class PathCanonicalizationStrategy { private static PathCanonicalizationStrategy instance; static { setPathCanonicalization(true); } public static String getCanonicalPath(File file) { return getInstance().getCanonicalPathInternal(file); } /** * Sets path canonicalization strategy. If <code>canonicalize</code> is <code>true</code>, * file paths will be canonicalized by calling File.getCanonicalPath, otherwise * File.getAbsolutePath is used. * * @param canonicalize <code>true</code> to use File.getCanonicalPath, <code>false</code> * to use File.getAbsolutePath. */ public static synchronized void setPathCanonicalization(boolean canonicalize) { if (canonicalize) { instance = new PathCanonicalizationStrategy() { @Override protected String getCanonicalPathInternal(File file) { try { return file.getCanonicalPath(); } catch (IOException e) { return file.getAbsolutePath(); } } }; } else { instance = new PathCanonicalizationStrategy() { @Override protected String getCanonicalPathInternal(File file) { return file.getAbsolutePath(); } }; } } private static synchronized PathCanonicalizationStrategy getInstance() { return instance; } protected abstract String getCanonicalPathInternal(File file); }