1 | // License: GPL. For details, see LICENSE file.
|
---|
2 | package org.openstreetmap.josm.data.preferences;
|
---|
3 |
|
---|
4 | import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
|
---|
5 | import org.openstreetmap.josm.tools.CheckParameterUtil;
|
---|
6 |
|
---|
7 | /**
|
---|
8 | * Property that wraps another property along with a fallback property that is used as default value.
|
---|
9 | *
|
---|
10 | * @param <T> The content type
|
---|
11 | * @since 12987
|
---|
12 | */
|
---|
13 | public class FallbackProperty<T> extends AbstractProperty<T> {
|
---|
14 |
|
---|
15 | private final AbstractProperty<T> property;
|
---|
16 | private final AbstractProperty<T> fallback;
|
---|
17 |
|
---|
18 | /**
|
---|
19 | * Constructs a new {@code FallbackProperty}.
|
---|
20 | * @param property the wrapped property
|
---|
21 | * @param fallback fallback property that takes effect in the {@link #get()} method when
|
---|
22 | * {@code property} is not set
|
---|
23 | */
|
---|
24 | public FallbackProperty(AbstractProperty<T> property, AbstractProperty<T> fallback) {
|
---|
25 | super(property.getKey(), null);
|
---|
26 | CheckParameterUtil.ensureParameterNotNull(property, "property");
|
---|
27 | CheckParameterUtil.ensureParameterNotNull(fallback, "fallback");
|
---|
28 | this.property = property;
|
---|
29 | this.fallback = fallback;
|
---|
30 | }
|
---|
31 |
|
---|
32 | /**
|
---|
33 | * Get the wrapped property.
|
---|
34 | * @return the wrapped property
|
---|
35 | */
|
---|
36 | public AbstractProperty<T> getDelegateProperty() {
|
---|
37 | return property;
|
---|
38 | }
|
---|
39 |
|
---|
40 | /**
|
---|
41 | * Get the fallback property.
|
---|
42 | * @return the fallback property
|
---|
43 | */
|
---|
44 | public AbstractProperty<T> getFallbackProperty() {
|
---|
45 | return fallback;
|
---|
46 | }
|
---|
47 |
|
---|
48 | @Override
|
---|
49 | protected void storeDefaultValue() {
|
---|
50 | // Default value hidden in preferences.
|
---|
51 | }
|
---|
52 |
|
---|
53 | @Override
|
---|
54 | public boolean isSet() {
|
---|
55 | return property.isSet();
|
---|
56 | }
|
---|
57 |
|
---|
58 | @Override
|
---|
59 | public T getDefaultValue() {
|
---|
60 | return fallback.getDefaultValue();
|
---|
61 | }
|
---|
62 |
|
---|
63 | @Override
|
---|
64 | public void remove() {
|
---|
65 | property.remove();
|
---|
66 | }
|
---|
67 |
|
---|
68 | @Override
|
---|
69 | public T get() {
|
---|
70 | if (property.isSet()) {
|
---|
71 | return property.get();
|
---|
72 | }
|
---|
73 | return fallback.get();
|
---|
74 | }
|
---|
75 |
|
---|
76 | @Override
|
---|
77 | public boolean put(T value) {
|
---|
78 | return property.put(value);
|
---|
79 | }
|
---|
80 |
|
---|
81 | @Override
|
---|
82 | protected void addListenerImpl(PreferenceChangedListener adapter) {
|
---|
83 | property.addListenerImpl(adapter);
|
---|
84 | fallback.addListenerImpl(adapter);
|
---|
85 | }
|
---|
86 |
|
---|
87 | @Override
|
---|
88 | public void addWeakListener(ValueChangeListener<? super T> listener) {
|
---|
89 | property.addWeakListener(listener);
|
---|
90 | fallback.addWeakListener(listener);
|
---|
91 | }
|
---|
92 |
|
---|
93 | @Override
|
---|
94 | protected void removeListenerImpl(PreferenceChangedListener adapter) {
|
---|
95 | property.removeListenerImpl(adapter);
|
---|
96 | fallback.removeListenerImpl(adapter);
|
---|
97 | }
|
---|
98 |
|
---|
99 | }
|
---|