package com.redhat.lightblue.client;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ContainerNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import com.fasterxml.jackson.databind.node.ObjectNode;
/**
* Base class for all expressions. Contains a container json node, either an
* object, or an array
*/
public abstract class Expression extends ExpressionPart {
/**
* Construct expression with the given object or array node
*/
protected Expression(ContainerNode node) {
super(node);
}
/**
* Construct an expression with an empty array or object node
*/
protected Expression(boolean arrayNode) {
super(arrayNode ? JsonNodeFactory.instance.arrayNode()
: JsonNodeFactory.instance.objectNode());
}
/**
* Add field:value
*/
public Expression add(String field, JsonNode value) {
try {
((ObjectNode) node).set(field, value);
return this;
} catch (ClassCastException e) {
throw new RuntimeException("Object node expected while adding " + field);
}
}
/**
* Add field:value
*/
public Expression add(String field, String value) {
return add(field, JsonNodeFactory.instance.textNode(value));
}
/**
* Add field:value
*/
public Expression add(String field, boolean value) {
return add(field, JsonNodeFactory.instance.booleanNode(value));
}
}