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

Last change on this file since 12860 was 12853, checked in by bastiK, 7 years ago

see #15229 - include support for the long type in IPreferences

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