package org.aksw.jena_sparql_api.sparql.ext.json;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import org.apache.jena.datatypes.RDFDatatype;
import org.apache.jena.datatypes.TypeMapper;
import org.apache.jena.graph.Node;
import org.apache.jena.graph.NodeFactory;
import org.apache.jena.sparql.expr.NodeValue;
import org.apache.jena.sparql.expr.nodevalue.NodeValueVisitor;
import org.apache.jena.vocabulary.XSD;
public class NodeValueJson
extends NodeValue
{
private JsonElement json;
public NodeValueJson(JsonElement json) {
super();
this.json = json;
}
public JsonElement getJson() {
return json;
}
@Override
protected Node makeNode() {
RDFDatatype datatype = TypeMapper.getInstance().getSafeTypeByName(XSD.getURI() + "json");
String str = datatype.unparse(json);
Node result = NodeFactory.createLiteral(str, null, datatype);
return result;
}
@Override
public void visit(NodeValueVisitor arg0) {
throw new UnsupportedOperationException();
}
public static NodeValueJson create(JsonElement obj) {
NodeValueJson result = new NodeValueJson(obj);
return result;
}
public static NodeValueJson create(String jsonStr) {
Gson gson = new Gson();
JsonElement e = gson.fromJson(jsonStr, JsonElement.class);
NodeValueJson result = create(e);
return result;
}
}