All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cinchapi.concourse.Calculator Maven / Gradle / Ivy

/*
 * Copyright (c) 2013-2017 Cinchapi 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.cinchapi.concourse;

import java.util.Collection;

import com.cinchapi.concourse.lang.Criteria;
import com.cinchapi.concourse.lang.Language;
import com.cinchapi.concourse.thrift.TObject;
import com.cinchapi.concourse.util.Collections;
import com.cinchapi.concourse.util.Convert;
import com.google.common.base.Preconditions;

/**
 * The interface for Concourse's aggregation and calculation abilities.
 * 
 * @author Jeff Nelson
 */
public class Calculator {

    /**
     * The parent driver that contains the connection to thrift.
     */
    private final ConcourseThriftDriver concourse;

    /**
     * Construct a new instance.
     * 
     * @param concourse
     */
    Calculator(Concourse concourse) {
        Preconditions.checkArgument(concourse instanceof ConcourseThriftDriver);
        this.concourse = (ConcourseThriftDriver) concourse;
    }

    /**
     * Return the sum of all the values stored for {@code key} in
     * {@code record}.
     * 

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key the field name * @param record the record id * @return the sum of the values */ public Number sum(String key, long record) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKeyRecord(key, record, concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the sum of all the values stored across {@code key}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key a field name * @return the sum of the values */ public Number sum(String key) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKey(key, concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the sum of all the values stored across {@code key} at * {@code timestamp}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key a field name * @param timestamp the {@link Timestamp} at which the values are selected * @return the sum of the values */ public Number sum(String key, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKeyTime(key, timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key * @param record * @param timestamp * @return the sum of the values */ public Number sum(String key, long record, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKeyRecordTime(key, record, timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key * @param records * @return the sum of the values */ public Number sum(String key, Collection records) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKeyRecords(key, Collections.toLongList(records), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key * @param records * @param timestamp * @return the sum of the values */ public Number sum(String key, Collection records, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKeyRecordsTime(key, Collections.toLongList(records), timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the sum of all the values for {@code key} in * each of the records that match the {@link Criteria}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key * @param {@link Criteria} * @return the sum of the values */ public Number sum(String key, Criteria criteria) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKeyCriteria(key, Language.translateToThriftCriteria(criteria), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the sum of all the values for {@code key} in * each of the records that match the {@code criteria}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key the field name * @param ccl * @return the sum of the values */ public Number sum(String key, String ccl) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKeyCcl(key, ccl, concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the sum of all the values at {@code timestamp} for {@code key} in * each of the records that match the {@code criteria}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key the field name * @param criteria a criteria written using the Concourse Criteria Language * (CCL) * @param timestamp the {@link Timestamp} at which the values are selected * @return the sum of the values */ public Number sum(String key, String ccl, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKeyCclTime(key, ccl, timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the sum of all the values for {@code key} in * each of the records that match the {@link Criteria}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key the field name * @param {@link Criteria} * @param timestamp the {@link Timestamp} at which the values are selected * @return the sum of the values */ public Number sum(String key, Criteria criteria, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().sumKeyCriteriaTime(key, Language.translateToThriftCriteria(criteria), timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the average of all the values stored for {@code key} in * {@code record}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key the field name * @param record the record id * @return the average of the values */ public Number average(String key, long record) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKeyRecord(key, record, concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the average of all the values stored across {@code key}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key a field name * @return the average of the values */ public Number average(String key) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKey(key, concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the average of all the values stored across {@code key} at * {@code timestamp}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key a field name * @param timestamp the {@link Timestamp} at which the values are selected * @return the average of the values */ public Number average(String key, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKeyTime(key, timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key * @param record * @param timestamp * @return the average of the values */ public Number average(String key, long record, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKeyRecordTime(key, record, timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key * @param records * @return the average of the values */ public Number average(String key, Collection records) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKeyRecords(key, Collections.toLongList(records), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key * @param records * @param timestamp * @return the average of the values */ public Number average(String key, Collection records, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKeyRecordsTime(key, Collections.toLongList(records), timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the average of all the values for {@code key} in * each of the records that match the {@link Criteria}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key * @param {@link Criteria} * @return the average of the values */ public Number average(String key, Criteria criteria) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKeyCriteria(key, Language.translateToThriftCriteria(criteria), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the average of all the values for {@code key} in * each of the records that match the {@code criteria}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key the field name * @param ccl * @return the average of the values */ public Number average(String key, String ccl) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKeyCcl(key, ccl, concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the average of all the values at {@code timestamp} for {@code key} in * each of the records that match the {@code criteria}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key the field name * @param criteria a criteria written using the Concourse Criteria Language * (CCL) * @param timestamp the {@link Timestamp} at which the values are selected * @return the average of the values */ public Number average(String key, String ccl, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKeyCclTime(key, ccl, timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } /** * Return the average of all the values for {@code key} in * each of the records that match the {@link Criteria}. *

* This method assumes that all the values are numeric. An exception will be * thrown if any non-numeric values are encountered. *

* * @param key the field name * @param {@link Criteria} * @param timestamp the {@link Timestamp} at which the values are selected * @return the average of the values */ public Number average(String key, Criteria criteria, Timestamp timestamp) { return concourse.execute(() -> { TObject result = concourse.thrift().averageKeyCriteriaTime(key, Language.translateToThriftCriteria(criteria), timestamp.getMicros(), concourse.creds(), concourse.transaction(), concourse.environment()); return (Number) Convert.thriftToJava(result); }); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy