X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FOptions.java;h=34fc9a3b5d228ebdef52ac9b97026fe92a1cace5;hb=3f91e22e512f81a2e11fa584e30f83da74e62177;hp=f280aaead58c69498e5b51ca817ee3bf9a234b35;hpb=ecaea8c0b09431eabddd323a87fce59bba6f0238;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/core/Options.java b/src/main/java/net/pterodactylus/sone/core/Options.java index f280aae..34fc9a3 100644 --- a/src/main/java/net/pterodactylus/sone/core/Options.java +++ b/src/main/java/net/pterodactylus/sone/core/Options.java @@ -1,5 +1,5 @@ /* - * Sone - Options.java - Copyright © 2010 David Roden + * Sone - Options.java - Copyright © 2010–2013 David Roden * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,14 +17,11 @@ package net.pterodactylus.sone.core; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; -import net.pterodactylus.util.validation.Validator; +import com.google.common.base.Predicate; /** * Stores various options that influence Sone’s behaviour. @@ -43,13 +40,6 @@ public class Options { public static interface Option { /** - * Returns the default value of the option. - * - * @return The default value of the option - */ - public T getDefault(); - - /** * Returns the current value of the option. If the current value is not * set (usually {@code null}), the default value is returned. * @@ -71,9 +61,8 @@ public class Options { * * @param value * The value to validate - * @return {@code true} if this option does not have a {@link Validator} - * , or the {@link Validator} validates this object, {@code - * false} otherwise + * @return {@code true} if this option does not have a validator, or the + * validator validates this object, {@code false} otherwise */ public boolean validate(T value); @@ -90,32 +79,7 @@ public class Options { } /** - * Interface for objects that want to be notified when an option changes its - * value. - * - * @param - * The type of the option - * @author David ‘Bombe’ Roden - */ - public static interface OptionWatcher { - - /** - * Notifies an object that an option has been changed. - * - * @param option - * The option that has changed - * @param oldValue - * The old value of the option - * @param newValue - * The new value of the option - */ - public void optionChanged(Option option, T oldValue, T newValue); - - } - - /** - * Basic implementation of an {@link Option} that notifies an - * {@link OptionWatcher} if the value changes. + * Basic implementation of an {@link Option}. * * @param * The type of the option @@ -130,21 +94,16 @@ public class Options { private volatile T value; /** The validator. */ - private Validator validator; - - /** The option watcher. */ - private final List> optionWatchers = new ArrayList>(); + private Predicate validator; /** * Creates a new default option. * * @param defaultValue * The default value of the option - * @param optionWatchers - * The option watchers */ - public DefaultOption(T defaultValue, OptionWatcher... optionWatchers) { - this(defaultValue, null, optionWatchers); + public DefaultOption(T defaultValue) { + this(defaultValue, null); } /** @@ -153,22 +112,11 @@ public class Options { * @param defaultValue * The default value of the option * @param validator - * The validator for value validation - * @param optionWatchers - * The option watchers + * The validator for value validation (may be {@code null}) */ - public DefaultOption(T defaultValue, Validator validator, OptionWatcher... optionWatchers) { + public DefaultOption(T defaultValue, Predicate validator) { this.defaultValue = defaultValue; this.validator = validator; - this.optionWatchers.addAll(Arrays.asList(optionWatchers)); - } - - /** - * {@inheritDoc} - */ - @Override - public T getDefault() { - return defaultValue; } /** @@ -195,7 +143,7 @@ public class Options { */ @Override public boolean validate(T value) { - return (validator == null) || (value == null) || validator.validate(value); + return (validator == null) || (value == null) || validator.apply(value); } /** @@ -203,16 +151,11 @@ public class Options { */ @Override public void set(T value) { - if ((value != null) && (validator != null) && (!validator.validate(value))) { + if ((value != null) && (validator != null) && (!validator.apply(value))) { throw new IllegalArgumentException("New Value (" + value + ") could not be validated."); } T oldValue = this.value; this.value = value; - if (!get().equals(oldValue)) { - for (OptionWatcher optionWatcher : optionWatchers) { - optionWatcher.optionChanged(this, oldValue, get()); - } - } } } @@ -310,6 +253,8 @@ public class Options { /** * Adds an {@link Enum} {@link Option}. * + * @param + * The enum type * @param name * The name of the option * @param enumOption @@ -331,11 +276,14 @@ public class Options { * options.<SomeEnum> getEnumOption("SomeEnumOption").get(); * * + * @param + * The enum type * @param name * The name of the option * @return The enum option, or {@code null} if there is no enum option with * the given name */ + @SuppressWarnings("unchecked") public > Option getEnumOption(String name) { return (Option) enumOptions.get(name); }