GH-2358 Initial code changes and tests
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/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..26ce281 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
@@ -21,7 +21,10 @@
import java.util.List;
import java.util.Map;
+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,24 +57,42 @@
}
/**
+ * Converts an object into a graph name.
+ * @param graphName the object that represents the graph name.
+ * @return the string that is the graph name.
+ */
+ 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 a graph name to the from named list.
*
* @param graphName The graph name to add.
*/
- 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);
+ public void fromNamed(Object graphName) {
+ if (graphName instanceof Collection) {
+ ((Collection<?>)graphName).forEach(this::fromNamed);
+ } else if (graphName instanceof Object[]) {
+ for (Object o : ((Object[])graphName)) {
+ fromNamed(o);
+ }
+ } else {
+ query.addNamedGraphURI(asGraphName(graphName));
}
}
@@ -80,20 +101,15 @@
*
* @param graphName the name to add.
*/
- public void from(String graphName) {
- query.addGraphURI(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.
- */
- public void from(Collection<String> graphNames) {
- for (String uri : graphNames) {
- query.addGraphURI(uri);
+ public void from(Object graphName) {
+ if (graphName instanceof Collection) {
+ ((Collection<?>)graphName).forEach(this::from);
+ } else if (graphName instanceof Object[]) {
+ for (Object o : ((Object[])graphName)) {
+ from(o);
+ }
+ } else {
+ query.addGraphURI(asGraphName(graphName));
}
}
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));