001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.preferences.advanced;
003
004import org.openstreetmap.josm.data.Preferences.Setting;
005import org.openstreetmap.josm.tools.CheckParameterUtil;
006
007/**
008 * Class to store single preference line for the table.
009 * @since 6021
010 */
011public class PrefEntry implements Comparable<PrefEntry> {
012    private final String key;
013    private Setting<?> value;
014    private final Setting<?> defaultValue;
015    private boolean isDefault;
016    private boolean changed;
017
018    /**
019     * Constructs a new {@code PrefEntry}.
020     * @param key The preference key
021     * @param value The preference value
022     * @param defaultValue The preference default value
023     * @param isDefault determines if the current value is the default value
024     */
025    public PrefEntry(String key, Setting<?> value, Setting<?> defaultValue, boolean isDefault) {
026        CheckParameterUtil.ensureParameterNotNull(key);
027        CheckParameterUtil.ensureParameterNotNull(value);
028        CheckParameterUtil.ensureParameterNotNull(defaultValue);
029        this.key = key;
030        this.value = value;
031        this.defaultValue = defaultValue;
032        this.isDefault = isDefault;
033    }
034
035    /**
036     * Returns the preference key.
037     * @return the preference key
038     */
039    public String getKey() {
040        return key;
041    }
042
043    /**
044     * Returns the preference value.
045     * @return the preference value
046     */
047    public Setting<?> getValue() {
048        return value;
049    }
050
051    /**
052     * Returns the preference default value.
053     * @return the preference default value
054     */
055    public Setting<?> getDefaultValue() {
056        return defaultValue;
057    }
058
059    /**
060     * Sets the preference value.
061     * @param value the preference value
062     */
063    public void setValue(Setting<?> value) {
064        this.value = value;
065        changed = true;
066        isDefault = false;
067    }
068
069    /**
070     * Determines if the current value is the default value.
071     * @return {@code true} if the current value is the default value, {@code false} otherwise
072     */
073    public boolean isDefault() {
074        return isDefault;
075    }
076
077    /**
078     * Determines if this preference entry has been modified.
079     * @return {@code true} if this preference entry has been modified, {@code false} otherwise
080     */
081    public boolean isChanged() {
082        return changed;
083    }
084
085    /**
086     * Marks this preference entry as modified.
087     */
088    public void markAsChanged() {
089        changed = true;
090    }
091
092    /**
093     * Resets this preference entry to default state.
094     */
095    public void reset() {
096        value = defaultValue;
097        changed = true;
098        isDefault = true;
099    }
100
101    @Override
102    public int compareTo(PrefEntry other) {
103        return key.compareTo(other.key);
104    }
105
106    @Override
107    public String toString() {
108        return value.toString();
109    }
110}