mirror of
https://github.com/essentials/Essentials.git
synced 2025-08-12 09:35:26 +02:00
WIP Converters
Only Integer and Enum for now, open for comments
This commit is contained in:
@@ -1,34 +1,39 @@
|
||||
package net.ess3.commands;
|
||||
|
||||
import static net.ess3.I18n._;
|
||||
import net.ess3.api.IUser;
|
||||
import net.ess3.converter.EnumConverter;
|
||||
import net.ess3.utils.LocationUtil;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.TreeType;
|
||||
import net.ess3.api.IUser;
|
||||
import net.ess3.utils.LocationUtil;
|
||||
|
||||
|
||||
public class Commandbigtree extends EssentialsCommand
|
||||
{
|
||||
private static enum BigTree {
|
||||
REDWOOD(TreeType.TALL_REDWOOD),
|
||||
TREE(TreeType.BIG_TREE),
|
||||
JUNGLE(TreeType.JUNGLE);
|
||||
|
||||
private final TreeType bukkitType;
|
||||
|
||||
private BigTree(final TreeType bukkitType)
|
||||
{
|
||||
this.bukkitType = bukkitType;
|
||||
}
|
||||
|
||||
public TreeType getBukkitType()
|
||||
{
|
||||
return bukkitType;
|
||||
}
|
||||
}
|
||||
|
||||
private final static EnumConverter<BigTree> BIGTREE_PARSER = EnumConverter.getInstance(BigTree.class);
|
||||
|
||||
@Override
|
||||
public void run(final IUser user, final String commandLabel, final String[] args) throws Exception
|
||||
{
|
||||
final TreeType tree;
|
||||
if (args.length > 0 && args[0].equalsIgnoreCase("redwood"))
|
||||
{
|
||||
tree = TreeType.TALL_REDWOOD;
|
||||
}
|
||||
else if (args.length > 0 && args[0].equalsIgnoreCase("tree"))
|
||||
{
|
||||
tree = TreeType.BIG_TREE;
|
||||
}
|
||||
else if (args.length > 0 && args[0].equalsIgnoreCase("jungle"))
|
||||
{
|
||||
tree = TreeType.JUNGLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new NotEnoughArgumentsException();
|
||||
}
|
||||
final TreeType tree = BIGTREE_PARSER.parse(args).getValue().getBukkitType();
|
||||
|
||||
final Location loc = LocationUtil.getTarget(user.getPlayer());
|
||||
final Location safeLocation = LocationUtil.getSafeDestination(loc);
|
||||
|
7
Essentials/src/net/ess3/converter/ArgumentsParser.java
Normal file
7
Essentials/src/net/ess3/converter/ArgumentsParser.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package net.ess3.converter;
|
||||
|
||||
|
||||
public interface ArgumentsParser<T>
|
||||
{
|
||||
ParserResult<T> parse(String... args);
|
||||
}
|
57
Essentials/src/net/ess3/converter/EnumConverter.java
Normal file
57
Essentials/src/net/ess3/converter/EnumConverter.java
Normal file
@@ -0,0 +1,57 @@
|
||||
package net.ess3.converter;
|
||||
|
||||
import java.util.EnumMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
|
||||
public class EnumConverter<E extends Enum<E>> implements ArgumentsParser<E>, Serializer<E>
|
||||
{
|
||||
private static final Map<Class, EnumConverter> converterMap = new HashMap<Class, EnumConverter>();
|
||||
private final Map<String, E> enumMap = new HashMap<String, E>();
|
||||
private final Map<E, String> serializedMap;
|
||||
|
||||
private EnumConverter(final Class<E> enumClass)
|
||||
{
|
||||
serializedMap = new EnumMap<E, String>(enumClass);
|
||||
for (E t : enumClass.getEnumConstants())
|
||||
{
|
||||
enumMap.put(t.name().replaceAll("[_-]", "").toLowerCase(Locale.ENGLISH), t);
|
||||
serializedMap.put(t, t.name().replace("_", "-").toLowerCase(Locale.ENGLISH));
|
||||
}
|
||||
}
|
||||
|
||||
public static <T extends Enum<T>> EnumConverter<T> getInstance(final Class<T> enumClass)
|
||||
{
|
||||
synchronized (converterMap)
|
||||
{
|
||||
EnumConverter<T> converter = converterMap.get(enumClass);
|
||||
if (converter == null)
|
||||
{
|
||||
converter = new EnumConverter<T>(enumClass);
|
||||
converterMap.put(enumClass, converter);
|
||||
}
|
||||
return converter;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParserResult<E> parse(final String... args)
|
||||
{
|
||||
Validate.notEmpty(args);
|
||||
final E e = enumMap.get(args[0].replaceAll("[_-]", "").toLowerCase(Locale.ENGLISH));
|
||||
if (e == null)
|
||||
{
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
return new FirstEntryParserResult<E>(e, args);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String serialize(final E input)
|
||||
{
|
||||
return serializedMap.get(input);
|
||||
}
|
||||
}
|
@@ -0,0 +1,33 @@
|
||||
package net.ess3.converter;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
class FirstEntryParserResult<T> implements ParserResult<T>
|
||||
{
|
||||
private final T value;
|
||||
private final String[] input;
|
||||
private String[] unusedInput = null;
|
||||
|
||||
FirstEntryParserResult(T value, String... input)
|
||||
{
|
||||
this.value = value;
|
||||
this.input = input;
|
||||
}
|
||||
|
||||
@Override
|
||||
public T getValue()
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getUnusedInput()
|
||||
{
|
||||
if (unusedInput == null)
|
||||
{
|
||||
unusedInput = Arrays.copyOfRange(input, input.length > 0 ? 1 : 0, input.length);
|
||||
}
|
||||
return unusedInput;
|
||||
}
|
||||
}
|
39
Essentials/src/net/ess3/converter/IntegerConverter.java
Normal file
39
Essentials/src/net/ess3/converter/IntegerConverter.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package net.ess3.converter;
|
||||
|
||||
import org.apache.commons.lang.Validate;
|
||||
|
||||
|
||||
public class IntegerConverter implements ArgumentsParser<Integer>, Serializer<Integer>
|
||||
{
|
||||
private static final IntegerConverter INSTANCE = new IntegerConverter();
|
||||
|
||||
private IntegerConverter()
|
||||
{
|
||||
}
|
||||
|
||||
public static IntegerConverter getInstance()
|
||||
{
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ParserResult<Integer> parse(final String... args)
|
||||
{
|
||||
Validate.notEmpty(args);
|
||||
try
|
||||
{
|
||||
final int number = Integer.parseInt(args[0]);
|
||||
return new FirstEntryParserResult<Integer>(number, args);
|
||||
}
|
||||
catch (NumberFormatException ex)
|
||||
{
|
||||
throw new IllegalArgumentException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String serialize(final Integer input)
|
||||
{
|
||||
return input.toString();
|
||||
}
|
||||
}
|
9
Essentials/src/net/ess3/converter/ParserResult.java
Normal file
9
Essentials/src/net/ess3/converter/ParserResult.java
Normal file
@@ -0,0 +1,9 @@
|
||||
package net.ess3.converter;
|
||||
|
||||
|
||||
public interface ParserResult<T>
|
||||
{
|
||||
T getValue();
|
||||
|
||||
String[] getUnusedInput();
|
||||
}
|
7
Essentials/src/net/ess3/converter/Serializer.java
Normal file
7
Essentials/src/net/ess3/converter/Serializer.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package net.ess3.converter;
|
||||
|
||||
|
||||
public interface Serializer<T>
|
||||
{
|
||||
String serialize(T input);
|
||||
}
|
Reference in New Issue
Block a user