diff options
author | Dico200 <dico.karssiens@gmail.com> | 2018-07-25 01:53:02 +0100 |
---|---|---|
committer | Dico200 <dico.karssiens@gmail.com> | 2018-07-25 01:53:02 +0100 |
commit | 5e168847c2624b767deb9da310ecfdf169e0f43c (patch) | |
tree | 56b76556a6837fff20b800d5a22218286a975581 /dicore3/core/src/main/java/io/dico/dicore/SetBasedWhitelist.java | |
parent | 60503351a30a91985b95ee8aa64e163ef084b34b (diff) |
Add dicore3-core, without really irrelevant packages
Diffstat (limited to 'dicore3/core/src/main/java/io/dico/dicore/SetBasedWhitelist.java')
-rw-r--r-- | dicore3/core/src/main/java/io/dico/dicore/SetBasedWhitelist.java | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/dicore3/core/src/main/java/io/dico/dicore/SetBasedWhitelist.java b/dicore3/core/src/main/java/io/dico/dicore/SetBasedWhitelist.java new file mode 100644 index 0000000..6596b65 --- /dev/null +++ b/dicore3/core/src/main/java/io/dico/dicore/SetBasedWhitelist.java @@ -0,0 +1,59 @@ +package io.dico.dicore; + +import org.bukkit.configuration.ConfigurationSection; + +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class SetBasedWhitelist implements Whitelist { + private final Set set; + private final boolean blacklist; + + public SetBasedWhitelist(Object[] array, boolean blacklist) { + this(Arrays.asList(array), blacklist); + } + + public SetBasedWhitelist(ConfigurationSection section, Function<String, ?> parser) { + this(section.getStringList("listed").stream().map(parser).filter(Objects::nonNull).collect(Collectors.toList()), + section.getBoolean("blacklist", false)); + } + + @SuppressWarnings("unchecked") + public SetBasedWhitelist(Collection collection, boolean blacklist) { + Set set; + if (collection.isEmpty()) { + set = Collections.emptySet(); + } else if (collection.iterator().next() instanceof Enum) { + set = EnumSet.copyOf(collection); + } else if (collection instanceof Set) { + set = (Set) collection; + } else { + set = new HashSet<>(collection); + } + + this.set = set; + this.blacklist = blacklist; + } + + @Override + public boolean isWhitelisted(Object o) { + return blacklist != set.contains(o); + } + + @SuppressWarnings("unchecked") + @Override + public String toString() { + return (blacklist ? "Blacklist" : "Whitelist") + "{" + + String.join(", ", (CharSequence[]) set.stream().map(String::valueOf).toArray(String[]::new)) + "}"; + } + + public Set getSet() { + return set; + } + + public boolean isBlacklist() { + return blacklist; + } + +} |