/* * ==================================================================== * Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://svnkit.com/license.html. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * ==================================================================== */ package org.tmatesoft.svn.core.internal.util.jna; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.internal.wc.ISVNGnomeKeyringPasswordProvider; import org.tmatesoft.svn.core.internal.wc.SVNFileType; import org.tmatesoft.svn.core.internal.wc.SVNFileUtil; import org.tmatesoft.svn.util.SVNDebugLog; import org.tmatesoft.svn.util.SVNLogType; import java.io.File; /** * @version 1.3 * @author TMate Software Ltd. */ public class SVNJNAUtil { private static boolean ourIsJNAEnabled; private static boolean ourIsJNAPresent; private static final String JNA_CLASS_NAME = "com.sun.jna.Library"; static { try { ClassLoader loader = SVNJNAUtil.class.getClassLoader(); if (loader == null) { loader = ClassLoader.getSystemClassLoader(); } if (loader != null && loader.loadClass(JNA_CLASS_NAME) != null) { ourIsJNAPresent = true; } } catch (ClassNotFoundException e) { ourIsJNAPresent = false; } String jnaEnabledProperty = System.getProperty("svnkit.useJNA", "true"); ourIsJNAEnabled = Boolean.valueOf(jnaEnabledProperty).booleanValue(); SVNDebugLog.getDefaultLog().logFine(SVNLogType.WC, "JNA present/enabled: " + ourIsJNAPresent + "/" + ourIsJNAEnabled); } public static void setJNAEnabled(boolean enabled) { synchronized (SVNJNAUtil.class) { ourIsJNAEnabled = enabled; } } public static boolean isJNAPresent() { synchronized (SVNJNAUtil.class) { return ourIsJNAPresent && ourIsJNAEnabled; } } // linux. public static SVNFileType getFileType(File file) { if (isJNAPresent()) { return SVNLinuxUtil.getFileType(file); } return null; } public static Boolean isExecutable(File file) { if (isJNAPresent()) { return SVNLinuxUtil.isExecutable(file); } return null; } public static String getLinkTarget(File file) { if (isJNAPresent()) { return SVNLinuxUtil.getLinkTarget(file); } return null; } public static boolean setExecutable(File file, boolean set) { if (isJNAPresent()) { return SVNLinuxUtil.setExecutable(file, set); } return false; } public static boolean setSGID(File file) { if (isJNAPresent()) { return SVNLinuxUtil.setSGID(file); } return false; } public static boolean createSymlink(File file, String linkName) { if (isJNAPresent()) { return SVNLinuxUtil.createSymlink(file, linkName); } return false; } public static Long getSymlinkLastModified(File file) { if (isJNAPresent()) { return SVNLinuxUtil.getSymlinkLastModified(file); } return null; } // linux and win32. public static boolean setWritable(File file) { if (isJNAPresent()) { return SVNFileUtil.isWindows ? SVNWin32Util.setWritable(file) : SVNLinuxUtil.setWritable(file); } return false; } // win32 public static boolean setHidden(File file) { if (isJNAPresent()) { return SVNWin32Util.setHidden(file); } return false; } public static boolean moveFile(File src, File dst) { if (isJNAPresent()) { return SVNWin32Util.moveFile(src, dst); } return false; } public static char[] decrypt(char[] encryptedData) { if (isJNAPresent()) { return SVNWinCrypt.decrypt(encryptedData); } return null; } public static char[] encrypt(char[] rawData) { if (isJNAPresent()) { return SVNWinCrypt.encrypt(rawData); } return null; } public static boolean addPasswordToMacOsKeychain(String realm, String userName, char[] password, boolean nonInteractive) throws SVNException { if (isJNAPresent()) { return SVNMacOsKeychain.setPassword(realm, userName, password, nonInteractive); } return false; } public static char[] getPasswordFromMacOsKeychain(String realm, String userName, boolean nonInteractive) throws SVNException { if (isJNAPresent()) { return SVNMacOsKeychain.getPassword(realm, userName, nonInteractive); } return null; } public static boolean addPasswordToGnomeKeyring(String realm, String userName, char[] password, boolean nonInteractive, ISVNGnomeKeyringPasswordProvider keyringPasswordProvider) throws SVNException { if (isJNAPresent()) { return SVNGnomeKeyring.setPassword(realm, userName, password, nonInteractive, keyringPasswordProvider); } return false; } public static char[] getPasswordFromGnomeKeyring(String realm, String userName, boolean nonInteractive, ISVNGnomeKeyringPasswordProvider keyringPasswordProvider) throws SVNException { if (isJNAPresent()) { return SVNGnomeKeyring.getPassword(realm, userName, nonInteractive, keyringPasswordProvider); } return null; } public synchronized static boolean isWinCryptEnabled() { return isJNAPresent() && SVNWinCrypt.isEnabled(); } public synchronized static boolean isMacOsKeychainEnabled() { return isJNAPresent() && SVNMacOsKeychain.isEnabled(); } public synchronized static boolean isGnomeKeyringEnabled() { return isJNAPresent() && SVNGnomeKeyring.isEnabled(); } public static String getApplicationDataPath(boolean common) { if (isJNAPresent()) { return SVNWin32Util.getApplicationDataPath(common); } return null; } }