/* * Copyright 2013 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; import static io.searchbox.core.search.aggregation.AggregationField.BUCKETS; import static io.searchbox.core.search.aggregation.AggregationField.DOC_COUNT; import static io.searchbox.core.search.aggregation.AggregationField.KEY; import io.searchbox.core.search.aggregation.Aggregation; import io.searchbox.core.search.aggregation.Bucket; import java.util.LinkedList; import java.util.List; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; /** * A custom terms aggregation because the default jest one doesn't work. * * @author eric.wittmann@redhat.com */ @SuppressWarnings("nls") public class ApimanTermsAggregation extends Aggregation { public static final String TYPE = "terms"; private List<Entry> buckets = new LinkedList<>(); public ApimanTermsAggregation(String name, JsonObject termAggregation) { super(name, termAggregation); if(termAggregation.has(String.valueOf(BUCKETS)) && termAggregation.get(String.valueOf(BUCKETS)).isJsonArray()) { parseBuckets(termAggregation.get(String.valueOf(BUCKETS)).getAsJsonArray()); } } private void parseBuckets(JsonArray bucketsSource) { for(JsonElement bucketElement : bucketsSource) { JsonObject bucket = (JsonObject) bucketElement; Entry entry = new Entry(bucket, bucket.get(String.valueOf(KEY)).getAsString(), bucket.get(String.valueOf(DOC_COUNT)).getAsLong()); buckets.add(entry); } } public List<Entry> getBuckets() { return buckets; } public class Entry extends Bucket { private String key; public Entry(JsonObject bucket, String key, Long count) { super(bucket, count); this.key = key; } public String getKey() { return key; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj.getClass() != getClass()) { return false; } Entry rhs = (Entry) obj; return new EqualsBuilder() .appendSuper(super.equals(obj)) .append(key, rhs.key) .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder() .append(getCount()) .append(getKey()) .toHashCode(); } } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (obj.getClass() != getClass()) { return false; } ApimanTermsAggregation rhs = (ApimanTermsAggregation) obj; return new EqualsBuilder() .appendSuper(super.equals(obj)) .append(buckets, rhs.buckets) .isEquals(); } @Override public int hashCode() { return new HashCodeBuilder() .appendSuper(super.hashCode()) .append(buckets) .toHashCode(); } }