X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FOptions.java;h=398374a0468b23fcb5d89f9b0fe38ec45e8b93bb;hp=bf51e02299f4fcc9bf1381a908fc19ff7d32f7cd;hb=64740709990291688170ebd1f192af5eb9090618;hpb=16cd01e280e5a4c0d7e6d5f45cc4cafd24de3e8b diff --git a/src/main/java/net/pterodactylus/sone/core/Options.java b/src/main/java/net/pterodactylus/sone/core/Options.java index bf51e02..398374a 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–2020 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 @@ -21,221 +21,13 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import net.pterodactylus.util.validation.Validator; +import net.pterodactylus.sone.utils.Option; /** * Stores various options that influence Sone’s behaviour. - * - * @author David ‘Bombe’ Roden */ public class Options { - /** - * Contains current and default value of an option. - * - * @param - * The type of the option - * @author David ‘Bombe’ Roden - */ - 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. - * - * @return The current value of the option - */ - public T get(); - - /** - * Returns the real value of the option. This will also return an unset - * value (usually {@code null})! - * - * @return The real value of the option - */ - 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) throws IllegalArgumentException; - - } - - /** - * 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. - * - * @param - * The type of the option - * @author David ‘Bombe’ Roden - */ - public static class DefaultOption implements Option { - - /** The default value. */ - private final T defaultValue; - - /** The current value. */ - private volatile T value; - - /** The validator. */ - private Validator validator; - - /** The option watcher. */ - private final OptionWatcher optionWatcher; - - /** - * Creates a new default option. - * - * @param defaultValue - * The default value of the option - */ - public DefaultOption(T defaultValue) { - this(defaultValue, (OptionWatcher) null); - } - - /** - * Creates a new default option. - * - * @param defaultValue - * The default value of the option - * @param validator - * The validator for value validation (may be {@code null}) - */ - public DefaultOption(T defaultValue, Validator validator) { - this(defaultValue, validator, null); - } - - /** - * Creates a new default option. - * - * @param defaultValue - * The default value of the option - * @param optionWatchers - * The option watchers (may be {@code null}) - */ - 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 (may be {@code null}) - * @param optionWatcher - * The option watcher (may be {@code null}) - */ - public DefaultOption(T defaultValue, Validator validator, OptionWatcher optionWatcher) { - this.defaultValue = defaultValue; - this.validator = validator; - this.optionWatcher = optionWatcher; - } - - /** - * {@inheritDoc} - */ - @Override - public T getDefault() { - return defaultValue; - } - - /** - * {@inheritDoc} - */ - @Override - public T get() { - return (value != null) ? value : defaultValue; - } - - /** - * Returns the real value of the option. This will also return an unset - * value (usually {@code null})! - * - * @return The real value of the option - */ - @Override - public T getReal() { - return value; - } - - /** - * {@inheritDoc} - */ - @Override - 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)) { - if (optionWatcher != null) { - optionWatcher.optionChanged(this, oldValue, get()); - } - } - } - - } - /** Holds all {@link Boolean} {@link Option}s. */ private final Map> booleanOptions = Collections.synchronizedMap(new HashMap>()); @@ -329,6 +121,8 @@ public class Options { /** * Adds an {@link Enum} {@link Option}. * + * @param + * The enum type * @param name * The name of the option * @param enumOption @@ -350,6 +144,8 @@ 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