/*
* ====================================================================
* 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.io.fs;
import java.io.File;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.io.fs.repcache.IFSRepresentationCacheManagerFactory;
import org.tmatesoft.svn.core.internal.wc.SVNClassLoader;
import org.tmatesoft.svn.util.SVNDebugLog;
import org.tmatesoft.svn.util.SVNLogType;
/**
* @version 1.3
* @author TMate Software Ltd.
*/
public class FSRepresentationCacheUtil {
private static volatile boolean ourIsAvailable;
private static final String SQLJET_DB_CLASS_NAME = "org.tmatesoft.sqljet.core.table.SqlJetDb";
private static final String ANTLR_CLASS_NAME = "org.antlr.runtime.Token";
private static IFSRepresentationCacheManagerFactory ourRepCacheManagerFactory;
static {
Boolean option = Boolean.valueOf(System.getProperty("svnkit.fsfs.repcache", "true"));
if (option.booleanValue()) {
try {
Class antlrClazz = FSRepresentationCacheUtil.class.getClassLoader().loadClass(ANTLR_CLASS_NAME);
if (antlrClazz == null) {
ourIsAvailable = false;
} else {
Class clazz = FSRepresentationCacheUtil.class.getClassLoader().loadClass(SQLJET_DB_CLASS_NAME);
ourIsAvailable = clazz != null;
if (ourIsAvailable) {
ourRepCacheManagerFactory = SVNClassLoader.getFSRepresentationCacheManagerFactory();
if (ourRepCacheManagerFactory != null) {
ourIsAvailable = true;
} else {
ourIsAvailable = false;
}
}
}
} catch (Throwable e) {
ourIsAvailable = false;
}
} else {
ourIsAvailable = false;
}
SVNDebugLog.getDefaultLog().logFine(SVNLogType.FSFS, "SQLJET enabled: " + ourIsAvailable);
}
public static IFSRepresentationCacheManager open(FSFS fsfs) throws SVNException {
if (!isAvailable()) {
return null;
}
if (ourRepCacheManagerFactory != null) {
return ourRepCacheManagerFactory.openRepresentationCache(fsfs);
}
return null;
}
public static void create(File path) throws SVNException {
if (!isAvailable()) {
return;
}
if (ourRepCacheManagerFactory != null) {
ourRepCacheManagerFactory.createRepresentationCache(path);
}
}
private static boolean isAvailable() {
return ourIsAvailable;
}
}