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

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

see #15229 - deprecate Main.parent and Main itself

  • Property svn:eol-style set to native
File size: 2.2 KB
RevLine 
[4282]1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.preferences;
3
[14153]4import org.openstreetmap.josm.spi.preferences.Config;
[12881]5import org.openstreetmap.josm.spi.preferences.PreferenceChangeEvent;
6import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
[4282]7
[12385]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 */
[4282]15public abstract class CachedProperty<T> extends AbstractProperty<T> implements PreferenceChangedListener {
16
[5464]17 private final String defaultValueAsString;
[4282]18 private T value;
19 private int updateCount;
20
[5478]21 protected CachedProperty(String key, String defaultValueAsString) {
22 super(key, null);
[12846]23 Config.getPref().addKeyPreferenceChangeListener(key, this);
[5464]24 this.defaultValueAsString = defaultValueAsString;
[4282]25 updateValue();
26 }
27
[6890]28 protected final void updateValue() {
[12846]29 if (!Config.getPref().get(key).isEmpty()) {
30 this.value = fromString(Config.getPref().get(key));
[4282]31 } else {
32 this.value = getDefaultValue();
33 }
34 updateCount++;
35 }
36
37 protected abstract T fromString(String s);
38
[5464]39 @Override
[4282]40 public T get() {
41 return value;
42 }
43
44 public void put(String value) {
[12846]45 Config.getPref().put(key, value);
[4282]46 this.value = fromString(value);
47 updateCount++;
48 }
49
[5464]50 @Override
51 public final boolean put(T value) {
52 // Not used
[12867]53 throw new UnsupportedOperationException("You cannot use put(T). Use put(String) instead.");
[5464]54 }
55
[4282]56 public int getUpdateCount() {
57 return updateCount;
58 }
[6069]59
60 @Override
61 public T getDefaultValue() {
62 return fromString(getDefaultValueAsString());
[5478]63 }
[4282]64
65 public String getDefaultValueAsString() {
[5464]66 return defaultValueAsString;
[4282]67 }
68
69 public String getAsString() {
[10824]70 return getPreferences().get(getKey(), getDefaultValueAsString());
[4282]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.