/* * Copyright 2016 JBoss 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 io.apiman.manager.api.es.util; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @author ewittman */ public class SearchSourceBuilder extends AbstractQueryBuilder { private QueryBuilder query; private Integer from; private Integer size; private List<SortInfo> sorts = new ArrayList<>(); private String[] fetchIncludes; @SuppressWarnings("unused") private String[] fetchExcludes; private boolean fetchSource; /** * Constructor. */ public SearchSourceBuilder() { } public SearchSourceBuilder query(QueryBuilder query) { this.query = query; return this; } public SearchSourceBuilder size(int size) { this.size = size; return this; } public SearchSourceBuilder fetchSource(String[] includes, String[] excludes) { this.fetchIncludes = includes; this.fetchExcludes = excludes; return this; } public SearchSourceBuilder sort(String fieldName, SortOrder order) { sorts.add(new SortInfo(fieldName, order)); return this; } public SearchSourceBuilder from(int from) { this.from = from; return this; } public SearchSourceBuilder fetchSource(boolean fetch) { this.fetchSource = fetch; return this; } /** * @see io.apiman.manager.api.es.util.AbstractQueryBuilder#doXContent(io.apiman.manager.api.es.util.XContentBuilder) */ @SuppressWarnings("nls") @Override protected void doXContent(XContentBuilder builder) throws IOException { if (from != null) { builder.field("from", from); } if (size != null) { builder.field("size", size); } if (query != null) { builder.field("query"); query.toXContent(builder); } if (!sorts.isEmpty()) { builder.startArray("sort"); for (SortInfo sortInfo : sorts) { builder.startObject(); builder.startObject(sortInfo.sortFieldName); builder.field("order", sortInfo.sortOrder.toString()); builder.endObject(); builder.endObject(); } builder.endArray(); } if (fetchSource) { builder.field("_source", true); } if (fetchIncludes != null) { builder.field("_source"); builder.startObject(); builder.array("include", fetchIncludes); builder.endObject(); } } private static class SortInfo { public String sortFieldName; public SortOrder sortOrder; /** * Constructor. * @param fieldName * @param order */ public SortInfo(String fieldName, SortOrder order) { this.sortFieldName = fieldName; this.sortOrder = order; } } }