Example usage for com.google.common.collect EvictingQueue offer

List of usage examples for com.google.common.collect EvictingQueue offer

Introduction

In this page you can find the example usage for com.google.common.collect EvictingQueue offer.

Prototype

@Override
public boolean offer(E e) 

Source Link

Document

Adds the given element to this queue.

Usage

From source file:com.boundlessgeo.geoserver.util.RecentObjectCache.java

public <T extends Info> void add(Class<T> clazz, T obj, String workspace) {
    if (obj == null || obj.getId() == null) {
        return;/*  ww w . j a v a  2  s .c  o  m*/
    }

    EvictingQueue<Ref> q = q(clazz);
    synchronized (q) {
        q.offer(Ref.to(obj, workspace));
    }
}

From source file:org.elasticsearch.search.aggregations.reducers.movavg.MovAvgReducer.java

@Override
public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) {
    InternalHistogram histo = (InternalHistogram) aggregation;
    List<? extends InternalHistogram.Bucket> buckets = histo.getBuckets();
    InternalHistogram.Factory<? extends InternalHistogram.Bucket> factory = histo.getFactory();

    List newBuckets = new ArrayList<>();
    EvictingQueue<Double> values = EvictingQueue.create(this.window);

    long lastKey = 0;
    long interval = Long.MAX_VALUE;
    Object currentKey;//  w w  w .j  a v a  2 s  . c  o m

    for (InternalHistogram.Bucket bucket : buckets) {
        Double thisBucketValue = resolveBucketValue(histo, bucket, bucketsPaths()[0], gapPolicy);
        currentKey = bucket.getKey();

        if (!(thisBucketValue == null || thisBucketValue.equals(Double.NaN))) {
            values.offer(thisBucketValue);

            double movavg = model.next(values);

            List<InternalAggregation> aggs = new ArrayList<>(
                    Lists.transform(bucket.getAggregations().asList(), FUNCTION));
            aggs.add(new InternalSimpleValue(name(), movavg, formatter, new ArrayList<Reducer>(), metaData()));
            InternalHistogram.Bucket newBucket = factory.createBucket(currentKey, bucket.getDocCount(),
                    new InternalAggregations(aggs), bucket.getKeyed(), bucket.getFormatter());
            newBuckets.add(newBucket);

        } else {
            newBuckets.add(bucket);
        }

        if (predict > 0) {
            if (currentKey instanceof Number) {
                interval = Math.min(interval, ((Number) bucket.getKey()).longValue() - lastKey);
                lastKey = ((Number) bucket.getKey()).longValue();
            } else if (currentKey instanceof DateTime) {
                interval = Math.min(interval, ((DateTime) bucket.getKey()).getMillis() - lastKey);
                lastKey = ((DateTime) bucket.getKey()).getMillis();
            } else {
                throw new AggregationExecutionException(
                        "Expected key of type Number or DateTime but got [" + currentKey + "]");
            }
        }

    }

    if (buckets.size() > 0 && predict > 0) {

        boolean keyed;
        ValueFormatter formatter;
        keyed = buckets.get(0).getKeyed();
        formatter = buckets.get(0).getFormatter();

        double[] predictions = model.predict(values, predict);
        for (int i = 0; i < predictions.length; i++) {
            List<InternalAggregation> aggs = new ArrayList<>();
            aggs.add(new InternalSimpleValue(name(), predictions[i], formatter, new ArrayList<Reducer>(),
                    metaData()));
            InternalHistogram.Bucket newBucket = factory.createBucket(lastKey + (interval * (i + 1)), 0,
                    new InternalAggregations(aggs), keyed, formatter);
            newBuckets.add(newBucket);
        }
    }

    return factory.create(newBuckets, histo);
}

From source file:org.elasticsearch.search.aggregations.pipeline.movavg.MovAvgPipelineAggregator.java

