Merge pull request #2359 from Claudenw/GH-2358_from_and_fromNamed_take_object
Gh 2358 from() and fromNamed() take object
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 4fce378..ae1e9aa 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
@@ -84,25 +84,13 @@
}
@Override
- public AskBuilder fromNamed(String graphName) {
+ public AskBuilder fromNamed(Object graphName) {
getDatasetHandler().fromNamed(graphName);
return this;
}
@Override
- public AskBuilder fromNamed(Collection<String> graphNames) {
- getDatasetHandler().fromNamed(graphNames);
- return this;
- }
-
- @Override
- public AskBuilder from(String graphName) {
- getDatasetHandler().from(graphName);
- return this;
- }
-
- @Override
- public AskBuilder from(Collection<String> graphName) {
+ public AskBuilder from(Object graphName) {
getDatasetHandler().from(graphName);
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 3a9b30d..3012378 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
@@ -98,25 +98,13 @@
}
@Override
- public ConstructBuilder fromNamed(String graphName) {
+ public ConstructBuilder fromNamed(Object graphName) {
getDatasetHandler().fromNamed(graphName);
return this;
}
@Override
- public ConstructBuilder fromNamed(Collection<String> graphNames) {
- getDatasetHandler().fromNamed(graphNames);
- return this;
- }
-
- @Override
- public ConstructBuilder from(String graphName) {
- getDatasetHandler().from(graphName);
- return this;
- }
-
- @Override
- public ConstructBuilder from(Collection<String> graphName) {
+ public ConstructBuilder from(Object graphName) {
getDatasetHandler().from(graphName);
return this;
}
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 5fdd9f4..c9ee5ab 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
@@ -386,25 +386,13 @@
}
@Override
- public DescribeBuilder fromNamed(String graphName) {
+ public DescribeBuilder fromNamed(Object graphName) {
getDatasetHandler().fromNamed(graphName);
return this;
}
@Override
- public DescribeBuilder fromNamed(Collection<String> graphNames) {
- getDatasetHandler().fromNamed(graphNames);
- return this;
- }
-
- @Override
- public DescribeBuilder from(String graphName) {
- getDatasetHandler().from(graphName);
- return this;
- }
-
- @Override
- public DescribeBuilder from(Collection<String> graphName) {
+ public DescribeBuilder from(Object graphName) {
getDatasetHandler().from(graphName);
return this;
}
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 2c0a116..d3f162d 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
@@ -138,25 +138,13 @@
}
@Override
- public SelectBuilder fromNamed(String graphName) {
+ public SelectBuilder fromNamed(Object graphName) {
getDatasetHandler().fromNamed(graphName);
return this;
}
@Override
- public SelectBuilder fromNamed(Collection<String> graphNames) {
- getDatasetHandler().fromNamed(graphNames);
- return this;
- }
-
- @Override
- public SelectBuilder from(String graphName) {
- getDatasetHandler().from(graphName);
- return this;
- }
-
- @Override
- public SelectBuilder from(Collection<String> graphName) {
+ public SelectBuilder from(Object graphName) {
getDatasetHandler().from(graphName);
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 4e021e8..c0ffd77 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
@@ -123,6 +123,14 @@
}
/**
+ * Checks that no deletes or inserts have been added to the builder.
+ * @return true if there are no delete or insert statements.
+ */
+ public boolean isEmpty() {
+ return deletes.isEmpty() && inserts.isEmpty();
+ }
+
+ /**
* Build the update.
*
* <b>Note: the update does not include the prefix statements</b> use
@@ -132,7 +140,7 @@
*/
public Update build() {
- if (deletes.isEmpty() && inserts.isEmpty()) {
+ if (isEmpty()) {
throw new IllegalStateException("At least one delete or insert must be specified");
}
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/DatasetClause.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/DatasetClause.java
index 6f047b9..4b502fb 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/DatasetClause.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/DatasetClause.java
@@ -17,8 +17,6 @@
*/
package org.apache.jena.arq.querybuilder.clauses;
-import java.util.Collection;
-
import org.apache.jena.arq.querybuilder.AbstractQueryBuilder;
import org.apache.jena.arq.querybuilder.handlers.DatasetHandler;
@@ -35,15 +33,7 @@
* @param graphName the graph name to add.
* @return This builder for chaining.
*/
- public T fromNamed(String graphName);
-
- /**
- * Add several "FROM NAMED" graph names.
- *
- * @param graphNames the collection graph names to add.
- * @return This builder for chaining.
- */
- public T fromNamed(Collection<String> graphNames);
+ public T fromNamed(Object graphName);
/**
* Add the "FROM" graph name.
@@ -51,15 +41,7 @@
* @param graphName the graph name to add.
* @return This builder for chaining.
*/
- public T from(String graphName);
-
- /**
- * Add several "FROM" graph names.
- *
- * @param graphName the collection graph names to add.
- * @return This builder for chaining.
- */
- public T from(Collection<String> graphName);
+ public T from(Object graphName);
/**
* Get the Dataset handler for this clause.
diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/DatasetHandler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/DatasetHandler.java
index 2fe249d..ca90fc2 100644
--- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/DatasetHandler.java
+++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/DatasetHandler.java
@@ -17,11 +17,14 @@
*/
package org.apache.jena.arq.querybuilder.handlers;
-import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.function.Consumer;
+import org.apache.jena.graph.FrontsNode;
import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Node_Literal;
+import org.apache.jena.graph.Node_URI;
import org.apache.jena.query.Query;
import org.apache.jena.sparql.core.Var;
@@ -54,49 +57,72 @@
}
/**
- * Add a graph name to the from named list.
- *
- * @param graphName The graph name to add.
+ * Converts an object into a graph name.
+ * @param graphName the object that represents the graph name.
+ * @return the string that is the graph name.
*/
- public void fromNamed(String graphName) {
- query.addNamedGraphURI(graphName);
- }
-
- /**
- * Add the graph names to the from named list.
- *
- * The names are ordered in as defined in the collection.
- *
- * @param graphNames The from names to add.
- */
- public void fromNamed(Collection<String> graphNames) {
- for (String uri : graphNames) {
- query.addNamedGraphURI(uri);
+ String asGraphName(Object graphName) {
+ // package private for testing access
+ if (graphName instanceof String) {
+ return (String) graphName;
}
+ if (graphName instanceof FrontsNode) {
+ return asGraphName(((FrontsNode)graphName).asNode());
+ }
+ if (graphName instanceof Node_URI) {
+ return ((Node_URI)graphName).getURI();
+ }
+ if (graphName instanceof Node_Literal) {
+ return asGraphName(((Node_Literal)graphName).getLiteralValue());
+ }
+
+ return graphName.toString();
}
/**
- * Add the graph names to the from list.
+ * Add one or more named graphs to the query.
+ * if {@code graphName} is a {@code collection} or an array each element in the
+ * @code collection} or array is converted to a string and the result added to the
+ * query.
*
* @param graphName the name to add.
+ * @see #asGraphName(Object)
*/
- public void from(String graphName) {
- query.addGraphURI(graphName);
+ public void fromNamed(Object graphName) {
+ processGraphName(query::addNamedGraphURI, graphName);
}
/**
- * Add the graph names to the named list.
- *
- * The names are ordered in as defined in the collection.
- *
- * @param graphNames The names to add.
+ * Converts performs a single level of unwrapping an Iterable before calling
+ * the {@code process} method with the graph name converted to a string.
+ * @param process the process that accepts the string graph name.
+ * @param graphName the Object that represents one or more graph names.
+ * @see #asGraphName(Object)
*/
- public void from(Collection<String> graphNames) {
- for (String uri : graphNames) {
- query.addGraphURI(uri);
+ private void processGraphName(Consumer<String> process, Object graphName) {
+ if (graphName instanceof Iterable) {
+ for (Object o : (Iterable)graphName) {
+ process.accept(asGraphName(o));
+ }
+ } else {
+ process.accept(asGraphName(graphName));
}
}
+
+ /**
+ * Add one or more graph names to the query.
+ * if {@code graphName} is a {@code collection} or an array each element in the
+ * @code collection} or array is converted to a string and the result added to the
+ * query.
+ *
+ * @param graphName the name to add.
+ * @see #asGraphName(Object)
+ */
+ public void from(Object graphName) {
+ processGraphName(query::addGraphURI, graphName);
+ }
+
/**
* Set the variables for field names that contain lists of strings.
*
diff --git a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/DatasetHandlerTest.java b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/DatasetHandlerTest.java
index 5e6d458..a9acd65 100644
--- a/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/DatasetHandlerTest.java
+++ b/jena-extras/jena-querybuilder/src/test/java/org/apache/jena/arq/querybuilder/handlers/DatasetHandlerTest.java
@@ -17,15 +17,20 @@
*/
package org.apache.jena.arq.querybuilder.handlers;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import java.util.UUID;
import org.apache.jena.graph.Node;
import org.apache.jena.graph.NodeFactory;
import org.apache.jena.query.Query;
+import org.apache.jena.rdf.model.ResourceFactory;
import org.apache.jena.sparql.core.Var;
import org.junit.Before;
import org.junit.Test;
@@ -73,6 +78,18 @@
}
@Test
+ public void asGraphNameTest() throws URISyntaxException {
+ assertEquals("urn:example.com:uri", handler.asGraphName(new URI("urn:example.com:uri")));
+ assertEquals("urn:example.com:node", handler.asGraphName(NodeFactory.createURI("urn:example.com:node")));
+ assertEquals("five", handler.asGraphName(ResourceFactory.createPlainLiteral("five")));
+ assertEquals("6", handler.asGraphName(ResourceFactory.createTypedLiteral(6)));
+ Node n = NodeFactory.createBlankNode();
+ assertEquals(n.toString(), handler.asGraphName(n));
+ UUID uuid = UUID.randomUUID();
+ assertEquals(uuid.toString(), handler.asGraphName(uuid));
+ }
+
+ @Test
public void fromStringCollection() {
String[] names = { "foo", "bar" };
handler.from(Arrays.asList(names));