source: josm/trunk/src/org/openstreetmap/josm/data/preferences/CachedProperty.java@ 13543

Last change on this file since 13543 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
  • Property svn:eol-style set to native
File size: 2.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.preferences;
3
4import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
5import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
6import org.openstreetmap.josm.spi.preferences.Config;
7
8/**
9 * This is an old-style cached preference value.
10 *
11 * You can replace this using the {@link StringProperty#cached()}, {@link BooleanProperty#cached()} accessors
12 *
13 * @param <T> The value type of this property
14 */
15public abstract class CachedProperty<T> extends AbstractProperty<T> implements PreferenceChangedListener {
16
17 private final String defaultValueAsString;
18 private T value;
19 private int updateCount;
20
21 protected CachedProperty(String key, String defaultValueAsString) {
22 super(key, null);
23 Config.getPref().addKeyPreferenceChangeListener(key, this);
24 this.defaultValueAsString = defaultValueAsString;
25 updateValue();
26 }
27
28 protected final void updateValue() {
29 if (!Config.getPref().get(key).isEmpty()) {
30 this.value = fromString(Config.getPref().get(key));
31 } else {
32 this.value = getDefaultValue();
33 }
34 updateCount++;
35 }
36
37 protected abstract T fromString(String s);
38
39 @Override
40 public T get() {
41 return value;
42 }
43
44 public void put(String value) {
45 Config.getPref().put(key, value);
46 this.value = fromString(value);
47 updateCount++;
48 }
49
50 @Override
51 public final boolean put(T value) {
52 // Not used
53 throw new UnsupportedOperationException("You cannot use put(T). Use put(String) instead.");
54 }
55
56 public int getUpdateCount() {
57 return updateCount;
58 }
59
60 @Override
61 public T getDefaultValue() {
62 return fromString(getDefaultValueAsString());
63 }
64
65 public String getDefaultValueAsString() {
66 return defaultValueAsString;
67 }
68
69 public String getAsString() {
70 return getPreferences().get(getKey(), getDefaultValueAsString());
71 }
72
73 @Override
74 public void preferenceChanged(PreferenceChangeEvent e) {
75 if (e.getKey().equals(key)) {
76 updateValue();
77 }
78 }
79
80}
Note: See TracBrowser for help on using the repository browser.