/* * ==================================================================== * 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 java.io.File; import java.lang.reflect.Method; /** * @version 1.3 * @author TMate Software Ltd. */ public class SVNOS2Util { private static boolean ourIsJNAEnabled; private static boolean ourIsOS2IO4JPresent; private static Class<?> os2io4jClazz; private static Method setReadOnlyMethod; private static Method setHiddenMethod; private static Method moveFileMethod; static { try { os2io4jClazz = Class.forName("de.rbri.os2io4j.OS2IO4J"); setReadOnlyMethod = os2io4jClazz.getMethod("setReadOnly", new Class[] {File.class, Boolean.TYPE}); setHiddenMethod = os2io4jClazz.getMethod("setHidden", new Class[] {File.class, Boolean.TYPE}); moveFileMethod = os2io4jClazz.getMethod("moveFile", new Class[] {File.class, File.class}); ourIsOS2IO4JPresent = true; } catch (Throwable e) { // not found ourIsOS2IO4JPresent = false; } String jnaEnabledProperty = System.getProperty("svnkit.useJNA", "true"); ourIsJNAEnabled = Boolean.valueOf(jnaEnabledProperty).booleanValue(); } public static void setJNAEnabled(boolean enabled) { synchronized (SVNOS2Util.class) { ourIsJNAEnabled = enabled; } } public static boolean isOS2IO4JPresent() { synchronized (SVNOS2Util.class) { return ourIsOS2IO4JPresent && ourIsJNAEnabled; } } /** * makes file writable and * returns true in case operations succeeded, false in case of any error */ public static boolean setWritable(File file) { if (file == null) { return false; } if (isOS2IO4JPresent()) { try { Object[] arguments = new Object[2]; arguments[0] = file; arguments[1] = Boolean.FALSE; setReadOnlyMethod.invoke(null, arguments); return true; } catch (Throwable th) { } } return false; } /** * makes file hidden and * returns true in case operations succeeded, false in case of any error */ public static boolean setHidden(File file, boolean hidden) { if (file == null) { return false; } if (isOS2IO4JPresent()) { try { Object[] arguments = new Object[2]; arguments[0] = file; arguments[1] = Boolean.valueOf(hidden); setHiddenMethod.invoke(null, arguments); return true; } catch (Throwable th) { } } return false; } /** * atomically renames src to dst and * returns false if there is any error on rename. */ public static boolean moveFile(File src, File dst) { if (src == null || dst == null) { return false; } if (isOS2IO4JPresent()) { try { Object[] arguments = new Object[2]; arguments[0] = src; arguments[1] = dst; moveFileMethod.invoke(null, arguments); return true; } catch (Throwable th) { } } return false; } }