Package com.netflix.infix

Source Code of com.netflix.infix.TimeRangeValuePredicate

package com.netflix.infix;

import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import org.joda.time.Interval;
import org.joda.time.format.DateTimeFormatter;

import javax.annotation.Nullable;

public class TimeRangeValuePredicate implements ValuePredicate<Long> {

  private String timeFormat;
  private String start;
  private String end;
  private Interval interval;

  public TimeRangeValuePredicate(String timeFormat, String start, String end){
   
    Preconditions.checkArgument(!Strings.isNullOrEmpty(timeFormat), "Time format can't be null or empty. ");
        Preconditions.checkArgument(!Strings.isNullOrEmpty(start), "The lower bound of time range can't be null or empty.");
    Preconditions.checkArgument(!Strings.isNullOrEmpty(end), "The upper bound of time range  can't be null or empty. ");
   
    this.timeFormat = timeFormat;
    this.start = start;
    this.end = end;
   
    DateTimeFormatter format = TimeUtil.toDateTimeFormatter("time format", timeFormat);
    long startInstant = format.parseMillis(start);
    long endInstant = format.parseMillis(end);
   
    try{
      this.interval = new Interval(startInstant, endInstant);
    }catch(IllegalArgumentException e) {
      String msg = String.format(
        "The lower bound should be smaller than or equal to upper bound for a time range. Given range: [%s, %s)",
        start,
        end);
      IllegalArgumentException iae = new IllegalArgumentException(msg, e.getCause());
      iae.setStackTrace(e.getStackTrace());
      throw iae;
    }
  }
 
  @Override
    public boolean apply(@Nullable Long input) {
      return null != input && this.interval.contains(input);
    }

  public String getStart(){
    return start;
  }
 
  public String getTimeFormat(){
    return this.timeFormat;
  }
 
  String getEnd() {
    return this.end;
  }

  @Override
    public String toString() {
      StringBuilder builder = new StringBuilder();
      builder.append("TimeRangeValuePredicate [timeFormat=");
      builder.append(timeFormat);
      builder.append(", start=");
      builder.append(start);
      builder.append(", end=");
      builder.append(end);
      builder.append(", interval=");
      builder.append(interval);
      builder.append("]");
      return builder.toString();
    }

  @Override
    public int hashCode() {
      final int prime = 31;
      int result = 1;
      result = prime * result + ((end == null) ? 0 : end.hashCode());
      result = prime * result + ((start == null) ? 0 : start.hashCode());
      result = prime * result + ((timeFormat == null) ? 0 : timeFormat.hashCode());
      return result;
    }

  @Override
    public boolean equals(Object obj) {
      if (this == obj) {
        return true;
      }
      if (obj == null) {
        return false;
      }
      if (getClass() != obj.getClass()) {
        return false;
      }
      TimeRangeValuePredicate other = (TimeRangeValuePredicate) obj;
      if (end == null) {
        if (other.end != null) {
          return false;
        }
      } else if (!end.equals(other.end)) {
        return false;
      }
      if (start == null) {
        if (other.start != null) {
          return false;
        }
      } else if (!start.equals(other.start)) {
        return false;
      }
      if (timeFormat == null) {
        if (other.timeFormat != null) {
          return false;
        }
      } else if (!timeFormat.equals(other.timeFormat)) {
        return false;
      }
      return true;
    }
}
TOP

Related Classes of com.netflix.infix.TimeRangeValuePredicate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.