/*******************************************************************************
* Copyright (c) 2005, 2006 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
*******************************************************************************/
package org.eclipse.core.internal.resources;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.internal.localstore.HistoryStore2;
import org.eclipse.core.internal.localstore.IHistoryStore;
import org.eclipse.core.internal.properties.IPropertyManager;
import org.eclipse.core.internal.properties.PropertyManager2;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
/**
* This is mostly a convenience class for accessing the ResourcesCompatibility class from the
* compatibility fragment using reflection.
*
* See the ResourcesCompatibility class in the compatibility fragment.
*/
public class ResourcesCompatibilityHelper {
private static final String COMPATIBILITY_CLASS= "org.eclipse.core.internal.resources.ResourcesCompatibility"; //$NON-NLS-1$
private static final String CONVERT_HISTORY_STORE= ResourcesPlugin.PI_RESOURCES + ".convertHistory"; //$NON-NLS-1$
private static final String CONVERT_PROPERTY_STORE= ResourcesPlugin.PI_RESOURCES + ".convertProperties"; //$NON-NLS-1$
private static final String ENABLE_NEW_HISTORY_STORE= ResourcesPlugin.PI_RESOURCES + ".newHistory"; //$NON-NLS-1$
private static final String ENABLE_NEW_PROPERTY_STORE= ResourcesPlugin.PI_RESOURCES + ".newProperties"; //$NON-NLS-1$
/**
* Creates a history store. Decides which implementation of history store should be chosen, and
* whether conversion from the existing state should be performed by looking at some system
* properties.
*/
public static IHistoryStore createHistoryStore(IPath location, int limit) {
// the default is to use new implementation
boolean newImpl= !Boolean.FALSE.toString().equalsIgnoreCase(System.getProperty(ENABLE_NEW_HISTORY_STORE));
// the default is to convert existing state to the new implementation
boolean convert= !Boolean.FALSE.toString().equalsIgnoreCase(System.getProperty(CONVERT_HISTORY_STORE));
try {
return createHistoryStore(location, limit, newImpl, convert, true);
} catch (ClassNotFoundException e) {
// fragment not available
} catch (NoSuchMethodException e) {
// unlikely
if (Workspace.DEBUG)
e.printStackTrace();
} catch (IllegalAccessException e) {
// unlikely
if (Workspace.DEBUG)
e.printStackTrace();
} catch (InvocationTargetException e) {
// got a runtime exception/error
Throwable target= e.getTargetException();
if (target instanceof RuntimeException)
throw (RuntimeException)target;
throw (Error)target;
}
// default to new version
IFileStore store= EFS.getLocalFileSystem().getStore(location);
return new HistoryStore2((Workspace)ResourcesPlugin.getWorkspace(), store, limit);
}
public static IHistoryStore createHistoryStore(IPath location, int limit, boolean newImpl, boolean convert, boolean rename) throws ClassNotFoundException, NoSuchMethodException,
IllegalAccessException, InvocationTargetException {
Class clazz= Class.forName(COMPATIBILITY_CLASS);
Method createMethod= clazz.getDeclaredMethod("createHistoryStore", new Class[] { IPath.class, int.class, boolean.class, boolean.class, boolean.class }); //$NON-NLS-1$
return (IHistoryStore)createMethod.invoke(null, new Object[] { location, new Integer(limit), Boolean.valueOf(newImpl), Boolean.valueOf(convert), Boolean.valueOf(rename) });
}
public static IPropertyManager createPropertyManager(boolean newImpl, boolean convert) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Class clazz= Class.forName(COMPATIBILITY_CLASS);
Method createMethod= clazz.getDeclaredMethod("createPropertyManager", new Class[] { boolean.class, boolean.class }); //$NON-NLS-1$
return (IPropertyManager)createMethod.invoke(null, new Object[] { Boolean.valueOf(newImpl), Boolean.valueOf(convert) });
}
/**
* Creates a property manager. Decides which implementation of property manager should be
* chosen, and whether conversion from the existing state should be performed by looking at some
* system properties.
*/
public static IPropertyManager createPropertyManager() {
// the default is to use new implementation
boolean newImpl= !Boolean.FALSE.toString().equalsIgnoreCase(System.getProperty(ENABLE_NEW_PROPERTY_STORE));
// the default is to convert existing state to the new implementation
boolean convert= !Boolean.FALSE.toString().equalsIgnoreCase(System.getProperty(CONVERT_PROPERTY_STORE));
try {
return createPropertyManager(newImpl, convert);
} catch (ClassNotFoundException e) {
// fragment not available
} catch (NoSuchMethodException e) {
// unlikely
if (Workspace.DEBUG)
e.printStackTrace();
} catch (IllegalAccessException e) {
// unlikely
if (Workspace.DEBUG)
e.printStackTrace();
} catch (InvocationTargetException e) {
// got a runtime exception/error
Throwable target= e.getTargetException();
if (target instanceof RuntimeException)
throw (RuntimeException)target;
throw (Error)target;
}
// default to new version
return new PropertyManager2((Workspace)ResourcesPlugin.getWorkspace());
}
}