001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.data.preferences;
003
004import org.openstreetmap.josm.Main;
005
006public abstract class ParametrizedEnumProperty<T extends Enum<T>> {
007
008
009    private final T defaultValue;
010    private final Class<T> enumClass;
011
012    public ParametrizedEnumProperty(Class<T> enumClass, T defaultValue) {
013        this.defaultValue = defaultValue;
014        this.enumClass = enumClass;
015    }
016
017    protected abstract String getKey(String... params);
018
019    public T get(String... params) {
020        return parse(Main.pref.get(getKey(params), defaultValue.name()));
021    }
022
023    public boolean put(T value, String... params) {
024        return Main.pref.put(getKey(params), value.name());
025    }
026
027    protected T parse(String s) {
028        return Enum.valueOf(enumClass, s);
029    }
030
031
032}