X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FOptions.java;h=b7ece81fe64b8f87e794979c980eda6c3625e45d;hb=e371dfd08d8b177c097f260f4b1d22b186d8d5b4;hp=04010da56b643736f298ee61cd538edfd1f568a2;hpb=a93ce25138d3799324bb0fba0cff589f9b83cc23;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 04010da..b7ece81 100644 --- a/src/main/java/net/pterodactylus/sone/core/Options.java +++ b/src/main/java/net/pterodactylus/sone/core/Options.java @@ -1,6 +1,10 @@ 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; /** @@ -90,22 +94,22 @@ public class Options { private final T defaultValue; /** The current value. */ - private T value; + private volatile T value; /** The option watcher. */ - private final OptionWatcher optionWatcher; + private final List> optionWatchers = new ArrayList>(); /** * Creates a new default option. * * @param defaultValue * The default value of the option - * @param optionWatcher - * The option watcher + * @param optionWatchers + * The option watchers */ - public DefaultOption(T defaultValue, OptionWatcher optionWatcher) { + public DefaultOption(T defaultValue, OptionWatcher... optionWatchers) { this.defaultValue = defaultValue; - this.optionWatcher = optionWatcher; + this.optionWatchers.addAll(Arrays.asList(optionWatchers)); } /** @@ -143,14 +147,48 @@ public class Options { T oldValue = this.value; this.value = value; if (!get().equals(oldValue)) { - optionWatcher.optionChanged(this, oldValue, get()); + for (OptionWatcher optionWatcher : optionWatchers) { + optionWatcher.optionChanged(this, oldValue, get()); + } } } } + /** Holds all {@link Boolean} {@link Option}s. */ + private final Map> booleanOptions = Collections.synchronizedMap(new HashMap>()); + /** Holds all {@link Integer} {@link Option}s. */ - private final Map> integerOptions = new HashMap>(); + private final Map> integerOptions = Collections.synchronizedMap(new HashMap>()); + + /** Holds all {@link String} {@link Option}s. */ + private final Map> stringOptions = Collections.synchronizedMap(new HashMap>()); + + /** + * Adds a boolean option. + * + * @param name + * The name of the option + * @param booleanOption + * The option + * @return The given option + */ + public Option addBooleanOption(String name, Option booleanOption) { + booleanOptions.put(name, booleanOption); + return booleanOption; + } + + /** + * Returns the boolean option with the given name. + * + * @param name + * The name of the option + * @return The option, or {@code null} if there is no option with the given + * name + */ + public Option getBooleanOption(String name) { + return booleanOptions.get(name); + } /** * Adds an {@link Integer} {@link Option}. @@ -178,4 +216,30 @@ public class Options { return integerOptions.get(name); } + /** + * Adds a {@link String} {@link Option}. + * + * @param name + * The name of the option + * @param stringOption + * The option + * @return The given option + */ + public Option addStringOption(String name, Option stringOption) { + stringOptions.put(name, stringOption); + return stringOption; + } + + /** + * Returns a {@link String} {@link Option}. + * + * @param name + * The name of the string option to get + * @return The string option, or {@code null} if there is no option with the + * given name + */ + public Option getStringOption(String name) { + return stringOptions.get(name); + } + }