/******************************************************************************* * Copyright (c) 2005-2010, G. Weirich and Elexis * 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: * G. Weirich - initial implementation * *******************************************************************************/ package ch.elexis.core.ui.preferences; import static ch.elexis.core.constants.Preferences.SETTINGS_PREFERENCE_STORE_DEFAULT; import java.util.LinkedList; import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.core.runtime.preferences.IScopeContext; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import ch.rgw.io.Settings; /** * Dies ist eine Adapterklasse, die ch.rgw.tools.IO.Settings auf Eclipse-Preferences abbildet. Es * sollte keine direkte Verwendung dieser Klasse notwendig sein. Intern wird das localCfg-Feld auf * SysSettings und das globalCfg-Feld auf SqlSettings abgebildet * * @author Gerry */ public class SettingsPreferenceStore implements IPreferenceStore { /** * The default context is the context where getDefault and setDefault methods will search. This * context is also used in the search. */ private IScopeContext defaultContext = null; Settings base; private LinkedList<IPropertyChangeListener> listeners = new LinkedList<IPropertyChangeListener>(); /** * Default constructor for the SettingsPreferenceStore. ATTENTION initializers * (org.eclipse.core.runtime.preferences) will not be executed. * * @param base */ public SettingsPreferenceStore(Settings base){ this.base = base; } /** * Constructor for the SettingsPreferenceStore registered initializers * (org.eclipse.core.runtime.preferences) will be executed. * * @param base * @param pluginId */ public SettingsPreferenceStore(Settings base, String pluginId){ this.base = base; defaultContext = new DefaultScope(); defaultContext.getNode(pluginId); } public Settings getBase(){ return base; } public void flush(){ base.flush(); } public void undo(){ base.undo(); } private void set(String field, String value){ base.set(field, value); } private String get(String field){ String z = base.get(field, null); if (z == null) { z = base.get(field + SETTINGS_PREFERENCE_STORE_DEFAULT, null); if (z == null) { z = ""; //$NON-NLS-1$ } } return z; } public void addPropertyChangeListener(IPropertyChangeListener listener){ listeners.add(listener); } public boolean contains(String name){ if (base.get(name, null) == null) { return false; } return true; } public void firePropertyChangeEvent(String name, Object oldValue, Object newValue){ for (IPropertyChangeListener l : listeners) { l.propertyChange(new PropertyChangeEvent(this, name, oldValue, newValue)); } } public boolean getBoolean(String name){ String z = get(name); if (z.isEmpty()) { return false; } if (z.equals("0")) { //$NON-NLS-1$ return false; } if (z.equalsIgnoreCase("FALSE")) { //$NON-NLS-1$ return false; } return true; } public boolean getDefaultBoolean(String name){ return getBoolean(name + SETTINGS_PREFERENCE_STORE_DEFAULT); } public double getDefaultDouble(String name){ return getDouble(name + SETTINGS_PREFERENCE_STORE_DEFAULT); } public float getDefaultFloat(String name){ return getFloat(name + SETTINGS_PREFERENCE_STORE_DEFAULT); } public int getDefaultInt(String name){ return getInt(name + SETTINGS_PREFERENCE_STORE_DEFAULT); } public long getDefaultLong(String name){ return getLong(name + SETTINGS_PREFERENCE_STORE_DEFAULT); } public String getDefaultString(String name){ return getString(name + SETTINGS_PREFERENCE_STORE_DEFAULT); } public double getDouble(String name){ return Double.parseDouble(get(name)); } public float getFloat(String name){ return Float.parseFloat(get(name)); } /** * return an Integer. If the Value is not an Integer ot nonexistent, we return 0 (@see * IPreferenceStore) */ public int getInt(String name){ try { return Integer.parseInt(get(name)); } catch (NumberFormatException ne) { return 0; } } public long getLong(String name){ return Long.parseLong(get(name)); } public String getString(String name){ return get(name); } public boolean isDefault(String name){ String def = get(name + SETTINGS_PREFERENCE_STORE_DEFAULT); String act = get(name); return def.equals(act); } public boolean needsSaving(){ return base.isDirty(); } public void putValue(String name, String value){ set(name, value); } public void remove(String name){ base.remove(name); } public void removePropertyChangeListener(IPropertyChangeListener listener){ listeners.remove(listener); } public void setDefault(String name, double value){ set(name + SETTINGS_PREFERENCE_STORE_DEFAULT, Double.toString(value)); } public void setDefault(String name, float value){ set(name + SETTINGS_PREFERENCE_STORE_DEFAULT, Float.toString(value)); } public void setDefault(String name, int value){ set(name + SETTINGS_PREFERENCE_STORE_DEFAULT, Integer.toString(value)); } public void setDefault(String name, long value){ set(name + SETTINGS_PREFERENCE_STORE_DEFAULT, Long.toString(value)); } public void setDefault(String name, String defaultObject){ set(name + SETTINGS_PREFERENCE_STORE_DEFAULT, defaultObject); } public void setDefault(String name, boolean value){ set(name + SETTINGS_PREFERENCE_STORE_DEFAULT, Boolean.toString(value)); } public void setToDefault(String name){ set(name, get(name + SETTINGS_PREFERENCE_STORE_DEFAULT)); } public void setValue(String name, double value){ firePropertyChangeEvent(name, getDouble(name), value); set(name, Double.toString(value)); } public void setValue(String name, float value){ firePropertyChangeEvent(name, getFloat(name), value); set(name, Float.toString(value)); } public void setValue(String name, int value){ firePropertyChangeEvent(name, getInt(name), value); set(name, Integer.toString(value)); } public void setValue(String name, long value){ firePropertyChangeEvent(name, getLong(name), value); set(name, Long.toString(value)); } public void setValue(String name, String value){ firePropertyChangeEvent(name, getString(name), value); set(name, value); } public void setValue(String name, boolean value){ firePropertyChangeEvent(name, getBoolean(name), value); set(name, Boolean.toString(value)); } }