package org.aksw.jena_sparql_api.utils.expr; import java.math.BigDecimal; import org.apache.jena.sparql.expr.NodeValue; import org.apache.jena.sparql.expr.nodevalue.NodeValueNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class NodeValueUtils { private static final Logger logger = LoggerFactory.getLogger(NodeValueUtils.class); public static int getInteger(NodeValue expr) { int result; if(expr.isInteger()) { result = expr.getInteger().intValue(); } else if(expr.isDecimal()) { result = expr.getDecimal().intValue(); } else { throw new RuntimeException("Not an integer value: " + expr); } return result; } public static Object getValue(NodeValue expr) { if(expr == null) { return NodeValue.nvNothing; } else if(expr.isIRI()){ //logger.debug("HACK - Uri constants should be converted to RdfTerms first"); return expr.asNode().getURI(); } else if(expr.isBoolean()) { return expr.getBoolean(); } else if(expr.isNumber()) { if(expr.isDecimal()) { BigDecimal d = expr.getDecimal(); if(d.scale() > 0) { return d.doubleValue(); } else { return d.intValue(); } } else if(expr.isDouble()) { return expr.getDouble(); } else if(expr.isFloat()) { return expr.getFloat(); } else { return expr.getDecimal().longValue(); } } else if(expr.isString()) { return expr.getString(); } else if(expr.isDateTime()) { return expr.getDateTime(); } else if(expr instanceof NodeValueNode) { //Node node = ((NodeValueNode)expr).ge if(expr.equals(NodeValue.nvNothing)) { return null; } else { throw new RuntimeException("Unknow datatype of node: " + expr); } } else { throw new RuntimeException("Unknow datatype of constant: " + expr); } } }