org.eclipse.net4j.util.ui.prefs.OMPreferenceStore.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.net4j.util.ui.prefs.OMPreferenceStore.java

Source

/*
 * Copyright (c) 2007-2009, 2011, 2012, 2015 Eike Stepper (Berlin, Germany) 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:
 *    Eike Stepper - initial API and implementation
 */
package org.eclipse.net4j.util.ui.prefs;

import org.eclipse.net4j.util.event.IEvent;
import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.internal.ui.bundle.OM;
import org.eclipse.net4j.util.om.pref.OMPreference;
import org.eclipse.net4j.util.om.pref.OMPreferences;
import org.eclipse.net4j.util.om.pref.OMPreferencesChangeEvent;

import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Eike Stepper
 */
public class OMPreferenceStore implements IPreferenceStore {
    private OMPreferences preferences;

    private List<IPropertyChangeListener> listeners = new ArrayList<IPropertyChangeListener>(0);

    private IListener preferencesListener = new IListener() {
        public void notifyEvent(IEvent event) {
            if (event instanceof OMPreferencesChangeEvent<?>) {
                OMPreferencesChangeEvent<?> e = (OMPreferencesChangeEvent<?>) event;
                firePropertyChangeEvent(e.getPreference().getName(), e.getOldValue(), e.getNewValue());
            }
        }
    };

    public OMPreferenceStore(OMPreferences preferences) {
        this.preferences = preferences;
        preferences.addListener(preferencesListener);
    }

    public void dispose() {
        preferences.removeListener(preferencesListener);
    }

    public OMPreferences getPreferences() {
        return preferences;
    }

    public void addPropertyChangeListener(IPropertyChangeListener listener) {
        synchronized (listeners) {
            if (!listeners.contains(listener)) {
                listeners.add(listener);
            }
        }
    }

    public void removePropertyChangeListener(IPropertyChangeListener listener) {
        synchronized (listeners) {
            listeners.remove(listener);
        }
    }

    public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) {
        PropertyChangeEvent event = new PropertyChangeEvent(this, name, oldValue, newValue);
        for (IPropertyChangeListener listener : getPropertyChangeListenerListeners()) {
            try {
                listener.propertyChange(event);
            } catch (RuntimeException ex) {
                OM.LOG.error(ex);
            }
        }
    }

    public boolean contains(String name) {
        return preferences.contains(name);
    }

    public boolean isDefault(String name) {
        return !getPreference(name).isSet();
    }

    public boolean needsSaving() {
        return preferences.isDirty();
    }

    public boolean getDefaultBoolean(String name) {
        return (Boolean) getPreference(name).getDefaultValue();
    }

    public double getDefaultDouble(String name) {
        return (Double) getPreference(name).getDefaultValue();
    }

    public float getDefaultFloat(String name) {
        return (Float) getPreference(name).getDefaultValue();
    }

    public int getDefaultInt(String name) {
        return (Integer) getPreference(name).getDefaultValue();
    }

    public long getDefaultLong(String name) {
        return (Long) getPreference(name).getDefaultValue();
    }

    public String getDefaultString(String name) {
        return (String) getPreference(name).getDefaultValue();
    }

    public void setDefault(String name, boolean value) {
        throw new UnsupportedOperationException();
    }

    public void setDefault(String name, double value) {
        throw new UnsupportedOperationException();
    }

    public void setDefault(String name, float value) {
        throw new UnsupportedOperationException();
    }

    public void setDefault(String name, int value) {
        throw new UnsupportedOperationException();
    }

    public void setDefault(String name, long value) {
        throw new UnsupportedOperationException();
    }

    public void setDefault(String name, String defaultObject) {
        throw new UnsupportedOperationException();
    }

    public void setToDefault(String name) {
        getPreference(name).unSet();
    }

    public boolean getBoolean(String name) {
        return (Boolean) getPreference(name).getValue();
    }

    public double getDouble(String name) {
        return (Double) getPreference(name).getValue();
    }

    public float getFloat(String name) {
        return (Float) getPreference(name).getValue();
    }

    public int getInt(String name) {
        return (Integer) getPreference(name).getValue();
    }

    public long getLong(String name) {
        return (Long) getPreference(name).getValue();
    }

    public String getString(String name) {
        return (String) getPreference(name).getValue();
    }

    public void putValue(String name, String value) {
        throw new UnsupportedOperationException();
    }

    @SuppressWarnings("unchecked")
    public void setValue(String name, boolean value) {
        OMPreference<Boolean> pref = (OMPreference<Boolean>) getPreference(name);
        pref.setValue(value);
    }

    @SuppressWarnings("unchecked")
    public void setValue(String name, double value) {
        OMPreference<Double> pref = (OMPreference<Double>) getPreference(name);
        pref.setValue(value);
    }

    @SuppressWarnings("unchecked")
    public void setValue(String name, float value) {
        OMPreference<Float> pref = (OMPreference<Float>) getPreference(name);
        pref.setValue(value);
    }

    @SuppressWarnings("unchecked")
    public void setValue(String name, int value) {
        OMPreference<Integer> pref = (OMPreference<Integer>) getPreference(name);
        pref.setValue(value);
    }

    @SuppressWarnings("unchecked")
    public void setValue(String name, long value) {
        OMPreference<Long> pref = (OMPreference<Long>) getPreference(name);
        pref.setValue(value);
    }

    @SuppressWarnings("unchecked")
    public void setValue(String name, String value) {
        OMPreference<String> pref = (OMPreference<String>) getPreference(name);
        pref.setValue(value);
    }

    private IPropertyChangeListener[] getPropertyChangeListenerListeners() {
        synchronized (listeners) {
            return listeners.toArray(new IPropertyChangeListener[listeners.size()]);
        }
    }

    private OMPreference<?> getPreference(String name) {
        OMPreference<?> pref = preferences.get(name);
        if (pref == null) {
            throw new IllegalStateException("No preference for " + name); //$NON-NLS-1$
        }

        return pref;
    }
}