001package fr.aumgn.bukkitutils.command.arg.impl;
002
003import org.bukkit.command.CommandSender;
004
005import fr.aumgn.bukkitutils.command.arg.SenderArg;
006import fr.aumgn.bukkitutils.command.exception.CommandError;
007
008public abstract class AsbtractSenderArg<V>
009        extends AbstractCommandArg<V> implements SenderArg<V> {
010
011    public AsbtractSenderArg(String string) {
012        super(string);
013    }
014
015    protected abstract V defaultFor(CommandSender sender);
016
017    protected abstract String missingPermOtherMessage(String permission);
018
019    @Override
020    public V valueOr(CommandSender sender) {
021        if (string != null) {
022            return value();
023        }
024
025        return defaultFor(sender);
026    }
027
028    @Override
029    public V valueWithPermOr(String permission, CommandSender sender) {
030        if (string != null) {
031            if (!sender.hasPermission(permission)) {
032                throw new CommandError(missingPermOtherMessage(permission));
033            }
034
035            return value();
036        }
037
038        return defaultFor(sender);
039    }
040}