package envoy.client.data; import java.io.Serializable; import javax.swing.JComponent; /** * Encapsulates a persistent value that is directly or indirectly mutable by the user. * * @param the type of this {@link SettingsItem}'s value * @author Kai S. K. Engelbart * @since Envoy Client v0.3-alpha */ public final class SettingsItem implements Serializable { private T value; private String userFriendlyName, description; private static final long serialVersionUID = 1L; /** * Initializes a {@link SettingsItem}. The default value's class will be mapped to a * {@link JComponent} that can be used to display this {@link SettingsItem} to the user. * * @param value the default value * @param userFriendlyName the user friendly name (short) * @param description the description (long) * @since Envoy Client v0.3-alpha */ public SettingsItem(T value, String userFriendlyName, String description) { this.value = value; this.userFriendlyName = userFriendlyName; this.description = description; } /** * @return the value * @since Envoy Client v0.3-alpha */ public T get() { return value; } /** * Changes the value of this {@link SettingsItem}. If a {@code ChangeHandler} if defined, it * will be invoked with this value. * * @param value the value to set * @since Envoy Client v0.3-alpha */ public void set(T value) { this.value = value; } /** * @return the userFriendlyName * @since Envoy Client v0.3-alpha */ public String getUserFriendlyName() { return userFriendlyName; } /** * @param userFriendlyName the userFriendlyName to set * @since Envoy Client v0.3-alpha */ public void setUserFriendlyName(String userFriendlyName) { this.userFriendlyName = userFriendlyName; } /** * @return the description * @since Envoy Client v0.3-alpha */ public String getDescription() { return description; } /** * @param description the description to set * @since Envoy Client v0.3-alpha */ public void setDescription(String description) { this.description = description; } }