/******************************************************************************* * Copyright (c) 2009 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.debug.internal.core; import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IScopeContext; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.debug.core.DebugPlugin; import org.osgi.service.prefs.BackingStoreException; /** * Convenience class to facilitate using the new {@link IEclipsePreferences} story * * @since 3.6 * @noinstantiate This class is not intended to be instantiated by clients. */ public final class Preferences { static final IScopeContext[] contexts = new IScopeContext[] {new DefaultScope(), new InstanceScope()}; static final int DEFAULT_CONTEXT = 0; static final int INSTANCE_CONTEXT = 1; /** * Constructor */ private Preferences() { // no direct instantiation } /** * Sets a string preference in the {@link InstanceScope} or the given {@link IScopeContext} if it * is not null. Preferences set in a given context are flushed as they are set. * @param qualifier * @param key the key * @param value the value * @param context */ public static synchronized void setString(String qualifier, String key, String value, IScopeContext context) { if(context != null) { try { IEclipsePreferences node = context.getNode(qualifier); node.put(key, value); node.flush(); } catch(BackingStoreException bse) { DebugPlugin.log(bse); } } else { contexts[INSTANCE_CONTEXT].getNode(qualifier).put(key, value); } } /** * Sets a boolean preference in the {@link InstanceScope} or the given {@link IScopeContext} if it * is not null. Preferences set in a given context are flushed as they are set. * @param qualifier * @param key the key * @param value the value * @param context */ public static synchronized void setBoolean(String qualifier, String key, boolean value, IScopeContext context) { if(context != null) { try { IEclipsePreferences node = context.getNode(qualifier); node.putBoolean(key, value); node.flush(); } catch(BackingStoreException bse) { DebugPlugin.log(bse); } } else { contexts[INSTANCE_CONTEXT].getNode(qualifier).putBoolean(key, value); } } /** * Sets a integer preference in the {@link InstanceScope} or the given {@link IScopeContext} if it * is not null. Preferences set in a given context are flushed as they are set. * @param qualifier * @param key the key * @param value the value * @param context */ public static synchronized void setInt(String qualifier, String key, int value, IScopeContext context) { if(context != null) { try { IEclipsePreferences node = context.getNode(qualifier); node.putInt(key, value); node.flush(); } catch(BackingStoreException bse) { DebugPlugin.log(bse); } } else { contexts[INSTANCE_CONTEXT].getNode(qualifier).putInt(key, value); } } /** * Sets a long preference in the {@link InstanceScope} or the given {@link IScopeContext} if it * is not null. Preferences set in a given context are flushed as they are set. * @param qualifier * @param key the key * @param value the value * @param context */ public static synchronized void setLong(String qualifier, String key, long value, IScopeContext context) { if(context != null) { try { IEclipsePreferences node = context.getNode(qualifier); node.putLong(key, value); node.flush(); } catch(BackingStoreException bse) { DebugPlugin.log(bse); } } else { contexts[INSTANCE_CONTEXT].getNode(qualifier).putLong(key, value); } } /** * Sets a byte array preference in the {@link InstanceScope} or the given {@link IScopeContext} if it * is not null. Preferences set in a given context are flushed as they are set. * @param qualifier * @param key the key * @param value the value * @param context */ public static synchronized void setByteArray(String qualifier, String key, byte[] value, IScopeContext context) { if(context != null) { try { IEclipsePreferences node = context.getNode(qualifier); node.putByteArray(key, value); node.flush(); } catch(BackingStoreException bse) { DebugPlugin.log(bse); } } else { contexts[INSTANCE_CONTEXT].getNode(qualifier).putByteArray(key, value); } } /** * Sets a double preference in the {@link InstanceScope} or the given {@link IScopeContext} if it * is not null. Preferences set in a given context are flushed as they are set. * @param qualifier * @param key the key * @param value the value * @param context */ public static synchronized void setDouble(String qualifier, String key, double value, IScopeContext context) { if(context != null) { try { IEclipsePreferences node = context.getNode(qualifier); node.putDouble(key, value); node.flush(); } catch(BackingStoreException bse) { DebugPlugin.log(bse); } } else { contexts[INSTANCE_CONTEXT].getNode(qualifier).putDouble(key, value); } } /** * Sets a float preference in the {@link InstanceScope} or the given {@link IScopeContext} if it * is not null. Preferences set in a given context are flushed as they are set. * @param qualifier * @param key the key * @param value the value * @param context */ public static synchronized void setFloat(String qualifier, String key, float value, IScopeContext context) { if(context != null) { try { IEclipsePreferences node = context.getNode(qualifier); node.putFloat(key, value); node.flush(); } catch(BackingStoreException bse) { DebugPlugin.log(bse); } } else { contexts[INSTANCE_CONTEXT].getNode(qualifier).putFloat(key, value); } } /** * Sets a string in the {@link DefaultScope} * @param qualifier * @param key the key * @param value the new value */ public static synchronized void setDefaultString(String qualifier, String key, String value) { contexts[DEFAULT_CONTEXT].getNode(qualifier).put(key, value); } /** * Sets a boolean in the {@link DefaultScope} * @param qualifier * @param key the key * @param value the new value */ public static synchronized void setDefaultBoolean(String qualifier, String key, boolean value) { contexts[DEFAULT_CONTEXT].getNode(qualifier).putBoolean(key, value); } /** * Sets a byte array in the {@link DefaultScope} * @param qualifier * @param key the key * @param value the new value */ public static synchronized void setDefaultByteArray(String qualifier, String key, byte[] value) { contexts[DEFAULT_CONTEXT].getNode(qualifier).putByteArray(key, value); } /** * Sets a double in the {@link DefaultScope} * @param qualifier * @param key the key * @param value the new value */ public static synchronized void setDefaultDouble(String qualifier, String key, double value) { contexts[DEFAULT_CONTEXT].getNode(qualifier).putDouble(key, value); } /** * Sets a float in the {@link DefaultScope} * @param qualifier * @param key the key * @param value the new value */ public static synchronized void setDefaultFloat(String qualifier, String key, float value) { contexts[DEFAULT_CONTEXT].getNode(qualifier).putFloat(key, value); } /** * Sets a integer in the {@link DefaultScope} * @param qualifier * @param key the key * @param value the new value */ public static synchronized void setDefaultInt(String qualifier, String key, int value) { contexts[DEFAULT_CONTEXT].getNode(qualifier).putInt(key, value); } /** * Sets a long in the {@link DefaultScope} * @param qualifier * @param key the key * @param value the new value */ public static synchronized void setDefaultLong(String qualifier, String key, long value) { contexts[DEFAULT_CONTEXT].getNode(qualifier).putLong(key, value); } /** * Sets the given preference to its default value. This is done by removing any set value * from the {@link InstanceScope}. Has no effect if the given key is null. * @param qualifier * @param key the key for the preference */ public static synchronized void setToDefault(String qualifier, String key) { if(key != null) { contexts[INSTANCE_CONTEXT].getNode(qualifier).remove(key); } } /** * Returns the default boolean value stored in the {@link DefaultScope} for the given key * or the specified default value if the key does not appear in the {@link DefaultScope} * @param qualifier * @param key * @param defaultvalue * * @return the boolean value set in the {@link DefaultScope} for the given key, or the specified default value. */ public static synchronized boolean getDefaultBoolean(String qualifier, String key, boolean defaultvalue) { return contexts[DEFAULT_CONTEXT].getNode(qualifier).getBoolean(key, defaultvalue); } /** * Returns the default string value stored in the {@link DefaultScope} for the given key * or the specified default value if the key does not appear in the {@link DefaultScope} * @param qualifier * @param key * @param defaultvalue * * @return the string value set in the {@link DefaultScope} for the given key, or the specified default value. */ public static synchronized String getDefaultString(String qualifier, String key, String defaultvalue) { return contexts[DEFAULT_CONTEXT].getNode(qualifier).get(key, defaultvalue); } /** * Returns the default byte array value stored in the {@link DefaultScope} for the given key * or the specified default value if the key does not appear in the {@link DefaultScope} * @param qualifier * @param key * @param defaultvalue * * @return the byte array value set in the {@link DefaultScope} for the given key, or the specified default value. */ public static synchronized byte[] getDefaultByteArray(String qualifier, String key, byte[] defaultvalue) { return contexts[DEFAULT_CONTEXT].getNode(qualifier).getByteArray(key, defaultvalue); } /** * Returns the default integer value stored in the {@link DefaultScope} for the given key * or the specified default value if the key does not appear in the {@link DefaultScope} * @param qualifier * @param key * @param defaultvalue * * @return the integer value set in the {@link DefaultScope} for the given key, or the specified default value. */ public static synchronized int getDefaultInt(String qualifier, String key, int defaultvalue) { return contexts[DEFAULT_CONTEXT].getNode(qualifier).getInt(key, defaultvalue); } /** * Returns the default long value stored in the {@link DefaultScope} for the given key * or the specified default value if the key does not appear in the {@link DefaultScope} * @param qualifier * @param key * @param defaultvalue * * @return the long value set in the {@link DefaultScope} for the given key, or the specified default value. */ public static synchronized long getDefaultLong(String qualifier, String key, long defaultvalue) { return contexts[DEFAULT_CONTEXT].getNode(qualifier).getLong(key, defaultvalue); } /** * Returns the default double value stored in the {@link DefaultScope} for the given key * or the specified default value if the key does not appear in the {@link DefaultScope} * @param qualifier * @param key * @param defaultvalue * * @return the double value set in the {@link DefaultScope} for the given key, or the specified default value. */ public static synchronized double getDefaultDouble(String qualifier, String key, double defaultvalue) { return contexts[DEFAULT_CONTEXT].getNode(qualifier).getDouble(key, defaultvalue); } /** * Returns the default float value stored in the {@link DefaultScope} for the given key * or the specified default value if the key does not appear in the {@link DefaultScope} * @param qualifier * @param key * @param defaultvalue * * @return the float value set in the {@link DefaultScope} for the given key, or the specified default value. */ public static synchronized float getDefaultFloat(String qualifier, String key, float defaultvalue) { return contexts[DEFAULT_CONTEXT].getNode(qualifier).getFloat(key, defaultvalue); } /** * Save the preferences for the given plugin identifier. * It should be noted that all pending preference changes will be flushed with this method. * @param qualifier */ public static synchronized void savePreferences(String qualifier) { try { contexts[DEFAULT_CONTEXT].getNode(qualifier).flush(); contexts[INSTANCE_CONTEXT].getNode(qualifier).flush(); } catch(BackingStoreException bse) { DebugPlugin.log(bse); } } /** * Adds the given preference listener to the {@link DefaultScope} and the {@link InstanceScope} * @param qualifier * @param listener */ public static void addPreferenceListener(String qualifier, IEclipsePreferences.IPreferenceChangeListener listener) { contexts[DEFAULT_CONTEXT].getNode(qualifier).addPreferenceChangeListener(listener); contexts[INSTANCE_CONTEXT].getNode(qualifier).addPreferenceChangeListener(listener); } /** * Removes the given preference listener from the {@link DefaultScope} and the {@link InstanceScope} * @param qualifier * @param listener */ public static void removePreferenceListener(String qualifier, IEclipsePreferences.IPreferenceChangeListener listener) { contexts[DEFAULT_CONTEXT].getNode(qualifier).removePreferenceChangeListener(listener); contexts[INSTANCE_CONTEXT].getNode(qualifier).removePreferenceChangeListener(listener); } }