diff --git a/src/main/java/org/bdware/mockjava/MockGenerator.java b/src/main/java/org/bdware/mockjava/MockGenerator.java index bca5542..33190ee 100644 --- a/src/main/java/org/bdware/mockjava/MockGenerator.java +++ b/src/main/java/org/bdware/mockjava/MockGenerator.java @@ -4,16 +4,32 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; -import org.bdware.mockjava.generator.IntegerGenerator; +import org.bdware.mockjava.generator.Generator; + +import java.util.HashMap; +import java.util.Map; public class MockGenerator extends JsonVisitor { - public static MockGenerator instance = new MockGenerator(); - JsonElement result; + public static MockGenerator instance = new MockGenerator(); + Map prefixToGenerator; + JsonElement result; public JsonElement get() { return result; } - + public MockGenerator(Class ...clzs){ + prefixToGenerator = new HashMap<>(); + for (Class clz:clzs){ + Generator generator =(Generator) clz.getAnnotation(Generator.class); + if (generator!=null){ + try { + prefixToGenerator.put(generator.tag(),(ValueGenerator)clz.getConstructor().newInstance()); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } @Override public JsonVisitor visitObject(JsonObject jsonObject) { JsonObject jo = new JsonObject(); @@ -44,9 +60,8 @@ public class MockGenerator extends JsonVisitor { @Override public JsonVisitor visitPrimitive(JsonPrimitive primitive) { if (!primitive.isString()) result = primitive.deepCopy(); - ValueGenerator generator = lookupGenerator(primitive.getAsString()); - result = generator.generate(null, primitive); + result = generator.generate( primitive); return this; } @@ -54,18 +69,22 @@ public class MockGenerator extends JsonVisitor { if (!str.startsWith("@")) { return new ValueGenerator() { @Override - public JsonElement generate(String preField, JsonElement previous) { + public JsonElement generate( JsonElement previous) { return new JsonPrimitive(str); } }; } - String[] args = null; int from = str.indexOf("("); - if (from != -1) { - int to = str.indexOf(")"); - String subStr = str.substring(from + 1, to); - args = subStr.split(","); + String prefix = from>=0?str.substring(0,from):str; + ValueGenerator generator = prefixToGenerator.get(prefix); + if (generator==null){ + return new ValueGenerator() { + @Override + public JsonElement generate(JsonElement previous) { + return new JsonPrimitive("unknown type, prefix:"+prefix+" all:"+str); + } + }; } - return IntegerGenerator.create(args); + return generator; } } diff --git a/src/main/java/org/bdware/mockjava/ValueGenerator.java b/src/main/java/org/bdware/mockjava/ValueGenerator.java index aabb66c..0e89460 100644 --- a/src/main/java/org/bdware/mockjava/ValueGenerator.java +++ b/src/main/java/org/bdware/mockjava/ValueGenerator.java @@ -3,5 +3,5 @@ package org.bdware.mockjava; import com.google.gson.JsonElement; public abstract class ValueGenerator { - public abstract JsonElement generate(String preField,JsonElement previous); + public abstract JsonElement generate(JsonElement previous); } diff --git a/src/main/java/org/bdware/mockjava/generator/IntegerGenerator.java b/src/main/java/org/bdware/mockjava/generator/IntegerGenerator.java index 09921f4..3900a32 100644 --- a/src/main/java/org/bdware/mockjava/generator/IntegerGenerator.java +++ b/src/main/java/org/bdware/mockjava/generator/IntegerGenerator.java @@ -9,15 +9,11 @@ import java.util.Random; @Generator(tag = "@integer") public class IntegerGenerator extends ValueGenerator { - // TODO - public static IntegerGenerator create(String[] args) { - return new IntegerGenerator(); - } - - static Random secureRandom = new SecureRandom(); - + public IntegerGenerator(){} + static Random secureRandom = new SecureRandom(); @Override - public JsonElement generate(String preField, JsonElement previous) { + public JsonElement generate(JsonElement previous) { + // TODO parse value here return new JsonPrimitive(secureRandom.nextInt()); } }