static void initAvailTables()

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);
    }