1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.es.log.allcommon;
17
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.Collections;
21 import java.util.List;
22
23 import org.codelibs.fesen.index.query.QueryBuilder;
24 import org.codelibs.fesen.search.aggregations.AbstractAggregationBuilder;
25 import org.codelibs.fesen.search.aggregations.AggregationBuilders;
26 import org.codelibs.fesen.search.aggregations.bucket.filter.FilterAggregationBuilder;
27 import org.codelibs.fesen.search.aggregations.bucket.global.GlobalAggregationBuilder;
28 import org.codelibs.fesen.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder;
29 import org.codelibs.fesen.search.aggregations.bucket.histogram.HistogramAggregationBuilder;
30 import org.codelibs.fesen.search.aggregations.bucket.missing.MissingAggregationBuilder;
31 import org.codelibs.fesen.search.aggregations.bucket.range.DateRangeAggregationBuilder;
32 import org.codelibs.fesen.search.aggregations.bucket.range.IpRangeAggregationBuilder;
33 import org.codelibs.fesen.search.aggregations.bucket.range.RangeAggregationBuilder;
34 import org.codelibs.fesen.search.aggregations.bucket.sampler.SamplerAggregationBuilder;
35 import org.codelibs.fesen.search.aggregations.bucket.terms.SignificantTermsAggregationBuilder;
36 import org.codelibs.fesen.search.aggregations.bucket.terms.TermsAggregationBuilder;
37 import org.codelibs.fesen.search.aggregations.metrics.AvgAggregationBuilder;
38 import org.codelibs.fesen.search.aggregations.metrics.CardinalityAggregationBuilder;
39 import org.codelibs.fesen.search.aggregations.metrics.ExtendedStatsAggregationBuilder;
40 import org.codelibs.fesen.search.aggregations.metrics.MaxAggregationBuilder;
41 import org.codelibs.fesen.search.aggregations.metrics.MinAggregationBuilder;
42 import org.codelibs.fesen.search.aggregations.metrics.PercentileRanksAggregationBuilder;
43 import org.codelibs.fesen.search.aggregations.metrics.PercentilesAggregationBuilder;
44 import org.codelibs.fesen.search.aggregations.metrics.ScriptedMetricAggregationBuilder;
45 import org.codelibs.fesen.search.aggregations.metrics.StatsAggregationBuilder;
46 import org.codelibs.fesen.search.aggregations.metrics.SumAggregationBuilder;
47 import org.codelibs.fesen.search.aggregations.metrics.TopHitsAggregationBuilder;
48 import org.codelibs.fesen.search.aggregations.metrics.ValueCountAggregationBuilder;
49 import org.dbflute.exception.InvalidQueryRegisteredException;
50
51
52
53
54 public abstract class EsAbstractConditionAggregation {
55
56 protected static final String CA_PROPERTY = "conditionAggregation";
57
58
59
60
61 protected List<AbstractAggregationBuilder<?>> aggregationAggregationBuilderList;
62
63
64
65
66
67 public boolean hasAggregations() {
68 return aggregationAggregationBuilderList != null && !aggregationAggregationBuilderList.isEmpty();
69 }
70
71 public List<AbstractAggregationBuilder<?>> getAggregationBuilderList() {
72 return aggregationAggregationBuilderList != null ? aggregationAggregationBuilderList : Collections.emptyList();
73 }
74
75
76
77
78 public void addAggregation(AbstractAggregationBuilder<?> aggregationAggregationBuilder) {
79 assertObjectNotNull("aggregationAggregationBuilder", aggregationAggregationBuilder);
80 regA(aggregationAggregationBuilder);
81 }
82
83
84
85
86
87 protected AvgAggregationBuilder regAvgA(String name, String field) {
88 AvgAggregationBuilder builder = AggregationBuilders.avg(name).field(field);
89 regA(builder);
90 return builder;
91 }
92
93 protected MaxAggregationBuilder regMaxA(String name, String field) {
94 MaxAggregationBuilder builder = AggregationBuilders.max(name).field(field);
95 regA(builder);
96 return builder;
97 }
98
99 protected MinAggregationBuilder regMinA(String name, String field) {
100 MinAggregationBuilder builder = AggregationBuilders.min(name).field(field);
101 regA(builder);
102 return builder;
103 }
104
105 protected SumAggregationBuilder regSumA(String name, String field) {
106 SumAggregationBuilder builder = AggregationBuilders.sum(name).field(field);
107 regA(builder);
108 return builder;
109 }
110
111 protected ExtendedStatsAggregationBuilder regExtendedStatsA(String name, String field) {
112 ExtendedStatsAggregationBuilder builder = AggregationBuilders.extendedStats(name).field(field);
113 regA(builder);
114 return builder;
115 }
116
117 protected StatsAggregationBuilder regStatsA(String name, String field) {
118 StatsAggregationBuilder builder = AggregationBuilders.stats(name).field(field);
119 regA(builder);
120 return builder;
121 }
122
123 protected PercentilesAggregationBuilder regPercentilesA(String name, String field) {
124 PercentilesAggregationBuilder builder = AggregationBuilders.percentiles(name).field(field);
125 regA(builder);
126 return builder;
127 }
128
129 protected PercentileRanksAggregationBuilder regPercentileRanksA(String name, String field, double[] values) {
130 PercentileRanksAggregationBuilder builder = AggregationBuilders.percentileRanks(name, values).field(field);
131 regA(builder);
132 return builder;
133 }
134
135 protected CardinalityAggregationBuilder regCardinalityA(String name, String field) {
136 CardinalityAggregationBuilder builder = AggregationBuilders.cardinality(name).field(field);
137 regA(builder);
138 return builder;
139 }
140
141 protected ValueCountAggregationBuilder regCountA(String name, String field) {
142 ValueCountAggregationBuilder builder = AggregationBuilders.count(name).field(field);
143 regA(builder);
144 return builder;
145 }
146
147 protected TermsAggregationBuilder regTermsA(String name, String field) {
148 TermsAggregationBuilder builder = AggregationBuilders.terms(name).field(field);
149 regA(builder);
150 return builder;
151 }
152
153 protected SignificantTermsAggregationBuilder regSignificantTermsA(String name, String field) {
154 SignificantTermsAggregationBuilder builder = AggregationBuilders.significantTerms(name).field(field);
155 regA(builder);
156 return builder;
157 }
158
159 protected HistogramAggregationBuilder regHistogramA(String name, String field) {
160 HistogramAggregationBuilder builder = AggregationBuilders.histogram(name).field(field);
161 regA(builder);
162 return builder;
163 }
164
165 protected DateHistogramAggregationBuilder regDateHistogramA(String name, String field) {
166 DateHistogramAggregationBuilder builder = AggregationBuilders.dateHistogram(name).field(field);
167 regA(builder);
168 return builder;
169 }
170
171 protected RangeAggregationBuilder regRangeA(String name, String field) {
172 RangeAggregationBuilder builder = AggregationBuilders.range(name).field(field);
173 regA(builder);
174 return builder;
175 }
176
177 protected DateRangeAggregationBuilder regDateRangeA(String name, String field) {
178 DateRangeAggregationBuilder builder = AggregationBuilders.dateRange(name).field(field);
179 regA(builder);
180 return builder;
181 }
182
183 protected IpRangeAggregationBuilder regIpRangeA(String name, String field) {
184 IpRangeAggregationBuilder builder = AggregationBuilders.ipRange(name).field(field);
185 regA(builder);
186 return builder;
187 }
188
189 protected MissingAggregationBuilder regMissingA(String name, String field) {
190 MissingAggregationBuilder builder = AggregationBuilders.missing(name).field(field);
191 regA(builder);
192 return builder;
193 }
194
195 protected FilterAggregationBuilder regFilterA(String name, QueryBuilder filter) {
196 FilterAggregationBuilder builder = AggregationBuilders.filter(name, filter);
197 regA(builder);
198 return builder;
199 }
200
201 protected GlobalAggregationBuilder regGlobalA(String name) {
202 GlobalAggregationBuilder builder = AggregationBuilders.global(name);
203 regA(builder);
204 return builder;
205 }
206
207 protected SamplerAggregationBuilder regSamplerA(String name) {
208 SamplerAggregationBuilder builder = AggregationBuilders.sampler(name);
209 regA(builder);
210 return builder;
211 }
212
213 protected ScriptedMetricAggregationBuilder regScriptedMetricA(String name) {
214 ScriptedMetricAggregationBuilder builder = AggregationBuilders.scriptedMetric(name);
215 regA(builder);
216 return builder;
217 }
218
219 protected TopHitsAggregationBuilder regTopHitsA(String name) {
220 TopHitsAggregationBuilder builder = AggregationBuilders.topHits(name);
221 regA(builder);
222 return builder;
223 }
224
225 protected void regA(AbstractAggregationBuilder<?> builder) {
226 assertObjectNotNull("builder", builder);
227 if (aggregationAggregationBuilderList == null) {
228 aggregationAggregationBuilderList = new ArrayList<>();
229 }
230 aggregationAggregationBuilderList.add(builder);
231 }
232
233
234
235
236 protected void checkEsInvalidAggregation(String name, Object value) {
237 if (value == null || (value instanceof String && ((String) value).isEmpty())) {
238 String msg = "Cannot register null or empty aggregation: name=" + name + " value=" + value;
239 throw new InvalidQueryRegisteredException(msg);
240 }
241 }
242
243 protected void checkEsInvalidAggregationCollection(String name, Collection<?> values) {
244 if (values == null || values.isEmpty()) {
245 String msg = "Cannot register null or empty query collection: name=" + name + " values=" + values;
246 throw new InvalidQueryRegisteredException(msg);
247 }
248 }
249
250
251
252
253 protected void assertObjectNotNull(String variableName, Object value) {
254 if (variableName == null) {
255 String msg = "The value should not be null: variableName=null value=" + value;
256 throw new IllegalArgumentException(msg);
257 }
258 if (value == null) {
259 String msg = "The value should not be null: variableName=" + variableName;
260 throw new IllegalArgumentException(msg);
261 }
262 }
263
264
265
266
267
268 @FunctionalInterface
269 public interface ConditionOptionCall<OP extends AbstractAggregationBuilder<?>> {
270
271
272
273
274 void callback(OP op);
275 }
276
277 @FunctionalInterface
278 public interface OperatorCall<CA extends EsAbstractConditionAggregation> {
279
280 void callback(CA query);
281 }
282 }