blob: 87bbd960f5e845a5ae51019e2e65fb33d36600aa [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2016 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
* Sergey Prigogin (Google) - ongoing development
*******************************************************************************/
package org.eclipse.core.internal.filesystem.local;
import java.nio.file.FileSystems;
import java.util.Set;
import org.eclipse.core.filesystem.IFileInfo;
import org.eclipse.core.filesystem.provider.FileInfo;
import org.eclipse.core.internal.filesystem.local.nio.*;
import org.eclipse.core.internal.filesystem.local.unix.UnixFileHandler;
import org.eclipse.core.internal.filesystem.local.unix.UnixFileNatives;
/**
* Dispatches methods backed by native code to the appropriate platform specific
* implementation depending on a library provided by a fragment. Failing this it tries
* to use Java 7 NIO/2 API's.
* <p>
* Use of native libraries can be disabled by adding -Declipse.filesystem.useNatives=false to VM
* arguments.
* <p>
* Please notice that the native implementation is significantly faster than the non-native one.
* The BenchFileStore test runs 3.1 times faster on Linux with the native code than without it.
*/
public class LocalFileNativesManager {
private static NativeHandler HANDLER;
private static boolean USING_NATIVES;
static {
boolean nativesAllowed = Boolean.valueOf(System.getProperty("eclipse.filesystem.useNatives", "true")).booleanValue(); //$NON-NLS-1$ //$NON-NLS-2$
if (nativesAllowed && UnixFileNatives.isUsingNatives()) {
HANDLER = new UnixFileHandler();
USING_NATIVES = true;
} else if (nativesAllowed && LocalFileNatives.isUsingNatives()) {
HANDLER = new LocalFileHandler();
USING_NATIVES = true;
} else {
Set<String> views = FileSystems.getDefault().supportedFileAttributeViews();
if (views.contains("posix")) { //$NON-NLS-1$
HANDLER = new PosixHandler();
} else if (views.contains("dos")) { //$NON-NLS-1$
HANDLER = new DosHandler();
} else {
HANDLER = new DefaultHandler();
}
}
}
public static int getSupportedAttributes() {
return HANDLER.getSupportedAttributes();
}
public static FileInfo fetchFileInfo(String fileName) {
return HANDLER.fetchFileInfo(fileName);
}
public static boolean putFileInfo(String fileName, IFileInfo info, int options) {
return HANDLER.putFileInfo(fileName, info, options);
}
public static boolean isUsingNatives() {
return USING_NATIVES;
}
}