/******************************************************************************* * Copyright (c) 2004, 2008 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ltk.core.refactoring.tests; import java.io.IOException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; /** * Home for file system-related utility methods. */ public class FileSystemHelper { /** counter for generating unique random file system locations */ protected static int nextLocationCounter = 0; private static final long MASK = 0x00000000FFFFFFFFL; /* * Return the root directory for the temp dir. */ public static IPath getTempDir() { String tempPath = System.getProperty("java.io.tmpdir"); try { tempPath = new java.io.File(tempPath).getCanonicalPath(); } catch (IOException e) { //ignore and use non-canonical path } return new Path(tempPath); } /** * Returns a unique location on disk. It is guaranteed that no file currently * exists at that location. The returned location will be unique with respect * to all other locations generated by this method in the current session. * If the caller creates a folder or file at this location, they are responsible for * deleting it when finished. * @param parent the parent path * @return returns a unique location on disk */ public static IPath getRandomLocation(IPath parent) { IPath path = computeRandomLocation(parent); while (path.toFile().exists()) { try { Thread.sleep(10); } catch (InterruptedException e) { // ignore } path = computeRandomLocation(parent); } return path; } public static IPath computeRandomLocation(IPath parent) { long segment = (long) ++nextLocationCounter << 32 | System.currentTimeMillis() & MASK; return parent.append(Long.toString(segment)); } }