From 4e0243466ba9a4eb23a9bceb923b89c9acbd042d Mon Sep 17 00:00:00 2001 From: =?utf8?q?David=20=E2=80=98Bombe=E2=80=99=20Roden?= Date: Tue, 10 May 2011 06:57:23 +0200 Subject: [PATCH] Add option validation. --- .../java/net/pterodactylus/sone/core/Options.java | 46 +++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/pterodactylus/sone/core/Options.java b/src/main/java/net/pterodactylus/sone/core/Options.java index 94fbec1..7392da2 100644 --- a/src/main/java/net/pterodactylus/sone/core/Options.java +++ b/src/main/java/net/pterodactylus/sone/core/Options.java @@ -24,6 +24,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import net.pterodactylus.util.validation.Validator; + /** * Stores various options that influence Sone’s behaviour. * @@ -64,12 +66,26 @@ public class Options { public T getReal(); /** + * Validates the given value. Note that {@code null} is always a valid + * value! + * + * @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 + */ + public boolean validate(T value); + + /** * Sets the current value of the option. * * @param value * The new value of the option + * @throws IllegalArgumentException + * if the value is not valid for this option */ - public void set(T value); + public void set(T value) throws IllegalArgumentException; } @@ -113,6 +129,9 @@ public class Options { /** The current value. */ private volatile T value; + /** The validator. */ + private Validator validator; + /** The option watcher. */ private final List> optionWatchers = new ArrayList>(); @@ -125,7 +144,22 @@ public class Options { * The option watchers */ public DefaultOption(T defaultValue, OptionWatcher... optionWatchers) { + this(defaultValue, null, optionWatchers); + } + + /** + * Creates a new default option. + * + * @param defaultValue + * The default value of the option + * @param validator + * The validator for value validation + * @param optionWatchers + * The option watchers + */ + public DefaultOption(T defaultValue, Validator validator, OptionWatcher... optionWatchers) { this.defaultValue = defaultValue; + this.validator = validator; this.optionWatchers.addAll(Arrays.asList(optionWatchers)); } @@ -159,8 +193,18 @@ public class Options { /** * {@inheritDoc} */ + public boolean validate(T value) { + return (validator == null) || (value == null) || validator.validate(value); + } + + /** + * {@inheritDoc} + */ @Override public void set(T value) { + if ((value != null) && (validator != null) && (!validator.validate(value))) { + throw new IllegalArgumentException("New Value (" + value + ") could not be validated."); + } T oldValue = this.value; this.value = value; if (!get().equals(oldValue)) { -- 2.7.4