1803 fix (#656)

* Added addWhere( AbstractQueryBuilder )

* simplified code

* updated javadoc

* removed unused imports

* updated javadoc
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 e4e79db..6a261b9 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
@@ -64,9 +64,13 @@
 public abstract class AbstractQueryBuilder<T extends AbstractQueryBuilder<T>>
 implements Cloneable, PrologClause<T>, ValuesClause<T> {
 
-	// the query this builder is building
+	/**
+	 *  the query this builder is building
+	 */
 	protected Query query;
-	// a map of vars to nodes for replacement during build.
+	/**
+	 * a map of vars to nodes for replacement during build.
+	 */
 	private final Map<Var, Node> values;
 
 	/**
@@ -90,6 +94,12 @@
 		return 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)
+	 */
 	private Object makeNodeOrPath(Object o)
 	{
 		return makeNodeOrPath(o, query.getPrefixMapping() );
@@ -346,10 +356,26 @@
 		return getHandlerBlock().getValueHandler();
 	}
 
+	/**
+	 * Gets the where handler used by this QueryBuilder.
+	 * @return the where handler used by this QueryBuilder.
+	 */
 	public final WhereHandler getWhereHandler() {
 		return getHandlerBlock().getWhereHandler();
 	}
-
+	
+	/**
+	 * Adds the contents of the whereClause to the where clause of this 
+	 * builder.
+	 * @param whereClause the where clause to add.
+	 * @return this builder for chaining.
+	 */
+	@SuppressWarnings("unchecked")
+	public final T addWhere( AbstractQueryBuilder<?> whereClause) {
+		getWhereHandler().addAll( whereClause.getWhereHandler());
+		return (T) this;
+	}
+	
 	@Override
 	public final ExprFactory getExprFactory() {
 		return getHandlerBlock().getPrologHandler().getExprFactory();
@@ -435,6 +461,12 @@
 
 	// --- VALUES
 
+	/**
+	 * 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())
@@ -457,6 +489,12 @@
 		return values;
 	}
 
+	/**
+	 * Creates a collection of nodes from an iterator of Objects.
+	 * Uses the prefix mapping from the PrologHandler.
+	 * @param iter the iterator of objects, may be null or empty.
+	 * @return a Collection of nodes or null if iter is null or empty.
+	 */
 	public Collection<Node> makeValueNodes( Iterator<?> iter )
 	{
 		return makeValueNodes( iter, getPrologHandler().getPrefixes() );
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 38e5b62..9a90c04 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
@@ -23,6 +23,7 @@
 
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
 import org.apache.jena.arq.querybuilder.ExprFactory;
+import org.apache.jena.arq.querybuilder.SelectBuilder;
 import org.apache.jena.arq.querybuilder.handlers.WhereHandler;
 import org.apache.jena.graph.FrontsTriple;
 import org.apache.jena.graph.Node;
@@ -85,6 +86,15 @@
 	public T addWhere(Object s, Object p, Object o);
 	
 	/**
+	 * Adds the elements from the whereClause to this where Clause.
+	 * 
+	 * @param whereClause
+	 *            The whereClause to add to this statement.
+	 * @return This Builder for chaining.
+	 */
+	public T addWhere( AbstractQueryBuilder<?> whereClause);
+	
+	/**
 	 * Add a variable or variable and values to the value statement.
 	 * 
 	 * The first var (or first item in a collection) is converted to a variable using 
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
index e9116a5..10cc511 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/updatebuilder/CollectionQuadHolder.java
@@ -95,8 +95,7 @@
     	if (n.isVariable())
     	{
     		Var v = Var.alloc(n);
-    		Node n2 = values.get( n );
-    		return n2==null?n:n2;
+    		return values.getOrDefault(v, n);
     	}
     	return n;
     }
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 2af2e50..74ca337 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
@@ -108,6 +108,9 @@
 		assertEquals( "foo", n.getName());
 		assertTrue( n instanceof Var );
 
+		n = builder.makeNode( "'text'@en");
+		assertEquals( "text", n.getLiteralLexicalForm());
+		assertEquals( "en", n.getLiteralLanguage());
 	}
 
 	@Test
@@ -168,4 +171,5 @@
 		assertTrue( result.contains(NodeFactory.createURI("one")));
 
 	}
+	
 }
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
index d233ff5..fa01d61 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/clauses/WhereClauseTest.java
@@ -24,6 +24,7 @@
 
 import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
 import org.apache.jena.arq.querybuilder.SelectBuilder;
+import org.apache.jena.arq.querybuilder.WhereBuilder;
 import org.apache.jena.arq.querybuilder.WhereValidator;
 import org.apache.jena.graph.FrontsTriple;
 import org.apache.jena.graph.Node;
@@ -58,7 +59,6 @@
 import org.apache.jena.sparql.syntax.ElementUnion;
 import org.apache.jena.vocabulary.RDF;
 import org.junit.After;
-
 import static org.junit.Assert.*;
 
 import org.xenei.junit.contract.Contract;
@@ -101,6 +101,24 @@
 		builder.build().getQueryPattern().visit( visitor );
 		assertTrue( visitor.matching );
 	}
+	
+	@ContractTest
+	public void testAddWhereWhereClause() {
+		WhereBuilder whereBuilder = new WhereBuilder()
+			.addWhere(new TriplePath(new Triple(NodeFactory.createURI("one"), NodeFactory.createURI("two"),
+						NodeFactory.createURI("three"))));
+		
+		WhereClause<?> whereClause = getProducer().newInstance();
+		AbstractQueryBuilder<?> builder = whereClause.addWhere( whereBuilder );
+		
+		ElementPathBlock epb = new ElementPathBlock();
+		Triple t = new Triple( NodeFactory.createURI("one"), NodeFactory.createURI("two"), NodeFactory.createURI("three") );
+		epb.addTriple( t );
+		
+		WhereValidator visitor = new WhereValidator( epb );
+		builder.build().getQueryPattern().visit( visitor );
+		assertTrue( visitor.matching );
+	}
 
 	@ContractTest
 	public void testAddOptionalString() {