source: josm/trunk/src/org/openstreetmap/josm/spi/preferences/AbstractPreferences.java@ 14183

Last change on this file since 14183 was 14147, checked in by Don-vip, 6 years ago

see #15229 - code refactoring - move getAllPrefix* methods from Preferences to AbstractPreferences

File size: 6.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.spi.preferences;
3
4import java.util.LinkedList;
5import java.util.List;
6import java.util.Map;
7import java.util.Map.Entry;
8import java.util.TreeMap;
9
10import org.openstreetmap.josm.tools.Logging;
11
12/**
13 * Abstract implementation of the {@link IPreferences} interface.
14 * @since 12847
15 */
16public abstract class AbstractPreferences implements IPreferences {
17
18 @Override
19 public synchronized String get(final String key, final String def) {
20 return getSetting(key, new StringSetting(def), StringSetting.class).getValue();
21 }
22
23 @Override
24 public boolean put(final String key, String value) {
25 return putSetting(key, value == null || value.isEmpty() ? null : new StringSetting(value));
26 }
27
28 @Override
29 public boolean getBoolean(final String key, final boolean def) {
30 return Boolean.parseBoolean(get(key, Boolean.toString(def)));
31 }
32
33 @Override
34 public boolean putBoolean(final String key, final boolean value) {
35 return put(key, Boolean.toString(value));
36 }
37
38 @Override
39 public synchronized int getInt(String key, int def) {
40 String v = get(key, Integer.toString(def));
41 if (v.isEmpty())
42 return def;
43
44 try {
45 return Integer.parseInt(v);
46 } catch (NumberFormatException e) {
47 // fall out
48 Logging.trace(e);
49 }
50 return def;
51 }
52
53 @Override
54 public boolean putInt(String key, int value) {
55 return put(key, Integer.toString(value));
56 }
57
58 @Override
59 public long getLong(String key, long def) {
60 String v = get(key, Long.toString(def));
61 if (null == v)
62 return def;
63
64 try {
65 return Long.parseLong(v);
66 } catch (NumberFormatException e) {
67 // fall out
68 Logging.trace(e);
69 }
70 return def;
71 }
72
73 @Override
74 public boolean putLong(final String key, final long value) {
75 return put(key, Long.toString(value));
76 }
77
78 @Override
79 public synchronized double getDouble(String key, double def) {
80 String v = get(key, Double.toString(def));
81 if (null == v)
82 return def;
83
84 try {
85 return Double.parseDouble(v);
86 } catch (NumberFormatException e) {
87 // fall out
88 Logging.trace(e);
89 }
90 return def;
91 }
92
93 @Override
94 public boolean putDouble(final String key, final double value) {
95 return put(key, Double.toString(value));
96 }
97
98 @Override
99 public List<String> getList(String key, List<String> def) {
100 return getSetting(key, new ListSetting(def), ListSetting.class).getValue();
101 }
102
103 @Override
104 public boolean putList(String key, List<String> value) {
105 return putSetting(key, value == null ? null : new ListSetting(value));
106 }
107
108 @Override
109 public List<List<String>> getListOfLists(String key, List<List<String>> def) {
110 return getSetting(key, new ListListSetting(def), ListListSetting.class).getValue();
111 }
112
113 @Override
114 public boolean putListOfLists(String key, List<List<String>> value) {
115 return putSetting(key, value == null ? null : new ListListSetting(value));
116 }
117
118 @Override
119 public List<Map<String, String>> getListOfMaps(String key, List<Map<String, String>> def) {
120 return getSetting(key, new MapListSetting(def), MapListSetting.class).getValue();
121 }
122
123 @Override
124 public boolean putListOfMaps(String key, List<Map<String, String>> value) {
125 return putSetting(key, value == null ? null : new MapListSetting(value));
126 }
127
128 /**
129 * Gets a map of all settings that are currently stored
130 * @return The settings
131 */
132 public abstract Map<String, Setting<?>> getAllSettings();
133
134 /**
135 * Set a value for a certain setting. The changed setting is saved to the preference file immediately.
136 * Due to caching mechanisms on modern operating systems and hardware, this shouldn't be a performance problem.
137 * @param key the unique identifier for the setting
138 * @param setting the value of the setting. In case it is null, the key-value entry will be removed.
139 * @return {@code true}, if something has changed (i.e. value is different than before)
140 */
141 public abstract boolean putSetting(String key, Setting<?> setting);
142
143 /**
144 * Get settings value for a certain key and provide default a value.
145 * @param <T> the setting type
146 * @param key the identifier for the setting
147 * @param def the default value. For each call of getSetting() with a given key, the default value must be the same.
148 * <code>def</code> must not be null, but the value of <code>def</code> can be null.
149 * @param klass the setting type (same as T)
150 * @return the corresponding value if the property has been set before, {@code def} otherwise
151 */
152 public abstract <T extends Setting<?>> T getSetting(String key, T def, Class<T> klass);
153
154 /**
155 * Gets all normal (string) settings that have a key starting with the prefix
156 * @param prefix The start of the key
157 * @return The key names of the settings
158 */
159 public Map<String, String> getAllPrefix(String prefix) {
160 final Map<String, String> all = new TreeMap<>();
161 for (final Entry<String, Setting<?>> e : getAllSettings().entrySet()) {
162 if (e.getKey().startsWith(prefix) && (e.getValue() instanceof StringSetting)) {
163 all.put(e.getKey(), ((StringSetting) e.getValue()).getValue());
164 }
165 }
166 return all;
167 }
168
169 /**
170 * Gets all list settings that have a key starting with the prefix
171 * @param prefix The start of the key
172 * @return The key names of the list settings
173 */
174 public List<String> getAllPrefixCollectionKeys(String prefix) {
175 final List<String> all = new LinkedList<>();
176 for (Entry<String, Setting<?>> entry : getAllSettings().entrySet()) {
177 if (entry.getKey().startsWith(prefix) && entry.getValue() instanceof ListSetting) {
178 all.add(entry.getKey());
179 }
180 }
181 return all;
182 }
183}
Note: See TracBrowser for help on using the repository browser.