package org.apache.jena.arq.querybuilder.handlers; /* * 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. */ import java.util.Map; 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; private final DatasetHandler datasetHandler; private final PrologHandler prologHandler; private final SelectHandler selectHandler; 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()) { // no change } else if (query.isConstructType()) { cTemp = new ConstructHandler(query); } selectHandler = sTemp; 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 && 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 && 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); 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) { selectHandler.setVars(values); } modifierHandler.setVars(values); whereHandler.setVars(values); } /** * Build all the the enclosed handlers in the proper order. */ public void build() { prologHandler.build(); if (selectHandler != null) { selectHandler.build(); } if (constructHandler != null) { constructHandler.build(); } datasetHandler.build(); modifierHandler.build(); whereHandler.build(); aggHandler.build(); } }