package org.aksw.jena_sparql_api.views;
import java.util.List;
import org.apache.jena.graph.Node;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.sparql.expr.Expr;
import org.apache.jena.sparql.expr.ExprFunctionN;
import org.apache.jena.sparql.expr.ExprList;
import org.apache.jena.sparql.expr.ExprVar;
import org.apache.jena.sparql.expr.NodeValue;
import org.apache.jena.vocabulary.XSD;
public class E_RdfTerm
extends ExprFunctionN
{
public static final NodeValue typeVar = NodeValue.makeInteger(-1);
public static final NodeValue typeBlank = NodeValue.makeInteger(0);
public static final NodeValue typeUri = NodeValue.makeInteger(1);
public static final NodeValue typePlainLiteral = NodeValue.makeInteger(2);
public static final NodeValue typeTypedLiteral = NodeValue.makeInteger(3);
public static final E_RdfTerm TRUE = E_RdfTerm.createTypedLiteral(NodeValue.TRUE, XSD.xboolean);
public static final E_RdfTerm FALSE = E_RdfTerm.createTypedLiteral(NodeValue.FALSE, XSD.xboolean);
public static final E_RdfTerm TYPE_ERROR = SqlTranslationUtils.expandConstant(SparqlifyConstants.nvTypeError);
public static E_RdfTerm createVar(ExprVar expr) {
return new E_RdfTerm(typeVar, expr, NodeValue.nvEmptyString, NodeValue.nvEmptyString);
}
public static E_RdfTerm createBlankNode(Expr expr) {
return new E_RdfTerm(typeBlank, expr, NodeValue.nvEmptyString, NodeValue.nvEmptyString);
}
public static E_RdfTerm createUri(Expr expr) {
return new E_RdfTerm(typeUri, expr, NodeValue.nvEmptyString, NodeValue.nvEmptyString);
}
public static E_RdfTerm createPlainLiteral(Expr expr) {
return new E_RdfTerm(typePlainLiteral, expr, NodeValue.nvEmptyString, NodeValue.nvEmptyString);
}
public static E_RdfTerm createPlainLiteral(Expr expr, Expr langTag) {
return new E_RdfTerm(typePlainLiteral, expr, langTag, NodeValue.nvEmptyString);
}
public static E_RdfTerm createTypedLiteral(Expr expr, Expr datatype) {
//DatatypeSystemDefault.
return new E_RdfTerm(typeTypedLiteral, expr, NodeValue.nvEmptyString, datatype);
}
public static E_RdfTerm createTypedLiteral(Expr expr, Resource datatype) {
return createTypedLiteral(expr, datatype.asNode());
}
public static E_RdfTerm createTypedLiteral(Expr expr, Node datatype) {
String datatypeUri = datatype.getURI();
Expr datatypeExpr = NodeValue.makeString(datatypeUri);
//DatatypeSystemDefault.
return new E_RdfTerm(typeTypedLiteral, expr, NodeValue.nvEmptyString, datatypeExpr);
}
public E_RdfTerm(List<Expr> exprs) {
this(exprs.get(0), exprs.get(1), exprs.get(2), exprs.get(3));
/*
if(exprs.size() != 4) {
throw new IllegalArgumentException("ExprRdfTerm requires exactly four arguments");
}*/
}
public E_RdfTerm(Expr type, Expr lexicalValue, Expr languageTag, Expr datatype) {
super(SparqlifyConstants.rdfTermLabel, type, lexicalValue, languageTag, datatype);
}
public Expr getType()
{
return super.getArgs().get(0);
}
public Expr getLexicalValue()
{
return super.getArgs().get(1);
}
public Expr getLanguageTag()
{
return super.getArgs().get(2);
}
public Expr getDatatype()
{
return super.getArgs().get(3);
}
@Override
public boolean isConstant()
{
return false;
/*
for(Expr expr : super.getArgs()) {
if(!expr.isConstant()) {
return false;
}
}
return true;
*/
}
@Override
public NodeValue getConstant() {
NodeValue result = RdfTerm.eval(
this.getArgs().get(0).getConstant(),
this.getArgs().get(1).getConstant(),
this.getArgs().get(2).getConstant(),
this.getArgs().get(3).getConstant()
);
//System.err.println(result);
return result;
}
@Override
public NodeValue eval(List<NodeValue> args) {
return RdfTerm.eval(args.get(0), args.get(1), args.get(2), args.get(3));
//RdfTerm
//throw new RuntimeException("Should not happen");
// TODO Auto-generated method stub
//return null;
}
@Override
public Expr copy(ExprList args) {
return new E_RdfTerm(args.get(0), args.get(1), args.get(2), args.get(3));
}
}