package org.dddlib.codegen.parser; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.TreeTraversingParser; import org.dddlib.codegen.classdef.ClassDefinition; import org.dddlib.codegen.api.ParsingException; import org.dddlib.codegen.classdef.PackageDefinition; import java.io.File; import java.io.IOException; import java.io.Reader; import java.util.Set; /** * Created by yyang on 2016/12/21. */ public class JsonParser extends AbstractDefinitionParser { private JsonFactory jsonFactory; private ObjectMapper objectMapper; public JsonParser() { jsonFactory = new JsonFactory(); objectMapper = new ObjectMapper(); } public JsonParser(JsonFactory jsonFactory, ObjectMapper objectMapper) { this.jsonFactory = jsonFactory; this.objectMapper = objectMapper; } @Override public Set<ClassDefinition> parseReader(Reader in) { final JsonNode node; try { node = objectMapper.readTree(jsonFactory.createParser(in)); PackageDefinition packageDefinition = objectMapper.readValue(new TreeTraversingParser(node), PackageDefinition.class); return toClassDefinitions(packageDefinition); } catch (IOException e) { throw new ParsingException("Cannot parse reader!"); } } @Override public Set<ClassDefinition> parseClasspath(String file) { return null; } @Override public Set<ClassDefinition> parseFile(String file) { return null; } @Override public Set<ClassDefinition> parseFile(File file) { return null; } @Override public boolean accept(String ext) { return "json".equals(ext); } }