/* * Copyright 2015 Time Warner Cable, Inc. * * 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 com.twcable.jackalope; import com.twcable.jackalope.impl.jcr.QueryImpl; import com.twcable.jackalope.impl.jcr.QueryManagerImpl; import com.twcable.jackalope.impl.jcr.QueryResultImpl; import com.twcable.jackalope.impl.jcr.WorkspaceImpl; import javax.annotation.Nonnull; import javax.jcr.Node; import javax.jcr.Session; import javax.jcr.query.Query; import javax.jcr.query.QueryManager; import javax.jcr.query.QueryResult; import java.util.ArrayList; import java.util.List; public class JCRQueryBuilder { @Nonnull public static QueryManagerBuilder queryManager(Session session, QueryBuilder... queryBuilders) { return new QueryManagerBuilder(session, queryBuilders); } @Nonnull public static QueryBuilder query(String statement, String language, QueryResultBuilder queryResultBuilder) { return new QueryBuilder(statement, language, queryResultBuilder); } @Nonnull public static QueryResultBuilder result(Node... nodes) { return new QueryResultBuilder(nodes); } // ********************************************************************** // // INNER CLASSES // // ********************************************************************** static class QueryManagerBuilder { private Session session; private QueryBuilder[] queryBuilders; public QueryManagerBuilder(Session session, QueryBuilder... queryBuilders) { this.session = session; this.queryBuilders = queryBuilders; } public QueryManager build() { List<Query> queries = new ArrayList<>(); for (QueryBuilder queryBuilder : queryBuilders) queries.add(queryBuilder.build()); QueryManager queryManager = new QueryManagerImpl(queries.toArray(new Query[queries.size()])); ((WorkspaceImpl)session.getWorkspace()).setQueryManager(queryManager); return queryManager; } } static class QueryBuilder { String statement; String language; QueryResultBuilder queryResultBuilder; public QueryBuilder(String statement, String language, QueryResultBuilder queryResultBuilder) { this.statement = statement; this.language = language; this.queryResultBuilder = queryResultBuilder; } public Query build() { return new QueryImpl(statement, language, queryResultBuilder.build()); } } static class QueryResultBuilder { Node[] nodes = new Node[0]; public QueryResultBuilder(Node... nodes) { this.nodes = nodes; } public QueryResult build() { return new QueryResultImpl(nodes); } } }