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

Last change on this file since 13840 was 12881, checked in by bastiK, 7 years ago

see #15229 - move remaining classes to spi.preferences package, to make it self-contained

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