package org.dddlib.codegen.parser;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.TreeTraversingParser;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
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 YmlParser extends AbstractDefinitionParser {
private YAMLFactory yamlFactory;
private ObjectMapper objectMapper;
public YmlParser() {
yamlFactory = new YAMLFactory();
objectMapper = new ObjectMapper(yamlFactory);
}
public YmlParser(YAMLFactory yamlFactory, ObjectMapper objectMapper) {
this.yamlFactory = yamlFactory;
this.objectMapper = objectMapper;
}
@Override
public Set<ClassDefinition> parseReader(Reader in) {
final JsonNode node;
try {
node = objectMapper.readTree(yamlFactory.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 "yml".equals(ext);
}
}