/**
* 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 org.apache.camel.language.simple.types;
/**
* Types of binary operators supported
*/
public enum BinaryOperatorType {
EQ, EQ_IGNORE, GT, GTE, LT, LTE, NOT_EQ, CONTAINS, NOT_CONTAINS, REGEX, NOT_REGEX,
IN, NOT_IN, IS, NOT_IS, RANGE, NOT_RANGE, STARTS_WITH, ENDS_WITH;
public static BinaryOperatorType asOperator(String text) {
if ("==".equals(text)) {
return EQ;
} else if ("=~".equals(text)) {
return EQ_IGNORE;
} else if (">".equals(text)) {
return GT;
} else if (">=".equals(text)) {
return GTE;
} else if ("<".equals(text)) {
return LT;
} else if ("<=".equals(text)) {
return LTE;
} else if ("!=".equals(text)) {
return NOT_EQ;
} else if ("contains".equals(text)) {
return CONTAINS;
} else if ("not contains".equals(text)) {
return NOT_CONTAINS;
} else if ("regex".equals(text)) {
return REGEX;
} else if ("not regex".equals(text)) {
return NOT_REGEX;
} else if ("in".equals(text)) {
return IN;
} else if ("not in".equals(text)) {
return NOT_IN;
} else if ("is".equals(text)) {
return IS;
} else if ("not is".equals(text)) {
return NOT_IS;
} else if ("range".equals(text)) {
return RANGE;
} else if ("not range".equals(text)) {
return NOT_RANGE;
} else if ("starts with".equals(text)) {
return STARTS_WITH;
} else if ("ends with".equals(text)) {
return ENDS_WITH;
}
throw new IllegalArgumentException("Operator not supported: " + text);
}
public static String getOperatorText(BinaryOperatorType operator) {
if (operator == EQ) {
return "==";
} else if (operator == EQ_IGNORE) {
return "=~";
} else if (operator == GT) {
return ">";
} else if (operator == GTE) {
return ">=";
} else if (operator == LT) {
return "<";
} else if (operator == LTE) {
return "<=";
} else if (operator == NOT_EQ) {
return "!=";
} else if (operator == CONTAINS) {
return "contains";
} else if (operator == NOT_CONTAINS) {
return "not contains";
} else if (operator == REGEX) {
return "regex";
} else if (operator == NOT_REGEX) {
return "not regex";
} else if (operator == IN) {
return "in";
} else if (operator == NOT_IN) {
return "not in";
} else if (operator == IS) {
return "is";
} else if (operator == NOT_IS) {
return "not is";
} else if (operator == RANGE) {
return "range";
} else if (operator == NOT_RANGE) {
return "not range";
} else if (operator == STARTS_WITH) {
return "starts with";
} else if (operator == ENDS_WITH) {
return "ends with";
}
return "";
}
/**
* Parameter types a binary operator supports on the right hand side.
* <ul>
* <li>Literal - Only literals enclosed by single quotes</li>
* <li>LiteralWithFunction - literals which may have embedded functions enclosed by single quotes</li>
* <li>Function - A function</li>
* <li>NumericValue - A numeric value</li>
* <li>BooleanValue - A boolean value</li>
* <li>NullValue - A null value</li>
* </ul>
*/
public enum ParameterType {
Literal, LiteralWithFunction, Function, NumericValue, BooleanValue, NullValue;
public boolean isLiteralSupported() {
return this == Literal;
}
public boolean isLiteralWithFunctionSupport() {
return this == LiteralWithFunction;
}
public boolean isFunctionSupport() {
return this == Function;
}
public boolean isNumericValueSupported() {
return this == NumericValue;
}
public boolean isBooleanValueSupported() {
return this == BooleanValue;
}
public boolean isNullValueSupported() {
return this == NullValue;
}
}
/**
* Returns the types of right hand side parameters this operator supports.
*
* @param operator the operator
* @return <tt>null</tt> if accepting all types, otherwise the array of accepted types
*/
public static ParameterType[] supportedParameterTypes(BinaryOperatorType operator) {
if (operator == EQ) {
return null;
} else if (operator == EQ_IGNORE) {
return null;
} else if (operator == GT) {
return null;
} else if (operator == GTE) {
return null;
} else if (operator == LT) {
return null;
} else if (operator == LTE) {
return null;
} else if (operator == NOT_EQ) {
return null;
} else if (operator == CONTAINS) {
return null;
} else if (operator == NOT_CONTAINS) {
return null;
} else if (operator == REGEX) {
return new ParameterType[]{ParameterType.Literal, ParameterType.Function};
} else if (operator == NOT_REGEX) {
return new ParameterType[]{ParameterType.Literal, ParameterType.Function};
} else if (operator == IN) {
return null;
} else if (operator == NOT_IN) {
return null;
} else if (operator == IS) {
return new ParameterType[]{ParameterType.LiteralWithFunction, ParameterType.Function};
} else if (operator == NOT_IS) {
return new ParameterType[]{ParameterType.LiteralWithFunction, ParameterType.Function};
} else if (operator == RANGE) {
return new ParameterType[]{ParameterType.LiteralWithFunction, ParameterType.Function};
} else if (operator == NOT_RANGE) {
return new ParameterType[]{ParameterType.LiteralWithFunction, ParameterType.Function};
} else if (operator == STARTS_WITH) {
return null;
} else if (operator == ENDS_WITH) {
return null;
}
return null;
}
@Override
public String toString() {
return getOperatorText(this);
}
}