Initial commit
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package eu.mikroskeem.utils.bannerparser;
|
||||
|
||||
public class IntegerFromString {
|
||||
public static String valueOf(int value){
|
||||
for (IntegerFromStringEnum anEnum : IntegerFromStringEnum.values()) {
|
||||
if(value == anEnum.getValue()){
|
||||
return anEnum.toString();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private enum IntegerFromStringEnum {
|
||||
ONE(1),
|
||||
TWO(2),
|
||||
THREE(3),
|
||||
FOUR(4),
|
||||
FIVE(5),
|
||||
SIX(6),
|
||||
SEVEN(7),
|
||||
EIGHT(8),
|
||||
NINE(9),
|
||||
ZERO(0);
|
||||
|
||||
private int value;
|
||||
IntegerFromStringEnum(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
public int getValue(){
|
||||
return value;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package eu.mikroskeem.utils.bannerparser;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URL;
|
||||
import java.net.URLDecoder;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class ParseQuery {
|
||||
public static Map<String, String> splitQuery(URL url) throws UnsupportedEncodingException {
|
||||
Map<String, String> query_pairs = new LinkedHashMap<>();
|
||||
String query = url.getQuery();
|
||||
String[] pairs = query.split("&");
|
||||
for (String pair : pairs) {
|
||||
int idx = pair.indexOf("=");
|
||||
query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8"));
|
||||
}
|
||||
return query_pairs;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package eu.mikroskeem.utils.bannerparser.parsers;
|
||||
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public interface Parser {
|
||||
ArrayList<Pattern> fromUrl(URL url);
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package eu.mikroskeem.utils.bannerparser.parsers;
|
||||
|
||||
import eu.mikroskeem.utils.bannerparser.parsers.needcoolshoes.NeedCoolShoesParser;
|
||||
import eu.mikroskeem.utils.bannerparser.parsers.planetminecraft.PlanetMinecraftParser;
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Parsers {
|
||||
public static Parser getParser(URL url){
|
||||
String host = url.getHost();
|
||||
if(host.contains("planetminecraft.com")){
|
||||
return new PlanetMinecraftParser();
|
||||
} else if (host.contains("needcoolshoes.com")){
|
||||
return new NeedCoolShoesParser();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ArrayList<Pattern> parse(URL url){
|
||||
Parser parser = getParser(url);
|
||||
if(parser != null){
|
||||
return parser.fromUrl(url);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package eu.mikroskeem.utils.bannerparser.parsers.needcoolshoes;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import static org.bukkit.DyeColor.*;
|
||||
|
||||
class ColorParser {
|
||||
static DyeColor valueOf(String a){
|
||||
return ColorEnum.valueOf(a).getColor();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private enum ColorEnum {
|
||||
a(BLACK),
|
||||
b(RED),
|
||||
c(GREEN),
|
||||
d(BROWN),
|
||||
e(BLUE),
|
||||
f(PURPLE),
|
||||
g(CYAN),
|
||||
h(SILVER),
|
||||
i(GRAY),
|
||||
j(PINK),
|
||||
k(LIME),
|
||||
l(YELLOW),
|
||||
m(LIGHT_BLUE),
|
||||
n(MAGENTA),
|
||||
o(ORANGE),
|
||||
p(WHITE);
|
||||
|
||||
private DyeColor color;
|
||||
ColorEnum(DyeColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
public DyeColor getColor() {
|
||||
return color;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package eu.mikroskeem.utils.bannerparser.parsers.needcoolshoes;
|
||||
|
||||
import eu.mikroskeem.utils.bannerparser.parsers.Parser;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
import org.bukkit.block.banner.PatternType;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class NeedCoolShoesParser implements Parser {
|
||||
/*
|
||||
* See http://www.needcoolshoes.com/banner
|
||||
*/
|
||||
public ArrayList<Pattern> fromUrl(URL url){
|
||||
try {
|
||||
String bannerData = url.getQuery().split("\\?=")[0].substring(1);
|
||||
return parse(bannerData);
|
||||
} catch (ArrayIndexOutOfBoundsException e){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<Pattern> parse(String whole){
|
||||
ArrayList<Pattern> patterns = new ArrayList<>();
|
||||
List<String> propertyList = Arrays.asList(whole.split("(?<=\\G..)"));
|
||||
|
||||
propertyList.forEach(property->{
|
||||
DyeColor color = parseColor(property.charAt(0));
|
||||
PatternType patternType = parsePattern(property.charAt(1));
|
||||
patterns.add(new Pattern(color, patternType));
|
||||
});
|
||||
|
||||
return patterns;
|
||||
}
|
||||
|
||||
private PatternType parsePattern(char part){
|
||||
String partStr = String.valueOf(part);
|
||||
return PatternParser.valueOf(partStr);
|
||||
}
|
||||
private DyeColor parseColor(char part){
|
||||
String partStr = String.valueOf(part);
|
||||
return ColorParser.valueOf(partStr);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package eu.mikroskeem.utils.bannerparser.parsers.needcoolshoes;
|
||||
|
||||
import org.bukkit.block.banner.PatternType;
|
||||
import static org.bukkit.block.banner.PatternType.*;
|
||||
|
||||
class PatternParser {
|
||||
static PatternType valueOf(String a) {
|
||||
return PatternEnum.valueOf(a).getPattern();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private enum PatternEnum {
|
||||
a(BASE),
|
||||
|
||||
e(BRICKS),
|
||||
j(CROSS),
|
||||
z(STRAIGHT_CROSS),
|
||||
|
||||
p(GRADIENT),
|
||||
K(GRADIENT_UP),
|
||||
|
||||
q(HALF_HORIZONTAL_MIRROR),
|
||||
L(HALF_VERTICAL),
|
||||
H(HALF_VERTICAL_MIRROR),
|
||||
M(HALF_HORIZONTAL),
|
||||
|
||||
E(STRIPE_TOP),
|
||||
f(STRIPE_BOTTOM),
|
||||
s(STRIPE_LEFT),
|
||||
y(STRIPE_RIGHT),
|
||||
|
||||
r(DIAGONAL_LEFT),
|
||||
J(DIAGONAL_RIGHT_MIRROR),
|
||||
I(DIAGONAL_LEFT_MIRROR),
|
||||
x(DIAGONAL_RIGHT),
|
||||
|
||||
m(STRIPE_DOWNLEFT),
|
||||
n(STRIPE_DOWNRIGHT),
|
||||
|
||||
l(STRIPE_MIDDLE),
|
||||
w(STRIPE_CENTER),
|
||||
|
||||
C(SQUARE_TOP_LEFT),
|
||||
b(SQUARE_BOTTOM_LEFT),
|
||||
D(SQUARE_TOP_RIGHT),
|
||||
d(SQUARE_BOTTOM_RIGHT),
|
||||
|
||||
F(TRIANGLE_TOP),
|
||||
g(TRIANGLE_BOTTOM),
|
||||
|
||||
v(RHOMBUS_MIDDLE),
|
||||
t(CIRCLE_MIDDLE),
|
||||
h(TRIANGLES_BOTTOM),
|
||||
G(TRIANGLES_TOP),
|
||||
|
||||
B(STRIPE_SMALL),
|
||||
|
||||
c(BORDER),
|
||||
i(CURLY_BORDER),
|
||||
o(FLOWER),
|
||||
k(CREEPER),
|
||||
A(SKULL),
|
||||
u(MOJANG);
|
||||
|
||||
private PatternType type;
|
||||
PatternEnum(PatternType type) {
|
||||
this.type = type;
|
||||
}
|
||||
public PatternType getPattern() {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package eu.mikroskeem.utils.bannerparser.parsers.planetminecraft;
|
||||
|
||||
import eu.mikroskeem.utils.bannerparser.IntegerFromString;
|
||||
import org.bukkit.DyeColor;
|
||||
import static org.bukkit.DyeColor.*;
|
||||
|
||||
class ColorParser {
|
||||
static DyeColor valueOf(String a){
|
||||
try {
|
||||
/* Test for integer value first */
|
||||
String name = IntegerFromString.valueOf(Integer.valueOf(a));
|
||||
return ColorEnum.valueOf(name).getColor();
|
||||
} catch (NumberFormatException e){
|
||||
/* Return by string identifier */
|
||||
return ColorEnum.valueOf(a).getColor();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private enum ColorEnum {
|
||||
g(WHITE),
|
||||
EIGHT(SILVER),
|
||||
NINE(GRAY),
|
||||
ONE(BLACK),
|
||||
c(YELLOW),
|
||||
f(ORANGE),
|
||||
TWO(RED),
|
||||
FOUR(BROWN),
|
||||
b(LIME),
|
||||
THREE(GREEN),
|
||||
d(LIGHT_BLUE),
|
||||
SEVEN(CYAN),
|
||||
FIVE(BLUE),
|
||||
a(PINK),
|
||||
e(MAGENTA),
|
||||
SIX(PURPLE);
|
||||
|
||||
private DyeColor color;
|
||||
ColorEnum(DyeColor color) {
|
||||
this.color = color;
|
||||
}
|
||||
public DyeColor getColor() {
|
||||
return color;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package eu.mikroskeem.utils.bannerparser.parsers.planetminecraft;
|
||||
|
||||
import eu.mikroskeem.utils.bannerparser.IntegerFromString;
|
||||
import org.bukkit.block.banner.PatternType;
|
||||
import static org.bukkit.block.banner.PatternType.*;
|
||||
|
||||
class PatternParser {
|
||||
static PatternType valueOf(String a) {
|
||||
try {
|
||||
/* Test for integer value first */
|
||||
String name = IntegerFromString.valueOf(Integer.valueOf(a));
|
||||
return PatternEnum.valueOf(name).getPattern();
|
||||
} catch (NumberFormatException e){
|
||||
/* Return by string identifier */
|
||||
return PatternEnum.valueOf(a).getPattern();
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private enum PatternEnum {
|
||||
o(STRIPE_BOTTOM),
|
||||
v(STRIPE_TOP),
|
||||
s(STRIPE_LEFT),
|
||||
u(STRIPE_RIGHT),
|
||||
t(STRIPE_MIDDLE),
|
||||
p(STRIPE_CENTER),
|
||||
r(STRIPE_DOWNRIGHT),
|
||||
q(STRIPE_DOWNLEFT),
|
||||
SEVEN(CROSS),
|
||||
|
||||
i(STRIPE_SMALL),
|
||||
n(STRAIGHT_CROSS),
|
||||
|
||||
a(DIAGONAL_RIGHT_MIRROR),
|
||||
NINE(DIAGONAL_LEFT),
|
||||
A(DIAGONAL_LEFT_MIRROR),
|
||||
B(DIAGONAL_RIGHT),
|
||||
|
||||
e(HALF_VERTICAL),
|
||||
E(HALF_VERTICAL_MIRROR),
|
||||
|
||||
d(HALF_HORIZONTAL),
|
||||
D(HALF_HORIZONTAL_MIRROR),
|
||||
|
||||
j(SQUARE_BOTTOM_LEFT),
|
||||
k(SQUARE_BOTTOM_RIGHT),
|
||||
l(SQUARE_TOP_LEFT),
|
||||
m(SQUARE_TOP_RIGHT),
|
||||
|
||||
y(TRIANGLE_BOTTOM),
|
||||
z(TRIANGLE_TOP),
|
||||
|
||||
w(TRIANGLES_BOTTOM),
|
||||
x(TRIANGLES_TOP),
|
||||
|
||||
FIVE(CIRCLE_MIDDLE),
|
||||
g(RHOMBUS_MIDDLE),
|
||||
THREE(BORDER),
|
||||
EIGHT(CURLY_BORDER),
|
||||
FOUR(BRICKS),
|
||||
SIX(CREEPER),
|
||||
h(SKULL),
|
||||
b(FLOWER),
|
||||
f(MOJANG),
|
||||
c(GRADIENT),
|
||||
C(GRADIENT_UP);
|
||||
|
||||
private PatternType type;
|
||||
PatternEnum(PatternType type) {
|
||||
this.type = type;
|
||||
}
|
||||
public PatternType getPattern() {
|
||||
return type;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package eu.mikroskeem.utils.bannerparser.parsers.planetminecraft;
|
||||
|
||||
import eu.mikroskeem.utils.bannerparser.parsers.Parser;
|
||||
import eu.mikroskeem.utils.bannerparser.ParseQuery;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
import org.bukkit.block.banner.PatternType;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class PlanetMinecraftParser implements Parser {
|
||||
/*
|
||||
* See http://www.planetminecraft.com/banner/
|
||||
*/
|
||||
public ArrayList<Pattern> fromUrl(URL url){
|
||||
try {
|
||||
String bannerData = ParseQuery.splitQuery(url).getOrDefault("b", "");
|
||||
return parse(bannerData);
|
||||
} catch (UnsupportedEncodingException e){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private ArrayList<Pattern> parse(String whole){
|
||||
ArrayList<Pattern> patterns = new ArrayList<>();
|
||||
/* Get base color */
|
||||
patterns.add(new Pattern(parseColor(whole.charAt(0)), PatternType.BASE));
|
||||
|
||||
/* Iterate over all others */
|
||||
List<String> propertyList = Arrays.asList(whole.substring(1).split("(?<=\\G..)"));
|
||||
propertyList.forEach(property->{
|
||||
DyeColor color = parseColor(property.charAt(0));
|
||||
PatternType patternType = parsePattern(property.charAt(1));
|
||||
patterns.add(new Pattern(color, patternType));
|
||||
});
|
||||
return patterns;
|
||||
}
|
||||
|
||||
private PatternType parsePattern(char part){
|
||||
String partStr = String.valueOf(part);
|
||||
return PatternParser.valueOf(partStr);
|
||||
}
|
||||
private DyeColor parseColor(char part){
|
||||
String partStr = String.valueOf(part);
|
||||
return ColorParser.valueOf(partStr);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package eu.mikroskeem.utils.test.bannerparser;
|
||||
|
||||
import eu.mikroskeem.utils.bannerparser.parsers.Parsers;
|
||||
import eu.mikroskeem.utils.bannerparser.parsers.needcoolshoes.NeedCoolShoesParser;
|
||||
import eu.mikroskeem.utils.bannerparser.parsers.planetminecraft.PlanetMinecraftParser;
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.block.banner.Pattern;
|
||||
import org.bukkit.block.banner.PatternType;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class ParserTest {
|
||||
@Test
|
||||
public void testParserSelector() throws MalformedURLException {
|
||||
URL url = new URL("http://www.planetminecraft.com/banner/?b=g2feC");
|
||||
URL url1 = new URL("http://www.needcoolshoes.com/banner?=pabunK");
|
||||
URL url2 = new URL("http://example.com");
|
||||
Assert.assertEquals(Parsers.getParser(url).getClass(), PlanetMinecraftParser.class);
|
||||
Assert.assertEquals(Parsers.getParser(url1).getClass(), NeedCoolShoesParser.class);
|
||||
Assert.assertNull(Parsers.getParser(url2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPMCParser() throws MalformedURLException {
|
||||
URL url = new URL("http://www.planetminecraft.com/banner/?b=g1Aca");
|
||||
ArrayList<Pattern> matchPattern = new ArrayList<Pattern>(){{
|
||||
add(new Pattern(DyeColor.WHITE, PatternType.BASE));
|
||||
add(new Pattern(DyeColor.BLACK, PatternType.DIAGONAL_LEFT_MIRROR));
|
||||
add(new Pattern(DyeColor.YELLOW, PatternType.DIAGONAL_RIGHT_MIRROR));
|
||||
}};
|
||||
|
||||
ArrayList<Pattern> parsed = Parsers.parse(url);
|
||||
for (int i = 0; i < parsed.size(); i++) {
|
||||
Assert.assertEquals(matchPattern.get(i), parsed.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNCSParser() throws MalformedURLException {
|
||||
URL url = new URL("http://www.needcoolshoes.com/banner?=paaIlJ");
|
||||
ArrayList<Pattern> matchPattern = new ArrayList<Pattern>(){{
|
||||
add(new Pattern(DyeColor.WHITE, PatternType.BASE));
|
||||
add(new Pattern(DyeColor.BLACK, PatternType.DIAGONAL_LEFT_MIRROR));
|
||||
add(new Pattern(DyeColor.YELLOW, PatternType.DIAGONAL_RIGHT_MIRROR));
|
||||
}};
|
||||
|
||||
ArrayList<Pattern> parsed = Parsers.parse(url);
|
||||
for (int i = 0; i < parsed.size(); i++) {
|
||||
Assert.assertEquals(matchPattern.get(i), parsed.get(i));
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDiagonals() throws MalformedURLException {
|
||||
URL url = new URL("http://www.planetminecraft.com/banner/?b=gcAbBda29");
|
||||
URL url1 = new URL("http://www.needcoolshoes.com/banner?=palIkxmJbr");
|
||||
|
||||
ArrayList<Pattern> matchPattern = new ArrayList<Pattern>(){{
|
||||
add(new Pattern(DyeColor.WHITE, PatternType.BASE));
|
||||
add(new Pattern(DyeColor.YELLOW, PatternType.DIAGONAL_LEFT_MIRROR));
|
||||
add(new Pattern(DyeColor.LIME, PatternType.DIAGONAL_RIGHT));
|
||||
add(new Pattern(DyeColor.LIGHT_BLUE, PatternType.DIAGONAL_RIGHT_MIRROR));
|
||||
add(new Pattern(DyeColor.RED, PatternType.DIAGONAL_LEFT));
|
||||
}};
|
||||
|
||||
ArrayList<Pattern> parsed = Parsers.parse(url);
|
||||
for (int i = 0; i < parsed.size(); i++) {
|
||||
Assert.assertTrue(parsed.get(i).equals(matchPattern.get(i)));
|
||||
}
|
||||
|
||||
ArrayList<Pattern> parsed1 = Parsers.parse(url1);
|
||||
for (int i = 0; i < parsed1.size(); i++) {
|
||||
Assert.assertTrue(parsed1.get(i).equals(matchPattern.get(i)));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user