You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by cl...@apache.org on 2020/03/19 09:36:38 UTC
[jena] branch master updated: Fixes for JENA-1841 (#704)
This is an automated email from the ASF dual-hosted git repository.
claude pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/master by this push:
new b47770d Fixes for JENA-1841 (#704)
b47770d is described below
commit b47770d8f3347b961a661aff9fd2c30dc0964b79
Author: Claude Warren <cl...@xenei.com>
AuthorDate: Thu Mar 19 09:36:26 2020 +0000
Fixes for JENA-1841 (#704)
Moved all Node type buiding statics methods to new Converters class.
Deprecated old methods if they were moved to Converters.
Updated classes to call new Converters methods.
Added Converters.makeLiteral( Object ) that throws
IllegalArgumentException if Object class does not have a registered
Datatype.
Added Converters.makeLiteral( String value , String typeUri ) to build
arbitrary literals suitable for query building and serialization output.
Modified Converters.makeNode() to call Converters.makeLiteral() if a
literal is required.
---
.../arq/querybuilder/AbstractQueryBuilder.java | 154 ++--------
.../apache/jena/arq/querybuilder/AskBuilder.java | 16 +-
.../jena/arq/querybuilder/ConstructBuilder.java | 16 +-
.../apache/jena/arq/querybuilder/Converters.java | 339 ++++++++++++++++++++
.../jena/arq/querybuilder/DescribeBuilder.java | 22 +-
.../apache/jena/arq/querybuilder/ExprFactory.java | 14 +-
.../jena/arq/querybuilder/SelectBuilder.java | 22 +-
.../jena/arq/querybuilder/UpdateBuilder.java | 68 ++---
.../apache/jena/arq/querybuilder/WhereBuilder.java | 4 +-
.../arq/querybuilder/clauses/ValuesClause.java | 6 +-
.../jena/arq/querybuilder/clauses/WhereClause.java | 6 +-
.../arq/querybuilder/handlers/WhereHandler.java | 21 +-
.../updatebuilder/QuadIteratorBuilder.java | 8 +-
.../updatebuilder/SingleQuadHolder.java | 16 +-
.../updatebuilder/WhereQuadHolder.java | 3 +-
.../arq/querybuilder/AbstractQueryBuilderTest.java | 60 ++--
.../jena/arq/querybuilder/ConvertersTest.java | 340 +++++++++++++++++++++
.../jena/arq/querybuilder/ExprFactoryTest.java | 2 +-
18 files changed, 836 insertions(+), 281 deletions(-)
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
index 84b1889..b548bc6 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java
@@ -17,7 +17,6 @@
*/
package org.apache.jena.arq.querybuilder;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
@@ -31,29 +30,20 @@ import org.apache.jena.arq.querybuilder.handlers.HandlerBlock;
import org.apache.jena.arq.querybuilder.handlers.PrologHandler;
import org.apache.jena.arq.querybuilder.handlers.ValuesHandler;
import org.apache.jena.arq.querybuilder.handlers.WhereHandler;
-import org.apache.jena.graph.FrontsNode ;
import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.NodeFactory ;
import org.apache.jena.graph.Triple;
-import org.apache.jena.graph.impl.LiteralLabelFactory ;
import org.apache.jena.query.Query ;
import org.apache.jena.query.QueryParseException;
import org.apache.jena.rdf.model.Resource ;
-import org.apache.jena.riot.RiotException;
-import org.apache.jena.riot.system.PrefixMapFactory;
import org.apache.jena.shared.PrefixMapping;
import org.apache.jena.sparql.ARQInternalErrorException ;
import org.apache.jena.sparql.core.TriplePath;
import org.apache.jena.sparql.core.Var ;
import org.apache.jena.sparql.expr.Expr;
-import org.apache.jena.sparql.expr.ExprVar ;
-import org.apache.jena.sparql.path.P_Link;
import org.apache.jena.sparql.path.Path;
-import org.apache.jena.sparql.path.PathParser;
import org.apache.jena.sparql.syntax.ElementGroup;
import org.apache.jena.sparql.syntax.ElementSubQuery;
import org.apache.jena.sparql.util.ExprUtils;
-import org.apache.jena.sparql.util.NodeFactoryExtra ;
/**
* Base class for all QueryBuilders.
@@ -91,18 +81,18 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
* @return The Node value.
*/
public Node makeNode(Object o) {
- return makeNode( o, query.getPrefixMapping() );
+ return Converters.makeNode( o, query.getPrefixMapping() );
}
/**
* Make a node or path from the object using the query prefix mapping.
* @param o the object to make the node or path from.
* @return A node or path.
- * @see #makeNodeOrPath(Object, PrefixMapping)
+ * @see #Converters#makeNodeOrPath(Object, PrefixMapping)
*/
private Object makeNodeOrPath(Object o)
{
- return makeNodeOrPath(o, query.getPrefixMapping() );
+ return Converters.makeNodeOrPath(o, query.getPrefixMapping() );
}
/**
@@ -121,43 +111,12 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
* @param o the object that should be interpreted as a path or a node.
* @param pMapping the prefix mapping to resolve path or node with
* @return the Path or Node
+ * @deprecated use {@link Converters#makeNodeOrPath(Object, PrefixMapping)}
*/
+ @Deprecated
public static Object makeNodeOrPath(Object o, PrefixMapping pMapping)
{
- if (o == null) {
- return Node.ANY;
- }
- if (o instanceof Path)
- {
- return o;
- }
- if (o instanceof FrontsNode) {
- return ((FrontsNode) o).asNode();
- }
-
- if (o instanceof Node) {
- return o;
- }
- if (o instanceof String) {
- try {
- final Path p = PathParser.parse((String) o, pMapping);
- if (p instanceof P_Link)
- {
- return ((P_Link)p).getNode();
- }
- return p;
- }
- catch (final QueryParseException e)
- { // try to parse vars
- return makeNode( o, pMapping );
- }
- catch (final Exception e)
- {
- // expected in some cases -- do nothing
- }
-
- }
- return NodeFactory.createLiteral(LiteralLabelFactory.createTypedLiteral(o));
+ return Converters.makeNodeOrPath(o, pMapping);
}
public ElementSubQuery asSubQuery() {
@@ -223,30 +182,23 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
* Will use double quote otherwise.
*
* @return the quoted string.
+ * @deprecated {@link Converters#quoted(String)}
*/
+ @Deprecated
public static String quote(String q) {
- final int qt = q.indexOf('"');
- final int sqt = q.indexOf("'");
-
- if (sqt == -1 || qt<sqt)
- {
- return String.format( "'%s'", q);
- }
- return String.format( "\"%s\"", q);
+ return Converters.quoted(q);
}
/**
* Verify that any Node_Variable nodes are returned as Var nodes.
* @param n the node to check
* @return the node n or a new Var if n is an instance of Node_Variable
+ * @deprecated use {@link Converters#checkVar(Node)}
*/
+ @Deprecated
public static Node checkVar(Node n )
{
- if (n.isVariable())
- {
- return Var.alloc( n );
- }
- return n;
+ return Converters.checkVar(n);
}
/**
@@ -263,28 +215,11 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
* @param o The object to convert (may be null).
* @param pMapping The prefix mapping to use for prefix resolution.
* @return The Node value.
+ * @deprecated use {@link Converters#makeNode(Object, PrefixMapping)}
*/
+ @Deprecated
public static Node makeNode(Object o, PrefixMapping pMapping) {
- if (o == null) {
- return Node.ANY;
- }
- if (o instanceof FrontsNode) {
- return checkVar(((FrontsNode) o).asNode());
- }
-
- if (o instanceof Node) {
- return checkVar( (Node) o );
- }
- if (o instanceof String) {
- try {
- return checkVar(NodeFactoryExtra.parseNode((String) o, PrefixMapFactory
- .createForInput(pMapping)));
- } catch (final RiotException e) {
- // expected in some cases -- do nothing
- }
-
- }
- return NodeFactory.createLiteral(LiteralLabelFactory.createTypedLiteral(o));
+ return Converters.makeNode(o, pMapping);
}
/**
@@ -308,28 +243,11 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
* The object to convert.
* @return the Var value.
* @throws ARQInternalErrorException
+ * @deprecated use {@link Converters#makeVar(Object)}
*/
+ @Deprecated
public static Var makeVar(Object o) throws ARQInternalErrorException {
- if (o == null) {
- return Var.ANON;
- }
- if (o instanceof Var) {
- return (Var) o;
- }
- Var retval = null;
- if (o instanceof FrontsNode) {
- retval = Var.alloc(((FrontsNode) o).asNode());
- } else if (o instanceof Node) {
- retval = Var.alloc((Node) o);
- } else if (o instanceof ExprVar) {
- retval = Var.alloc((ExprVar) o);
- } else {
- retval = Var.alloc(Var.canonical(o.toString()));
- }
- if ("*".equals(Var.canonical(retval.toString()))) {
- return null;
- }
- return retval;
+ return Converters.makeVar(o);
}
/**
@@ -380,6 +298,7 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
public final ExprFactory getExprFactory() {
return getHandlerBlock().getPrologHandler().getExprFactory();
}
+
/**
* Set a variable replacement. During build all instances of var in the
* query will be replaced with value. If value is null the replacement is
@@ -415,9 +334,9 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
*/
public void setVar(Object var, Object value) {
if (value == null) {
- setVar(makeVar(var), null);
+ setVar(Converters.makeVar(var), null);
} else {
- setVar(makeVar(var), makeNode(value));
+ setVar(Converters.makeVar(var), makeNode(value));
}
}
@@ -473,27 +392,12 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
* @param iter the iterator of objects, may be null or empty.
* @param prefixMapping the PrefixMapping to use when nodes are created.
* @return a Collection of nodes or null if iter is null or empty.
+ * @deprecated use {@link Converters#makeValueNodes(Iterator, PrefixMapping)}
*/
+ @Deprecated
public static Collection<Node> makeValueNodes( Iterator<?> iter, PrefixMapping prefixMapping )
{
- if (iter == null || !iter.hasNext())
- {
- return null;
- }
- final List<Node> values = new ArrayList<Node>();
- while (iter.hasNext())
- {
- final Object o = iter.next();
- // handle null as UNDEF
- if (o == null)
- {
- values.add( null );
- } else
- {
- values.add( makeNode( o, prefixMapping ));
- }
- }
- return values;
+ return Converters.makeValueNodes(iter, prefixMapping);
}
/**
@@ -504,7 +408,7 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
*/
public Collection<Node> makeValueNodes( Iterator<?> iter )
{
- return makeValueNodes( iter, getPrologHandler().getPrefixes() );
+ return Converters.makeValueNodes( iter, getPrologHandler().getPrefixes() );
}
@SuppressWarnings("unchecked")
@@ -522,10 +426,10 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
throw new IllegalArgumentException( "column must have at least one entry.");
}
final Iterator<?> iter = column.iterator();
- final Var v = makeVar( iter.next() );
+ final Var v = Converters.makeVar( iter.next() );
getValuesHandler().addValueVar(v, makeValueNodes(iter));
} else {
- getValuesHandler().addValueVar(makeVar(var), null );
+ getValuesHandler().addValueVar(Converters.makeVar(var), null );
}
return (T) this;
}
@@ -540,7 +444,7 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
values = makeValueNodes( Arrays.asList(objects).iterator());
}
- getValuesHandler().addValueVar(makeVar(var), values );
+ getValuesHandler().addValueVar(Converters.makeVar(var), values );
return (T) this;
}
@@ -555,7 +459,7 @@ implements Cloneable, PrologClause<T>, ValuesClause<T> {
{
values = makeValueNodes( entry.getValue().iterator() );
}
- hdlr.addValueVar(makeVar(entry.getKey()), values );
+ hdlr.addValueVar(Converters.makeVar(entry.getKey()), values );
}
getValuesHandler().addAll( hdlr );
return (T) this;
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
index 0259523..388bd87 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java
@@ -264,13 +264,13 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder>
}
@Override
public AskBuilder addBind(Expr expression, Object var) {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
@Override
public AskBuilder addBind(String expression, Object var) throws ParseException {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
@@ -282,7 +282,7 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder>
@Override
public AskBuilder addOrderBy(Object orderBy) {
- getSolutionModifierHandler().addOrderBy(makeVar(orderBy));
+ getSolutionModifierHandler().addOrderBy(Converters.makeVar(orderBy));
return this;
}
@@ -300,13 +300,13 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder>
@Override
public AskBuilder addOrderBy(Object orderBy, Order order) {
- getSolutionModifierHandler().addOrderBy(makeVar(orderBy), order);
+ getSolutionModifierHandler().addOrderBy(Converters.makeVar(orderBy), order);
return this;
}
@Override
public AskBuilder addGroupBy(Object groupBy) {
- getSolutionModifierHandler().addGroupBy(makeVar(groupBy));
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(groupBy));
return this;
}
@@ -318,13 +318,13 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder>
@Override
public AskBuilder addGroupBy(Object var, Expr expr) {
- getSolutionModifierHandler().addGroupBy(makeVar(var), expr);
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(var), expr);
return this;
}
@Override
public AskBuilder addGroupBy(Object var, String expr) {
- getSolutionModifierHandler().addGroupBy(makeVar(var), makeExpr(expr));
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(var), makeExpr(expr));
return this;
}
@@ -342,7 +342,7 @@ public class AskBuilder extends AbstractQueryBuilder<AskBuilder>
@Override
public AskBuilder addHaving(Object var) throws ParseException {
- getSolutionModifierHandler().addHaving(makeVar(var));
+ getSolutionModifierHandler().addHaving(Converters.makeVar(var));
return this;
}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
index 87a029a..4beb4cd 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java
@@ -122,7 +122,7 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder> imp
@Override
public ConstructBuilder addOrderBy(Object orderBy) {
- getSolutionModifierHandler().addOrderBy(makeVar(orderBy));
+ getSolutionModifierHandler().addOrderBy(Converters.makeVar(orderBy));
return this;
}
@@ -140,13 +140,13 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder> imp
@Override
public ConstructBuilder addOrderBy(Object orderBy, Order order) {
- getSolutionModifierHandler().addOrderBy(makeVar(orderBy), order);
+ getSolutionModifierHandler().addOrderBy(Converters.makeVar(orderBy), order);
return this;
}
@Override
public ConstructBuilder addGroupBy(Object groupBy) {
- getSolutionModifierHandler().addGroupBy(makeVar(groupBy));
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(groupBy));
return this;
}
@@ -158,13 +158,13 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder> imp
@Override
public ConstructBuilder addGroupBy(Object var, Expr expr) {
- getSolutionModifierHandler().addGroupBy(makeVar(var), expr);
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(var), expr);
return this;
}
@Override
public ConstructBuilder addGroupBy(Object var, String expr) {
- getSolutionModifierHandler().addGroupBy(makeVar(var), makeExpr(expr));
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(var), makeExpr(expr));
return this;
}
@@ -182,7 +182,7 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder> imp
@Override
public ConstructBuilder addHaving(Object var) throws ParseException {
- getSolutionModifierHandler().addHaving(makeVar(var));
+ getSolutionModifierHandler().addHaving(Converters.makeVar(var));
return this;
}
@@ -357,13 +357,13 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder> imp
@Override
public ConstructBuilder addBind(Expr expression, Object var) {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
@Override
public ConstructBuilder addBind(String expression, Object var) throws ParseException {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/Converters.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/Converters.java
new file mode 100644
index 0000000..2dd08b7
--- /dev/null
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/Converters.java
@@ -0,0 +1,339 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jena.arq.querybuilder;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.jena.datatypes.BaseDatatype;
+import org.apache.jena.datatypes.DatatypeFormatException;
+import org.apache.jena.datatypes.RDFDatatype;
+import org.apache.jena.datatypes.TypeMapper;
+import org.apache.jena.graph.FrontsNode;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.graph.impl.LiteralLabel;
+import org.apache.jena.graph.impl.LiteralLabelFactory;
+import org.apache.jena.riot.RiotException;
+import org.apache.jena.riot.system.PrefixMapFactory;
+import org.apache.jena.shared.PrefixMapping;
+import org.apache.jena.sparql.ARQInternalErrorException;
+import org.apache.jena.sparql.core.Var;
+import org.apache.jena.sparql.expr.ExprVar;
+import org.apache.jena.sparql.path.P_Link;
+import org.apache.jena.sparql.path.Path;
+import org.apache.jena.sparql.path.PathParser;
+import org.apache.jena.sparql.util.NodeFactoryExtra;
+
+/**
+ * A collection of static methods to convert from Objects to various
+ * types used in Query and Update construction.
+ */
+public class Converters {
+
+ private Converters() {
+ // do not make instance
+ }
+
+ /**
+ * Converts any Node_Variable nodes into Var nodes.
+ * @param n the node to check
+ * @return the node n or a new Var if n is an instance of Node_Variable
+ */
+ public static Node checkVar(Node n )
+ {
+ if (n.isVariable())
+ {
+ return Var.alloc( n );
+ }
+ return n;
+ }
+
+ /**
+ * Creates a literal from an object.
+ * If the object type is registered with the TypeMapper the associated literal
+ * string is returned. If the object is not registered an IllegalArgumentException
+ * is thrown.
+ * @param o the object to convert.
+ * @return the literal node.
+ * @throws IllegalArgumentException if object type is not registered.
+ */
+ public static Node makeLiteral(Object o) {
+
+ RDFDatatype dt = TypeMapper.getInstance().getTypeByValue( o );
+ if (dt == null) {
+ String msg = "No TypeDef defined for %s. Use TypeMapper.getInstance().register() to "
+ + "register one or use makeLiteral() method in query builder instance.";
+ throw new IllegalArgumentException( String.format( msg, o.getClass()));
+ }
+ return NodeFactory.createLiteral(LiteralLabelFactory.createTypedLiteral(o));
+
+ }
+
+ /**
+ * Creates a literal from the value and type URI.
+ * There are several possible outcomes:
+ * <ul>
+ * <li>
+ * If the URI is registered with TypeMapper and the value is the
+ * proper lexical form for the type, the registered TypeMapper
+ * is used and calling {@code getLiteralValue()} on the returned node
+ * will return a proper object.
+ * </li><li>
+ * If the URI is unregistered a Datatype is created but not registered
+ * with the TypeMapper. The resulting node is properly constructed for
+ * used in output serialization, queries, or updates. Calling
+ * {@code getLiteralValue()} on the returned node will throw DatatypeFormatException.
+ * Note that if {@code JenaParameters.enableEagerLiteralValidation} is true the
+ * DatatypeFormatException will be thrown by this method.
+ * </li><li>
+ * If the URI is registered but the value is not a proper lexical form
+ * a DatatypeFormatException will be thrown by this method.
+ * </li>
+ * </ul>
+ * @param value the value for the literal
+ * @param typeUri the type URI for the literal node.
+ * @return the literal node.
+ * @throws DatatypeFormatException on errors noted above
+ */
+ public static Node makeLiteral(String value, String typeUri) {
+ Object oValue = value;
+ RDFDatatype dt = TypeMapper.getInstance().getTypeByName(typeUri);
+ if (dt == null)
+ {
+ dt = new BaseDatatype(typeUri) {
+
+ @Override
+ public boolean isValidValue(Object valueForm) {
+ return false;
+ }
+
+ @Override
+ public Object parse(String lexicalForm) throws DatatypeFormatException {
+ RDFDatatype dt = TypeMapper.getInstance().getTypeByName(uri);
+ if (dt == null)
+ {
+ throw new DatatypeFormatException("no registered Datatype for "+uri );
+ }
+ return dt.parse( lexicalForm );
+ }
+
+ };
+ } else {
+ oValue = dt.parse( value );
+ }
+ LiteralLabel ll = LiteralLabelFactory.createByValue( oValue, null, dt );
+ return NodeFactory.createLiteral(ll);
+ }
+
+ /**
+ * Makes a node from an object while using the associated prefix mapping.
+ * <ul>
+ * <li>Will return Node.ANY if object is null.</li>
+ * <li>Will return the enclosed Node from a FrontsNode</li>
+ * <li>Will return the object if it is a Node.</li>
+ * <li>Will call NodeFactoryExtra.parseNode() using the currently defined
+ * prefixes if the object is a String</li>
+ * <li>Will call makeLiteral() to create a literal representation if the parseNode() fails or for
+ * any other object type.</li>
+ * </ul>
+ * @param o The object to convert (may be null).
+ * @param pMapping The prefix mapping to use for prefix resolution.
+ * @return The Node value.
+ * @see #makeLiteral(Object)
+ */
+ public static Node makeNode(Object o, PrefixMapping pMapping) {
+ if (o == null) {
+ return Node.ANY;
+ }
+ if (o instanceof FrontsNode) {
+ return checkVar(((FrontsNode) o).asNode());
+ }
+
+ if (o instanceof Node) {
+ return checkVar( (Node) o );
+ }
+ if (o instanceof String) {
+ try {
+ return checkVar(NodeFactoryExtra.parseNode((String) o, PrefixMapFactory
+ .createForInput(pMapping)));
+ } catch (final RiotException e) {
+ // expected in some cases -- do nothing
+ }
+
+ }
+ return makeLiteral( o );
+ }
+
+ /**
+ * Creates a Path or Node as appropriate.
+ * <ul>
+ * <li>Will return Node.ANY if object is null.</li>
+ * <li>Will return the object if it is a Path
+ * <li>Will return the enclosed Node from a FrontsNode</li>
+ * <li>Will return the object if it is a Node.</li>
+ * <li>Will call PathParser.parse() using the prefix mapping if the object is a String</li>
+ * <li>Will call NodeFactoryExtra.parseNode() using the currently defined
+ * prefixes if the object is a String and the PathParser.parse() fails.</li>
+ * <li>Will call makeLiteral() to create a literal representation if the parseNode() fails or for
+ * any other object type.</li>
+ * </ul>
+ * @param o the object that should be interpreted as a path or a node.
+ * @param pMapping the prefix mapping to resolve path or node with
+ * @return the Path or Node
+ * @see #makeLiteral(Object)
+ */
+ public static Object makeNodeOrPath(Object o, PrefixMapping pMapping)
+ {
+ if (o == null) {
+ return Node.ANY;
+ }
+ if (o instanceof Path)
+ {
+ return o;
+ }
+ if (o instanceof FrontsNode) {
+ return checkVar(((FrontsNode) o).asNode());
+ }
+
+ if (o instanceof Node) {
+ return checkVar((Node)o);
+ }
+ if (o instanceof String) {
+ try {
+ final Path p = PathParser.parse((String) o, pMapping);
+ if (p instanceof P_Link)
+ {
+ return ((P_Link)p).getNode();
+ }
+ return p;
+ }
+
+ catch (final Exception e)
+ {
+ // expected in some cases -- do nothing
+ }
+
+ }
+ return makeNode( o, pMapping );
+ }
+
+ /**
+ * Makes a Var from an object.
+ * <ul>
+ * <li>Will return Var.ANON if object is null.</li>
+ * <li>Will return null if the object is "*" or Node_RuleVariable.WILD</li>
+ * <li>Will return the object if it is a Var</li>
+ * <li>Will return resolve FrontsNode to Node and then resolve to Var</li>
+ * <li>Will return resolve Node if the Node implements Node_Variable,
+ * otherwise throws an NotAVariableException (instance of
+ * ARQInternalErrorException)</li>
+ * <li>Will return ?x if object is "?x"</li>
+ * <li>Will return ?x if object is "x"</li>
+ * <li>Will return the enclosed Var of a ExprVar</li>
+ * <li>For all other objects will return the "?" prefixed to the toString()
+ * value.</li>
+ * </ul>
+ *
+ * @param o
+ * The object to convert.
+ * @return the Var value.
+ * @throws ARQInternalErrorException
+ */
+ public static Var makeVar(Object o) throws ARQInternalErrorException {
+ if (o == null) {
+ return Var.ANON;
+ }
+ if (o instanceof Var) {
+ return (Var) o;
+ }
+ Var retval = null;
+ if (o instanceof FrontsNode) {
+ retval = Var.alloc(((FrontsNode) o).asNode());
+ } else if (o instanceof Node) {
+ retval = Var.alloc((Node) o);
+ } else if (o instanceof ExprVar) {
+ retval = Var.alloc((ExprVar) o);
+ } else {
+ retval = Var.alloc(Var.canonical(o.toString()));
+ }
+ if ("*".equals(Var.canonical(retval.toString()))) {
+ return null;
+ }
+ return retval;
+ }
+
+ /**
+ * A convenience method to quote a string.
+ * @param q the string to quote.
+ *
+ * Will use single quotes if there are no single quotes in the string or if the
+ * double quote is before the single quote in the string.
+ *
+ * Will use double quote otherwise.
+ *
+ * @return the quoted string.
+ */
+ public static String quoted(String q) {
+ int qt = q.indexOf('"');
+ int sqt = q.indexOf("'");
+ if (qt == -1) {
+ qt = Integer.MAX_VALUE;
+ }
+ if (sqt == -1) {
+ sqt = Integer.MAX_VALUE;
+ }
+
+ if (qt <= sqt)
+ {
+ return String.format( "'%s'", q);
+ }
+ return String.format( "\"%s\"", q);
+ }
+
+ /**
+ * Creates a collection of nodes from an iterator of Objects.
+ * @param iter the iterator of objects, may be null or empty.
+ * @param prefixMapping the PrefixMapping to use when nodes are created.
+ * @return a Collection of nodes or null if iter is null or empty.
+ */
+ public static Collection<Node> makeValueNodes( Iterator<?> iter, PrefixMapping prefixMapping )
+ {
+ if (iter == null || !iter.hasNext())
+ {
+ return null;
+ }
+ final List<Node> values = new ArrayList<Node>();
+ while (iter.hasNext())
+ {
+ final Object o = iter.next();
+ // handle null as UNDEF
+ if (o == null)
+ {
+ values.add( null );
+ } else
+ {
+ values.add( makeNode( o, prefixMapping ));
+ }
+ }
+ return values;
+ }
+
+}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/DescribeBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/DescribeBuilder.java
index a5a3c9f..1b2c2aa 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/DescribeBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/DescribeBuilder.java
@@ -74,19 +74,19 @@ DatasetClause<DescribeBuilder>,
@Override
public DescribeBuilder addVar(Object var) {
- getSelectHandler().addVar(makeVar(var));
+ getSelectHandler().addVar(Converters.makeVar(var));
return this;
}
@Override
public DescribeBuilder addVar(Expr expr, Object var) {
- getSelectHandler().addVar(expr, makeVar(var));
+ getSelectHandler().addVar(expr, Converters.makeVar(var));
return this;
}
@Override
public DescribeBuilder addVar(String expr, Object var) throws ParseException {
- getSelectHandler().addVar(expr, makeVar(var));
+ getSelectHandler().addVar(expr, Converters.makeVar(var));
return this;
}
@@ -103,7 +103,7 @@ DatasetClause<DescribeBuilder>,
@Override
public DescribeBuilder addOrderBy(Object orderBy) {
- getSolutionModifierHandler().addOrderBy(makeVar(orderBy));
+ getSolutionModifierHandler().addOrderBy(Converters.makeVar(orderBy));
return this;
}
@@ -121,13 +121,13 @@ DatasetClause<DescribeBuilder>,
@Override
public DescribeBuilder addOrderBy(Object orderBy, Order order) {
- getSolutionModifierHandler().addOrderBy(makeVar(orderBy), order);
+ getSolutionModifierHandler().addOrderBy(Converters.makeVar(orderBy), order);
return this;
}
@Override
public DescribeBuilder addGroupBy(Object groupBy) {
- getSolutionModifierHandler().addGroupBy(makeVar(groupBy));
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(groupBy));
return this;
}
@@ -139,13 +139,13 @@ DatasetClause<DescribeBuilder>,
@Override
public DescribeBuilder addGroupBy(Object var, Expr expr) {
- getSolutionModifierHandler().addGroupBy(makeVar(var), expr);
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(var), expr);
return this;
}
@Override
public DescribeBuilder addGroupBy(Object var, String expr) {
- getSolutionModifierHandler().addGroupBy(makeVar(var), makeExpr(expr));
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(var), makeExpr(expr));
return this;
}
@@ -163,7 +163,7 @@ DatasetClause<DescribeBuilder>,
@Override
public DescribeBuilder addHaving(Object var) throws ParseException {
- getSolutionModifierHandler().addHaving(makeVar(var));
+ getSolutionModifierHandler().addHaving(Converters.makeVar(var));
return this;
}
@@ -341,13 +341,13 @@ DatasetClause<DescribeBuilder>,
@Override
public DescribeBuilder addBind(Expr expression, Object var) {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
@Override
public DescribeBuilder addBind(String expression, Object var) throws ParseException {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ExprFactory.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ExprFactory.java
index dec89e1..a943386 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ExprFactory.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ExprFactory.java
@@ -1694,7 +1694,7 @@ public class ExprFactory {
* <li>otherwise create an ExprVar from {AbstractQuerybuilder.makeVar}
* </ul>
*
- * @see AbstractQueryBuilder#makeVar(Object)
+ * @see Converters#makeVar(Object)
*
* @param o
* the object to convert.
@@ -1704,7 +1704,7 @@ public class ExprFactory {
if (o instanceof ExprVar) {
return (ExprVar) o;
}
- Var v = AbstractQueryBuilder.makeVar(o);
+ Var v = Converters.makeVar(o);
return v == null ? null : new ExprVar(v);
}
@@ -1744,13 +1744,15 @@ public class ExprFactory {
/**
* Convenience method to call AbstractQueryBuilder.quote
*
- * @see AbstractQueryBuilder#quote(String)
+ * @see Converters#quoted(String)
* @param s
* the string to quote
* @return the quotes string.
+ * @deprecated use {@link Converters#quoted(String)}
*/
+ @Deprecated
public final String quote(String s) {
- return AbstractQueryBuilder.quote(s);
+ return Converters.quoted(s);
}
/**
@@ -1767,7 +1769,7 @@ public class ExprFactory {
* </ul>
*
* @see #asVar(Object)
- * @see AbstractQueryBuilder#makeVar(Object)
+ * @see Converters#makeVar(Object)
*
* @param o
* the object to create the expression from
@@ -1780,7 +1782,7 @@ public class ExprFactory {
if (o instanceof Expr) {
return (Expr) o;
}
- Node n = AbstractQueryBuilder.makeNode(o, pMap);
+ Node n = Converters.makeNode(o, pMap);
if (n.isVariable()) {
return new ExprVar(Var.alloc(n));
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
index de01844..6f3a278 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java
@@ -114,19 +114,19 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implement
@Override
public SelectBuilder addVar(Object var) {
- getSelectHandler().addVar(makeVar(var));
+ getSelectHandler().addVar(Converters.makeVar(var));
return this;
}
@Override
public SelectBuilder addVar(String expression, Object var) throws ParseException {
- getSelectHandler().addVar(expression, makeVar(var));
+ getSelectHandler().addVar(expression, Converters.makeVar(var));
return this;
}
@Override
public SelectBuilder addVar(Expr expr, Object var) {
- getSelectHandler().addVar(expr, makeVar(var));
+ getSelectHandler().addVar(expr, Converters.makeVar(var));
return this;
}
@@ -167,7 +167,7 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implement
@Override
public SelectBuilder addOrderBy(Object orderBy) {
- getSolutionModifierHandler().addOrderBy(makeVar(orderBy));
+ getSolutionModifierHandler().addOrderBy(Converters.makeVar(orderBy));
return this;
}
@@ -185,13 +185,13 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implement
@Override
public SelectBuilder addOrderBy(Object orderBy, Order order) {
- getSolutionModifierHandler().addOrderBy(makeVar(orderBy), order);
+ getSolutionModifierHandler().addOrderBy(Converters.makeVar(orderBy), order);
return this;
}
@Override
public SelectBuilder addGroupBy(Object groupBy) {
- getSolutionModifierHandler().addGroupBy(makeVar(groupBy));
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(groupBy));
return this;
}
@@ -203,13 +203,13 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implement
@Override
public SelectBuilder addGroupBy(Object var, Expr expr) {
- getSolutionModifierHandler().addGroupBy(makeVar(var), expr);
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(var), expr);
return this;
}
@Override
public SelectBuilder addGroupBy(Object var, String expr) {
- getSolutionModifierHandler().addGroupBy(makeVar(var), makeExpr(expr));
+ getSolutionModifierHandler().addGroupBy(Converters.makeVar(var), makeExpr(expr));
return this;
}
@@ -232,7 +232,7 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implement
@Override
public SelectBuilder addHaving(Object var) throws ParseException {
- getSolutionModifierHandler().addHaving(makeVar(var));
+ getSolutionModifierHandler().addHaving(Converters.makeVar(var));
return this;
}
@@ -456,13 +456,13 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implement
@Override
public SelectBuilder addBind(Expr expression, Object var) {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
@Override
public SelectBuilder addBind(String expression, Object var) throws ParseException {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/UpdateBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/UpdateBuilder.java
index 272a807..54f8279 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/UpdateBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/UpdateBuilder.java
@@ -258,7 +258,7 @@ public class UpdateBuilder {
* @return a TriplePath
*/
public TriplePath makeTriplePath(Object s, Object p, Object o) {
- final Object po = AbstractQueryBuilder.makeNodeOrPath( p, prefixHandler.getPrefixes() );
+ final Object po = Converters.makeNodeOrPath( p, prefixHandler.getPrefixes() );
if (po instanceof Path)
{
return new TriplePath(makeNode(s), (Path)po, makeNode(o));
@@ -281,7 +281,7 @@ public class UpdateBuilder {
* @return the Node.
*/
public Node makeNode(Object o) {
- return AbstractQueryBuilder.makeNode(o, prefixHandler.getPrefixes());
+ return Converters.makeNode(o, prefixHandler.getPrefixes());
}
/**
@@ -289,15 +289,16 @@ public class UpdateBuilder {
*
* Shorthand for AbstractQueryBuilder.makeVar( o )
*
- * @see AbstractQueryBuilder#makeVar(Object)
+ * @see Converters#makeVar(Object)
*
* @param o
* the object to convert to a var.
* @return the Var.
+ * @deprecated use {@link Converters#makeVar(Object)}
*/
-
+ @Deprecated
public Var makeVar(Object o) {
- return AbstractQueryBuilder.makeVar(o);
+ return Converters.makeVar(o);
}
/**
@@ -305,15 +306,17 @@ public class UpdateBuilder {
*
* Shorthand for AbstractQueryBuilder.quote( s )
*
- * @see AbstractQueryBuilder#quote(String)
- *
+ * @see #quoted(String)
*
+ * @deprecated Use quoted()
* @param s
* the string to quote.
* @return the quoted string.
+ * @deprecated use {@link Converters#quoted(String)}
*/
+ @Deprecated
public String quote(String s) {
- return AbstractQueryBuilder.quote(s);
+ return Converters.quoted(s);
}
/**
@@ -393,7 +396,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addInsert(Object g, Triple t) {
- Quad q = new Quad(AbstractQueryBuilder.makeNode(g, prefixHandler.getPrefixes()), t);
+ Quad q = new Quad(makeNode(g), t);
inserts.add(new SingleQuadHolder(q));
return this;
}
@@ -460,9 +463,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addInsert(Object g, Model model) {
- inserts.add( new ModelQuadHolder(
- AbstractQueryBuilder.makeNode(g, prefixHandler.getPrefixes()),
- model));
+ inserts.add( new ModelQuadHolder( makeNode(g), model));
return this;
}
@@ -474,9 +475,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addInsert(Object g, Collection<Triple> collection) {
- inserts.add(new CollectionQuadHolder(
- AbstractQueryBuilder.makeNode(g, prefixHandler.getPrefixes()),
- collection ));
+ inserts.add(new CollectionQuadHolder( makeNode(g), collection ));
return this;
}
@@ -487,9 +486,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addInsert(Object g, Iterator<Triple> iter) {
- inserts.add(new CollectionQuadHolder(
- AbstractQueryBuilder.makeNode(g, prefixHandler.getPrefixes()),
- iter ));
+ inserts.add(new CollectionQuadHolder( makeNode(g), iter ));
return this;
}
@@ -522,7 +519,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addInsert(Object graph, AbstractQueryBuilder<?> queryBuilder) {
- inserts.add(new QBQuadHolder(AbstractQueryBuilder.makeNode(graph, prefixHandler.getPrefixes()), queryBuilder));
+ inserts.add(new QBQuadHolder(makeNode(graph), queryBuilder));
return this;
}
@@ -543,10 +540,10 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addDelete(Object g, Object s, Object p, Object o) {
- return addDelete(new Quad(AbstractQueryBuilder.makeNode(g, prefixHandler.getPrefixes()),
- AbstractQueryBuilder.makeNode(s, prefixHandler.getPrefixes()),
- AbstractQueryBuilder.makeNode(p, prefixHandler.getPrefixes()),
- AbstractQueryBuilder.makeNode(o, prefixHandler.getPrefixes())));
+ return addDelete(new Quad(makeNode(g),
+ makeNode(s),
+ makeNode(p),
+ makeNode(o)));
}
/**
@@ -587,9 +584,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addDelete(Object s, Object p, Object o) {
- addDelete(new Triple(AbstractQueryBuilder.makeNode(s, prefixHandler.getPrefixes()),
- AbstractQueryBuilder.makeNode(p, prefixHandler.getPrefixes()),
- AbstractQueryBuilder.makeNode(o, prefixHandler.getPrefixes())));
+ addDelete(new Triple(makeNode(s), makeNode(p), makeNode(o)));
return this;
}
@@ -620,7 +615,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addDelete(Object g, Triple t) {
- Quad q = new Quad(AbstractQueryBuilder.makeNode(g, prefixHandler.getPrefixes()), t);
+ Quad q = new Quad(makeNode(g), t);
deletes.add(new SingleQuadHolder(q));
return this;
}
@@ -677,9 +672,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addDelete(Object g, Model model) {
- deletes.add( new ModelQuadHolder(
- AbstractQueryBuilder.makeNode(g, prefixHandler.getPrefixes()),
- model));
+ deletes.add( new ModelQuadHolder( makeNode(g), model));
return this;
}
@@ -693,9 +686,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addDelete(Object g, Collection<Triple> collection) {
- deletes.add(new CollectionQuadHolder(
- AbstractQueryBuilder.makeNode(g, prefixHandler.getPrefixes()),
- collection ));
+ deletes.add(new CollectionQuadHolder( makeNode(g), collection ));
return this;
}
@@ -708,9 +699,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addDelete(Object g, Iterator<Triple> iter) {
- deletes.add(new CollectionQuadHolder(
- AbstractQueryBuilder.makeNode(g, prefixHandler.getPrefixes()),
- iter ));
+ deletes.add(new CollectionQuadHolder( makeNode(g), iter ));
return this;
}
@@ -744,7 +733,7 @@ public class UpdateBuilder {
* @return this builder for chaining.
*/
public UpdateBuilder addDelete(Object graph, AbstractQueryBuilder<?> queryBuilder) {
- deletes.add(new QBQuadHolder(AbstractQueryBuilder.makeNode(graph, prefixHandler.getPrefixes()), queryBuilder));
+ deletes.add(new QBQuadHolder(makeNode(graph), queryBuilder));
return this;
}
@@ -858,10 +847,9 @@ public class UpdateBuilder {
*/
public void setVar(Object var, Object value) {
if (value == null) {
- setVar(AbstractQueryBuilder.makeVar(var), null);
+ setVar(Converters.makeVar(var), null);
} else {
- setVar(AbstractQueryBuilder.makeVar(var),
- AbstractQueryBuilder.makeNode(value, prefixHandler.getPrefixes()));
+ setVar(Converters.makeVar(var), makeNode(value));
}
}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/WhereBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/WhereBuilder.java
index 7d77220..6616a86 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/WhereBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/WhereBuilder.java
@@ -212,13 +212,13 @@ public class WhereBuilder extends AbstractQueryBuilder<WhereBuilder> implements
@Override
public WhereBuilder addBind(Expr expression, Object var) {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
@Override
public WhereBuilder addBind(String expression, Object var) throws ParseException {
- getWhereHandler().addBind(expression, makeVar(var));
+ getWhereHandler().addBind(expression, Converters.makeVar(var));
return this;
}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/ValuesClause.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/ValuesClause.java
index 1ce0cc6..5de2085 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/ValuesClause.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/ValuesClause.java
@@ -65,7 +65,7 @@ public interface ValuesClause<T extends AbstractQueryBuilder<T>> {
* The variable or collection to add.
* @return The builder for chaining.
* @see AbstractQueryBuilder#makeNode(Object)
- * @see AbstractQueryBuilder#makeVar(Object)
+ * @see Converters#makeVar(Object)
*/
public T addValueVar(Object var);
@@ -85,7 +85,7 @@ public interface ValuesClause<T extends AbstractQueryBuilder<T>> {
* @param values The values for the variable
* @return The builder for chaining.
* @see AbstractQueryBuilder#makeNode(Object)
- * @see AbstractQueryBuilder#makeVar(Object)
+ * @see Converters#makeVar(Object)
*/
public T addValueVar(Object var, Object... values);
@@ -113,7 +113,7 @@ public interface ValuesClause<T extends AbstractQueryBuilder<T>> {
* The data table to add.
* @return The builder for chaining.
* @see AbstractQueryBuilder#makeNode(Object)
- * @see AbstractQueryBuilder#makeVar(Object)
+ * @see Converters#makeVar(Object)
*/
public <K extends Collection<?>> T addValueVars(Map<?,K> dataTable);
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
index 67ab0a9..acd9dc6 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/WhereClause.java
@@ -111,7 +111,7 @@ public interface WhereClause<T extends AbstractQueryBuilder<T>> {
* The variable or collection to add.
* @return The builder for chaining.
* @see AbstractQueryBuilder#makeNode(Object)
- * @see AbstractQueryBuilder#makeVar(Object)
+ * @see Converters#makeVar(Object)
*/
public T addWhereValueVar(Object var);
@@ -131,7 +131,7 @@ public interface WhereClause<T extends AbstractQueryBuilder<T>> {
* @param values The values for the variable
* @return The builder for chaining.
* @see AbstractQueryBuilder#makeNode(Object)
- * @see AbstractQueryBuilder#makeVar(Object)
+ * @see Converters#makeVar(Object)
*/
public T addWhereValueVar(Object var, Object... values);
@@ -163,7 +163,7 @@ public interface WhereClause<T extends AbstractQueryBuilder<T>> {
* The data table to add.
* @return The builder for chaining.
* @see AbstractQueryBuilder#makeNode(Object)
- * @see AbstractQueryBuilder#makeVar(Object)
+ * @see Converters#makeVar(Object)
*/
public <K extends Collection<?>> T addWhereValueVars(Map<?,K> dataTable);
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
index a85a5e6..7242c0a 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java
@@ -24,6 +24,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
+import org.apache.jena.arq.querybuilder.Converters;
import org.apache.jena.arq.querybuilder.clauses.SelectClause;
import org.apache.jena.arq.querybuilder.rewriters.BuildElementVisitor;
import org.apache.jena.arq.querybuilder.rewriters.ElementRewriter;
@@ -483,7 +484,7 @@ public class WhereHandler implements Handler {
Node retval = NodeFactory.createBlankNode();
Node lastObject = retval;
for (int i = 0; i < objs.length; i++) {
- Node n = AbstractQueryBuilder.makeNode(objs[i], query.getPrefixMapping());
+ Node n = Converters.makeNode(objs[i], query.getPrefixMapping());
addWhere(new TriplePath(new Triple(lastObject, RDF.first.asNode(), n)));
if (i + 1 < objs.length) {
Node nextObject = NodeFactory.createBlankNode();
@@ -526,10 +527,10 @@ public class WhereHandler implements Handler {
throw new IllegalArgumentException( "column must have at least one entry.");
}
Iterator<?> iter = column.iterator();
- Var v = AbstractQueryBuilder.makeVar( iter.next() );
- valuesHandler.addValueVar(v, AbstractQueryBuilder.makeValueNodes(iter,prefixMapping));
+ Var v = Converters.makeVar( iter.next() );
+ valuesHandler.addValueVar(v, Converters.makeValueNodes(iter,prefixMapping));
} else {
- valuesHandler.addValueVar(AbstractQueryBuilder.makeVar(var), null );
+ valuesHandler.addValueVar(Converters.makeVar(var), null );
}
}
@@ -538,10 +539,10 @@ public class WhereHandler implements Handler {
Collection<Node> values = null;
if (objects != null)
{
- values = AbstractQueryBuilder.makeValueNodes( Arrays.asList(objects).iterator(), prefixMapping);
+ values = Converters.makeValueNodes( Arrays.asList(objects).iterator(), prefixMapping);
}
- valuesHandler.addValueVar(AbstractQueryBuilder.makeVar(var), values );
+ valuesHandler.addValueVar(Converters.makeVar(var), values );
}
public <K extends Collection<?>> void addValueVars(PrefixMapping prefixMapping, Map<?,K> dataTable) {
@@ -551,19 +552,19 @@ public class WhereHandler implements Handler {
Collection<Node> values = null;
if (entry.getValue() != null)
{
- values = AbstractQueryBuilder.makeValueNodes( entry.getValue().iterator(), prefixMapping );
+ values = Converters.makeValueNodes( entry.getValue().iterator(), prefixMapping );
}
- hdlr.addValueVar(AbstractQueryBuilder.makeVar(entry.getKey()), values );
+ hdlr.addValueVar(Converters.makeVar(entry.getKey()), values );
}
valuesHandler.addAll( hdlr );
}
public void addValueRow(PrefixMapping prefixMapping, Object... values) {
- valuesHandler.addValueRow( AbstractQueryBuilder.makeValueNodes( Arrays.asList(values).iterator(), prefixMapping));
+ valuesHandler.addValueRow( Converters.makeValueNodes( Arrays.asList(values).iterator(), prefixMapping));
}
public void addValueRow(PrefixMapping prefixMapping, Collection<?> values) {
- valuesHandler.addValueRow( AbstractQueryBuilder.makeValueNodes( values.iterator(), prefixMapping));
+ valuesHandler.addValueRow( Converters.makeValueNodes( values.iterator(), prefixMapping));
}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
index 2620666..16cd1a2 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/QuadIteratorBuilder.java
@@ -19,7 +19,7 @@ package org.apache.jena.arq.querybuilder.updatebuilder;
import java.util.function.Function;
-import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
+import org.apache.jena.arq.querybuilder.Converters;
import org.apache.jena.graph.Node;
import org.apache.jena.graph.Triple;
import org.apache.jena.query.Query;
@@ -64,9 +64,9 @@ class QuadIteratorBuilder implements ElementVisitor {
@Override
public Quad apply(Triple triple) {
return new Quad( defaultGraph,
- AbstractQueryBuilder.checkVar( triple.getSubject()),
- AbstractQueryBuilder.checkVar( triple.getPredicate()),
- AbstractQueryBuilder.checkVar( triple.getObject()));
+ Converters.checkVar( triple.getSubject()),
+ Converters.checkVar( triple.getPredicate()),
+ Converters.checkVar( triple.getObject()));
}
};
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolder.java
index 1403544..dcc5547 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/SingleQuadHolder.java
@@ -19,7 +19,7 @@ package org.apache.jena.arq.querybuilder.updatebuilder;
import java.util.Map;
-import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
+import org.apache.jena.arq.querybuilder.Converters;
import org.apache.jena.graph.Node;
import org.apache.jena.graph.Triple;
import org.apache.jena.sparql.core.Quad;
@@ -44,10 +44,10 @@ public class SingleQuadHolder implements QuadHolder{
if (quad.getGraph().isVariable() || quad.getSubject().isVariable() || quad.getPredicate().isVariable() ||
quad.getObject().isVariable())
{
- this.quad = new Quad( AbstractQueryBuilder.checkVar( quad.getGraph()),
- AbstractQueryBuilder.checkVar( quad.getSubject() ),
- AbstractQueryBuilder.checkVar( quad.getPredicate()),
- AbstractQueryBuilder.checkVar( quad.getObject()));
+ this.quad = new Quad( Converters.checkVar( quad.getGraph()),
+ Converters.checkVar( quad.getSubject() ),
+ Converters.checkVar( quad.getPredicate()),
+ Converters.checkVar( quad.getObject()));
} else {
this.quad = quad;
}
@@ -63,9 +63,9 @@ public class SingleQuadHolder implements QuadHolder{
public SingleQuadHolder( Triple triple )
{
this.quad = new Quad( Quad.defaultGraphNodeGenerated,
- AbstractQueryBuilder.checkVar( triple.getSubject()),
- AbstractQueryBuilder.checkVar( triple.getPredicate()),
- AbstractQueryBuilder.checkVar( triple.getObject())
+ Converters.checkVar( triple.getSubject()),
+ Converters.checkVar( triple.getPredicate()),
+ Converters.checkVar( triple.getObject())
);
}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/WhereQuadHolder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/WhereQuadHolder.java
index b0a96f7..2579ffe 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/WhereQuadHolder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/WhereQuadHolder.java
@@ -21,6 +21,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
+import org.apache.jena.arq.querybuilder.Converters;
import org.apache.jena.arq.querybuilder.clauses.SelectClause;
import org.apache.jena.arq.querybuilder.handlers.WhereHandler;
import org.apache.jena.arq.querybuilder.rewriters.BuildElementVisitor;
@@ -406,7 +407,7 @@ public class WhereQuadHolder implements QuadHolder {
Node retval = NodeFactory.createBlankNode();
Node lastObject = retval;
for (int i = 0; i < objs.length; i++) {
- Node n = AbstractQueryBuilder.makeNode(objs[i], prefixHandler.getPrefixes());
+ Node n = Converters.makeNode(objs[i], prefixHandler.getPrefixes());
addWhere(new TriplePath(new Triple(lastObject, RDF.first.asNode(), n)));
if (i + 1 < objs.length) {
Node nextObject = NodeFactory.createBlankNode();
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
index 74ca337..626a149 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilderTest.java
@@ -99,9 +99,19 @@ public class AbstractQueryBuilderTest {
n = builder.makeNode("<one>");
assertEquals(NodeFactory.createURI("one"), n);
- n = builder.makeNode(builder);
- LiteralLabel ll = LiteralLabelFactory.createTypedLiteral(builder);
- assertEquals(NodeFactory.createLiteral(ll), n);
+ try {
+ n = builder.makeNode(builder);
+ fail( "Should have thrown IllegalArgumentException");
+ } catch (IllegalArgumentException expected)
+ {
+ // do nothing
+ }
+
+ n = builder.makeNode( Integer.valueOf( 5 ));
+ assertTrue( n.isLiteral() );
+ LiteralLabel ll = LiteralLabelFactory.createTypedLiteral( Integer.valueOf(5));
+ assertEquals( NodeFactory.createLiteral(ll), n );
+
n = builder.makeNode( NodeFactory.createVariable("foo"));
assertTrue( n.isVariable());
@@ -109,45 +119,12 @@ public class AbstractQueryBuilderTest {
assertTrue( n instanceof Var );
n = builder.makeNode( "'text'@en");
+ assertTrue( n.isLiteral() );
assertEquals( "text", n.getLiteralLexicalForm());
assertEquals( "en", n.getLiteralLanguage());
}
- @Test
- public void testMakeVar() {
- Var v = AbstractQueryBuilder.makeVar(null);
- assertEquals(Var.ANON, v);
-
- v = AbstractQueryBuilder.makeVar("a");
- assertEquals(Var.alloc("a"), v);
-
- v = AbstractQueryBuilder.makeVar("?a");
- assertEquals(Var.alloc("a"), v);
-
- Node n = NodeFactory.createVariable("foo");
- v = AbstractQueryBuilder.makeVar(n);
- assertEquals(Var.alloc("foo"), v);
-
- NodeFront nf = new NodeFront(n);
- v = AbstractQueryBuilder.makeVar(nf);
- assertEquals(Var.alloc("foo"), v);
-
- v = AbstractQueryBuilder.makeVar(Node_RuleVariable.WILD);
- assertNull(v);
-
- ExprVar ev = new ExprVar("bar");
- v = AbstractQueryBuilder.makeVar(ev);
- assertEquals(Var.alloc("bar"), v);
-
- ev = new ExprVar(n);
- v = AbstractQueryBuilder.makeVar(ev);
- assertEquals(Var.alloc("foo"), v);
-
- ev = new ExprVar(Var.ANON);
- v = AbstractQueryBuilder.makeVar(ev);
- assertEquals(Var.ANON, v);
-
- }
+
@Test
public void testMakeValueNodes()
@@ -160,16 +137,19 @@ public class AbstractQueryBuilderTest {
builder.addPrefix("demo", "http://example.com/");
list.add( "demo:type" );
list.add( "<one>" );
- list.add( builder );
+ list.add( Integer.valueOf(5) );
Collection<Node> result = builder.makeValueNodes(list.iterator());
+ assertEquals( 6, result.size() );
assertTrue( result.contains( null ));
assertTrue( result.contains( RDF.type.asNode()));
assertTrue( result.contains( n2 ));
assertTrue( result.contains(NodeFactory.createURI("http://example.com/type") ));
assertTrue( result.contains(NodeFactory.createURI("one")));
-
+ LiteralLabel ll = LiteralLabelFactory.createTypedLiteral( Integer.valueOf(5));
+ assertTrue( result.contains(NodeFactory.createLiteral(ll)));
+
}
}
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ConvertersTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ConvertersTest.java
new file mode 100644
index 0000000..fb9b39d
--- /dev/null
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ConvertersTest.java
@@ -0,0 +1,340 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.arq.querybuilder;
+
+import static org.junit.Assert.*;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.UUID;
+
+import org.apache.jena.datatypes.BaseDatatype;
+import org.apache.jena.datatypes.DatatypeFormatException;
+import org.apache.jena.datatypes.TypeMapper;
+import org.apache.jena.graph.FrontsNode ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.NodeFactory ;
+import org.apache.jena.graph.impl.LiteralLabel ;
+import org.apache.jena.graph.impl.LiteralLabelFactory ;
+import org.apache.jena.reasoner.rulesys.Node_RuleVariable ;
+import org.apache.jena.shared.PrefixMapping;
+import org.apache.jena.sparql.core.Var ;
+import org.apache.jena.sparql.expr.ExprVar ;
+import org.apache.jena.sparql.path.Path;
+import org.apache.jena.vocabulary.RDF ;
+import org.junit.After;
+import org.junit.Test;
+
+public class ConvertersTest {
+
+ @After
+ public void cleanup() {
+ TypeMapper.reset();
+ }
+
+
+ @Test
+ public void checkVarTest() {
+ Node n = Converters.checkVar( Node.ANY );
+ assertFalse( n instanceof Var );
+ n = Converters.checkVar(NodeFactory.createVariable( "myVar"));
+ assertTrue( n instanceof Var );
+ }
+
+ @Test
+ public void makeLiteralObjectTest() throws MalformedURLException
+ {
+ Node n = Converters.makeLiteral( 5 );
+ assertEquals( "5", n.getLiteralLexicalForm() );
+ assertEquals( Integer.valueOf(5), n.getLiteralValue());
+ assertEquals( "\"5\"^^http://www.w3.org/2001/XMLSchema#int", n.toString( null, true ));
+
+ n = Converters.makeLiteral( "Hello" );
+ assertEquals( "Hello", n.getLiteralLexicalForm() );
+ assertEquals( "Hello", n.getLiteralValue());
+ assertEquals( "\"Hello\"", n.toString( null, true ));
+
+ URL url = new URL( "http://example.com");
+ n = Converters.makeLiteral( url);
+ assertEquals( "http://example.com", n.getLiteralLexicalForm() );
+ assertEquals( url, n.getLiteralValue());
+ assertEquals( "\"http://example.com\"^^http://www.w3.org/2001/XMLSchema#anyURI", n.toString(null, true));
+
+ UUID uuid = UUID.randomUUID();
+ try {
+ n = Converters.makeLiteral( uuid );
+ fail( "Should throw exception");
+ }
+ catch (IllegalArgumentException expected) {
+ // do nothing
+ }
+
+ TypeMapper.getInstance().registerDatatype(new UuidDataType());
+ try {
+ n = Converters.makeLiteral( uuid );
+ assertEquals( uuid.toString(), n.getLiteralLexicalForm() );
+ assertEquals( uuid, n.getLiteralValue());
+ String value = String.format( "\"%s\"^^java:java.util.UUID", uuid);
+ assertEquals( value, n.toString(null, true));
+ }
+ catch (IllegalArgumentException expected) {
+ fail( "Unexpected IllegalArgumentException");
+ }
+
+
+ }
+
+ @Test
+ public void makeLiteralStringStringTest()
+ {
+ Node n = Converters.makeLiteral( "5", "http://www.w3.org/2001/XMLSchema#int" );
+ assertEquals( "5", n.getLiteralLexicalForm() );
+ assertEquals( Integer.valueOf(5), n.getLiteralValue());
+ assertEquals( "\"5\"^^http://www.w3.org/2001/XMLSchema#int", n.toString( null, true ));
+
+ n = Converters.makeLiteral( "one", "some:stuff" );
+ assertEquals( "one", n.getLiteralLexicalForm() );
+ try {
+ n.getLiteralValue();
+ fail( "Should have thrown DatatypeFormatException");
+ }
+ catch (DatatypeFormatException expected) {
+ // do nothing.
+ }
+ assertEquals( "\"one\"^^some:stuff", n.toString(null, true));
+
+ try {
+ Converters.makeLiteral( "NaN", "http://www.w3.org/2001/XMLSchema#int" );
+ fail( "Should have thrown DatatypeFormatException");
+ } catch (DatatypeFormatException expected) {
+ // do nothing.
+ }
+ }
+
+ @Test
+ public void makeNodeTest() {
+ PrefixMapping pMap = PrefixMapping.Factory.create();
+ pMap.setNsPrefixes(PrefixMapping.Standard );
+
+ Node n = Converters.makeNode(null, pMap);
+ assertEquals(Node.ANY, n);
+
+ n = Converters.makeNode(RDF.type, pMap);
+ assertEquals(RDF.type.asNode(), n);
+
+ Node n2 = NodeFactory.createBlankNode();
+ n = Converters.makeNode(n2, pMap);
+ assertEquals(n2, n);
+
+ pMap.setNsPrefix("demo", "http://example.com/");
+ n = Converters.makeNode("demo:type", pMap);
+ assertEquals(NodeFactory.createURI("http://example.com/type"), n);
+
+ n = Converters.makeNode("<one>", pMap);
+ assertEquals(NodeFactory.createURI("one"), n);
+
+ UUID uuid = UUID.randomUUID();
+ try {
+ Converters.makeNode( uuid, pMap);
+ fail( "Should have thrown IllegalArgumentException");
+ }
+ catch (IllegalArgumentException expected) {
+ // do nothing
+ }
+
+ TypeMapper.getInstance().registerDatatype(new UuidDataType());
+ n = Converters.makeNode( uuid, pMap );
+ LiteralLabel ll = LiteralLabelFactory.createTypedLiteral(uuid);
+ assertEquals(NodeFactory.createLiteral(ll), n);
+
+
+ n = Converters.makeNode( NodeFactory.createVariable("foo"), pMap);
+ assertTrue( n.isVariable());
+ assertEquals( "foo", n.getName());
+ assertTrue( n instanceof Var );
+
+ n = Converters.makeNode( "'text'@en", pMap);
+ assertEquals( "text", n.getLiteralLexicalForm());
+ assertEquals( "en", n.getLiteralLanguage());
+ }
+
+ @Test
+ public void makeNodeOrPathTest() {
+ PrefixMapping pMap = PrefixMapping.Factory.create();
+ pMap.setNsPrefixes(PrefixMapping.Standard );
+
+ Object n = Converters.makeNodeOrPath(null, pMap);
+ assertEquals(Node.ANY, n);
+
+ n = Converters.makeNodeOrPath(RDF.type, pMap);
+ assertEquals(RDF.type.asNode(), n);
+
+ Node n2 = NodeFactory.createBlankNode();
+ n = Converters.makeNodeOrPath(n2, pMap);
+ assertEquals(n2, n);
+
+ pMap.setNsPrefix("demo", "http://example.com/");
+ n = Converters.makeNodeOrPath("demo:type", pMap);
+ assertEquals(NodeFactory.createURI("http://example.com/type"), n);
+
+ n = Converters.makeNodeOrPath("<one>", pMap);
+ assertEquals(NodeFactory.createURI("one"), n);
+
+ UUID uuid = UUID.randomUUID();
+ try {
+ Converters.makeNodeOrPath( uuid, pMap);
+ fail( "Should have thrown IllegalArgumentException");
+ }
+ catch (IllegalArgumentException expected) {
+ // do nothing
+ }
+
+ TypeMapper.getInstance().registerDatatype(new UuidDataType());
+ n = Converters.makeNodeOrPath( uuid, pMap);
+ LiteralLabel ll = LiteralLabelFactory.createTypedLiteral(uuid);
+ assertEquals(NodeFactory.createLiteral(ll), n);
+
+ n = Converters.makeNodeOrPath( NodeFactory.createVariable("foo"), pMap);
+ assertTrue( n instanceof Var );
+ Node node = (Node)n;
+ assertTrue( node.isVariable());
+ assertEquals( "foo", node.getName());
+
+ n = Converters.makeNodeOrPath( "'text'@en", pMap);
+ assertTrue( n instanceof Node );
+ node = (Node)n;
+ assertEquals( "text", node.getLiteralLexicalForm());
+ assertEquals( "en", node.getLiteralLanguage());
+
+ n = Converters.makeNodeOrPath( "<one>/<two>", pMap);
+ assertTrue( n instanceof Path );
+ Path pth = (Path)n;
+ assertEquals( "<one>/<two>", pth.toString() );
+
+ }
+
+ @Test
+ public void makeVarTest() {
+ Var v = Converters.makeVar(null);
+ assertEquals(Var.ANON, v);
+
+ v = Converters.makeVar("a");
+ assertEquals(Var.alloc("a"), v);
+
+ v = Converters.makeVar("?a");
+ assertEquals(Var.alloc("a"), v);
+
+ Node n = NodeFactory.createVariable("foo");
+ v = Converters.makeVar(n);
+ assertEquals(Var.alloc("foo"), v);
+
+ NodeFront nf = new NodeFront(n);
+ v = Converters.makeVar(nf);
+ assertEquals(Var.alloc("foo"), v);
+
+ v = Converters.makeVar(Node_RuleVariable.WILD);
+ assertNull(v);
+
+ ExprVar ev = new ExprVar("bar");
+ v = Converters.makeVar(ev);
+ assertEquals(Var.alloc("bar"), v);
+
+ ev = new ExprVar(n);
+ v = Converters.makeVar(ev);
+ assertEquals(Var.alloc("foo"), v);
+
+ ev = new ExprVar(Var.ANON);
+ v = Converters.makeVar(ev);
+ assertEquals(Var.ANON, v);
+
+ }
+
+ @Test
+ public void makeValueNodesTest()
+ {
+ PrefixMapping pMap = PrefixMapping.Factory.create();
+ pMap.setNsPrefixes(PrefixMapping.Standard );
+
+ List<Object> list = new ArrayList<Object>();
+ list.add( null);
+ list.add( RDF.type );
+ Node n2 = NodeFactory.createBlankNode();
+ list.add( n2 );
+ pMap.setNsPrefix("demo", "http://example.com/");
+ list.add( "demo:type" );
+ list.add( "<one>" );
+ list.add( Integer.MAX_VALUE );
+
+ Collection<Node> result = Converters.makeValueNodes(list.iterator(), pMap);
+
+ assertTrue( result.contains( null ));
+ assertTrue( result.contains( RDF.type.asNode()));
+ assertTrue( result.contains( n2 ));
+ assertTrue( result.contains(NodeFactory.createURI("http://example.com/type") ));
+ assertTrue( result.contains(NodeFactory.createURI("one")));
+
+ }
+
+ @Test
+ public void quotedTest() {
+ assertEquals( "'one'", Converters.quoted( "one" ));
+ assertEquals( "\"'one'\"", Converters.quoted( "'one'" ));
+ assertEquals( "'\"one\"'", Converters.quoted( "\"one\"" ));
+ assertEquals( "'\"I am the 'one'\"'", Converters.quoted( "\"I am the 'one'\"" ));
+ assertEquals( "\"'I am the \"one\"'\"", Converters.quoted( "'I am the \"one\"'" ));
+ }
+
+ private class NodeFront implements FrontsNode {
+ Node n;
+
+ NodeFront(Node n) {
+ this.n = n;
+ }
+
+ @Override
+ public Node asNode() {
+ return n;
+ }
+ }
+
+ private class UuidDataType extends BaseDatatype {
+
+ public UuidDataType() {
+ super( "java:java.util.UUID");
+ }
+
+ @Override
+ public Class<?> getJavaClass() {
+ return UUID.class;
+ }
+
+ @Override
+ public Object parse(String lexicalForm) throws DatatypeFormatException {
+ try {
+ return UUID.fromString(lexicalForm);
+ } catch (Throwable th) {
+ throw new DatatypeFormatException();
+ }
+ }
+ };
+
+}
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ExprFactoryTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ExprFactoryTest.java
index 468cccb..800630b 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ExprFactoryTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/ExprFactoryTest.java
@@ -682,7 +682,7 @@ public class ExprFactoryTest {
@Test
public void asListTest() {
- ExprList lst = factory.asList("?foo", "http://example.com", factory.quote("hello"), 1, 5L, 3.14f, 6.28d, Var.alloc( "bar" ), null, factory.rand() );
+ ExprList lst = factory.asList("?foo", "http://example.com", Converters.quoted("hello"), 1, 5L, 3.14f, 6.28d, Var.alloc( "bar" ), null, factory.rand() );
assertEquals( 10, lst.size() );
assertEquals( new ExprVar( "foo" ), lst.get(0));
//assertEquals( new ExprVar( "foo" ), lst.get(0));