001package fr.aumgn.bukkitutils.command.arg.impl;
002
003import java.util.Collections;
004import java.util.List;
005
006import org.bukkit.command.CommandSender;
007
008import fr.aumgn.bukkitutils.command.arg.MatchingArg;
009import fr.aumgn.bukkitutils.command.arg.SenderArg;
010import fr.aumgn.bukkitutils.command.arg.SenderMatchingArg;
011import fr.aumgn.bukkitutils.command.exception.CommandError;
012
013public abstract class AbstractSenderMatchingArg<V>
014        extends AsbtractSenderArg<V>
015        implements MatchingArg<V>, SenderArg<V>, SenderMatchingArg<V> {
016
017    public AbstractSenderMatchingArg(String string) {
018        super(string);
019    }
020
021    @Override
022    public List<V> matchOr(V def) {
023        if (string == null) {
024            return Collections.singletonList(def);
025        }
026
027        return match();
028    }
029
030    @Override
031    public List<V> matchOr(List<V> def) {
032        if (string == null) {
033            return def;
034        }
035
036        return match();
037    }
038
039    @Override
040    public List<V> matchOr(CommandSender sender) {
041        if (string != null) {
042            return match();
043        }
044
045        return Collections.singletonList(defaultFor(sender));
046    }
047
048    @Override
049    public List<V> matchWithPermOr(String permission, CommandSender sender) {
050        if (string != null) {
051            if (!sender.hasPermission(permission)) {
052                throw new CommandError(missingPermOtherMessage(permission));
053            }
054
055            return match();
056        }
057
058        return Collections.singletonList(defaultFor(sender));
059    }
060}