/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * 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 org.drools.workbench.models.datamodel.oracle; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; /** * An Oracle for all things "operator" related */ public class OperatorsOracle { // The operators that are used at different times (based on type). public static final String[] STANDARD_OPERATORS = new String[]{ "==", "!=", "== null", "!= null" }; public static final String[] STANDARD_CONNECTIVES = new String[]{ "|| ==", "|| !=", "&& !=" }; public static final String[] COMPARABLE_OPERATORS = new String[]{ "==", "!=", "<", ">", "<=", ">=", "== null", "!= null" }; public static final String[] COMPARABLE_CONNECTIVES = new String[]{ "|| ==", "|| !=", "&& !=", "&& >", "&& <", "|| >", "|| <", "&& >=", "&& <=", "|| <=", "|| >=" }; public static final String[] STRING_OPERATORS = new String[]{ "==", "!=", "<", ">", "<=", ">=", "matches", "soundslike", "== null", "!= null" }; public static final String[] STRING_CONNECTIVES = new String[]{ "|| ==", "|| !=", "&& !=", "&& >", "&& <", "|| >", "|| <", "&& >=", "&& <=", "|| <=", "|| >=", "&& matches", "|| matches" }; public static final String[] COLLECTION_OPERATORS = new String[]{ "contains", "excludes", "==", "!=", "== null", "!= null" }; public static final String[] COLLECTION_CONNECTIVES = new String[]{ "|| ==", "|| !=", "&& !=", "|| contains", "&& contains", "|| excludes", "&& excludes" }; public static final String[] EXPLICIT_LIST_OPERATORS = new String[]{ "in", "not in" }; public static final String[] CONDITIONAL_ELEMENTS = new String[]{ "not", "exists", "or" }; public static final String[] SIMPLE_CEP_OPERATORS = new String[]{ "after", "before", "coincides" }; public static final String[] COMPLEX_CEP_OPERATORS = new String[]{ "during", "finishes", "finishedby", "includes", "meets", "metby", "overlaps", "overlappedby", "starts", "startedby" }; public static final String[] WINDOW_CEP_OPERATORS = new String[]{ "over window:time", "over window:length" }; public static final String[] SIMPLE_CEP_CONNECTIVES = new String[]{ "|| after", "|| before", "|| coincides", "&& after", "&& before", "&& coincides" }; public static final String[] COMPLEX_CEP_CONNECTIVES = new String[]{ "|| during", "|| finishes", "|| finishedby", "|| includes", "|| meets", "|| metby", "|| overlaps", "|| overlappedby", "|| starts", "|| startedby", "&& during", "&& finishes", "&& finishedby", "&& includes", "&& meets", "&& metby", "&& overlaps", "&& overlappedby", "&& starts", "&& startedby" }; private static final Map<String, List<Integer>> CEP_OPERATORS_PARAMETERS = new HashMap<String, List<Integer>>(); { CEP_OPERATORS_PARAMETERS.put( "after", Arrays.asList( new Integer[]{ 0, 1, 2 } ) ); CEP_OPERATORS_PARAMETERS.put( "before", Arrays.asList( new Integer[]{ 0, 1, 2 } ) ); CEP_OPERATORS_PARAMETERS.put( "coincides", Arrays.asList( new Integer[]{ 0, 1, 2 } ) ); CEP_OPERATORS_PARAMETERS.put( "during", Arrays.asList( new Integer[]{ 0, 1, 2, 4 } ) ); CEP_OPERATORS_PARAMETERS.put( "finishes", Arrays.asList( new Integer[]{ 0, 1 } ) ); CEP_OPERATORS_PARAMETERS.put( "finishedby", Arrays.asList( new Integer[]{ 0, 1 } ) ); CEP_OPERATORS_PARAMETERS.put( "includes", Arrays.asList( new Integer[]{ 0, 1, 2, 4 } ) ); CEP_OPERATORS_PARAMETERS.put( "meets", Arrays.asList( new Integer[]{ 0, 1 } ) ); CEP_OPERATORS_PARAMETERS.put( "metby", Arrays.asList( new Integer[]{ 0, 1 } ) ); CEP_OPERATORS_PARAMETERS.put( "overlaps", Arrays.asList( new Integer[]{ 0, 1, 2 } ) ); CEP_OPERATORS_PARAMETERS.put( "overlappedby", Arrays.asList( new Integer[]{ 0, 1, 2 } ) ); CEP_OPERATORS_PARAMETERS.put( "starts", Arrays.asList( new Integer[]{ 0, 1 } ) ); CEP_OPERATORS_PARAMETERS.put( "startedby", Arrays.asList( new Integer[]{ 0, 1 } ) ); } /** * Check whether an operator requires a list of values (i.e. the operator is * either "in" or "not in"). Operators requiring a list of values can only * be compared to literal values. * @param operator * @return True if the operator requires a list values */ public static boolean operatorRequiresList( final String operator ) { if ( operator == null || operator.equals( "" ) ) { return false; } for ( String explicitListOperator : EXPLICIT_LIST_OPERATORS ) { if ( operator.equals( explicitListOperator ) ) { return true; } } return false; } /** * Operator "== null" and "!= null" do not need a Value. This method wraps the logic into a single method. * @param operator The operator to check * @return true is a Value is required */ public static boolean isValueRequired( final String operator ) { if ( operator == null || operator.equals( "" ) ) { return false; } return !( operator.equals( "== null" ) || operator.equals( "!= null" ) ); } }