com.xlrit.gears.runner.scenario.ObjectToJsonVisitor Maven / Gradle / Ivy
package com.xlrit.gears.runner.scenario;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.*;
public class ObjectToJsonVisitor extends ScenarioBaseVisitor {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public JsonNode visitObjectExpression(ScenarioParser.ObjectExpressionContext ctx) {
return ctx.objectExpr().accept(this);
}
@Override
public JsonNode visitListExpression(ScenarioParser.ListExpressionContext ctx) {
ArrayNode arrayNode = objectMapper.createArrayNode();
for (ScenarioParser.ExprContext expr : ctx.listExpr().expr()) {
arrayNode.add(expr.accept(this));
}
return arrayNode;
}
@Override
public JsonNode visitLiteralExpression(ScenarioParser.LiteralExpressionContext ctx) {
ScenarioParser.LiteralExprContext literal = ctx.literalExpr();
if (literal.Integer() != null) {
return new LongNode(Long.parseLong(literal.Integer().getSymbol().getText()));
} else if (literal.Decimal() != null) {
return new DoubleNode(Double.parseDouble(literal.Decimal().getSymbol().getText()));
} else if (literal.Text() != null) {
String text = literal.Text().getSymbol().getText();
// v remove leading and trailing quotes v
return new TextNode(text.substring(1, text.length() - 1));
} else if (literal.Boolean() != null) {
String value = literal.Boolean().getSymbol().getText();
return BooleanNode.valueOf(Boolean.parseBoolean(value));
} else {
throw new IllegalArgumentException(
String.format("Unknown literal value: %s", ctx.literalExpr().getText())
);
}
}
@Override
public JsonNode visitObjectExpr(ScenarioParser.ObjectExprContext ctx) {
ObjectNode objectNode = objectMapper.createObjectNode();
for (ScenarioParser.AttributeExprContext attr : ctx.attributeExpr()) {
objectNode.set(attr.Identifier().getSymbol().getText(), attr.expr().accept(this));
}
return objectNode;
}
}