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