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 String key; 013 private Setting<?> value; 014 private 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}