in odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/expression/FilterParserImpl.java [680:1011]
static void initAvailTables() {
Map<String, InfoBinaryOperator> lAvailableBinaryOperators = new HashMap<String, InfoBinaryOperator>();
Map<String, InfoMethod> lAvailableMethods = new HashMap<String, InfoMethod>();
Map<String, InfoUnaryOperator> lAvailableUnaryOperators = new HashMap<String, InfoUnaryOperator>();
// create type validators
ParameterSetCombination combination = null;
// create type helpers
EdmSimpleType boolean_ = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Boolean);
EdmSimpleType sbyte = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.SByte);
EdmSimpleType byte_ = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Byte);
EdmSimpleType int16 = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Int16);
EdmSimpleType int32 = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Int32);
EdmSimpleType int64 = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Int64);
EdmSimpleType single = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Single);
EdmSimpleType double_ = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Double);
EdmSimpleType decimal = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Decimal);
EdmSimpleType string = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.String);
EdmSimpleType time = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Time);
EdmSimpleType datetime = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.DateTime);
EdmSimpleType datetimeoffset = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.DateTimeOffset);
EdmSimpleType guid = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Guid);
EdmSimpleType binary = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Binary);
EdmSimpleType null_ = EdmSimpleTypeFacadeImpl.getEdmSimpleType(EdmSimpleTypeKind.Null);
// ---Member member access---
lAvailableBinaryOperators.put("/", new InfoBinaryOperator(BinaryOperator.PROPERTY_ACCESS, "Primary", 100,
new ParameterSetCombination.PSCReturnTypeEqLastParameter()));// todo fix this
// ---Multiplicative---
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(sbyte, sbyte, sbyte));
combination.add(new ParameterSet(byte_, byte_, byte_));
combination.add(new ParameterSet(int16, int16, int16));
combination.add(new ParameterSet(int32, int32, int32));
combination.add(new ParameterSet(int64, int64, int64));
combination.add(new ParameterSet(single, single, single));
combination.add(new ParameterSet(double_, double_, double_));
combination.add(new ParameterSet(decimal, decimal, decimal));
combination.add(new ParameterSet(sbyte, sbyte, null_));
combination.add(new ParameterSet(sbyte, null_, sbyte));
combination.add(new ParameterSet(byte_, byte_, null_));
combination.add(new ParameterSet(byte_, null_, byte_));
combination.add(new ParameterSet(int16, int16, null_));
combination.add(new ParameterSet(int16, null_, int16));
combination.add(new ParameterSet(int32, int32, null_));
combination.add(new ParameterSet(int32, null_, int32));
combination.add(new ParameterSet(int64, int64, null_));
combination.add(new ParameterSet(int64, null_, int64));
combination.add(new ParameterSet(single, single, null_));
combination.add(new ParameterSet(single, null_, single));
combination.add(new ParameterSet(double_, double_, null_));
combination.add(new ParameterSet(double_, null_, double_));
combination.add(new ParameterSet(decimal, decimal, null_));
combination.add(new ParameterSet(decimal, null_, decimal));
lAvailableBinaryOperators.put(BinaryOperator.MUL.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.MUL, "Multiplicative", 60, combination));
lAvailableBinaryOperators.put(BinaryOperator.DIV.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.DIV, "Multiplicative", 60, combination));
lAvailableBinaryOperators.put(BinaryOperator.MODULO.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.MODULO, "Multiplicative", 60, combination));
// ---Additive---
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(sbyte, sbyte, sbyte));
combination.add(new ParameterSet(byte_, byte_, byte_));
combination.add(new ParameterSet(int16, int16, int16));
combination.add(new ParameterSet(int32, int32, int32));
combination.add(new ParameterSet(int64, int64, int64));
combination.add(new ParameterSet(single, single, single));
combination.add(new ParameterSet(double_, double_, double_));
combination.add(new ParameterSet(decimal, decimal, decimal));
combination.add(new ParameterSet(sbyte, sbyte, null_));
combination.add(new ParameterSet(sbyte, null_, sbyte));
combination.add(new ParameterSet(byte_, byte_, null_));
combination.add(new ParameterSet(byte_, null_, byte_));
combination.add(new ParameterSet(int16, int16, null_));
combination.add(new ParameterSet(int16, null_, int16));
combination.add(new ParameterSet(int32, int32, null_));
combination.add(new ParameterSet(int32, null_, int32));
combination.add(new ParameterSet(int64, int64, null_));
combination.add(new ParameterSet(int64, null_, int64));
combination.add(new ParameterSet(single, single, null_));
combination.add(new ParameterSet(single, null_, single));
combination.add(new ParameterSet(double_, double_, null_));
combination.add(new ParameterSet(double_, null_, double_));
combination.add(new ParameterSet(decimal, decimal, null_));
combination.add(new ParameterSet(decimal, null_, decimal));
lAvailableBinaryOperators.put(BinaryOperator.ADD.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.ADD, "Additive", 50, combination));
lAvailableBinaryOperators.put(BinaryOperator.SUB.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.SUB, "Additive", 50, combination));
// ---Relational---
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(boolean_, string, string));
combination.add(new ParameterSet(boolean_, time, time));
combination.add(new ParameterSet(boolean_, datetime, datetime));
combination.add(new ParameterSet(boolean_, datetimeoffset, datetimeoffset));
combination.add(new ParameterSet(boolean_, guid, guid));
combination.add(new ParameterSet(boolean_, sbyte, sbyte));
combination.add(new ParameterSet(boolean_, byte_, byte_));
combination.add(new ParameterSet(boolean_, int16, int16));
combination.add(new ParameterSet(boolean_, int32, int32));
combination.add(new ParameterSet(boolean_, int64, int64));
combination.add(new ParameterSet(boolean_, single, single));
combination.add(new ParameterSet(boolean_, double_, double_));
combination.add(new ParameterSet(boolean_, decimal, decimal));
combination.add(new ParameterSet(boolean_, binary, binary));
combination.add(new ParameterSet(boolean_, string, null_));
combination.add(new ParameterSet(boolean_, null_, string));
combination.add(new ParameterSet(boolean_, time, null_));
combination.add(new ParameterSet(boolean_, null_, time));
combination.add(new ParameterSet(boolean_, datetime, null_));
combination.add(new ParameterSet(boolean_, null_, datetime));
combination.add(new ParameterSet(boolean_, datetimeoffset, null_));
combination.add(new ParameterSet(boolean_, null_, datetimeoffset));
combination.add(new ParameterSet(boolean_, guid, null_));
combination.add(new ParameterSet(boolean_, null_, guid));
combination.add(new ParameterSet(boolean_, sbyte, null_));
combination.add(new ParameterSet(boolean_, null_, sbyte));
combination.add(new ParameterSet(boolean_, byte_, null_));
combination.add(new ParameterSet(boolean_, null_, byte_));
combination.add(new ParameterSet(boolean_, int16, null_));
combination.add(new ParameterSet(boolean_, null_, int16));
combination.add(new ParameterSet(boolean_, int32, null_));
combination.add(new ParameterSet(boolean_, null_, int32));
combination.add(new ParameterSet(boolean_, int64, null_));
combination.add(new ParameterSet(boolean_, null_, int64));
combination.add(new ParameterSet(boolean_, single, null_));
combination.add(new ParameterSet(boolean_, null_, single));
combination.add(new ParameterSet(boolean_, double_, null_));
combination.add(new ParameterSet(boolean_, null_, double_));
combination.add(new ParameterSet(boolean_, decimal, null_));
combination.add(new ParameterSet(boolean_, null_, decimal));
combination.add(new ParameterSet(boolean_, binary, null_));
combination.add(new ParameterSet(boolean_, null_, binary));
lAvailableBinaryOperators.put(BinaryOperator.LT.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.LT, "Relational", 40, combination));
lAvailableBinaryOperators.put(BinaryOperator.GT.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.GT, "Relational", 40, combination));
lAvailableBinaryOperators.put(BinaryOperator.GE.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.GE, "Relational", 40, combination));
lAvailableBinaryOperators.put(BinaryOperator.LE.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.LE, "Relational", 40, combination));
// ---Equality---
combination.addFirst(new ParameterSet(boolean_, boolean_, boolean_));
combination.add(new ParameterSet(boolean_, boolean_, null_));
combination.add(new ParameterSet(boolean_, null_, boolean_));
lAvailableBinaryOperators.put(BinaryOperator.EQ.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.EQ, "Equality", 30, combination));
lAvailableBinaryOperators.put(BinaryOperator.NE.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.NE, "Equality", 30, combination));
// "---Conditional AND---
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(boolean_, boolean_, boolean_));
combination.add(new ParameterSet(boolean_, boolean_, null_));
combination.add(new ParameterSet(boolean_, null_, boolean_));
lAvailableBinaryOperators.put(BinaryOperator.AND.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.AND, "Conditional", 20, combination));
// ---Conditional OR---
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(boolean_, boolean_, boolean_));
combination.add(new ParameterSet(boolean_, boolean_, null_));
combination.add(new ParameterSet(boolean_, null_, boolean_));
lAvailableBinaryOperators.put(BinaryOperator.OR.toUriLiteral(),
new InfoBinaryOperator(BinaryOperator.OR, "Conditional", 10, combination));
// endswith
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(boolean_, string, string));
lAvailableMethods.put(MethodOperator.ENDSWITH.toUriLiteral(), new InfoMethod(MethodOperator.ENDSWITH, 2, 2, combination));
// indexof
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(int32, string, string));
lAvailableMethods.put(MethodOperator.INDEXOF.toUriLiteral(), new InfoMethod(MethodOperator.INDEXOF, 2, 2, combination));
// startswith
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(boolean_, string, string));
lAvailableMethods.put(MethodOperator.STARTSWITH.toUriLiteral(), new InfoMethod(MethodOperator.STARTSWITH, 2, 2, combination));
// tolower
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(string, string));
lAvailableMethods.put(MethodOperator.TOLOWER.toUriLiteral(), new InfoMethod(MethodOperator.TOLOWER, combination));
// toupper
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(string, string));
lAvailableMethods.put(MethodOperator.TOUPPER.toUriLiteral(), new InfoMethod(MethodOperator.TOUPPER, combination));
// trim
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(string, string));
lAvailableMethods.put(MethodOperator.TRIM.toUriLiteral(), new InfoMethod(MethodOperator.TRIM, combination));
// substring
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(string, string, int32));
combination.add(new ParameterSet(string, string, int32, int32));
lAvailableMethods.put(MethodOperator.SUBSTRING.toUriLiteral(), new InfoMethod(MethodOperator.SUBSTRING, 1, -1, combination));
// substringof
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(boolean_, string, string));
lAvailableMethods.put(MethodOperator.SUBSTRINGOF.toUriLiteral(), new InfoMethod(MethodOperator.SUBSTRINGOF, 1, -1, combination));
// replace
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(string, string, string, string));
lAvailableMethods.put(MethodOperator.REPLACE.toUriLiteral(), new InfoMethod(MethodOperator.REPLACE, 3, 3, combination));
// concat
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(string, string, string).setFurtherType(string));
lAvailableMethods.put(MethodOperator.CONCAT.toUriLiteral(), new InfoMethod(MethodOperator.CONCAT, 2, -1, combination));
// length
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(int32, string));
lAvailableMethods.put(MethodOperator.LENGTH.toUriLiteral(), new InfoMethod(MethodOperator.LENGTH, combination));
// year
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(int32, datetime));
lAvailableMethods.put(MethodOperator.YEAR.toUriLiteral(), new InfoMethod(MethodOperator.YEAR, combination));
// month
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(int32, datetime));
lAvailableMethods.put(MethodOperator.MONTH.toUriLiteral(), new InfoMethod(MethodOperator.MONTH, combination));
// day
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(int32, datetime));
lAvailableMethods.put(MethodOperator.DAY.toUriLiteral(), new InfoMethod(MethodOperator.DAY, combination));
// hour
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(int32, datetime));
combination.add(new ParameterSet(int32, time));
combination.add(new ParameterSet(int32, datetimeoffset));
lAvailableMethods.put(MethodOperator.HOUR.toUriLiteral(), new InfoMethod(MethodOperator.HOUR, combination));
// minute
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(int32, datetime));
combination.add(new ParameterSet(int32, time));
combination.add(new ParameterSet(int32, datetimeoffset));
lAvailableMethods.put(MethodOperator.MINUTE.toUriLiteral(), new InfoMethod(MethodOperator.MINUTE, combination));
// second
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(int32, datetime));
combination.add(new ParameterSet(int32, time));
combination.add(new ParameterSet(int32, datetimeoffset));
lAvailableMethods.put(MethodOperator.SECOND.toUriLiteral(), new InfoMethod(MethodOperator.SECOND, combination));
// round
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(decimal, decimal));
combination.add(new ParameterSet(double_, double_));
lAvailableMethods.put(MethodOperator.ROUND.toUriLiteral(), new InfoMethod(MethodOperator.ROUND, combination));
// ceiling
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(decimal, decimal));
combination.add(new ParameterSet(double_, double_));
lAvailableMethods.put(MethodOperator.CEILING.toUriLiteral(), new InfoMethod(MethodOperator.CEILING, combination));
// floor
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(decimal, decimal));
combination.add(new ParameterSet(double_, double_));
lAvailableMethods.put(MethodOperator.FLOOR.toUriLiteral(), new InfoMethod(MethodOperator.FLOOR, combination));
// ---unary---
// minus
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(sbyte, sbyte));
combination.add(new ParameterSet(byte_, byte_));
combination.add(new ParameterSet(int16, int16));
combination.add(new ParameterSet(int32, int32));
combination.add(new ParameterSet(int64, int64));
combination.add(new ParameterSet(single, single));
combination.add(new ParameterSet(double_, double_));
combination.add(new ParameterSet(decimal, decimal));
combination.add(new ParameterSet(null_, null_));
// minus
lAvailableUnaryOperators.put(UnaryOperator.MINUS.toUriLiteral(), new InfoUnaryOperator(UnaryOperator.MINUS, "minus", combination));
// not
combination = new ParameterSetCombination.PSCflex();
combination.add(new ParameterSet(boolean_, boolean_));
combination.add(new ParameterSet(null_, null_));
lAvailableUnaryOperators.put(UnaryOperator.NOT.toUriLiteral(), new InfoUnaryOperator(UnaryOperator.NOT, "not", combination));
availableBinaryOperators = Collections.unmodifiableMap(lAvailableBinaryOperators);
availableMethods = Collections.unmodifiableMap(lAvailableMethods);
availableUnaryOperators = Collections.unmodifiableMap(lAvailableUnaryOperators);
}