Copyright (c) 2004, 2015 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2004, 2015 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.core.internal.preferences.legacy; import java.io.*; import java.util.Properties; import org.eclipse.core.internal.preferences.*; import org.eclipse.core.internal.runtime.RuntimeLog; import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.preferences.*; import org.osgi.service.prefs.BackingStoreException;
This class represents a convenience layer between the Eclipse 3.0 preferences and pre-3.0 preferences. It acts as a bridge between the org.eclipse.core.runtime.Preferences object associated with a particular plug-in object, and its corresponding preference node in the 3.0 preference node hierarchy.
Since:3.0
Deprecated:to avoid warnings for interacting with deprecated Preferences class.
/** * This class represents a convenience layer between the Eclipse 3.0 * preferences and pre-3.0 preferences. It acts as a bridge between the * org.eclipse.core.runtime.Preferences object associated with a particular plug-in * object, and its corresponding preference node in the 3.0 preference node * hierarchy. * * @since 3.0 * @deprecated to avoid warnings for interacting with deprecated Preferences class. */
@Deprecated public class PreferenceForwarder extends Preferences implements IEclipsePreferences.IPreferenceChangeListener, IEclipsePreferences.INodeChangeListener { private static final byte[] BYTE_ARRAY_DEFAULT_DEFAULT = new byte[0]; private IEclipsePreferences pluginRoot = (IEclipsePreferences) PreferencesService.getDefault().getRootNode().node(InstanceScope.SCOPE); private DefaultPreferences defaultsRoot = (DefaultPreferences) PreferencesService.getDefault().getRootNode().node(DefaultScope.SCOPE); private String pluginID; private Object plugin; // boolean to check to see if we should re-wrap and forward change // events coming from the new runtime APIs. private boolean notify = true; /* * Used for test suites only. */ public PreferenceForwarder(String pluginID) { this(null, pluginID); } public PreferenceForwarder(Object plugin, String pluginID) { super(); this.plugin = plugin; this.pluginID = pluginID; } /* * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.INodeChangeListener#added(org.eclipse.core.runtime.preferences.IEclipsePreferences.NodeChangeEvent) */ @Override public synchronized void added(IEclipsePreferences.NodeChangeEvent event) { if (listeners.size() > 0 && pluginID.equals(event.getChild().name())) { try { EclipsePreferences prefs = (EclipsePreferences) event.getChild(); prefs.addPreferenceChangeListener(this); } catch (ClassCastException e) { throw new RuntimeException("Plug-in preferences must be instances of EclipsePreferences: " + e.getMessage()); //$NON-NLS-1$ } } } /* * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.INodeChangeListener#removed(org.eclipse.core.runtime.preferences.IEclipsePreferences.NodeChangeEvent) */ @Override public synchronized void removed(IEclipsePreferences.NodeChangeEvent event) { // Do nothing. We can't remove ourselves from the node's list of preference change // listeners because the node has already been removed. }
Adds a property change listener to this preference object. Has no effect if the identical listener is already registered.
Params:
  • listener – a property change listener
/** * Adds a property change listener to this preference object. * Has no effect if the identical listener is already registered. * * @param listener a property change listener */
@Override public synchronized void addPropertyChangeListener(IPropertyChangeListener listener) { if (listeners.size() == 0) { EclipsePreferences prefs = getPluginPreferences(false); if (prefs != null) { prefs.addPreferenceChangeListener(this); } pluginRoot.addNodeChangeListener(this); } listeners.add(listener); } /* * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener#preferenceChange(org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent) */ @Override public void preferenceChange(IEclipsePreferences.PreferenceChangeEvent event) { // if we are the ones making this change, then don't broadcast if (!notify) return; Object oldValue = event.getOldValue(); Object newValue = event.getNewValue(); String key = event.getKey(); if (newValue == null) newValue = getDefault(key, oldValue); else if (oldValue == null) oldValue = getDefault(key, newValue); firePropertyChangeEvent(key, oldValue, newValue); } private EclipsePreferences getPluginPreferences(boolean create) { try { if (!create && !pluginRoot.nodeExists(pluginID)) return null; } catch (BackingStoreException e) { return null; } try { return (EclipsePreferences) pluginRoot.node(pluginID); } catch (ClassCastException e) { throw new RuntimeException("Plug-in preferences must be instances of EclipsePreferences: " + e.getMessage()); //$NON-NLS-1$ } } private IEclipsePreferences getDefaultPreferences() { return defaultsRoot.node(pluginID, plugin); }
Removes the given listener from this preference object. Has no effect if the listener is not registered.
Params:
  • listener – a property change listener
/** * Removes the given listener from this preference object. * Has no effect if the listener is not registered. * * @param listener a property change listener */
@Override public synchronized void removePropertyChangeListener(IPropertyChangeListener listener) { listeners.remove(listener); if (listeners.size() == 0) { EclipsePreferences prefs = getPluginPreferences(false); if (prefs != null) { prefs.removePreferenceChangeListener(this); } pluginRoot.removeNodeChangeListener(this); } }
Does its best at determining the default value for the given key. Checks the given object's type and then looks in the list of defaults to see if a value exists. If not or if there is a problem converting the value, the default default value for that type is returned.
/** * Does its best at determining the default value for the given key. Checks the * given object's type and then looks in the list of defaults to see if a value * exists. If not or if there is a problem converting the value, the default default * value for that type is returned. */
private Object getDefault(String key, Object obj) { IEclipsePreferences defaults = getDefaultPreferences(); if (obj instanceof String) return defaults.get(key, STRING_DEFAULT_DEFAULT); else if (obj instanceof Integer) return Integer.valueOf(defaults.getInt(key, INT_DEFAULT_DEFAULT)); else if (obj instanceof Double) return Double.valueOf(defaults.getDouble(key, DOUBLE_DEFAULT_DEFAULT)); else if (obj instanceof Float) return Float.valueOf(defaults.getFloat(key, FLOAT_DEFAULT_DEFAULT)); else if (obj instanceof Long) return Long.valueOf(defaults.getLong(key, LONG_DEFAULT_DEFAULT)); else if (obj instanceof byte[]) return defaults.getByteArray(key, BYTE_ARRAY_DEFAULT_DEFAULT); else if (obj instanceof Boolean) return defaults.getBoolean(key, BOOLEAN_DEFAULT_DEFAULT) ? Boolean.TRUE : Boolean.FALSE; else return null; }
Returns whether the given property is known to this preference object, either by having an explicit setting or by having a default setting.
Params:
  • name – the name of the property
Returns:true if either a current value or a default value is known for the named property, and falseotherwise
/** * Returns whether the given property is known to this preference object, * either by having an explicit setting or by having a default * setting. * * @param name the name of the property * @return <code>true</code> if either a current value or a default * value is known for the named property, and <code>false</code>otherwise */
@Override public boolean contains(String name) { if (name == null) return false; String value = getPluginPreferences(true).get(name, null); if (value != null) return true; return getDefaultPreferences().get(name, null) != null; }
Returns the current value of the boolean-valued property with the given name. Returns the default-default value (false) if there is no property with the given name, or if the current value cannot be treated as a boolean.
Params:
  • name – the name of the property
Returns:the boolean-valued property
/** * Returns the current value of the boolean-valued property with the * given name. * Returns the default-default value (<code>false</code>) if there * is no property with the given name, or if the current value * cannot be treated as a boolean. * * @param name the name of the property * @return the boolean-valued property */
@Override public boolean getBoolean(String name) { return getPluginPreferences(true).getBoolean(name, getDefaultPreferences().getBoolean(name, BOOLEAN_DEFAULT_DEFAULT)); }
Sets the current value of the boolean-valued property with the given name.

A property change event is reported if the current value of the property actually changes from its previous value. In the event object, the property name is the name of the property, and the old and new values are wrapped as objects.

If the given value is the same as the corresponding default value for the given property, the explicit setting is deleted. Note that the recommended way of re-initializing a property to its default value is to call setToDefault.

Params:
  • name – the name of the property
  • value – the new current value of the property
/** * Sets the current value of the boolean-valued property with the * given name. * <p> * A property change event is reported if the current value of the * property actually changes from its previous value. In the event * object, the property name is the name of the property, and the * old and new values are wrapped as objects. * </p> * <p> * If the given value is the same as the corresponding default value * for the given property, the explicit setting is deleted. * Note that the recommended way of re-initializing a property to its * default value is to call <code>setToDefault</code>. * </p> * * @param name the name of the property * @param value the new current value of the property */
@Override public void setValue(String name, boolean value) { Boolean oldValue = getBoolean(name) ? Boolean.TRUE : Boolean.FALSE; Boolean newValue = value ? Boolean.TRUE : Boolean.FALSE; if (newValue == oldValue) return; try { notify = false; if (getDefaultBoolean(name) == value) getPluginPreferences(true).remove(name); else getPluginPreferences(true).putBoolean(name, value); firePropertyChangeEvent(name, oldValue, newValue); } finally { notify = true; } }
Returns the default value for the boolean-valued property with the given name. Returns the default-default value (false) if there is no default property with the given name, or if the default value cannot be treated as a boolean.
Params:
  • name – the name of the property
Returns:the default value of the named property
/** * Returns the default value for the boolean-valued property * with the given name. * Returns the default-default value (<code>false</code>) if there * is no default property with the given name, or if the default * value cannot be treated as a boolean. * * @param name the name of the property * @return the default value of the named property */
@Override public boolean getDefaultBoolean(String name) { return getDefaultPreferences().getBoolean(name, BOOLEAN_DEFAULT_DEFAULT); }
Sets the default value for the boolean-valued property with the given name.

Note that the current value of the property is affected if the property's current value was its old default value, in which case it changes to the new default value. If the property's current is different from its old default value, its current value is unaffected. No property change events are reported by changing default values.

Params:
  • name – the name of the property
  • value – the new default value for the property
/** * Sets the default value for the boolean-valued property with the * given name. * <p> * Note that the current value of the property is affected if * the property's current value was its old default value, in which * case it changes to the new default value. If the property's current * is different from its old default value, its current value is * unaffected. No property change events are reported by changing default * values. * </p> * * @param name the name of the property * @param value the new default value for the property */
@Override public void setDefault(String name, boolean value) { getDefaultPreferences().putBoolean(name, value); }
Returns the current value of the double-valued property with the given name. Returns the default-default value (0.0) if there is no property with the given name, or if the current value cannot be treated as a double.
Params:
  • name – the name of the property
Returns:the double-valued property
/** * Returns the current value of the double-valued property with the * given name. * Returns the default-default value (<code>0.0</code>) if there * is no property with the given name, or if the current value * cannot be treated as a double. * * @param name the name of the property * @return the double-valued property */
@Override public double getDouble(String name) { return getPluginPreferences(true).getDouble(name, getDefaultPreferences().getDouble(name, DOUBLE_DEFAULT_DEFAULT)); }
Sets the current value of the double-valued property with the given name.

A property change event is reported if the current value of the property actually changes from its previous value. In the event object, the property name is the name of the property, and the old and new values are wrapped as objects.

If the given value is the same as the corresponding default value for the given property, the explicit setting is deleted. Note that the recommended way of re-initializing a property to its default value is to call setToDefault.

Params:
  • name – the name of the property
  • value – the new current value of the property; must be a number (not a NaN)
/** * Sets the current value of the double-valued property with the * given name. * <p> * A property change event is reported if the current value of the * property actually changes from its previous value. In the event * object, the property name is the name of the property, and the * old and new values are wrapped as objects. * </p> * <p> * If the given value is the same as the corresponding default value * for the given property, the explicit setting is deleted. * Note that the recommended way of re-initializing a property to its * default value is to call <code>setToDefault</code>. * </p> * * @param name the name of the property * @param value the new current value of the property; must be * a number (not a NaN) */
@Override public void setValue(String name, double value) { if (Double.isNaN(value)) throw new IllegalArgumentException(); final double doubleValue = getDouble(name); if (value == doubleValue) return; Double oldValue = Double.valueOf(doubleValue); Double newValue = Double.valueOf(value); try { notify = false; if (getDefaultDouble(name) == value) getPluginPreferences(true).remove(name); else getPluginPreferences(true).putDouble(name, value); firePropertyChangeEvent(name, oldValue, newValue); } finally { notify = true; } }
Returns the default value for the double-valued property with the given name. Returns the default-default value (0.0) if there is no default property with the given name, or if the default value cannot be treated as a double.
Params:
  • name – the name of the property
Returns:the default value of the named property
/** * Returns the default value for the double-valued property * with the given name. * Returns the default-default value (<code>0.0</code>) if there * is no default property with the given name, or if the default * value cannot be treated as a double. * * @param name the name of the property * @return the default value of the named property */
@Override public double getDefaultDouble(String name) { return getDefaultPreferences().getDouble(name, DOUBLE_DEFAULT_DEFAULT); }
Sets the default value for the double-valued property with the given name.

Note that the current value of the property is affected if the property's current value was its old default value, in which case it changes to the new default value. If the property's current is different from its old default value, its current value is unaffected. No property change events are reported by changing default values.

Params:
  • name – the name of the property
  • value – the new default value for the property; must be a number (not a NaN)
/** * Sets the default value for the double-valued property with the * given name. * <p> * Note that the current value of the property is affected if * the property's current value was its old default value, in which * case it changes to the new default value. If the property's current * is different from its old default value, its current value is * unaffected. No property change events are reported by changing default * values. * </p> * * @param name the name of the property * @param value the new default value for the property; must be * a number (not a NaN) */
@Override public void setDefault(String name, double value) { if (Double.isNaN(value)) throw new IllegalArgumentException(); getDefaultPreferences().putDouble(name, value); }
Returns the current value of the float-valued property with the given name. Returns the default-default value (0.0f) if there is no property with the given name, or if the current value cannot be treated as a float.
Params:
  • name – the name of the property
Returns:the float-valued property
/** * Returns the current value of the float-valued property with the * given name. * Returns the default-default value (<code>0.0f</code>) if there * is no property with the given name, or if the current value * cannot be treated as a float. * * @param name the name of the property * @return the float-valued property */
@Override public float getFloat(String name) { return getPluginPreferences(true).getFloat(name, getDefaultPreferences().getFloat(name, FLOAT_DEFAULT_DEFAULT)); }
Sets the current value of the float-valued property with the given name.

A property change event is reported if the current value of the property actually changes from its previous value. In the event object, the property name is the name of the property, and the old and new values are wrapped as objects.

If the given value is the same as the corresponding default value for the given property, the explicit setting is deleted. Note that the recommended way of re-initializing a property to its default value is to call setToDefault.

Params:
  • name – the name of the property
  • value – the new current value of the property; must be a number (not a NaN)
/** * Sets the current value of the float-valued property with the * given name. * <p> * A property change event is reported if the current value of the * property actually changes from its previous value. In the event * object, the property name is the name of the property, and the * old and new values are wrapped as objects. * </p> * <p> * If the given value is the same as the corresponding default value * for the given property, the explicit setting is deleted. * Note that the recommended way of re-initializing a property to its * default value is to call <code>setToDefault</code>. * </p> * * @param name the name of the property * @param value the new current value of the property; must be * a number (not a NaN) */
@Override public void setValue(String name, float value) { if (Float.isNaN(value)) throw new IllegalArgumentException(); final float floatValue = getFloat(name); if (value == floatValue) return; Float oldValue = Float.valueOf(floatValue); Float newValue = Float.valueOf(value); try { notify = false; if (getDefaultFloat(name) == value) getPluginPreferences(true).remove(name); else getPluginPreferences(true).putFloat(name, value); firePropertyChangeEvent(name, oldValue, newValue); } finally { notify = true; } }
Returns the default value for the float-valued property with the given name. Returns the default-default value (0.0f) if there is no default property with the given name, or if the default value cannot be treated as a float.
Params:
  • name – the name of the property
Returns:the default value of the named property
/** * Returns the default value for the float-valued property * with the given name. * Returns the default-default value (<code>0.0f</code>) if there * is no default property with the given name, or if the default * value cannot be treated as a float. * * @param name the name of the property * @return the default value of the named property */
@Override public float getDefaultFloat(String name) { return getDefaultPreferences().getFloat(name, FLOAT_DEFAULT_DEFAULT); }
Sets the default value for the float-valued property with the given name.

Note that the current value of the property is affected if the property's current value was its old default value, in which case it changes to the new default value. If the property's current is different from its old default value, its current value is unaffected. No property change events are reported by changing default values.

Params:
  • name – the name of the property
  • value – the new default value for the property; must be a number (not a NaN)
/** * Sets the default value for the float-valued property with the * given name. * <p> * Note that the current value of the property is affected if * the property's current value was its old default value, in which * case it changes to the new default value. If the property's current * is different from its old default value, its current value is * unaffected. No property change events are reported by changing default * values. * </p> * * @param name the name of the property * @param value the new default value for the property; must be * a number (not a NaN) */
@Override public void setDefault(String name, float value) { if (Float.isNaN(value)) throw new IllegalArgumentException(); getDefaultPreferences().putFloat(name, value); }
Returns the current value of the integer-valued property with the given name. Returns the default-default value (0) if there is no property with the given name, or if the current value cannot be treated as an integter.
Params:
  • name – the name of the property
Returns:the int-valued property
/** * Returns the current value of the integer-valued property with the * given name. * Returns the default-default value (<code>0</code>) if there * is no property with the given name, or if the current value * cannot be treated as an integter. * * @param name the name of the property * @return the int-valued property */
@Override public int getInt(String name) { return getPluginPreferences(true).getInt(name, getDefaultPreferences().getInt(name, INT_DEFAULT_DEFAULT)); }
Sets the current value of the integer-valued property with the given name.

A property change event is reported if the current value of the property actually changes from its previous value. In the event object, the property name is the name of the property, and the old and new values are wrapped as objects.

If the given value is the same as the corresponding default value for the given property, the explicit setting is deleted. Note that the recommended way of re-initializing a property to its default value is to call setToDefault.

Params:
  • name – the name of the property
  • value – the new current value of the property
/** * Sets the current value of the integer-valued property with the * given name. * <p> * A property change event is reported if the current value of the * property actually changes from its previous value. In the event * object, the property name is the name of the property, and the * old and new values are wrapped as objects. * </p> * <p> * If the given value is the same as the corresponding default value * for the given property, the explicit setting is deleted. * Note that the recommended way of re-initializing a property to its * default value is to call <code>setToDefault</code>. * </p> * * @param name the name of the property * @param value the new current value of the property */
@Override public void setValue(String name, int value) { final int intValue = getInt(name); if (value == intValue) return; Integer oldValue = Integer.valueOf(intValue); Integer newValue = Integer.valueOf(value); try { notify = false; if (getDefaultInt(name) == value) getPluginPreferences(true).remove(name); else getPluginPreferences(true).putInt(name, value); firePropertyChangeEvent(name, oldValue, newValue); } finally { notify = true; } }
Returns the default value for the integer-valued property with the given name. Returns the default-default value (0) if there is no default property with the given name, or if the default value cannot be treated as an integer.
Params:
  • name – the name of the property
Returns:the default value of the named property
/** * Returns the default value for the integer-valued property * with the given name. * Returns the default-default value (<code>0</code>) if there * is no default property with the given name, or if the default * value cannot be treated as an integer. * * @param name the name of the property * @return the default value of the named property */
@Override public int getDefaultInt(String name) { return getDefaultPreferences().getInt(name, INT_DEFAULT_DEFAULT); }
Sets the default value for the integer-valued property with the given name.

Note that the current value of the property is affected if the property's current value was its old default value, in which case it changes to the new default value. If the property's current is different from its old default value, its current value is unaffected. No property change events are reported by changing default values.

Params:
  • name – the name of the property
  • value – the new default value for the property
/** * Sets the default value for the integer-valued property with the * given name. * <p> * Note that the current value of the property is affected if * the property's current value was its old default value, in which * case it changes to the new default value. If the property's current * is different from its old default value, its current value is * unaffected. No property change events are reported by changing default * values. * </p> * * @param name the name of the property * @param value the new default value for the property */
@Override public void setDefault(String name, int value) { getDefaultPreferences().putInt(name, value); }
Returns the current value of the long-valued property with the given name. Returns the default-default value (0L) if there is no property with the given name, or if the current value cannot be treated as a long.
Params:
  • name – the name of the property
Returns:the long-valued property
/** * Returns the current value of the long-valued property with the * given name. * Returns the default-default value (<code>0L</code>) if there * is no property with the given name, or if the current value * cannot be treated as a long. * * @param name the name of the property * @return the long-valued property */
@Override public long getLong(String name) { return getPluginPreferences(true).getLong(name, getDefaultPreferences().getLong(name, LONG_DEFAULT_DEFAULT)); }
Sets the current value of the long-valued property with the given name.

A property change event is reported if the current value of the property actually changes from its previous value. In the event object, the property name is the name of the property, and the old and new values are wrapped as objects.

If the given value is the same as the corresponding default value for the given property, the explicit setting is deleted. Note that the recommended way of re-initializing a property to its default value is to call setToDefault.

Params:
  • name – the name of the property
  • value – the new current value of the property
/** * Sets the current value of the long-valued property with the * given name. * <p> * A property change event is reported if the current value of the * property actually changes from its previous value. In the event * object, the property name is the name of the property, and the * old and new values are wrapped as objects. * </p> * <p> * If the given value is the same as the corresponding default value * for the given property, the explicit setting is deleted. * Note that the recommended way of re-initializing a property to its * default value is to call <code>setToDefault</code>. * </p> * * @param name the name of the property * @param value the new current value of the property */
@Override public void setValue(String name, long value) { final long longValue = getLong(name); if (value == longValue) return; Long oldValue = Long.valueOf(longValue); Long newValue = Long.valueOf(value); try { notify = false; if (getDefaultLong(name) == value) getPluginPreferences(true).remove(name); else getPluginPreferences(true).putLong(name, value); firePropertyChangeEvent(name, oldValue, newValue); } finally { notify = true; } }
Returns the default value for the long-valued property with the given name. Returns the default-default value (0L) if there is no default property with the given name, or if the default value cannot be treated as a long.
Params:
  • name – the name of the property
Returns:the default value of the named property
/** * Returns the default value for the long-valued property * with the given name. * Returns the default-default value (<code>0L</code>) if there * is no default property with the given name, or if the default * value cannot be treated as a long. * * @param name the name of the property * @return the default value of the named property */
@Override public long getDefaultLong(String name) { return getDefaultPreferences().getLong(name, LONG_DEFAULT_DEFAULT); }
Sets the default value for the long-valued property with the given name.

Note that the current value of the property is affected if the property's current value was its old default value, in which case it changes to the new default value. If the property's current is different from its old default value, its current value is unaffected. No property change events are reported by changing default values.

Params:
  • name – the name of the property
  • value – the new default value for the property
/** * Sets the default value for the long-valued property with the * given name. * <p> * Note that the current value of the property is affected if * the property's current value was its old default value, in which * case it changes to the new default value. If the property's current * is different from its old default value, its current value is * unaffected. No property change events are reported by changing default * values. * </p> * * @param name the name of the property * @param value the new default value for the property */
@Override public void setDefault(String name, long value) { getDefaultPreferences().putLong(name, value); }
Returns the current value of the string-valued property with the given name. Returns the default-default value (the empty string "") if there is no property with the given name.
Params:
  • name – the name of the property
Returns:the string-valued property
/** * Returns the current value of the string-valued property with the * given name. * Returns the default-default value (the empty string <code>""</code>) * if there is no property with the given name. * * @param name the name of the property * @return the string-valued property */
@Override public String getString(String name) { return getPluginPreferences(true).get(name, getDefaultPreferences().get(name, STRING_DEFAULT_DEFAULT)); }
Sets the current value of the string-valued property with the given name.

A property change event is reported if the current value of the property actually changes from its previous value. In the event object, the property name is the name of the property, and the old and new values are wrapped as objects.

If the given value is the same as the corresponding default value for the given property, the explicit setting is deleted. Note that the recommended way of re-initializing a property to its default value is to call setToDefault.

Params:
  • name – the name of the property
  • value – the new current value of the property
/** * Sets the current value of the string-valued property with the * given name. * <p> * A property change event is reported if the current value of the * property actually changes from its previous value. In the event * object, the property name is the name of the property, and the * old and new values are wrapped as objects. * </p> * <p> * If the given value is the same as the corresponding default value * for the given property, the explicit setting is deleted. * Note that the recommended way of re-initializing a property to its * default value is to call <code>setToDefault</code>. * </p> * * @param name the name of the property * @param value the new current value of the property */
@Override public void setValue(String name, String value) { if (value == null) throw new IllegalArgumentException(); String oldValue = getString(name); if (value.equals(oldValue)) return; try { notify = false; if (getDefaultString(name).equals(value)) getPluginPreferences(true).remove(name); else getPluginPreferences(true).put(name, value); firePropertyChangeEvent(name, oldValue, value); } finally { notify = true; } }
Returns the default value for the string-valued property with the given name. Returns the default-default value (the empty string "") is no default property with the given name, or if the default value cannot be treated as a string.
Params:
  • name – the name of the property
Returns:the default value of the named property
/** * Returns the default value for the string-valued property * with the given name. * Returns the default-default value (the empty string <code>""</code>) * is no default property with the given name, or if the default * value cannot be treated as a string. * * @param name the name of the property * @return the default value of the named property */
@Override public String getDefaultString(String name) { return getDefaultPreferences().get(name, STRING_DEFAULT_DEFAULT); }
Sets the default value for the string-valued property with the given name.

Note that the current value of the property is affected if the property's current value was its old default value, in which case it changes to the new default value. If the property's current is different from its old default value, its current value is unaffected. No property change events are reported by changing default values.

Params:
  • name – the name of the property
  • value – the new default value for the property
/** * Sets the default value for the string-valued property with the * given name. * <p> * Note that the current value of the property is affected if * the property's current value was its old default value, in which * case it changes to the new default value. If the property's current * is different from its old default value, its current value is * unaffected. No property change events are reported by changing default * values. * </p> * * @param name the name of the property * @param value the new default value for the property */
@Override public void setDefault(String name, String value) { if (value == null) throw new IllegalArgumentException(); getDefaultPreferences().put(name, value); }
Returns whether the property with the given name has the default value in virtue of having no explicitly set value.
Params:
  • name – the name of the property
Returns:true if the property has no explicitly set value, and false otherwise (including the case where the property is unknown to this object)
/** * Returns whether the property with the given name has the default value in * virtue of having no explicitly set value. * * @param name the name of the property * @return <code>true</code> if the property has no explicitly set value, * and <code>false</code> otherwise (including the case where the property * is unknown to this object) */
@Override public boolean isDefault(String name) { if (name == null) return false; return getPluginPreferences(true).get(name, null) == null; }
Sets the current value of the property with the given name back to its default value. Has no effect if the property does not have its own current value.

Note that the recommended way of re-initializing a property to the appropriate default value is to call setToDefault. This is implemented by removing the named value from the object, thereby exposing the default value.

A property change event is always reported. In the event object, the property name is the name of the property, and the old and new values are either strings, or null indicating the default-default value.

Params:
  • name – the name of the property
/** * Sets the current value of the property with the given name back * to its default value. Has no effect if the property does not have * its own current value. * <p> * Note that the recommended way of re-initializing a property to the * appropriate default value is to call <code>setToDefault</code>. * This is implemented by removing the named value from the object, * thereby exposing the default value. * </p> * <p> * A property change event is always reported. In the event * object, the property name is the name of the property, and the * old and new values are either strings, or <code>null</code> * indicating the default-default value. * </p> * * @param name the name of the property */
@Override public void setToDefault(String name) { IEclipsePreferences preferences = getPluginPreferences(true); Object oldValue = preferences.get(name, null); if (oldValue != null) preferences.remove(name); }
Returns a list of all properties known to this preference object which have current values other than their default value.
Returns:an array of property names
/** * Returns a list of all properties known to this preference object which * have current values other than their default value. * * @return an array of property names */
@Override public String[] propertyNames() { return getPluginPreferences(true).keys(); }
Returns a list of all properties known to this preference object which have default values other than their default-default value.
Returns:an array of property names
/** * Returns a list of all properties known to this preference object which * have default values other than their default-default value. * * @return an array of property names */
@Override public String[] defaultPropertyNames() { try { return getDefaultPreferences().keys(); } catch (BackingStoreException e) { logError(e.getMessage(), e); return new String[0]; } }
Returns whether the current values in this preference object require saving.
Returns:true if at least one of the properties known to this preference object has a current value different from its default value, and false otherwise
/** * Returns whether the current values in this preference object * require saving. * * @return <code>true</code> if at least one of the properties * known to this preference object has a current value different from its * default value, and <code>false</code> otherwise */
@Override public boolean needsSaving() { return getPluginPreferences(true).isDirty(); }
Flush the values of these plug-in preferences to disk.
Throws:
  • BackingStoreException –
/** * Flush the values of these plug-in preferences to disk. * * @throws BackingStoreException */
public void flush() throws BackingStoreException { IEclipsePreferences node = getPluginPreferences(false); if (node != null) node.flush(); } /* * Something bad happened so log it. */ private void logError(String message, Exception e) { IStatus status = new Status(IStatus.ERROR, PrefsMessages.OWNER_NAME, IStatus.ERROR, message, e); RuntimeLog.log(status); } /* * @see org.eclipse.core.runtime.Preferences#load(java.io.InputStream) */ @Override public void load(InputStream in) throws IOException { Properties result = new Properties(); result.load(in); convertFromProperties(result); // We loaded the prefs from a non-default location so now // store them to disk. This also clears the dirty flag // and therefore sets the #needsSaving() state correctly. try { flush(); } catch (BackingStoreException e) { throw new IOException(e.getMessage()); } } /* * @see org.eclipse.core.runtime.Preferences#store(java.io.OutputStream, java.lang.String) */ @Override public void store(OutputStream out, String header) throws IOException { Properties result = convertToProperties(); result.store(out, header); // We stored the prefs to a non-default location but the spec // says that the dirty state is cleared so we want to store // them to disk at the default location as well. try { flush(); } catch (BackingStoreException e) { throw new IOException(e.getMessage()); } } private void convertFromProperties(Properties props) { IEclipsePreferences preferences = getPluginPreferences(true); for (Object object : props.keySet()) { String key = (String) object; String value = props.getProperty(key); if (value != null) preferences.put(key, value); } } @Override public String toString() { return "PreferenceForwarder(" + pluginID + ")"; //$NON-NLS-1$ //$NON-NLS-2$ } /* * Convert the preferences in this node to a properties file * suitable for persistence. */ private Properties convertToProperties() { Properties result = new Properties(); String[] keys = propertyNames(); for (String key : keys) { String value = getString(key); if (!Preferences.STRING_DEFAULT_DEFAULT.equals(value)) result.put(key, value); } return result; } }