/******************************************************************************* * 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; } }