package com.netflix.suro.routing.filter;
import org.joda.time.format.DateTimeFormatter;
import javax.annotation.Nullable;
public class TimeStringValuePredicate implements ValuePredicate<String> {
private String valueFormat;
private String inputFormat;
private String value;
private String fnName;
private DateTimeFormatter inputTimeFormatter;
private TimeMillisValuePredicate timePredicate;
public TimeStringValuePredicate(String valueFormat, String inputFormat, String value, String fnName){
this.valueFormat = valueFormat;
this.inputFormat = inputFormat;
this.value = value;
this.fnName = fnName;
this.inputTimeFormatter = TimeUtil.toDateTimeFormatter("input format", inputFormat);
this.timePredicate = new TimeMillisValuePredicate(this.valueFormat, value, fnName);
}
@Override
public boolean apply(@Nullable String input) {
long timeValue = inputTimeFormatter.parseMillis(input);
return timePredicate.apply(timeValue);
}
public String getValue(){
return value;
}
public String getValueFormat(){
return this.valueFormat;
}
public String getInputFormat() {
return this.inputFormat;
}
String getFnName() {
return this.fnName;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("TimeStringValuePredicate [valueFormat=");
builder.append(valueFormat);
builder.append(", inputFormat=");
builder.append(inputFormat);
builder.append(", value=");
builder.append(value);
builder.append(", fnName=");
builder.append(fnName);
builder.append(", inputTimeFormatter=");
builder.append(inputTimeFormatter);
builder.append(", timePredicate=");
builder.append(timePredicate);
builder.append("]");
return builder.toString();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((fnName == null) ? 0 : fnName.hashCode());
result = prime * result + ((inputFormat == null) ? 0 : inputFormat.hashCode());
result = prime * result + ((value == null) ? 0 : value.hashCode());
result = prime * result + ((valueFormat == null) ? 0 : valueFormat.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;
}
TimeStringValuePredicate other = (TimeStringValuePredicate) obj;
if (fnName == null) {
if (other.fnName != null) {
return false;
}
} else if (!fnName.equals(other.fnName)) {
return false;
}
if (inputFormat == null) {
if (other.inputFormat != null) {
return false;
}
} else if (!inputFormat.equals(other.inputFormat)) {
return false;
}
if (value == null) {
if (other.value != null) {
return false;
}
} else if (!value.equals(other.value)) {
return false;
}
if (valueFormat == null) {
if (other.valueFormat != null) {
return false;
}
} else if (!valueFormat.equals(other.valueFormat)) {
return false;
}
return true;
}
}