001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.camel.language.simple; 018 019 /** 020 * Operators supported by simple language 021 * <ul> 022 * <li>== : equlas</li> 023 * <li>> : greather than</li> 024 * <li>>= : greather than or equals</li> 025 * <li>< : less than</li> 026 * <li><= : less than or equals</li> 027 * <li>!= : not</li> 028 * <li>contains : tested for if it contains the value</li> 029 * <li>not contains : tested for if it does not contain the value</li> 030 * <li>regex : matching a regular expression</li> 031 * <li>not regex : not matching a regular expression</li> 032 * <li>in : tested for in a list of values separated by comma</li> 033 * <li>not in : tested for not in a list of values separated by comma</li> 034 * <li>is : tested for if type is an instanceof the given type</li> 035 * <li>not is: tested for not if type is an instanceof the given type</li> 036 * <li>range : tested for if it is within the provided range</li> 037 * <li>not range : tested for not if it is within the provided range</li> 038 * <li>and : and operator to combine two groups of expressions</li> 039 * <li>or : or operator to combine two groups of expressions</li> 040 * </ul> 041 * <p/> 042 * The <tt>and</tt> and <tt>or</tt> operator is special as they are used as optional operator to combine two expressions. 043 * This allows you to build combiled expressions. Currently only one and/or operator is supported, but this might change 044 * in the future. 045 * <br/> 046 * For example we can create this compound expression that has two groups that is combined with the and operator: 047 * <tt>${in.header.action} == 'login' and ${in.header.password} != null</tt> 048 * <br/> 049 */ 050 public enum SimpleLangaugeOperator { 051 052 EQ, GT, GTE, LT, LTE, NOT, CONTAINS, NOT_CONTAINS, REGEX, NOT_REGEX, 053 IN, NOT_IN, IS, NOT_IS, RANGE, NOT_RANGE, AND, OR; 054 055 public static SimpleLangaugeOperator asOperator(String text) { 056 if ("==".equals(text)) { 057 return EQ; 058 } else if (">".equals(text)) { 059 return GT; 060 } else if (">=".equals(text)) { 061 return GTE; 062 } else if ("<".equals(text)) { 063 return LT; 064 } else if ("<=".equals(text)) { 065 return LTE; 066 } else if ("!=".equals(text)) { 067 return NOT; 068 } else if ("contains".equals(text)) { 069 return CONTAINS; 070 } else if ("not contains".equals(text)) { 071 return NOT_CONTAINS; 072 } else if ("regex".equals(text)) { 073 return REGEX; 074 } else if ("not regex".equals(text)) { 075 return NOT_REGEX; 076 } else if ("in".equals(text)) { 077 return IN; 078 } else if ("not in".equals(text)) { 079 return NOT_IN; 080 } else if ("is".equals(text)) { 081 return IS; 082 } else if ("not is".equals(text)) { 083 return NOT_IS; 084 } else if ("range".equals(text)) { 085 return RANGE; 086 } else if ("not range".equals(text)) { 087 return NOT_RANGE; 088 } else if ("and".equals(text)) { 089 return AND; 090 } else if ("or".equals(text)) { 091 return OR; 092 } 093 throw new IllegalArgumentException("Operator not supported: " + text); 094 } 095 096 public String getOperatorText(SimpleLangaugeOperator operator) { 097 if (operator == EQ) { 098 return "=="; 099 } else if (operator == GT) { 100 return ">"; 101 } else if (operator == GTE) { 102 return ">="; 103 } else if (operator == LT) { 104 return "<"; 105 } else if (operator == LTE) { 106 return "<="; 107 } else if (operator == NOT) { 108 return "!="; 109 } else if (operator == CONTAINS) { 110 return "contains"; 111 } else if (operator == NOT_CONTAINS) { 112 return "not contains"; 113 } else if (operator == REGEX) { 114 return "regex"; 115 } else if (operator == NOT_REGEX) { 116 return "not regex"; 117 } else if (operator == IN) { 118 return "in"; 119 } else if (operator == NOT_IN) { 120 return "not in"; 121 } else if (operator == IS) { 122 return "is"; 123 } else if (operator == NOT_IS) { 124 return "not is"; 125 } else if (operator == RANGE) { 126 return "range"; 127 } else if (operator == NOT_RANGE) { 128 return "not range"; 129 } else if (operator == AND) { 130 return "and"; 131 } else if (operator == OR) { 132 return "or"; 133 } 134 return ""; 135 } 136 137 @Override 138 public String toString() { 139 return getOperatorText(this); 140 } 141 }