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

com.datatorrent.lib.appdata.schemas.TimeBucket Maven / Gradle / Ivy

/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.datatorrent.lib.appdata.schemas;

import java.util.Collections;
import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;

import com.google.common.base.Preconditions;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;

/**
 * This enum represents a TimeBucket that is supported by AppData
 * 
*
* The currently supported buckets are: *
    *
  • s - second
  • *
  • m - minute
  • *
  • h - hour
  • *
  • d - day
  • *
*
*
* Buckets supported in the future will be: *
    *
  • s - second
  • *
  • w - week
  • *
  • M - month
  • *
  • q - quarter
  • *
  • y - year
  • *
* @since 3.0.0 */ public enum TimeBucket { //DO NOT change order of enums. Ordinal is used as id for storage. /** * No time bucketing. */ ALL("all", null, null), /** * Second time bucketing. */ SECOND("1s", TimeUnit.SECONDS, "s"), /** * Minute time bucketing. */ MINUTE("1m", TimeUnit.MINUTES, "m"), /** * Hour time bucketing. */ HOUR("1h", TimeUnit.HOURS, "h"), /** * Day time bucketing. */ DAY("1d", TimeUnit.DAYS, "d"); public static final String TIME_BUCKET_NAME_REGEX = "1[a-zA-Z]+"; public static final Pattern TIME_BUCKET_NAME_PATTERN = Pattern.compile(TIME_BUCKET_NAME_REGEX); public static final Set SUFFIXES; public static final Map SUFFIX_TO_TIME_BUCKET; /** * A map from the test/name of the bucket to the {@link TimeBucket}. */ public static final Map BUCKET_TO_TYPE; /** * A map from a {@link TimeUnit} to the corresponding {@link TimeBucket}. */ public static final Map TIME_UNIT_TO_TIME_BUCKET; static { Map bucketToType = Maps.newHashMap(); Map timeUnitToTimeBucket = Maps.newHashMap(); for (TimeBucket timeBucket : TimeBucket.values()) { timeUnitToTimeBucket.put(timeBucket.getTimeUnit(), timeBucket); bucketToType.put(timeBucket.getText(), timeBucket); } BUCKET_TO_TYPE = Collections.unmodifiableMap(bucketToType); TIME_UNIT_TO_TIME_BUCKET = Collections.unmodifiableMap(timeUnitToTimeBucket); Set suffixes = Sets.newHashSet(); Map suffixToTimeBucket = Maps.newHashMap(); for (TimeBucket timeBucket: TimeBucket.values()) { suffixes.add(timeBucket.getSuffix()); suffixToTimeBucket.put(timeBucket.getSuffix(), timeBucket); } SUFFIXES = Sets.newHashSet(suffixes); SUFFIX_TO_TIME_BUCKET = Maps.newHashMap(suffixToTimeBucket); } private final String suffix; private String text; private TimeUnit timeUnit; /** * Create a time bucket with the given corresponding text and {@link TimeUnit} * @param text The text or name corresponding to the TimeBucket. * @param timeUnit The {@link TimeUnit} that the TimeBucket represents. * @param suffix The suffix used to denote this {@link TimeBucket} */ TimeBucket(String text, TimeUnit timeUnit, String suffix) { setText(text); setTimeUnit(timeUnit); this.suffix = suffix; } /** * Sets the name or text corresponding to a TimeBucket. * @param text The name or text corresponding to a TimeBucket. */ private void setText(String text) { Preconditions.checkNotNull(text); this.text = text; } /** * The {@link TimeUnit} that a TimeBucket represents. * @param timeUnit The {@link TimeUnit} that a TimeBucket represents. */ private void setTimeUnit(TimeUnit timeUnit) { this.timeUnit = timeUnit; } /** * This method gets the suffix for the {@link TimeBucket}. * @return The suffix for this {@link TimeBucket}. */ public String getSuffix() { return this.suffix; } /** * Gets the name or text corresponding to this TimeBucket. * @return The name or text corresponding to this TimeBucket. */ public String getText() { return text; } /** * Gets the {@link TimeUnit} corresponding to this TimeBucket. * @return The {@link TimeUnit} corresponding to this TimeBucket. */ public TimeUnit getTimeUnit() { return timeUnit; } /** * Rounds down the given time stamp to the nearest {@link TimeUnit} corresponding * to this TimeBucket. * @param timestamp The timestamp to round down. * @return The rounded down timestamp. */ public long roundDown(long timestamp) { if (timeUnit == null) { return 0; } long millis = timeUnit.toMillis(1L); return (timestamp / millis) * millis; } /** * Gets the TimeBucket with the corresponding text or name. Returns null if there is no * TimeBucket with the corresponding text or name. * @param name The text or name of the TimeBucket to retrieve. * @return The TimeBucket with the corresponding text or name, or null if there is no TimeBucket with * corresponding test or name. */ public static TimeBucket getBucket(String name) { return BUCKET_TO_TYPE.get(name); } /** * Gets the TimeBucket with the corresponding text or name. An IllegalArgumentException is thrown if there is no * TimeBucket with the corresponding text or name. * @param name The text or name of the TimeBucket to retrieve. * @return The TimeBucket with the corresponding text or name, or an IllegalArgumentException is thrown if there is no TimeBucket with * corresponding test or name. */ public static TimeBucket getBucketEx(String name) { TimeBucket bucket = getBucket(name); Preconditions.checkArgument(bucket != null, name + " is not a valid bucket type."); return bucket; } public static TimeBucket getTimeBucketForSuffixEx(String suffix) { Preconditions.checkNotNull(suffix); Preconditions.checkArgument(SUFFIXES.contains(suffix)); return SUFFIX_TO_TIME_BUCKET.get(suffix); } public static class TimeBucketComparator implements Comparator { public static final TimeBucketComparator INSTANCE = new TimeBucketComparator(); private TimeBucketComparator() { } @Override public int compare(TimeBucket timeBucketA, TimeBucket timeBucketB) { return timeBucketA.getTimeUnit().compareTo(timeBucketB.getTimeUnit()); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy