// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.preferences.advanced; import org.openstreetmap.josm.data.preferences.Setting; import org.openstreetmap.josm.tools.CheckParameterUtil; /** * Class to store single preference line for the table. * @since 6021 */ public class PrefEntry implements Comparable<PrefEntry> { private final String key; private Setting<?> value; private final Setting<?> defaultValue; private boolean isDefault; private boolean changed; /** * Constructs a new {@code PrefEntry}. * @param key The preference key * @param value The preference value * @param defaultValue The preference default value * @param isDefault determines if the current value is the default value */ public PrefEntry(String key, Setting<?> value, Setting<?> defaultValue, boolean isDefault) { CheckParameterUtil.ensureParameterNotNull(key); CheckParameterUtil.ensureParameterNotNull(value); CheckParameterUtil.ensureParameterNotNull(defaultValue); this.key = key; this.value = value; this.defaultValue = defaultValue; this.isDefault = isDefault; } /** * Returns the preference key. * @return the preference key */ public String getKey() { return key; } /** * Returns the preference value. * @return the preference value */ public Setting<?> getValue() { return value; } /** * Returns the preference default value. * @return the preference default value */ public Setting<?> getDefaultValue() { return defaultValue; } /** * Sets the preference value. * @param value the preference value */ public void setValue(Setting<?> value) { this.value = value; changed = true; isDefault = false; } /** * Determines if the current value is the default value. * @return {@code true} if the current value is the default value, {@code false} otherwise */ public boolean isDefault() { return isDefault; } /** * Determines if this preference entry has been modified. * @return {@code true} if this preference entry has been modified, {@code false} otherwise */ public boolean isChanged() { return changed; } /** * Marks this preference entry as modified. */ public void markAsChanged() { changed = true; } /** * Resets this preference entry to default state. */ public void reset() { value = defaultValue; changed = true; isDefault = true; } @Override public int compareTo(PrefEntry other) { return key.compareTo(other.key); } @Override public int hashCode() { return 31 + ((key == null) ? 0 : key.hashCode()); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; PrefEntry other = (PrefEntry) obj; if (key == null) { if (other.key != null) return false; } else if (!key.equals(other.key)) return false; return true; } @Override public String toString() { return value.toString(); } }