From db7d4d31cef8297664b16caaa9ad9794a095f280 Mon Sep 17 00:00:00 2001 From: JanHolger Date: Tue, 19 Dec 2023 19:49:30 +0100 Subject: [PATCH] Optimized imports and reformatted code --- .../abstractdata/AbstractArray.java | 16 ++-- .../abstractdata/AbstractNull.java | 2 +- .../abstractdata/AbstractObject.java | 12 +-- .../abstractdata/AbstractPath.java | 22 +++--- .../abstractdata/AbstractPrimitive.java | 33 +++++---- .../abstractdata/NamingPolicy.java | 2 +- .../abstractdata/bson/BsonConverter.java | 53 +++++++------- .../abstractdata/bson/BsonTypeAdapter.java | 16 ++-- .../collector/AbstractArrayCollector.java | 5 +- .../collector/AbstractObjectCollector.java | 5 +- .../abstractdata/json/JsonDumper.java | 46 ++++++------ .../abstractdata/json/JsonParser.java | 52 ++++++------- .../abstractdata/mapper/Mapper.java | 28 +++---- .../abstractdata/mapper/MapperContext.java | 4 +- .../mapper/MapperTypeAdapter.java | 2 + .../abstractdata/mapper/MapperTypeSpec.java | 32 ++++---- .../mapper/annotation/DateFormat.java | 3 + .../mapper/annotation/MapperOptions.java | 6 ++ .../mapper/naming/CamelCaseNamingPolicy.java | 2 +- .../mapper/naming/NamingPolicy.java | 1 + .../schema/AbstractArraySchema.java | 51 +++++++------ .../schema/AbstractBooleanSchema.java | 12 +-- .../schema/AbstractNumberSchema.java | 40 +++++----- .../schema/AbstractObjectSchema.java | 38 +++++----- .../schema/AbstractStringSchema.java | 40 +++++----- .../abstractdata/schema/JsonSchemaParser.java | 73 ++++++++++--------- .../abstractdata/schema/OneOfSchema.java | 12 +-- .../schema/SchemaValidationError.java | 8 +- .../abstractdata/util/Helpers.java | 30 ++++---- .../abstractdata/xml/LegacyXMLParser.java | 4 +- .../abstractdata/xml/XMLDumper.java | 18 ++--- .../abstractdata/xml/XMLElement.java | 8 +- 32 files changed, 351 insertions(+), 325 deletions(-) diff --git a/src/main/java/org/javawebstack/abstractdata/AbstractArray.java b/src/main/java/org/javawebstack/abstractdata/AbstractArray.java index 2d97ea4..a94faaa 100644 --- a/src/main/java/org/javawebstack/abstractdata/AbstractArray.java +++ b/src/main/java/org/javawebstack/abstractdata/AbstractArray.java @@ -22,10 +22,10 @@ public AbstractArray array(boolean strict) throws AbstractCoercingException { } public AbstractObject object(boolean strict) throws AbstractCoercingException { - if(strict) + if (strict) throw new AbstractCoercingException(Type.OBJECT, Type.ARRAY); AbstractObject object = new AbstractObject(); - for(int i=0; i< elements.size(); i++) + for (int i = 0; i < elements.size(); i++) object.set(String.valueOf(i), elements.get(i)); return object; } @@ -227,11 +227,11 @@ public AbstractElement query(String query) { try { int index = Integer.parseInt(q[0]); AbstractElement e = get(index); - if(e == null || q.length == 1) + if (e == null || q.length == 1) return e; - if(e.isObject()) + if (e.isObject()) return e.object().query(q[1]); - if(e.isArray()) + if (e.isArray()) return e.array().query(q[1]); return null; } catch (NumberFormatException nfe) { @@ -281,7 +281,7 @@ public List toStringList() { public List toStringList(boolean strict) { List list = new ArrayList<>(); - for(AbstractElement e : elements) + for (AbstractElement e : elements) list.add(e.string(strict)); return list; } @@ -292,7 +292,7 @@ public List toObjectList() { public List toObjectList(boolean strict) { List list = new ArrayList<>(); - for(AbstractElement e : elements) + for (AbstractElement e : elements) list.add(e.object(strict)); return list; } @@ -365,7 +365,7 @@ public boolean equals(Object obj, boolean strict) { } } - public boolean equals (Object obj) { + public boolean equals(Object obj) { return equals(obj, false); } diff --git a/src/main/java/org/javawebstack/abstractdata/AbstractNull.java b/src/main/java/org/javawebstack/abstractdata/AbstractNull.java index de84b06..cb949b5 100644 --- a/src/main/java/org/javawebstack/abstractdata/AbstractNull.java +++ b/src/main/java/org/javawebstack/abstractdata/AbstractNull.java @@ -60,7 +60,7 @@ public boolean equals(Object obj, boolean strict) { return obj == null || obj instanceof AbstractNull; } - public boolean equals (Object obj) { + public boolean equals(Object obj) { return equals(obj, false); } } diff --git a/src/main/java/org/javawebstack/abstractdata/AbstractObject.java b/src/main/java/org/javawebstack/abstractdata/AbstractObject.java index 4130884..904f6d8 100644 --- a/src/main/java/org/javawebstack/abstractdata/AbstractObject.java +++ b/src/main/java/org/javawebstack/abstractdata/AbstractObject.java @@ -71,7 +71,7 @@ public AbstractObject object(boolean strict) throws AbstractCoercingException { } public AbstractArray array(boolean strict) throws AbstractCoercingException { - if(strict) + if (strict) throw new AbstractCoercingException(Type.ARRAY, Type.OBJECT); AbstractArray array = new AbstractArray(); for (int i = 0; i < size(); i++) { @@ -94,17 +94,17 @@ public AbstractElement get(String key, AbstractElement orElse) { public AbstractElement query(String query) { String[] q = query.split("\\.", 2); AbstractElement e = get(q[0]); - if(e == null || q.length == 1) + if (e == null || q.length == 1) return e; - if(e.isObject()) + if (e.isObject()) return e.object().query(q[1]); - if(e.isArray()) + if (e.isArray()) return e.array().query(q[1]); return null; } public AbstractElement query(String query, AbstractElement orElse) { - if(orElse == null) + if (orElse == null) orElse = AbstractNull.VALUE; AbstractElement value = query(query); return (value != null && !value.isNull()) ? value : orElse; @@ -288,7 +288,7 @@ public boolean equals(Object obj, boolean strict) { } } - public boolean equals (Object obj) { + public boolean equals(Object obj) { return equals(obj, false); } } diff --git a/src/main/java/org/javawebstack/abstractdata/AbstractPath.java b/src/main/java/org/javawebstack/abstractdata/AbstractPath.java index e64640e..0347f2e 100644 --- a/src/main/java/org/javawebstack/abstractdata/AbstractPath.java +++ b/src/main/java/org/javawebstack/abstractdata/AbstractPath.java @@ -13,7 +13,7 @@ public class AbstractPath { public AbstractPath(String name) { this(ROOT, name); - if(name == null || name.isEmpty()) + if (name == null || name.isEmpty()) throw new IllegalArgumentException("Name can not be null or empty"); } @@ -43,14 +43,14 @@ public AbstractPath clone() { public AbstractPath concat(AbstractPath path) { AbstractPath cloned = clone(); - for(String part : path.getParts()) + for (String part : path.getParts()) cloned = cloned.subPath(part); return cloned; } public List getParts() { List parts = parent != null ? parent.getParts() : new ArrayList<>(); - if(name != null) + if (name != null) parts.add(name); return parts; } @@ -61,13 +61,13 @@ public String toString() { public static AbstractPath parse(String s) { s = s.trim(); - if(s.isEmpty()) + if (s.isEmpty()) return ROOT; String[] spl = s.split("\\."); AbstractPath path = new AbstractPath(spl[0]); - for(int i=1; i type) throws MapperException { BsonValue value = converter.toBson(element); - if(value instanceof BsonNull && !BsonNull.class.equals(type)) + if (value instanceof BsonNull && !BsonNull.class.equals(type)) return null; - if(byte[].class.equals(type)) { + if (byte[].class.equals(type)) { BasicOutputBuffer outputBuffer = new BasicOutputBuffer(); new BsonDocumentCodec().encode(new BsonBinaryWriter(outputBuffer), value.asDocument(), EncoderContext.builder().build()); return outputBuffer.toByteArray(); } - if(ObjectId.class.equals(type)) + if (ObjectId.class.equals(type)) return value.asObjectId().getValue(); - if(Decimal128.class.equals(type)) + if (Decimal128.class.equals(type)) return value.asDecimal128().getValue(); return value; } public Class[] getSupportedTypes() { - return new Class[] { + return new Class[]{ ObjectId.class, Decimal128.class, BsonValue.class, diff --git a/src/main/java/org/javawebstack/abstractdata/collector/AbstractArrayCollector.java b/src/main/java/org/javawebstack/abstractdata/collector/AbstractArrayCollector.java index d924278..f9cd104 100644 --- a/src/main/java/org/javawebstack/abstractdata/collector/AbstractArrayCollector.java +++ b/src/main/java/org/javawebstack/abstractdata/collector/AbstractArrayCollector.java @@ -30,7 +30,10 @@ public BiConsumer, T> accumulator() { } public BinaryOperator> combiner() { - return (l1, l2) -> { l1.addAll(l2); return l1; }; + return (l1, l2) -> { + l1.addAll(l2); + return l1; + }; } public Function, AbstractArray> finisher() { diff --git a/src/main/java/org/javawebstack/abstractdata/collector/AbstractObjectCollector.java b/src/main/java/org/javawebstack/abstractdata/collector/AbstractObjectCollector.java index 8b53da0..2cefabc 100644 --- a/src/main/java/org/javawebstack/abstractdata/collector/AbstractObjectCollector.java +++ b/src/main/java/org/javawebstack/abstractdata/collector/AbstractObjectCollector.java @@ -32,7 +32,10 @@ public BiConsumer, T> accumulator() { } public BinaryOperator> combiner() { - return (m1, m2) -> { m1.putAll(m2); return m1; }; + return (m1, m2) -> { + m1.putAll(m2); + return m1; + }; } public Function, AbstractObject> finisher() { diff --git a/src/main/java/org/javawebstack/abstractdata/json/JsonDumper.java b/src/main/java/org/javawebstack/abstractdata/json/JsonDumper.java index 375e639..a8097f3 100644 --- a/src/main/java/org/javawebstack/abstractdata/json/JsonDumper.java +++ b/src/main/java/org/javawebstack/abstractdata/json/JsonDumper.java @@ -29,31 +29,31 @@ public String dump(AbstractElement element) { } private List dumpLines(AbstractElement element) { - if(element == null || element.isNull()) + if (element == null || element.isNull()) return Collections.singletonList("null"); - if(element.isBoolean()) + if (element.isBoolean()) return Collections.singletonList(element.bool().toString()); - if(element.isNumber()) + if (element.isNumber()) return Collections.singletonList(element.number().toString()); - if(element.isString()) + if (element.isString()) return Collections.singletonList("\"" + escape(element.string()) + "\""); - if(element.isObject()) { - List lines =new ArrayList<>(); - if(element.object().size() == 0) { + if (element.isObject()) { + List lines = new ArrayList<>(); + if (element.object().size() == 0) { lines.add("{}"); return lines; } - if(pretty) { + if (pretty) { lines.add("{"); List keys = new ArrayList<>(element.object().keys()); - for(int i=0; i vLines = dumpLines(element.object().get(k)); lines.add(indent + "\"" + escape(k) + "\": " + vLines.get(0)); - for(int j=1; j dumpLines(AbstractElement element) { } return lines; } - if(element.isArray()) { - List lines =new ArrayList<>(); - if(element.array().size() == 0) { + if (element.isArray()) { + List lines = new ArrayList<>(); + if (element.array().size() == 0) { lines.add("[]"); return lines; } - if(pretty) { + if (pretty) { lines.add("["); AbstractArray array = element.array(); - for(int i=0; i vLines = dumpLines(array.get(i)); - for(int j=0; j dumpLines(AbstractElement element) { private static String escape(String s) { StringBuilder sb = new StringBuilder(); - for(int i=0; i= '\u007F' && ch <= '\u009F' || ch >= '\u2000' && ch <= '\u20FF') { String hex = Integer.toHexString(ch); sb.append("\\u"); - for(int k=0; k < 4-hex.length(); k++) + for (int k = 0; k < 4 - hex.length(); k++) sb.append('0'); sb.append(hex.toUpperCase(Locale.ROOT)); } else { diff --git a/src/main/java/org/javawebstack/abstractdata/json/JsonParser.java b/src/main/java/org/javawebstack/abstractdata/json/JsonParser.java index 549f096..1afedd2 100644 --- a/src/main/java/org/javawebstack/abstractdata/json/JsonParser.java +++ b/src/main/java/org/javawebstack/abstractdata/json/JsonParser.java @@ -13,7 +13,7 @@ public class JsonParser { public AbstractElement parse(String json) throws ParseException { char[] primChars = json.toCharArray(); List chars = new ArrayList<>(primChars.length); - for(int i=0; i stack = new ArrayDeque<>(chars); AbstractElement parsed; @@ -22,11 +22,11 @@ public AbstractElement parse(String json) throws ParseException { } catch (NullPointerException ex) { throw new ParseException("Unexpected character ", primChars.length); } - if(parsed == null) { + if (parsed == null) { int line = 1; int pos = 1; - for(int i=0; i stack) { return parseString(stack); case 't': { stack.pop(); - if(stack.peek() != 'r') + if (stack.peek() != 'r') return null; stack.pop(); - if(stack.peek() != 'u') + if (stack.peek() != 'u') return null; stack.pop(); - if(stack.peek() != 'e') + if (stack.peek() != 'e') return null; stack.pop(); return new AbstractPrimitive(true); } case 'f': { stack.pop(); - if(stack.peek() != 'a') + if (stack.peek() != 'a') return null; stack.pop(); - if(stack.peek() != 'l') + if (stack.peek() != 'l') return null; stack.pop(); - if(stack.peek() != 's') + if (stack.peek() != 's') return null; stack.pop(); - if(stack.peek() != 'e') + if (stack.peek() != 'e') return null; stack.pop(); return new AbstractPrimitive(false); } case 'n': { stack.pop(); - if(stack.peek() != 'u') + if (stack.peek() != 'u') return null; stack.pop(); - if(stack.peek() != 'l') + if (stack.peek() != 'l') return null; stack.pop(); - if(stack.peek() != 'l') + if (stack.peek() != 'l') return null; stack.pop(); return AbstractNull.VALUE; @@ -117,11 +117,11 @@ private AbstractPrimitive parseNumber(Deque stack) { while (Character.isDigit(stack.peek()) || stack.peek() == '.' || stack.peek() == '-' || stack.peek() == 'E' || stack.peek() == 'e') sb.append(stack.pop()); String s = sb.toString(); - if(s.contains(".")) { + if (s.contains(".")) { return new AbstractPrimitive(Double.parseDouble(s)); } else { long l = Long.parseLong(s); - if(l >= Integer.MIN_VALUE && l <= Integer.MAX_VALUE) + if (l >= Integer.MIN_VALUE && l <= Integer.MAX_VALUE) return new AbstractPrimitive((int) l); return new AbstractPrimitive(l); } @@ -132,9 +132,9 @@ private AbstractPrimitive parseString(Deque stack) { StringBuilder sb = new StringBuilder(); while (true) { char c = stack.pop(); - if(c == '"') + if (c == '"') break; - if(c == '\\') { + if (c == '\\') { c = stack.pop(); switch (c) { case 'n': @@ -176,24 +176,24 @@ private AbstractObject parseObject(Deque stack) { AbstractObject object = new AbstractObject(); while (true) { popWhitespace(stack); - if(stack.peek() == '}') { + if (stack.peek() == '}') { stack.pop(); break; } AbstractPrimitive key = parseString(stack); - if(key == null) + if (key == null) return null; popWhitespace(stack); - if(stack.peek() != ':') + if (stack.peek() != ':') return null; stack.pop(); popWhitespace(stack); AbstractElement value = parse(stack); - if(value == null) + if (value == null) return null; object.set(key.string(), value); popWhitespace(stack); - if(stack.peek() == ',') + if (stack.peek() == ',') stack.pop(); } return object; @@ -204,16 +204,16 @@ private AbstractArray parseArray(Deque stack) { AbstractArray array = new AbstractArray(); while (true) { popWhitespace(stack); - if(stack.peek() == ']') { + if (stack.peek() == ']') { stack.pop(); break; } AbstractElement value = parse(stack); - if(value == null) + if (value == null) return null; array.add(value); popWhitespace(stack); - if(stack.peek() == ',') + if (stack.peek() == ',') stack.pop(); } return array; diff --git a/src/main/java/org/javawebstack/abstractdata/mapper/Mapper.java b/src/main/java/org/javawebstack/abstractdata/mapper/Mapper.java index ad2f235..64a4b4f 100644 --- a/src/main/java/org/javawebstack/abstractdata/mapper/Mapper.java +++ b/src/main/java/org/javawebstack/abstractdata/mapper/Mapper.java @@ -29,27 +29,27 @@ public T map(AbstractElement element, Class type) throws MapperException } public T map(MapperContext context, AbstractElement element, Class type) throws MapperException { - if(type == null || element == null || element.isNull()) + if (type == null || element == null || element.isNull()) return null; - if(type.isArray()) { - if(!element.isArray()) + if (type.isArray()) { + if (!element.isArray()) throw new MapperWrongTypeException(null, "array", Helpers.typeName(element)); Object arr = Array.newInstance(type.getComponentType(), element.array().size()); - for(int i=0; i type) { MapperTypeAdapter adapter = adapters.get(type); - if(adapter != null) + if (adapter != null) return adapter; - for(Class t : adapters.keySet()) { - if(t.isAssignableFrom(type)) { + for (Class t : adapters.keySet()) { + if (t.isAssignableFrom(type)) { return adapters.get(t); } } @@ -61,15 +61,15 @@ public AbstractElement map(Object obj) throws MapperException { } public AbstractElement map(MapperContext context, Object obj) throws MapperException { - if(obj == null) + if (obj == null) return AbstractNull.VALUE; - if(obj.getClass().isArray()) { + if (obj.getClass().isArray()) { AbstractArray array = new AbstractArray(); - for(int i=0; i type, MapperTypeAdapter adapter) { public Mapper adapter(MapperTypeAdapter adapter) { Class[] types = adapter.getSupportedTypes(); - if(types != null) { - for(Class type : types) + if (types != null) { + for (Class type : types) adapter(type, adapter); } return this; diff --git a/src/main/java/org/javawebstack/abstractdata/mapper/MapperContext.java b/src/main/java/org/javawebstack/abstractdata/mapper/MapperContext.java index baecb73..1b90aac 100644 --- a/src/main/java/org/javawebstack/abstractdata/mapper/MapperContext.java +++ b/src/main/java/org/javawebstack/abstractdata/mapper/MapperContext.java @@ -47,13 +47,13 @@ public Map, List> getAnnotations() { } public List getAnnotations(Class type) { - if(!annotations.containsKey(type)) + if (!annotations.containsKey(type)) return new ArrayList<>(); return (List) annotations.get(type); } public T getAnnotation(Class type) { - if(!annotations.containsKey(type)) + if (!annotations.containsKey(type)) return null; return (T) annotations.get(type).get(0); } diff --git a/src/main/java/org/javawebstack/abstractdata/mapper/MapperTypeAdapter.java b/src/main/java/org/javawebstack/abstractdata/mapper/MapperTypeAdapter.java index 7c3fb0a..449f70e 100644 --- a/src/main/java/org/javawebstack/abstractdata/mapper/MapperTypeAdapter.java +++ b/src/main/java/org/javawebstack/abstractdata/mapper/MapperTypeAdapter.java @@ -6,7 +6,9 @@ public interface MapperTypeAdapter { AbstractElement toAbstract(MapperContext context, Object value) throws MapperException; + Object fromAbstract(MapperContext context, AbstractElement element, Class type) throws MapperException; + default Class[] getSupportedTypes() { return null; } diff --git a/src/main/java/org/javawebstack/abstractdata/mapper/MapperTypeSpec.java b/src/main/java/org/javawebstack/abstractdata/mapper/MapperTypeSpec.java index d8c01d1..de0b2d3 100644 --- a/src/main/java/org/javawebstack/abstractdata/mapper/MapperTypeSpec.java +++ b/src/main/java/org/javawebstack/abstractdata/mapper/MapperTypeSpec.java @@ -15,19 +15,19 @@ public class MapperTypeSpec { private static final Map, MapperTypeSpec> typeSpecs = new HashMap<>(); public static MapperTypeSpec get(Class type) throws MapperException { - if(type.isArray() || type.isEnum() || type.isPrimitive()) + if (type.isArray() || type.isEnum() || type.isPrimitive()) return null; - if(Integer.class.equals(type)) + if (Integer.class.equals(type)) return null; - if(Long.class.equals(type)) + if (Long.class.equals(type)) return null; - if(Double.class.equals(type)) + if (Double.class.equals(type)) return null; - if(Float.class.equals(type)) + if (Float.class.equals(type)) return null; - if(Short.class.equals(type)) + if (Short.class.equals(type)) return null; - if(Boolean.class.equals(type)) + if (Boolean.class.equals(type)) return null; return typeSpecs.computeIfAbsent(type, MapperTypeSpec::new); } @@ -49,8 +49,8 @@ public MapperTypeSpec(Class type) throws MapperException { current = current.getSuperclass(); } while (!Object.class.equals(current)); // Collect parent classes recursively while (!classes.empty()) { - for(Field f : classes.pop().getDeclaredFields()) { - if(Modifier.isStatic(f.getModifiers())) // Don't include static fields + for (Field f : classes.pop().getDeclaredFields()) { + if (Modifier.isStatic(f.getModifiers())) // Don't include static fields continue; checkoutField(f); } @@ -60,11 +60,11 @@ public MapperTypeSpec(Class type) throws MapperException { private void checkoutField(Field field) throws MapperException { Map, List> annotations = new HashMap<>(); - for(Annotation annotation : field.getDeclaredAnnotations()) + for (Annotation annotation : field.getDeclaredAnnotations()) annotations.computeIfAbsent(annotation.annotationType(), k -> new ArrayList<>()).add(annotation); - if(annotations.containsKey(Additional.class)) { - if(!field.getType().equals(AbstractObject.class)) + if (annotations.containsKey(Additional.class)) { + if (!field.getType().equals(AbstractObject.class)) throw new MapperException("Additional field '" + field.getName() + "' in type '" + field.getDeclaringClass().getName() + "' needs to be of type AbstractObject, found '" + field.getType().getName() + "'"); additionalField = field; return; @@ -76,11 +76,11 @@ private void checkoutField(Field field) throws MapperException { spec.field = field; spec.annotations = annotations; - if(annotations.containsKey(MapperOptions.class)) { + if (annotations.containsKey(MapperOptions.class)) { MapperOptions options = (MapperOptions) annotations.get(MapperOptions.class).get(0); - if(options.name().length() > 0) + if (options.name().length() > 0) spec.name = options.name(); - if(!options.adapter().equals(MapperTypeAdapter.class)) { + if (!options.adapter().equals(MapperTypeAdapter.class)) { try { spec.adapter = options.adapter().newInstance(); } catch (InstantiationException | IllegalAccessException e) { @@ -104,7 +104,7 @@ public List getFieldSpecs() { } public Field getAdditionalField() { - if(additionalField != null) + if (additionalField != null) additionalField.setAccessible(true); return additionalField; } diff --git a/src/main/java/org/javawebstack/abstractdata/mapper/annotation/DateFormat.java b/src/main/java/org/javawebstack/abstractdata/mapper/annotation/DateFormat.java index d752599..cc74d26 100644 --- a/src/main/java/org/javawebstack/abstractdata/mapper/annotation/DateFormat.java +++ b/src/main/java/org/javawebstack/abstractdata/mapper/annotation/DateFormat.java @@ -10,8 +10,11 @@ public @interface DateFormat { String value() default ""; + String timezone() default ""; + boolean epoch() default false; + boolean millis() default false; } diff --git a/src/main/java/org/javawebstack/abstractdata/mapper/annotation/MapperOptions.java b/src/main/java/org/javawebstack/abstractdata/mapper/annotation/MapperOptions.java index 6a8947d..5900e4e 100644 --- a/src/main/java/org/javawebstack/abstractdata/mapper/annotation/MapperOptions.java +++ b/src/main/java/org/javawebstack/abstractdata/mapper/annotation/MapperOptions.java @@ -12,11 +12,17 @@ public @interface MapperOptions { String name() default ""; + int order() default 0; + Class[] generic() default {}; + boolean expose() default false; + boolean hidden() default false; + boolean omitNull() default true; + Class adapter() default MapperTypeAdapter.class; } diff --git a/src/main/java/org/javawebstack/abstractdata/mapper/naming/CamelCaseNamingPolicy.java b/src/main/java/org/javawebstack/abstractdata/mapper/naming/CamelCaseNamingPolicy.java index 9b7620c..c22a80b 100644 --- a/src/main/java/org/javawebstack/abstractdata/mapper/naming/CamelCaseNamingPolicy.java +++ b/src/main/java/org/javawebstack/abstractdata/mapper/naming/CamelCaseNamingPolicy.java @@ -9,7 +9,7 @@ public class CamelCaseNamingPolicy implements NamingPolicy { public String toAbstract(String source) { List words = Helpers.words(source); StringBuilder sb = new StringBuilder(words.get(0)); - for(int i=1; i fieldNames); } diff --git a/src/main/java/org/javawebstack/abstractdata/schema/AbstractArraySchema.java b/src/main/java/org/javawebstack/abstractdata/schema/AbstractArraySchema.java index 5549696..dd14a37 100644 --- a/src/main/java/org/javawebstack/abstractdata/schema/AbstractArraySchema.java +++ b/src/main/java/org/javawebstack/abstractdata/schema/AbstractArraySchema.java @@ -5,7 +5,9 @@ import org.javawebstack.abstractdata.AbstractObject; import org.javawebstack.abstractdata.AbstractPath; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; public class AbstractArraySchema implements AbstractSchema { @@ -36,7 +38,8 @@ public AbstractArraySchema allowNull() { this.allowNull = true; return this; } - public AbstractArraySchema unique(){ + + public AbstractArraySchema unique() { this.unique = true; return this; } @@ -65,42 +68,42 @@ public List> getCustomValidations() { @Override public AbstractObject toJsonSchema() { AbstractObject obj = new AbstractObject(); - obj.set("type","array"); - if(min != null){ - obj.set("minItems",min); + obj.set("type", "array"); + if (min != null) { + obj.set("minItems", min); } - if(max != null){ - obj.set("maxItems",max); + if (max != null) { + obj.set("maxItems", max); } - if(itemSchema != null){ - obj.set("items",itemSchema.toJsonSchema()); + if (itemSchema != null) { + obj.set("items", itemSchema.toJsonSchema()); } - if(unique) { - obj.set("uniqueItems","true"); + if (unique) { + obj.set("uniqueItems", "true"); } return obj; } public List validate(AbstractPath path, AbstractElement value) { List errors = new ArrayList<>(); - if(value.getType() != AbstractElement.Type.ARRAY) { + if (value.getType() != AbstractElement.Type.ARRAY) { errors.add(new SchemaValidationError(path, "invalid_type").meta("expected", "array").meta("actual", value.getType().name().toLowerCase(Locale.ROOT))); return errors; } AbstractArray array = value.array(); - if(min != null && array.size() < min) { + if (min != null && array.size() < min) { errors.add(new SchemaValidationError(path, "not_enough_items").meta("min", String.valueOf(min)).meta("actual", String.valueOf(array.size()))); } - if(max != null && array.size() > max) { + if (max != null && array.size() > max) { errors.add(new SchemaValidationError(path, "too_many_items").meta("max", String.valueOf(max)).meta("actual", String.valueOf(array.size()))); } List seen = new ArrayList<>(); - for(int i=0; i validate(AbstractPath path, AbstractElement v errors.addAll(itemSchema.validate(itemPath, array.get(i))); } - if(unique){ - if(seen.contains(item)){ + if (unique) { + if (seen.contains(item)) { int originalIndex = seen.indexOf(item); AbstractPath originalPath = path.subPath(String.valueOf(originalIndex)); - errors.add(new SchemaValidationError(itemPath,"duplicate_array_value") - .meta("value",item.toJsonString()) - .meta("first",originalPath.toString())); + errors.add(new SchemaValidationError(itemPath, "duplicate_array_value") + .meta("value", item.toJsonString()) + .meta("first", originalPath.toString())); } seen.add(item); } @@ -122,7 +125,7 @@ public List validate(AbstractPath path, AbstractElement v } - for(CustomValidation validation : customValidations) { + for (CustomValidation validation : customValidations) { errors.addAll(validation.validate(path, array)); } return errors; diff --git a/src/main/java/org/javawebstack/abstractdata/schema/AbstractBooleanSchema.java b/src/main/java/org/javawebstack/abstractdata/schema/AbstractBooleanSchema.java index 48cf614..8df83d5 100644 --- a/src/main/java/org/javawebstack/abstractdata/schema/AbstractBooleanSchema.java +++ b/src/main/java/org/javawebstack/abstractdata/schema/AbstractBooleanSchema.java @@ -35,23 +35,23 @@ public List> getCustomValidations() { @Override public AbstractObject toJsonSchema() { AbstractObject obj = new AbstractObject() - .set("type","boolean"); - if(staticValue != null){ - obj.set("const",staticValue); + .set("type", "boolean"); + if (staticValue != null) { + obj.set("const", staticValue); } return obj; } public List validate(AbstractPath path, AbstractElement value) { List errors = new ArrayList<>(); - if(value.getType() != AbstractElement.Type.BOOLEAN) { + if (value.getType() != AbstractElement.Type.BOOLEAN) { errors.add(new SchemaValidationError(path, "invalid_type").meta("expected", "boolean").meta("actual", value.getType().name().toLowerCase(Locale.ROOT))); return errors; } - if(staticValue != null && staticValue != value.bool()) { + if (staticValue != null && staticValue != value.bool()) { errors.add(new SchemaValidationError(path, "invalid_static_value").meta("expected", staticValue.toString()).meta("actual", value.bool().toString())); } - for(CustomValidation validation : customValidations) { + for (CustomValidation validation : customValidations) { errors.addAll(validation.validate(path, value.primitive())); } return errors; diff --git a/src/main/java/org/javawebstack/abstractdata/schema/AbstractNumberSchema.java b/src/main/java/org/javawebstack/abstractdata/schema/AbstractNumberSchema.java index 31fc0be..0354bde 100644 --- a/src/main/java/org/javawebstack/abstractdata/schema/AbstractNumberSchema.java +++ b/src/main/java/org/javawebstack/abstractdata/schema/AbstractNumberSchema.java @@ -21,11 +21,11 @@ public class AbstractNumberSchema implements AbstractSchema { private final List> customValidations = new ArrayList<>(); public AbstractNumberSchema min(Number min) { - return min(min,false); + return min(min, false); } public AbstractNumberSchema max(Number max) { - return max(max,false); + return max(max, false); } public AbstractNumberSchema min(Number min, boolean exclusive) { @@ -40,7 +40,7 @@ public AbstractNumberSchema max(Number max, boolean exclusive) { return this; } - public AbstractNumberSchema step(Number step){ + public AbstractNumberSchema step(Number step) { this.step = step; return this; } @@ -75,17 +75,17 @@ public List> getCustomValidations() { public AbstractObject toJsonSchema() { AbstractObject obj = new AbstractObject(); - obj.set("type",integerOnly ? "integer" : "number"); - if(min != null && max != null && !minExclusive && !maxExclusive){ + obj.set("type", integerOnly ? "integer" : "number"); + if (min != null && max != null && !minExclusive && !maxExclusive) { BigDecimal dMin = (min instanceof Float || min instanceof Double) ? BigDecimal.valueOf(min.doubleValue()) : BigDecimal.valueOf(min.longValue()); BigDecimal dMax = (max instanceof Float || max instanceof Double) ? BigDecimal.valueOf(max.doubleValue()) : BigDecimal.valueOf(max.longValue()); - if(dMin.compareTo(dMax)==0){ - obj.set("const",min); + if (dMin.compareTo(dMax) == 0) { + obj.set("const", min); } } - if(!obj.has("const")) { + if (!obj.has("const")) { if (min != null) { obj.set(minExclusive ? "exclusiveMinimum" : "minimum", min); } @@ -103,40 +103,40 @@ public AbstractObject toJsonSchema() { public List validate(AbstractPath path, AbstractElement value) { List errors = new ArrayList<>(); - if(value.getType() != AbstractElement.Type.NUMBER) { + if (value.getType() != AbstractElement.Type.NUMBER) { errors.add(new SchemaValidationError(path, "invalid_type").meta("expected", integerOnly ? "integer" : "number").meta("actual", value.getType().name().toLowerCase(Locale.ROOT))); return errors; } Number n = value.number(); BigDecimal dN = (n instanceof Float || n instanceof Double) ? BigDecimal.valueOf(n.doubleValue()) : BigDecimal.valueOf(n.longValue()); - if(integerOnly && (n instanceof Float || n instanceof Double)) { + if (integerOnly && (n instanceof Float || n instanceof Double)) { errors.add(new SchemaValidationError(path, "invalid_type").meta("expected", "integer").meta("actual", "number")); return errors; } - if(min != null) { + if (min != null) { BigDecimal dMin = (min instanceof Float || min instanceof Double) ? BigDecimal.valueOf(min.doubleValue()) : BigDecimal.valueOf(min.longValue()); - if(!(dN.compareTo(dMin) > (minExclusive ? 0 : -1))) { + if (!(dN.compareTo(dMin) > (minExclusive ? 0 : -1))) { errors.add(new SchemaValidationError(path, "number_smaller_than_min").meta("min", dMin.toPlainString()).meta("actual", dN.toPlainString())); } } - if(max != null) { + if (max != null) { BigDecimal dMax = (max instanceof Float || max instanceof Double) ? BigDecimal.valueOf(max.doubleValue()) : BigDecimal.valueOf(max.longValue()); - if(!(dN.compareTo(dMax) < (maxExclusive ? 0 : 1))) { + if (!(dN.compareTo(dMax) < (maxExclusive ? 0 : 1))) { errors.add(new SchemaValidationError(path, "number_larger_than_max").meta("max", dMax.toPlainString()).meta("actual", dN.toPlainString())); } } - if(step != null) { - if(min != null && minExclusive){ + if (step != null) { + if (min != null && minExclusive) { throw new UnsupportedOperationException("Step is not supported together with an exclusive minimum"); } BigDecimal dMin = min == null ? BigDecimal.ZERO : (min instanceof Float || min instanceof Double) ? BigDecimal.valueOf(min.doubleValue()) : BigDecimal.valueOf(min.longValue()); - BigDecimal dStep = (step instanceof Float || step instanceof Double) ? BigDecimal.valueOf(step.doubleValue()) : BigDecimal.valueOf(step.longValue()); + BigDecimal dStep = (step instanceof Float || step instanceof Double) ? BigDecimal.valueOf(step.doubleValue()) : BigDecimal.valueOf(step.longValue()); - if(dN.subtract(dMin).remainder(dStep).compareTo(BigDecimal.ZERO) != 0) { - errors.add(new SchemaValidationError(path, "number_not_within_step").meta("step", dStep.toPlainString()).meta("actual", dN.toPlainString()).meta("start",dMin.toPlainString())); + if (dN.subtract(dMin).remainder(dStep).compareTo(BigDecimal.ZERO) != 0) { + errors.add(new SchemaValidationError(path, "number_not_within_step").meta("step", dStep.toPlainString()).meta("actual", dN.toPlainString()).meta("start", dMin.toPlainString())); } } - for(CustomValidation validation : customValidations) { + for (CustomValidation validation : customValidations) { errors.addAll(validation.validate(path, value.primitive())); } return errors; diff --git a/src/main/java/org/javawebstack/abstractdata/schema/AbstractObjectSchema.java b/src/main/java/org/javawebstack/abstractdata/schema/AbstractObjectSchema.java index a920b02..1b822b4 100644 --- a/src/main/java/org/javawebstack/abstractdata/schema/AbstractObjectSchema.java +++ b/src/main/java/org/javawebstack/abstractdata/schema/AbstractObjectSchema.java @@ -45,22 +45,22 @@ public AbstractObjectSchema additionalProperties(AbstractSchema schema) { @Override public AbstractObject toJsonSchema() { AbstractObject obj = new AbstractObject(); - obj.set("type","object"); + obj.set("type", "object"); AbstractObject properties = new AbstractObject(); - this.properties.forEach((key, value)->{ - properties.set(key,value.toJsonSchema()); + this.properties.forEach((key, value) -> { + properties.set(key, value.toJsonSchema()); }); - obj.set("properties",properties); + obj.set("properties", properties); - if(!requiredProperties.isEmpty()){ + if (!requiredProperties.isEmpty()) { AbstractArray required = new AbstractArray(); requiredProperties.forEach(required::add); - obj.set("required",required); + obj.set("required", required); } - if(!allowAdditionalProperties){ - obj.set("additionalProperties",false); - }else if(additionalPropertySchema != null){ - obj.set("additionalProperties",additionalPropertySchema.toJsonSchema()); + if (!allowAdditionalProperties) { + obj.set("additionalProperties", false); + } else if (additionalPropertySchema != null) { + obj.set("additionalProperties", additionalPropertySchema.toJsonSchema()); } return obj; @@ -68,26 +68,26 @@ public AbstractObject toJsonSchema() { public List validate(AbstractPath path, AbstractElement value) { List errors = new ArrayList<>(); - if(value.getType() != AbstractElement.Type.OBJECT) { + if (value.getType() != AbstractElement.Type.OBJECT) { errors.add(new SchemaValidationError(path, "invalid_type").meta("expected", "object").meta("actual", value.getType().name().toLowerCase(Locale.ROOT))); return errors; } AbstractObject object = value.object(); - for(String prop : requiredProperties) { - if(!object.has(prop) || object.get(prop).isNull()) { + for (String prop : requiredProperties) { + if (!object.has(prop) || object.get(prop).isNull()) { errors.add(new SchemaValidationError(path.subPath(prop), "missing_required_property")); } } - for(String prop : object.keys()) { + for (String prop : object.keys()) { AbstractElement propValue = object.get(prop); AbstractPath propPath = path.subPath(prop); - if(properties.containsKey(prop)) { - if(propValue.isNull()) + if (properties.containsKey(prop)) { + if (propValue.isNull()) continue; errors.addAll(properties.get(prop).validate(propPath, propValue)); } else { - if(allowAdditionalProperties) { - if(additionalPropertySchema != null) { + if (allowAdditionalProperties) { + if (additionalPropertySchema != null) { errors.addAll(additionalPropertySchema.validate(propPath, propValue)); } } else { @@ -95,7 +95,7 @@ public List validate(AbstractPath path, AbstractElement v } } } - for(CustomValidation validation : customValidations) { + for (CustomValidation validation : customValidations) { errors.addAll(validation.validate(path, object)); } return errors; diff --git a/src/main/java/org/javawebstack/abstractdata/schema/AbstractStringSchema.java b/src/main/java/org/javawebstack/abstractdata/schema/AbstractStringSchema.java index 8eb7f6f..bd1742f 100644 --- a/src/main/java/org/javawebstack/abstractdata/schema/AbstractStringSchema.java +++ b/src/main/java/org/javawebstack/abstractdata/schema/AbstractStringSchema.java @@ -23,7 +23,7 @@ public AbstractStringSchema staticValue(String value) { public AbstractStringSchema enumValues(Class> enumType) { Set values = new HashSet<>(); - for(Enum v : enumType.getEnumConstants()) { + for (Enum v : enumType.getEnumConstants()) { values.add(v.name()); } return enumValues(values); @@ -74,22 +74,22 @@ public List> getCustomValidations() { @Override public AbstractObject toJsonSchema() { AbstractObject obj = new AbstractObject(); - obj.set("type","string"); - if(minLength != null){ - obj.set("minLength",minLength); + obj.set("type", "string"); + if (minLength != null) { + obj.set("minLength", minLength); } - if(maxLength != null){ - obj.set("maxLength",maxLength); + if (maxLength != null) { + obj.set("maxLength", maxLength); } - if(staticValue != null) { - obj.set("const",staticValue); + if (staticValue != null) { + obj.set("const", staticValue); } - if(regex != null) { - obj.set("pattern",regex); + if (regex != null) { + obj.set("pattern", regex); } - if(enumValues != null) { + if (enumValues != null) { AbstractArray arr = new AbstractArray(enumValues.toArray()); - obj.set("enum",arr); + obj.set("enum", arr); } return obj; @@ -97,30 +97,30 @@ public AbstractObject toJsonSchema() { public List validate(AbstractPath path, AbstractElement value) { List errors = new ArrayList<>(); - if(value.getType() != AbstractElement.Type.STRING) { + if (value.getType() != AbstractElement.Type.STRING) { errors.add(new SchemaValidationError(path, "invalid_type").meta("expected", "string").meta("actual", value.getType().name().toLowerCase(Locale.ROOT))); return errors; } String s = value.string(); - if(staticValue != null && !staticValue.equals(s)) { + if (staticValue != null && !staticValue.equals(s)) { errors.add(new SchemaValidationError(path, "invalid_static_value").meta("expected", staticValue).meta("actual", s)); } - if(enumValues != null && !enumValues.contains(s)) { + if (enumValues != null && !enumValues.contains(s)) { errors.add(new SchemaValidationError(path, "invalid_enum_value").meta("expected", String.join(", ", enumValues)).meta("actual", s)); } - if(minLength != null && s.length() < minLength) { + if (minLength != null && s.length() < minLength) { errors.add(new SchemaValidationError(path, "value_too_short").meta("min", minLength.toString()).meta("actual", String.valueOf(s.length()))); } - if(maxLength != null && s.length() > maxLength) { + if (maxLength != null && s.length() > maxLength) { errors.add(new SchemaValidationError(path, "value_too_long").meta("max", maxLength.toString()).meta("actual", String.valueOf(s.length()))); } - if(regexPattern != null) { + if (regexPattern != null) { Matcher matcher = regexPattern.matcher(s); - if(!matcher.matches()) { + if (!matcher.matches()) { errors.add(new SchemaValidationError(path, "invalid_pattern").meta("pattern", regex).meta("actual", s)); } } - for(CustomValidation validation : customValidations) { + for (CustomValidation validation : customValidations) { errors.addAll(validation.validate(path, value.primitive())); } return errors; diff --git a/src/main/java/org/javawebstack/abstractdata/schema/JsonSchemaParser.java b/src/main/java/org/javawebstack/abstractdata/schema/JsonSchemaParser.java index 0eba0cf..7d2a3c1 100644 --- a/src/main/java/org/javawebstack/abstractdata/schema/JsonSchemaParser.java +++ b/src/main/java/org/javawebstack/abstractdata/schema/JsonSchemaParser.java @@ -4,7 +4,9 @@ import org.javawebstack.abstractdata.AbstractElement; import org.javawebstack.abstractdata.AbstractObject; -import java.util.*; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; /* { @@ -42,7 +44,7 @@ public static void main(String[] args) { } public AbstractSchema parse(AbstractObject schema) { - if(schema.has("type")) { + if (schema.has("type")) { switch (schema.string("type")) { case "object": { return parseObject(schema); @@ -65,44 +67,45 @@ public AbstractSchema parse(AbstractObject schema) { } } } - if(schema.has("$ref")) { + if (schema.has("$ref")) { throw new UnsupportedOperationException("$ref is currently not supported"); } - if(schema.has("oneOf")){ + if (schema.has("oneOf")) { return parseOneOf(schema); } throw new IllegalArgumentException("Invalid json schema"); } private OneOfSchema parseOneOf(AbstractObject schema) { - if(!schema.hasArray("oneOf")){ + if (!schema.hasArray("oneOf")) { throw new IllegalArgumentException("Not a valid oneOf schema"); } AbstractArray absArr = schema.array("oneOf"); AbstractSchema[] schemas = new AbstractSchema[absArr.size()]; - for(int i = 0; i(schema.array("enum").toStringList())); } - if(schema.has("const")){ + if (schema.has("const")) { s.staticValue(schema.string("const")); } return s; @@ -115,23 +118,23 @@ private AbstractNumberSchema parseNumber(AbstractObject schema) { throw new IllegalArgumentException("Not a valid number schema"); } AbstractNumberSchema s = new AbstractNumberSchema(); - if(isInteger){ + if (isInteger) { s.integerOnly(); } - if(schema.has("minimum")) + if (schema.has("minimum")) s.min(schema.number("minimum")); - if(schema.has("maximum")) + if (schema.has("maximum")) s.max(schema.number("maximum")); - if(schema.has("exclusiveMinimum")) - s.min(schema.number("exclusiveMinimum"),true); - if(schema.has("exclusiveMaximum")) - s.max(schema.number("exclusiveMaximum"),true); - if(schema.has("const")){ + if (schema.has("exclusiveMinimum")) + s.min(schema.number("exclusiveMinimum"), true); + if (schema.has("exclusiveMaximum")) + s.max(schema.number("exclusiveMaximum"), true); + if (schema.has("const")) { Number staticValue = schema.number("const"); s.min(staticValue); s.max(staticValue); } - if(schema.has("multipleOf")){ + if (schema.has("multipleOf")) { s.step(schema.number("multipleOf")); } @@ -140,13 +143,13 @@ private AbstractNumberSchema parseNumber(AbstractObject schema) { private AbstractObjectSchema parseObject(AbstractObject schema) { - if(!schema.string("type").equals("object")) + if (!schema.string("type").equals("object")) throw new IllegalArgumentException("Not a valid object schema"); AbstractObjectSchema s = new AbstractObjectSchema(); List required = schema.has("required") ? schema.array("required").toStringList() : Collections.emptyList(); - if(schema.has("properties")) { + if (schema.has("properties")) { schema.object("properties").forEach((key, propSchema) -> { - if(required.contains(key)) { + if (required.contains(key)) { s.requiredProperty(key, parse(propSchema.object())); } else { s.optionalProperty(key, parse(propSchema.object())); @@ -154,9 +157,9 @@ private AbstractObjectSchema parseObject(AbstractObject schema) { }); } AbstractElement additionalProperties = schema.get("additionalProperties"); - if(additionalProperties != null){ - if(additionalProperties.isBoolean()){ - if(additionalProperties.bool()){ + if (additionalProperties != null) { + if (additionalProperties.isBoolean()) { + if (additionalProperties.bool()) { s.additionalProperties(); } } else { @@ -171,29 +174,29 @@ private AbstractObjectSchema parseObject(AbstractObject schema) { } private AbstractArraySchema parseArray(AbstractObject schema) { - if(!schema.string("type").equals("array")) + if (!schema.string("type").equals("array")) throw new IllegalArgumentException("Not a valid array schema"); AbstractArraySchema s = new AbstractArraySchema(); - if(schema.has("items")) { + if (schema.has("items")) { s.itemSchema(parse(schema.object("items"))); } - if(schema.has("minItems")) { + if (schema.has("minItems")) { s.min(schema.number("minItems").intValue()); } - if(schema.has("maxItems")) { + if (schema.has("maxItems")) { s.max(schema.number("maxItems").intValue()); } - if(schema.has("uniqueItems") && schema.bool("uniqueItems")){ + if (schema.has("uniqueItems") && schema.bool("uniqueItems")) { s.unique(); } return s; } - private AbstractBooleanSchema parseBoolean(AbstractObject schema){ - if(!schema.string("type").equals("boolean")) + private AbstractBooleanSchema parseBoolean(AbstractObject schema) { + if (!schema.string("type").equals("boolean")) throw new IllegalArgumentException("Not a valid boolean schema"); AbstractBooleanSchema s = new AbstractBooleanSchema(); - if(schema.has("const")){ + if (schema.has("const")) { s.staticValue(schema.bool("const")); } diff --git a/src/main/java/org/javawebstack/abstractdata/schema/OneOfSchema.java b/src/main/java/org/javawebstack/abstractdata/schema/OneOfSchema.java index 556b326..ce4611e 100644 --- a/src/main/java/org/javawebstack/abstractdata/schema/OneOfSchema.java +++ b/src/main/java/org/javawebstack/abstractdata/schema/OneOfSchema.java @@ -14,7 +14,7 @@ public class OneOfSchema implements AbstractSchema { private final List schemas = new ArrayList<>(); public OneOfSchema(AbstractSchema... schemas) { - if(schemas.length == 0) + if (schemas.length == 0) throw new IllegalArgumentException("At least one schema is required"); this.schemas.addAll(Arrays.asList(schemas)); } @@ -27,19 +27,19 @@ public AbstractObject toJsonSchema() { } - return new AbstractObject().set("oneOf",arr); + return new AbstractObject().set("oneOf", arr); } public List validate(AbstractPath path, AbstractElement value) { List> schemaErrors = new ArrayList<>(); - for(AbstractSchema schema : schemas) { + for (AbstractSchema schema : schemas) { List errors = schema.validate(path, value); - if(errors.isEmpty()) + if (errors.isEmpty()) return errors; schemaErrors.add(errors); } - for(List errors : schemaErrors) { - if(!(errors.size() == 1 && errors.get(0).getError().equals("invalid_type"))) + for (List errors : schemaErrors) { + if (!(errors.size() == 1 && errors.get(0).getError().equals("invalid_type"))) return errors; } return schemaErrors.get(0); diff --git a/src/main/java/org/javawebstack/abstractdata/schema/SchemaValidationError.java b/src/main/java/org/javawebstack/abstractdata/schema/SchemaValidationError.java index 68f0dee..fd6d018 100644 --- a/src/main/java/org/javawebstack/abstractdata/schema/SchemaValidationError.java +++ b/src/main/java/org/javawebstack/abstractdata/schema/SchemaValidationError.java @@ -58,14 +58,14 @@ public String getErrorDescription() { public String getErrorDescription(Map customDescriptions) { String message; - if(customDescriptions.containsKey(error)) { + if (customDescriptions.containsKey(error)) { message = customDescriptions.get(error); - } else if(BUILTIN_DESCRIPTIONS.containsKey(error)) { + } else if (BUILTIN_DESCRIPTIONS.containsKey(error)) { message = BUILTIN_DESCRIPTIONS.get(error); } else { return error; } - for(String key : errorMeta.keySet()) { + for (String key : errorMeta.keySet()) { message = message.replace("{" + key + "}", errorMeta.get(key)); } return message; @@ -73,7 +73,7 @@ public String getErrorDescription(Map customDescriptions) { public static Map> groupErrors(List errors) { Map> errorMap = new HashMap<>(); - for(SchemaValidationError e : errors) { + for (SchemaValidationError e : errors) { errorMap.computeIfAbsent(e.getPath(), k -> new ArrayList<>()).add(e); } return errorMap; diff --git a/src/main/java/org/javawebstack/abstractdata/util/Helpers.java b/src/main/java/org/javawebstack/abstractdata/util/Helpers.java index 4247a9e..856289a 100644 --- a/src/main/java/org/javawebstack/abstractdata/util/Helpers.java +++ b/src/main/java/org/javawebstack/abstractdata/util/Helpers.java @@ -10,29 +10,29 @@ public class Helpers { public static String typeName(AbstractElement e) { - if(e.isArray()) + if (e.isArray()) return "array"; - if(e.isObject()) + if (e.isObject()) return "object"; - if(e.isString()) + if (e.isString()) return "string"; - if(e.isNumber()) + if (e.isNumber()) return "number"; - if(e.isBoolean()) + if (e.isBoolean()) return "boolean"; return "null"; } public static Class guessGeneric(AbstractElement e) { - if(e.isArray()) + if (e.isArray()) return AbstractArray.class; - if(e.isObject()) + if (e.isObject()) return AbstractObject.class; - if(e.isString()) + if (e.isString()) return String.class; - if(e.isNumber()) + if (e.isNumber()) return Number.class; - if(e.isBoolean()) + if (e.isBoolean()) return Boolean.class; return null; } @@ -40,21 +40,21 @@ public static Class guessGeneric(AbstractElement e) { public static List words(String s) { List words = new ArrayList<>(); StringBuilder sb = new StringBuilder(); - for(int i=0; i 0) { + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '_' || s.charAt(i) == '-') { + if (sb.length() > 0) { words.add(sb.toString()); sb = new StringBuilder(); } continue; } - if(i > 0 && (Character.isLowerCase(s.charAt(i - 1)) && Character.isUpperCase(s.charAt(i)))) { + if (i > 0 && (Character.isLowerCase(s.charAt(i - 1)) && Character.isUpperCase(s.charAt(i)))) { words.add(sb.toString()); sb = new StringBuilder(); } sb.append(Character.toLowerCase(s.charAt(i))); } - if(sb.length() > 0) + if (sb.length() > 0) words.add(sb.toString()); return words; } diff --git a/src/main/java/org/javawebstack/abstractdata/xml/LegacyXMLParser.java b/src/main/java/org/javawebstack/abstractdata/xml/LegacyXMLParser.java index ddde196..b7077af 100644 --- a/src/main/java/org/javawebstack/abstractdata/xml/LegacyXMLParser.java +++ b/src/main/java/org/javawebstack/abstractdata/xml/LegacyXMLParser.java @@ -28,13 +28,13 @@ private static XMLElement convert(Element element) { String tag = element.getTagName(); XMLElement e = new XMLElement(tag); NamedNodeMap attrNodeMap = element.getAttributes(); - for(int i=0; i dumpLines(XMLNode node) { - if(node instanceof XMLTextNode) { + if (node instanceof XMLTextNode) { XMLTextNode textNode = (XMLTextNode) node; return Arrays.asList(escape(textNode.getText(), true)); } @@ -41,14 +41,14 @@ private List dumpLines(XMLNode node) { boolean selfClosing = useSelfClosing && element.getChildNodes().size() == 0; String openingTag = renderOpeningTag(element.tagName(), element.getAttributes(), selfClosing); String closingTag = selfClosing ? "" : ""; - if(pretty) { - if(element.getChildNodes().size() == 0) { + if (pretty) { + if (element.getChildNodes().size() == 0) { lines.add(openingTag + closingTag); - } else if(element.getChildNodes().size() == 1 && element.getChildNodes().get(0) instanceof XMLTextNode) { + } else if (element.getChildNodes().size() == 1 && element.getChildNodes().get(0) instanceof XMLTextNode) { lines.add(openingTag + escape(((XMLTextNode) element.getChildNodes().get(0)).getText(), true) + closingTag); } else { lines.add(openingTag); - for(XMLNode child : element.getChildNodes()) { + for (XMLNode child : element.getChildNodes()) { lines.addAll(dumpLines(child).stream().map(l -> indent + l).collect(Collectors.toList())); } lines.add(closingTag); @@ -56,7 +56,7 @@ private List dumpLines(XMLNode node) { } else { StringBuilder sb = new StringBuilder(); sb.append(openingTag); - for(XMLNode child : element.getChildNodes()) + for (XMLNode child : element.getChildNodes()) dumpLines(child).forEach(sb::append); sb.append(closingTag); lines.add(sb.toString()); @@ -68,7 +68,7 @@ public String renderOpeningTag(String tagName, Map attributes, b StringBuilder sb = new StringBuilder(); sb.append('<'); sb.append(escape(tagName, false)); - for(String attrName : attributes.keySet()) { + for (String attrName : attributes.keySet()) { sb.append(" "); sb.append(escape(attrName, false)); sb.append('='); @@ -76,7 +76,7 @@ public String renderOpeningTag(String tagName, Map attributes, b sb.append(escape(attributes.get(attrName), false)); sb.append('"'); } - if(selfClosing) + if (selfClosing) sb.append("/"); sb.append('>'); return sb.toString(); @@ -85,7 +85,7 @@ public String renderOpeningTag(String tagName, Map attributes, b private String escape(String value, boolean text) { value = value.replace("<", "<"); value = value.replace("&", "&"); - if(!text) { + if (!text) { value = value.replace("\"", """); value = value.replace("'", "'"); value = value.replace(">", ">"); diff --git a/src/main/java/org/javawebstack/abstractdata/xml/XMLElement.java b/src/main/java/org/javawebstack/abstractdata/xml/XMLElement.java index c9771ab..fed5f99 100644 --- a/src/main/java/org/javawebstack/abstractdata/xml/XMLElement.java +++ b/src/main/java/org/javawebstack/abstractdata/xml/XMLElement.java @@ -14,14 +14,14 @@ public class XMLElement implements XMLNode { private final List childNodes = new ArrayList<>(); public XMLElement(String tagName) { - if(tagName == null) + if (tagName == null) throw new IllegalArgumentException("tagName can not be null"); this.tagName = tagName; } public XMLElement(String tagName, String text) { this(tagName); - if(text == null) + if (text == null) throw new IllegalArgumentException("text can not be null"); text(text); } @@ -54,7 +54,7 @@ public String attr(String name) { } public XMLElement attr(String name, String value) { - if(value == null) { + if (value == null) { attributes.remove(name); return this; } @@ -78,7 +78,7 @@ public XMLElement child(XMLNode childNode) { } public XMLElement onlyIf(boolean condition, Consumer fn) { - if(condition) + if (condition) fn.accept(this); return this; }