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}