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    private final T defaultValue;
009    private final Class<T> enumClass;
010
011    public ParametrizedEnumProperty(Class<T> enumClass, T defaultValue) {
012        this.defaultValue = defaultValue;
013        this.enumClass = enumClass;
014    }
015
016    protected abstract String getKey(String... params);
017
018    public T get(String... params) {
019        return parse(Main.pref.get(getKey(params), defaultValue.name()));
020    }
021
022    public boolean put(T value, String... params) {
023        return Main.pref.put(getKey(params), value.name());
024    }
025
026    protected T parse(String s) {
027        return Enum.valueOf(enumClass, s);
028    }
029}