package org.drools.chance.rule.builder; import org.drools.base.evaluators.Operator; import java.util.Arrays; public class ChanceOperators { public static final String IMPERFECT_MARKER = "~"; public static final Operator EQUAL_IMP = Operator.addOperatorToRegistry( makeImperfect( "==" ), false ); public static final Operator NOT_EQUAL_IMP = Operator.addOperatorToRegistry( makeImperfect( "!=" ), false ); public static final Operator LESS_IMP = Operator.addOperatorToRegistry( makeImperfect( "<" ), false ); public static final Operator LESS_OR_EQUAL_IMP = Operator.addOperatorToRegistry( makeImperfect( "<=" ), false ); public static final Operator GREATER_IMP = Operator.addOperatorToRegistry( makeImperfect( ">" ), false ); public static final Operator GREATER_OR_EQUAL_IMP = Operator.addOperatorToRegistry( makeImperfect( ">=" ), false ); public static final String[] standard_imperfectOperators; static { standard_imperfectOperators = new String[] { ChanceOperators.EQUAL_IMP.getOperatorString(), ChanceOperators.LESS_IMP.getOperatorString(), ChanceOperators.GREATER_IMP.getOperatorString(), ChanceOperators.GREATER_OR_EQUAL_IMP.getOperatorString(), ChanceOperators.LESS_OR_EQUAL_IMP.getOperatorString(), ChanceOperators.NOT_EQUAL_IMP.getOperatorString() }; Arrays.sort( standard_imperfectOperators ); } public static boolean lookup( String imperfectOperator ) { return Arrays.binarySearch( standard_imperfectOperators, imperfectOperator ) >= 0; } public static Operator getOperator( String imperfectOperator ) { if ( ChanceOperators.EQUAL_IMP.getOperatorString().equals( imperfectOperator ) ) { return EQUAL_IMP; } if ( ChanceOperators.NOT_EQUAL_IMP.getOperatorString().equals( imperfectOperator ) ) { return NOT_EQUAL_IMP; } if ( ChanceOperators.LESS_IMP.getOperatorString().equals( imperfectOperator ) ) { return LESS_IMP; } if ( ChanceOperators.GREATER_IMP.getOperatorString().equals( imperfectOperator ) ) { return GREATER_IMP; } if ( ChanceOperators.GREATER_OR_EQUAL_IMP.getOperatorString().equals( imperfectOperator ) ) { return GREATER_OR_EQUAL_IMP; } if ( ChanceOperators.LESS_OR_EQUAL_IMP.getOperatorString().equals( imperfectOperator ) ) { return LESS_OR_EQUAL_IMP; } return null; } public static boolean isImperfect( String op ) { return op.startsWith( ChanceOperators.IMPERFECT_MARKER ); } public static boolean isImperfect( Operator op ) { return op.getOperatorString().startsWith(ChanceOperators.IMPERFECT_MARKER); } public static String makeImperfect( String operatorString ) { return IMPERFECT_MARKER + operatorString; } public static String makePerfect(String operator) { return operator.replace( ChanceOperators.IMPERFECT_MARKER, "" ); } public static String renameBasic( String alias ) { if ( alias.contains( makePerfect( EQUAL_IMP.getOperatorString() ) ) ) { return alias.replace( makePerfect( EQUAL_IMP.getOperatorString() ), "equals_i" ); } if ( alias.contains( makePerfect( NOT_EQUAL_IMP.getOperatorString() ) ) ) { return alias.replace( makePerfect( NOT_EQUAL_IMP.getOperatorString() ), "diff_i" ); } if ( alias.contains( makePerfect( GREATER_OR_EQUAL_IMP.getOperatorString() ) ) ) { return alias.replace( makePerfect( GREATER_OR_EQUAL_IMP.getOperatorString() ), "geq_i" ); } if ( alias.contains( makePerfect( LESS_OR_EQUAL_IMP.getOperatorString() ) ) ) { return alias.replace( makePerfect( LESS_OR_EQUAL_IMP.getOperatorString() ), "leq_i" ); } if ( alias.contains( makePerfect( GREATER_IMP.getOperatorString() ) ) ) { return alias.replace( makePerfect( GREATER_IMP.getOperatorString() ), "greater_i" ); } if ( alias.contains( makePerfect( LESS_IMP.getOperatorString() ) ) ) { return alias.replace( makePerfect( LESS_IMP.getOperatorString() ), "less_i" ); } return null; } }