Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2004, 2010 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.core.runtime.internal.adaptor;
 
 import java.io.File;
 import java.net.URL;
Internal class.
 
 public class BasicLocation implements Location {
 	static class MockLocker implements Locker {
 		public boolean lock() throws IOException {
 			// locking always successful
 			return true;
 		}
 
 		public boolean isLocked() {
 			// this lock is never locked
 			return false;
 		}
 
 		public void release() {
 			// nothing to release
 		}
 
 	}
 
 	final private boolean isReadOnly;
 	private URL location = null;
 	private Location parent;
 	final private URL defaultValue;
 	final private String property;
 	final private String dataAreaPrefix;
 
 	// locking related fields
 	private File lockFile;
 	private Locker locker;
 	public static final String PROP_OSGI_LOCKING = "osgi.locking"//$NON-NLS-1$
 	private static String DEFAULT_LOCK_FILENAME = ".metadata/.lock"//$NON-NLS-1$
 	public static boolean DEBUG;
 
 	private static boolean isRunningWithNio() {
 		try {
 			Class.forName("java.nio.channels.FileLock"); //$NON-NLS-1$
 		} catch (ClassNotFoundException e) {
 			return false;
 		}
 		return true;
 	}
 
 	public static Locker createLocker(File lockString lockMode) {
 		if (lockMode == null)
 			lockMode = FrameworkProperties.getProperty();
 
 		if ("none".equals(lockMode)) //$NON-NLS-1$
 			return new MockLocker();
 
 		if ("java.io".equals(lockMode)) //$NON-NLS-1$
 			return new Locker_JavaIo(lock);
 
 		if ("java.nio".equals(lockMode)) { //$NON-NLS-1$
 				return new Locker_JavaNio(lock);
 			// TODO should we return null here.  NIO was requested but we could not do it...
 			return new Locker_JavaIo(lock);
 		}
 
 		//	Backup case if an invalid value has been specified
 			return new Locker_JavaNio(lock);
 		return new Locker_JavaIo(lock);
 
 	}
 
 	public BasicLocation(String propertyURL defaultValueboolean isReadOnlyString dataAreaPrefix) {
 		super();
 		this. = property;
 		this. = defaultValue;
 		this. = isReadOnly;
 		this. = dataAreaPrefix == null ? "" : dataAreaPrefix//$NON-NLS-1$
 	}
 
 	public boolean allowsDefault() {
 		return  != null;
 	}
 
	public URL getDefault() {
		return ;
	}
	public synchronized Location getParentLocation() {
		return ;
	}
	public synchronized URL getURL() {
		if ( == null &&  != null)
		return ;
	}
	public synchronized boolean isSet() {
		return  != null;
	}
	public boolean isReadOnly() {
		return ;
	}
	public boolean setURL(URL valueboolean lockthrows IllegalStateException {
		try {
			return set(valuelock);
catch (IOException e) {
			return false;
		}
	}
	public synchronized boolean set(URL valueboolean lockthrows IllegalStateExceptionIOException {
		return set(valuelocknull);
	}
	public synchronized boolean set(URL valueboolean lockString lockFilePaththrows IllegalStateExceptionIOException {
		if ( != null)
		File file = null;
		if (value.getProtocol().equalsIgnoreCase("file")) { //$NON-NLS-1$
			try {
				String basePath = new File(value.getFile()).getCanonicalPath();
				value = LocationHelper.buildURL("file:" + basePathtrue); //$NON-NLS-1$
catch (IOException e) {
				// do nothing just use the original value
			}
			if (lockFilePath != null && lockFilePath.length() > 0) {
				File givenLockFile = new File(lockFilePath);
				if (givenLockFile.isAbsolute()) {
					file = givenLockFile;
else {
					file = new File(value.getFile(), lockFilePath);
				}
else {
				file = new File(value.getFile(), );
			}
		}
		lock = lock && !;
		if (lock) {
			if (!lock(filevalue))
				return false;
		}
		 = file;
		 = value;
		if ( != null)
			FrameworkProperties.setProperty(.toExternalForm());
		return lock;
	}
	public synchronized void setParent(Location value) {
		 = value;
	}
	public synchronized boolean lock() throws IOException {
		if (!isSet())
	}
	public synchronized boolean isLocked() throws IOException {
		if (!isSet())
			return false;
	}
	/*
	 * This must be called while holding the synchronization lock for (this)
	 */
	private boolean lock(File lockURL locationValuethrows IOException {
		if (lock == null) {
			if (locationValue != null && !"file".equalsIgnoreCase(locationValue.getProtocol())) //$NON-NLS-1$
			throw new IllegalStateException(.); // this is really unexpected
		}
		if (isLocked())
			return false;
		File parentFile = new File(lock.getParent());
		if (!parentFile.exists())
			if (!parentFile.mkdirs())
		setLocker(lock);
		if ( == null)
			return true;
		boolean locked = false;
		try {
			locked = .lock();
			return locked;
finally {
			if (!locked)
				 = null;
		}
	}
	/*
	 * This must be called while holding the synchronization lock for (this)
	 */
	private boolean isLocked(File lockthrows IOException {
		if (lock == null || )
			return true;
		if (!lock.exists())
			return false;
		setLocker(lock);
		return .isLocked();
	}
	/*
	 * This must be called while holding the synchronization lock for (this)
	 */
	private void setLocker(File lock) {
		if ( != null)
			return;
		String lockMode = FrameworkProperties.getProperty();
		 = createLocker(locklockMode);
	}
	public synchronized void release() {
		if ( != null)
	}
	public Location createLocation(Location parentLocationURL defaultLocationboolean readonly) {
		BasicLocation result = new BasicLocation(nulldefaultLocationreadonly);
		result.setParent(parentLocation);
		return result;
	}
	public URL getDataArea(String filenamethrows IOException {
		URL base = getURL();
		if (base == null)
		String prefix = base.toExternalForm();
		if (prefix.length() > 0 && prefix.charAt(prefix.length() - 1) != '/')
			prefix += '/';
		filename = filename.replace('\\''/');
		if (filename.length() > 0 && filename.charAt(0) == '/')
			filename.substring(1);
		return new URL(prefix +  + filename);
	}
New to GrepCode? Check out our FAQ X