/* * Copyright 2016 Red Hat, Inc. and/or its affiliates. * * Licensed 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. */ package org.jbpm.services.api.query; import java.util.List; import org.jbpm.services.api.query.model.QueryDefinition; import org.jbpm.services.api.query.model.QueryParam; import org.kie.api.runtime.query.QueryContext; /** * Advanced queries service that allows to register custom queries * that will be equipped with tailored capabilities of querying data. * */ public interface QueryService { /** * Registers new query definition in the system so it can be used for executing queries on top of it. * @param queryDefinition definition of the query to be registered * @throws QueryAlreadyRegisteredException in case there is already query registered with given name (queryDefinition.getName()) */ void registerQuery(QueryDefinition queryDefinition) throws QueryAlreadyRegisteredException; /** * Registers or replaces existing query. Similar to what <code>registerQuery</code> does, though it won't throw * exception in case there is already query registered but simply replace it. * @param queryDefinition definition of the query to be registered/replaced */ void replaceQuery(QueryDefinition queryDefinition); /** * Removes the query definition from the system * @param uniqueQueryName unique name that query was registered under * @throws QueryNotFoundException in case there is no such query registered */ void unregisterQuery(String uniqueQueryName) throws QueryNotFoundException; /** * Returns query definition details that is registered under given uniqueQueryName * @param uniqueQueryName unique name that query was registered under * @return query definition details if found * @throws QueryNotFoundException in case there is no such query registered */ QueryDefinition getQuery(String uniqueQueryName) throws QueryNotFoundException; /** * Returns list of query definitions registered in the system * @param queryContext provides pagnition information for the query * @return returns list of found queries */ List<QueryDefinition> getQueries(QueryContext queryContext); /** * Performs query on given query definition that had to be previously registered. Results will be mapped * by given <code>mapper</code> and: * <ul> * <li>sorting and paging will be applied based on <code>queryContext</code></li> * <li>filtering of results will be done based on <code>filterParams</code> if given</li> *</ul> * @param queryName unique name that query was registered under * @param mapper type of the <code>QueryResultMapper</code> to map raw data set into list of objects * @param queryContext query context carrying paging and sorting details * @param filterParams additional filter parameters to narrow down the result * @return results mapped to objects from raw data set * @throws QueryNotFoundException in case there is no such query registered */ <T> T query(String queryName, QueryResultMapper<T> mapper, QueryContext queryContext, QueryParam... filterParams) throws QueryNotFoundException; /** * Performs query on given query definition that had to be previously registered. Results will be mapped * by given <code>mapper</code> and: * <ul> * <li>sorting and paging will be applied based on <code>queryContext</code></li> * <li>filtering of results will be done based on <code>paramBuilder</code> which * is an implementation of <code>QueryParamBuilder</code> for building advanced filters</li> *</ul> * @param queryName unique name that query was registered under * @param mapper type of the <code>QueryResultMapper</code> to map raw data set into list of objects * @param queryContext query context carrying paging and sorting details * @param paramBuilder implementation of <code>QueryParamBuilder</code> that allows to build custom filters in advanced way * @return results mapped to objects from raw data set * @throws QueryNotFoundException in case there is no such query registered */ <T> T query(String queryName, QueryResultMapper<T> mapper, QueryContext queryContext, QueryParamBuilder<?> paramBuilder) throws QueryNotFoundException; }