Repository: jena Updated Branches: refs/heads/master 609b56971 -> 9626099fc
Updated documentation. Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/9626099f Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/9626099f Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/9626099f Branch: refs/heads/master Commit: 9626099fc7bf4aa156e89b2a888207e35974ca27 Parents: 609b569 Author: Claude Warren <[email protected]> Authored: Sun Mar 6 16:38:54 2016 +0000 Committer: Claude Warren <[email protected]> Committed: Sun Mar 6 16:38:54 2016 +0000 ---------------------------------------------------------------------- .../arq/querybuilder/AbstractQueryBuilder.java | 12 ++- .../jena/arq/querybuilder/AskBuilder.java | 1 - .../jena/arq/querybuilder/ConstructBuilder.java | 2 +- .../jena/arq/querybuilder/SelectBuilder.java | 3 +- .../arq/querybuilder/clauses/SelectClause.java | 1 - .../handlers/AggregationHandler.java | 40 ++++--- .../arq/querybuilder/handlers/HandlerBlock.java | 106 +++++++++++++++---- .../querybuilder/handlers/SelectHandler.java | 21 +--- .../arq/querybuilder/handlers/WhereHandler.java | 14 +-- 9 files changed, 134 insertions(+), 66 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/9626099f/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AbstractQueryBuilder.java ---------------------------------------------------------------------- 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 d8d3044..0da573f 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 @@ -164,9 +164,12 @@ public abstract class AbstractQueryBuilder<T extends AbstractQueryBuilder<T>> values = new HashMap<Var, Node>(); } + /** + * Get the HandlerBlock for this query builder. + * @return The associated handler block. + */ public abstract HandlerBlock getHandlerBlock(); - @Override public final PrologHandler getPrologHandler() { return getHandlerBlock().getPrologHandler(); @@ -274,6 +277,8 @@ public abstract class AbstractQueryBuilder<T extends AbstractQueryBuilder<T>> */ public final Query build() { Query q = new Query(); + + // set the query type switch (query.getQueryType()) { case Query.QueryTypeAsk: @@ -292,8 +297,11 @@ public abstract class AbstractQueryBuilder<T extends AbstractQueryBuilder<T>> throw new IllegalStateException( "Internal query is not a known type: "+q.getQueryType()); } + // use the HandlerBlock implementation to copy the data. HandlerBlock handlerBlock = new HandlerBlock(q); handlerBlock.addAll( getHandlerBlock() ); + + // set the vars handlerBlock.setVars(values); // make sure we have a query pattern before we start building. @@ -320,6 +328,7 @@ public abstract class AbstractQueryBuilder<T extends AbstractQueryBuilder<T>> public static Query clone(Query q2) { Query retval = new Query(); + // set the query type if (q2.isSelectType()) { retval.setQuerySelectType(); @@ -333,6 +342,7 @@ public abstract class AbstractQueryBuilder<T extends AbstractQueryBuilder<T>> retval.setQueryConstructType(); } + // use the handler block to clone the data HandlerBlock hb = new HandlerBlock( retval ); HandlerBlock hb2 = new HandlerBlock( q2 ); hb.addAll(hb2); http://git-wip-us.apache.org/repos/asf/jena/blob/9626099f/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/AskBuilder.java ---------------------------------------------------------------------- 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 064a995..9ae7fa2 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 @@ -24,7 +24,6 @@ import org.apache.jena.arq.querybuilder.clauses.SolutionModifierClause; import org.apache.jena.arq.querybuilder.clauses.WhereClause; import org.apache.jena.arq.querybuilder.handlers.DatasetHandler; import org.apache.jena.arq.querybuilder.handlers.HandlerBlock; -import org.apache.jena.arq.querybuilder.handlers.PrologHandler; import org.apache.jena.arq.querybuilder.handlers.SolutionModifierHandler; import org.apache.jena.arq.querybuilder.handlers.WhereHandler; import org.apache.jena.graph.FrontsTriple ; http://git-wip-us.apache.org/repos/asf/jena/blob/9626099f/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/ConstructBuilder.java ---------------------------------------------------------------------- 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 51b861b..64324a4 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 @@ -26,7 +26,6 @@ import org.apache.jena.arq.querybuilder.clauses.WhereClause; import org.apache.jena.arq.querybuilder.handlers.ConstructHandler; import org.apache.jena.arq.querybuilder.handlers.DatasetHandler; import org.apache.jena.arq.querybuilder.handlers.HandlerBlock; -import org.apache.jena.arq.querybuilder.handlers.PrologHandler; import org.apache.jena.arq.querybuilder.handlers.SolutionModifierHandler; import org.apache.jena.arq.querybuilder.handlers.WhereHandler; import org.apache.jena.graph.FrontsTriple ; @@ -46,6 +45,7 @@ public class ConstructBuilder extends AbstractQueryBuilder<ConstructBuilder> ConstructClause<ConstructBuilder> { private final HandlerBlock handlerBlock; + /** * Constructor */ http://git-wip-us.apache.org/repos/asf/jena/blob/9626099f/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/SelectBuilder.java ---------------------------------------------------------------------- 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 1c5d3ee..03796e9 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 @@ -26,7 +26,6 @@ import org.apache.jena.arq.querybuilder.clauses.SolutionModifierClause; import org.apache.jena.arq.querybuilder.clauses.WhereClause; import org.apache.jena.arq.querybuilder.handlers.DatasetHandler; import org.apache.jena.arq.querybuilder.handlers.HandlerBlock; -import org.apache.jena.arq.querybuilder.handlers.PrologHandler; import org.apache.jena.arq.querybuilder.handlers.SelectHandler; import org.apache.jena.arq.querybuilder.handlers.SolutionModifierHandler; import org.apache.jena.arq.querybuilder.handlers.WhereHandler; @@ -46,8 +45,8 @@ public class SelectBuilder extends AbstractQueryBuilder<SelectBuilder> implements DatasetClause<SelectBuilder>, WhereClause<SelectBuilder>, SolutionModifierClause<SelectBuilder>, SelectClause<SelectBuilder> { - // the handlers. private final HandlerBlock handlerBlock; + /** * Constructor. */ http://git-wip-us.apache.org/repos/asf/jena/blob/9626099f/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java ---------------------------------------------------------------------- diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java index 261db7b..dc83218 100644 --- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java +++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/clauses/SelectClause.java @@ -22,7 +22,6 @@ import java.util.List; import org.apache.jena.arq.querybuilder.AbstractQueryBuilder; import org.apache.jena.arq.querybuilder.handlers.SelectHandler; import org.apache.jena.sparql.core.Var; -import org.apache.jena.sparql.core.VarExprList; import org.apache.jena.sparql.expr.Expr; import org.apache.jena.sparql.lang.sparql_11.ParseException; http://git-wip-us.apache.org/repos/asf/jena/blob/9626099f/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/AggregationHandler.java ---------------------------------------------------------------------- diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/AggregationHandler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/AggregationHandler.java index ec03b2f..f999ca8 100644 --- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/AggregationHandler.java +++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/AggregationHandler.java @@ -17,27 +17,40 @@ package org.apache.jena.arq.querybuilder.handlers; * limitations under the License. */ import java.util.HashMap; -import java.util.List; import java.util.Map; import org.apache.jena.graph.Node; import org.apache.jena.query.Query; import org.apache.jena.sparql.core.Var; -import org.apache.jena.sparql.core.VarExprList; import org.apache.jena.sparql.expr.Expr; import org.apache.jena.sparql.expr.ExprAggregator; -import org.apache.jena.sparql.expr.aggregate.Aggregator; +/** + * Class to handle manipulation the aggregation variables in the query. + * + */ public class AggregationHandler implements Handler { + // the query private final Query query; + + // a map of variables to aggregators private final Map<Var,ExprAggregator> aggMap; + /** + * Constructor. + * @param query the query to handle. + */ public AggregationHandler( Query query ) { this.query = query; aggMap = new HashMap<Var,ExprAggregator>(); } + /** + * Add all the aggregations from the other handler. + * @param handler The other handler. + * @return This handler for chaining. + */ public AggregationHandler addAll(AggregationHandler handler) { for (ExprAggregator agg : handler.query.getAggregators()) @@ -51,20 +64,15 @@ public class AggregationHandler implements Handler { return this; } + /** + * Get the query we are executing against. + * @return the query. + */ public Query getQuery() { return query; } - public Map<Var, ExprAggregator> getVarMap() { - Map<Var,ExprAggregator> retval = new HashMap<Var,ExprAggregator>(); - for (ExprAggregator agg : query.getAggregators()) - { - retval.put( agg.getVar(), agg); - } - return retval; - } - @Override public void setVars(Map<Var, Node> values) { // nothing to do @@ -82,6 +90,14 @@ public class AggregationHandler implements Handler { } } + /** + * Add and expression aggregator and variable to the mapping. + * + * if the expr parameter is not an instance of ExprAggregator then no action is taken. + * + * @param expr The expression to add. + * @param var The variable that it is bound to. + */ public void add(Expr expr, Var var) { if (expr instanceof ExprAggregator) { http://git-wip-us.apache.org/repos/asf/jena/blob/9626099f/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/HandlerBlock.java ---------------------------------------------------------------------- diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/HandlerBlock.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/HandlerBlock.java index 8a47c57..7d16dbc 100644 --- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/HandlerBlock.java +++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/HandlerBlock.java @@ -17,18 +17,14 @@ package org.apache.jena.arq.querybuilder.handlers; * limitations under the License. */ import java.util.Map; -import java.util.Stack; - -import org.apache.jena.arq.querybuilder.AbstractQueryBuilder; -import org.apache.jena.arq.querybuilder.clauses.ConstructClause; -import org.apache.jena.arq.querybuilder.clauses.DatasetClause; -import org.apache.jena.arq.querybuilder.clauses.SelectClause; -import org.apache.jena.arq.querybuilder.clauses.SolutionModifierClause; -import org.apache.jena.arq.querybuilder.clauses.WhereClause; import org.apache.jena.graph.Node; import org.apache.jena.query.Query; import org.apache.jena.sparql.core.Var; +/** + * A class to handle all the handlers of a query builder and keep them in sync as needed. + * + */ public class HandlerBlock { private final AggregationHandler aggHandler; private final ConstructHandler constructHandler; @@ -38,17 +34,21 @@ public class HandlerBlock { private final SolutionModifierHandler modifierHandler; private final WhereHandler whereHandler; + /** + * Constructor. + * @param query The query we are working with. + */ public HandlerBlock(Query query) { prologHandler = new PrologHandler(query); aggHandler = new AggregationHandler(query); whereHandler = new WhereHandler(query); datasetHandler = new DatasetHandler(query); modifierHandler = new SolutionModifierHandler(query); + /* selecthandler and constructhandler may be null so processthem accordingly */ SelectHandler sTemp = null; ConstructHandler cTemp = null; if (query.isSelectType()) { sTemp = new SelectHandler(aggHandler); - } else if (query.isAskType()) { // nochange } else if (query.isDescribeType()) { @@ -60,92 +60,152 @@ public class HandlerBlock { constructHandler = cTemp; } + /** + * Get the aggregation handler. + * @return the aggregation handler. + */ public AggregationHandler getAggregationHandler() { return aggHandler; } + /** + * Get the construct handler. + * @return the construct handler or null. + */ public ConstructHandler getConstructHandler() { return constructHandler; } + /** + * Get the dataset handler. + * @return the dataset handler. + */ public DatasetHandler getDatasetHandler() { return datasetHandler; } + /** + * Get the prolog handler. + * @return the prolog handler. + */ public PrologHandler getPrologHandler() { return prologHandler; } + /** + * Get the select handler. + * @return the select handler or null. + */ public SelectHandler getSelectHandler() { return selectHandler; } + /** + * Get the solution modifier handler. + * @return the solution modifier handler. + */ public SolutionModifierHandler getModifierHandler() { return modifierHandler; } + /** + * Get the where handler. + * @return the where handler. + */ public WhereHandler getWhereHandler() { return whereHandler; } + /** + * Add the prolog handler contents to this prolog handler. + * @param handler The prolog handler to add to this one. + */ public void addAll(PrologHandler handler) { prologHandler.addAll(handler); } + /** + * Add the aggregation handler contents to this prolog handler. + * @param handler The aggregation handler to add to this one. + */ public void addAll(AggregationHandler handler) { aggHandler.addAll(handler); } + /** + * Add the construct handler contents to this prolog handler. + * If this construct handler is null or the handler argument is null this method does nothing. + * @param handler The construct handler to add to this one. + */ public void addAll(ConstructHandler handler) { - if (constructHandler != null) { + if (constructHandler != null && handler!=null) { constructHandler.addAll(handler); } } + /** + * Add the dataset handler contents to this prolog handler. + * @param handler The dataset handler to add to this one. + */ public void addAll(DatasetHandler handler) { datasetHandler.addAll(handler); } + /** + * Add the solution modifier handler contents to this prolog handler. + * @param handler The solution modifier handler to add to this one. + */ public void addAll(SolutionModifierHandler handler) { modifierHandler.addAll(handler); } + /** + * Add the select handler contents to this prolog handler. + * If this select handler is null or the handler argument is null this method does nothing. + * @param handler The construct handler to add to this one. + */ public void addAll(SelectHandler handler) { - if (selectHandler != null) { + if (selectHandler != null && handler!=null) { selectHandler.addAll(handler); } } + /** + * Add the where handler contents to this prolog handler. + * @param handler The where handler to add to this one. + */ public void addAll(WhereHandler handler) { whereHandler.addAll(handler); } + /** + * Add all of the handlers in the handler block to this one. + * Any handler that is null or is null in the handler argument are properly skipped. + * @param handler The handler block to add to this one. + */ public void addAll(HandlerBlock handler) { addAll(handler.aggHandler); - if (handler.constructHandler != null) - { - addAll(handler.constructHandler); - } - if (handler.selectHandler != null) - { - addAll(handler.selectHandler); - } + addAll(handler.constructHandler); + addAll(handler.selectHandler); addAll( handler.datasetHandler); addAll( handler.modifierHandler); addAll( handler.prologHandler); addAll( handler.whereHandler); } + /** + * Set the variables in all the enclosed handlers in the proper order. + * @param values The map of values to set. + */ public void setVars(Map<Var, Node> values) { aggHandler.setVars(values); if (constructHandler != null) { constructHandler.setVars(values); } - + datasetHandler.setVars(values); - prologHandler.setVars(values); if (selectHandler != null) { @@ -154,9 +214,11 @@ public class HandlerBlock { modifierHandler.setVars(values); whereHandler.setVars(values); - } + /** + * Build all the the enclosed handlers in the proper order. + */ public void build() { prologHandler.build(); http://git-wip-us.apache.org/repos/asf/jena/blob/9626099f/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java ---------------------------------------------------------------------- diff --git a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java index f9f653f..8875cd3 100644 --- a/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java +++ b/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/SelectHandler.java @@ -20,15 +20,12 @@ package org.apache.jena.arq.querybuilder.handlers; import java.io.StringReader; import java.util.List; import java.util.Map; -import java.util.HashMap; - import org.apache.jena.graph.Node; import org.apache.jena.query.Query; import org.apache.jena.query.QueryParseException; import org.apache.jena.sparql.core.Var; import org.apache.jena.sparql.core.VarExprList; import org.apache.jena.sparql.expr.Expr; -import org.apache.jena.sparql.expr.ExprAggregator; import org.apache.jena.sparql.lang.arq.ARQParser; import org.apache.jena.sparql.lang.arq.ParseException; import org.apache.jena.sparql.lang.arq.TokenMgrError; @@ -46,8 +43,7 @@ public class SelectHandler implements Handler { /** * Constructor. * - * @param query - * The query to manage. + * @param aggHandler The aggregate handler that wraps the query we want to handle. */ public SelectHandler(AggregationHandler aggHandler) { this.query = aggHandler.getQuery(); @@ -149,7 +145,7 @@ public class SelectHandler implements Handler { * Add an Expression as variable to the select. * * @param expr - * The expresson to add. + * The expression to add. * @param var * The variable to add. */ @@ -177,7 +173,7 @@ public class SelectHandler implements Handler { /** * Return the projected var expression list. * - * @return The proejct var expression list. + * @return The projected var expression list. */ public VarExprList getProject() { return query.getProject(); @@ -190,7 +186,6 @@ public class SelectHandler implements Handler { * The select handler to copy the variables from. */ public void addAll(SelectHandler selectHandler) { - setReduced(selectHandler.query.isReduced()); setDistinct(selectHandler.query.isDistinct()); query.setQueryResultStar(selectHandler.query.isQueryResultStar()); @@ -216,14 +211,8 @@ public class SelectHandler implements Handler { query.setQueryResultStar(true); } - VarExprList vel = query.getProject(); - Map<Var, Expr> exprMap = vel.getExprs(); - - for (Map.Entry<Var, ExprAggregator> entry : aggHandler.getVarMap().entrySet()) { - if (exprMap.containsKey(entry.getKey())) { - exprMap.put(entry.getKey(), entry.getValue()); - } - } + aggHandler.build(); + // handle the SELECT * case query.getProjectVars(); } http://git-wip-us.apache.org/repos/asf/jena/blob/9626099f/jena-extras/jena-querybuilder/src/main/java/org/apache/jena/arq/querybuilder/handlers/WhereHandler.java ---------------------------------------------------------------------- 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 011a8a3..83cd469 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 @@ -20,24 +20,14 @@ package org.apache.jena.arq.querybuilder.handlers; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Stack; - import org.apache.jena.arq.querybuilder.AbstractQueryBuilder; import org.apache.jena.arq.querybuilder.SelectBuilder; -import org.apache.jena.arq.querybuilder.clauses.ConstructClause; -import org.apache.jena.arq.querybuilder.clauses.DatasetClause; -import org.apache.jena.arq.querybuilder.clauses.SelectClause; -import org.apache.jena.arq.querybuilder.clauses.SolutionModifierClause; -import org.apache.jena.arq.querybuilder.clauses.WhereClause; import org.apache.jena.arq.querybuilder.rewriters.ElementRewriter; import org.apache.jena.graph.Node; import org.apache.jena.graph.NodeFactory; import org.apache.jena.graph.Triple; import org.apache.jena.query.Query; -import org.apache.jena.shared.PrefixMapping; -import org.apache.jena.shared.impl.PrefixMappingImpl; import org.apache.jena.sparql.core.Var; -import org.apache.jena.sparql.core.VarExprList; import org.apache.jena.sparql.expr.Expr; import org.apache.jena.sparql.lang.sparql_11.ParseException; import org.apache.jena.sparql.syntax.*; @@ -227,6 +217,10 @@ public class WhereHandler implements Handler { getClause().addElement(opt); } + /** + * Add the contents of a where handler as an optional statement. + * @param whereHandler The where handler to use as the optional statement. + */ public void addOptional(WhereHandler whereHandler) { getClause().addElement(new ElementOptional(whereHandler.getClause())); }