@Override
public InternalAggregation reduce(InternalAggregation aggregation, ReduceContext reduceContext) {
    InternalHistogram histo = (InternalHistogram) aggregation;
    List<? extends InternalHistogram.Bucket> buckets = histo.getBuckets();
    InternalHistogram.Factory<? extends InternalHistogram.Bucket> factory = histo.getFactory();

    List newBuckets = new ArrayList<>();
    EvictingQueue<Double> values = EvictingQueue.create(this.window);

    long lastValidKey = 0;
    int lastValidPosition = 0;
    int counter = 0;

    for (InternalHistogram.Bucket bucket : buckets) {
        Double thisBucketValue = resolveBucketValue(histo, bucket, bucketsPaths()[0], gapPolicy);

        // Default is to reuse existing bucket.  Simplifies the rest of the logic,
        // since we only change newBucket if we can add to it
        InternalHistogram.Bucket newBucket = bucket;

        if (!(thisBucketValue == null || thisBucketValue.equals(Double.NaN))) {
            values.offer(thisBucketValue);

            // Some models (e.g. HoltWinters) have certain preconditions that must be met
            if (model.hasValue(values.size())) {
                double movavg = model.next(values);

                List<InternalAggregation> aggs = new ArrayList<>(
                        Lists.transform(bucket.getAggregations().asList(), AGGREGATION_TRANFORM_FUNCTION));
                aggs.add(new InternalSimpleValue(name(), movavg, formatter, new ArrayList<PipelineAggregator>(),
                        metaData()));/* w  w w.j  a v  a  2  s  .  c o  m*/
                newBucket = factory.createBucket(bucket.getKey(), bucket.getDocCount(),
                        new InternalAggregations(aggs), bucket.getKeyed(), bucket.getFormatter());
            }

            if (predict > 0) {
                if (bucket.getKey() instanceof Number) {
                    lastValidKey = ((Number) bucket.getKey()).longValue();
                } else if (bucket.getKey() instanceof DateTime) {
                    lastValidKey = ((DateTime) bucket.getKey()).getMillis();
                } else {
                    throw new AggregationExecutionException(
                            "Expected key of type Number or DateTime but got [" + lastValidKey + "]");
                }
                lastValidPosition = counter;
            }
        }
        counter += 1;
        newBuckets.add(newBucket);

    }

    if (buckets.size() > 0 && predict > 0) {

        boolean keyed;
        ValueFormatter formatter;
        keyed = buckets.get(0).getKeyed();
        formatter = buckets.get(0).getFormatter();

        double[] predictions = model.predict(values, predict);
        for (int i = 0; i < predictions.length; i++) {

            List<InternalAggregation> aggs;
            long newKey = histo.getRounding().nextRoundingValue(lastValidKey);

            if (lastValidPosition + i + 1 < newBuckets.size()) {
                InternalHistogram.Bucket bucket = (InternalHistogram.Bucket) newBuckets
                        .get(lastValidPosition + i + 1);

                // Get the existing aggs in the bucket so we don't clobber data
                aggs = new ArrayList<>(
                        Lists.transform(bucket.getAggregations().asList(), AGGREGATION_TRANFORM_FUNCTION));
                aggs.add(new InternalSimpleValue(name(), predictions[i], formatter,
                        new ArrayList<PipelineAggregator>(), metaData()));

                InternalHistogram.Bucket newBucket = factory.createBucket(newKey, 0,
                        new InternalAggregations(aggs), keyed, formatter);

                // Overwrite the existing bucket with the new version
                newBuckets.set(lastValidPosition + i + 1, newBucket);

            } else {
                // Not seen before, create fresh
                aggs = new ArrayList<>();
                aggs.add(new InternalSimpleValue(name(), predictions[i], formatter,
                        new ArrayList<PipelineAggregator>(), metaData()));

                InternalHistogram.Bucket newBucket = factory.createBucket(newKey, 0,
                        new InternalAggregations(aggs), keyed, formatter);

                // Since this is a new bucket, simply append it
                newBuckets.add(newBucket);
            }
            lastValidKey = newKey;
        }
    }

    return factory.create(newBuckets, histo);
}