All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.core.internal.filesystem.local.LocalFileNativesManager Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2010, 2016 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * 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;
import org.eclipse.osgi.service.environment.Constants;

/**
 * 

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.

* *

Use of native libraries can be disabled by adding -Declipse.filesystem.useNatives=false * to VM arguments.

* *

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 { public static final boolean PROPERTY_USE_NATIVE_DEFAULT = true; public static final String PROPERTY_USE_NATIVES = "eclipse.filesystem.useNatives"; //$NON-NLS-1$ private static NativeHandler HANDLER; static { reset(); } /** * reset the usage of native to the system default */ public static void reset() { setUsingNative(Boolean.parseBoolean(System.getProperty(PROPERTY_USE_NATIVES, String.valueOf(PROPERTY_USE_NATIVE_DEFAULT)))); } /** * Try to set the usage of natives to the provided value * @return true if natives are used as result of this call false otherwhise */ public static boolean setUsingNative(boolean useNatives) { boolean nativesAreUsed; boolean isWindowsOS = Constants.OS_WIN32.equals(LocalFileSystem.getOS()); if (useNatives && !isWindowsOS && UnixFileNatives.isUsingNatives()) { HANDLER = new UnixFileHandler(); nativesAreUsed = true; } else if (useNatives && isWindowsOS && LocalFileNatives.isUsingNatives()) { HANDLER = new LocalFileHandler(); nativesAreUsed = true; } else { nativesAreUsed = false; Set 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(); } } return nativesAreUsed; } 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); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy