001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.spi.preferences;
003
004import java.util.Collections;
005import java.util.HashMap;
006import java.util.Map;
007import java.util.Objects;
008import java.util.Set;
009
010/**
011 * Preferences implementation that keeps all settings in memory.
012 *
013 * Holds saved preferences for the current session, but does not retain any data when the
014 * program terminates.
015 *
016 * @since 12906
017 */
018public class MemoryPreferences extends AbstractPreferences {
019
020    private final Map<String, Setting<?>> settings = new HashMap<>();
021
022    @Override
023    public boolean putSetting(String key, Setting<?> setting) {
024        Setting current = settings.get(key);
025        if (setting == null) {
026            settings.remove(key);
027        } else {
028            settings.put(key, setting);
029        }
030        return Objects.equals(setting, current);
031    }
032
033    @Override
034    public <T extends Setting<?>> T getSetting(String key, T def, Class<T> klass) {
035        Setting current = settings.get(key);
036        if (current != null && klass.isInstance(current)) {
037            @SuppressWarnings("unchecked")
038            T result = (T) current;
039            return result;
040        }
041        return def;
042    }
043
044    @Override
045    public Set<String> getKeySet() {
046        return Collections.unmodifiableSet(settings.keySet());
047    }
048
049    @Override
050    public void addPreferenceChangeListener(PreferenceChangedListener listener) {
051        // do nothing
052    }
053
054    @Override
055    public void removePreferenceChangeListener(PreferenceChangedListener listener) {
056        // do nothing
057    }
058
059    @Override
060    public void addKeyPreferenceChangeListener(String key, PreferenceChangedListener listener) {
061        // do nothing
062    }
063
064    @Override
065    public void removeKeyPreferenceChangeListener(String key, PreferenceChangedListener listener) {
066        // do nothing
067    }
068
069}