001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.data.preferences; 003 004import org.openstreetmap.josm.spi.preferences.Config; 005import org.openstreetmap.josm.tools.Logging; 006 007/** 008 * Abstract base class for properties with {@link Enum} value, where the preference 009 * key is generated from a list of parameters. 010 * @param <T> the {@code Enum} class 011 */ 012public abstract class ParametrizedEnumProperty<T extends Enum<T>> { 013 014 protected final T defaultValue; 015 protected final Class<T> enumClass; 016 017 protected ParametrizedEnumProperty(Class<T> enumClass, T defaultValue) { 018 this.defaultValue = defaultValue; 019 this.enumClass = enumClass; 020 } 021 022 protected abstract String getKey(String... params); 023 024 public T get(String... params) { 025 return parse(Config.getPref().get(getKey(params), defaultValue.name())); 026 } 027 028 public boolean put(T value, String... params) { 029 return Config.getPref().put(getKey(params), value.name()); 030 } 031 032 protected T parse(String s) { 033 try { 034 return Enum.valueOf(enumClass, s); 035 } catch (IllegalArgumentException e) { 036 Logging.trace(e); 037 return defaultValue; 038 } 039 } 040}