/*
* Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC
* All rights reserved.
*
* The source code of this document is proprietary work, and is not licensed for
* distribution. For information about licensing, contact Sam Harwell at:
* sam@tunnelvisionlabs.com
*/
package org.antlr.netbeans.editor.formatting;
import java.util.prefs.Preferences;
import org.netbeans.api.annotations.common.NonNull;
import org.openide.util.Parameters;
/**
*
* @author Sam Harwell
* @param <E>
*/
public class EnumFormatOption<E extends Enum<E>> extends AbstractFormatOption {
@NonNull
private final Class<E> _enumClass;
@NonNull
private final E _defaultValue;
public EnumFormatOption(@NonNull String name, @NonNull Class<E> enumClass, @NonNull E defaultValue) {
super(name);
Parameters.notNull("enumClass", enumClass);
Parameters.notNull("defaultValue", defaultValue);
this._enumClass = enumClass;
this._defaultValue = defaultValue;
}
@NonNull
public Class<E> getEnumClass() {
return _enumClass;
}
@NonNull
public E getDefaultValue() {
return _defaultValue;
}
@NonNull
public E getValue(Preferences preferences) {
String value = preferences.get(getName(), getDefaultValueAsString());
E typedValue;
try {
typedValue = Enum.valueOf(getEnumClass(), value);
} catch (IllegalArgumentException ex) {
typedValue = getDefaultValue();
}
return typedValue;
}
@Override
@NonNull
public String getDefaultValueAsString() {
return getDefaultValue().name();
}
@Override
@NonNull
public String getValueAsString(Preferences preferences) {
return getValue(preferences).name();
}
}