/**
* Copyright (C) 2014-2016 LinkedIn Corp. (pinot-core@linkedin.com)
*
* 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.linkedin.pinot.core.common.predicate;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import com.linkedin.pinot.core.common.Predicate;
public class RangePredicate extends Predicate {
public static final String DELIMITER = "\t\t";
public static final String LOWER_INCLUSIVE = "[";
public static final String LOWER_EXCLUSIVE = "(";
public static final String UPPER_INCLUSIVE = "]";
public static final String UPPER_EXCLUSIVE = ")";
public static final String UNBOUNDED = "*";
private final boolean incLower;
private final boolean incUpper;
private final String lowerBoundary;
private final String upperBoundary;
public RangePredicate(String lhs, List<String> rhs) {
super(lhs, Type.RANGE, rhs);
final String rangeString = rhs.get(0).trim();
lowerBoundary = rangeString.split(DELIMITER)[0].substring(1, rangeString.split(DELIMITER)[0].length());
upperBoundary = rangeString.split(DELIMITER)[1].substring(0, rangeString.split(DELIMITER)[1].length() - 1);
if (rangeString.trim().startsWith(LOWER_EXCLUSIVE)) {
if (lowerBoundary.equals(UNBOUNDED)) {
incLower = true;
} else {
incLower = false;
}
} else {
incLower = true;
}
if (rangeString.trim().endsWith(UPPER_EXCLUSIVE)) {
if (upperBoundary.equals(UNBOUNDED)) {
incUpper = true;
} else {
incUpper = false;
}
} else {
incUpper = true;
}
}
@Override
public String toString() {
return "Predicate: type: " + getType() + ", left : " + getLhs() + ", right : "
+ Arrays.toString(getRhs().toArray(new String[0])) + "\n";
}
public boolean includeLowerBoundary() {
return incLower;
}
public boolean includeUpperBoundary() {
return incUpper;
}
public String getLowerBoundary() {
return lowerBoundary;
}
public String getUpperBoundary() {
return upperBoundary;
}
}