@Override
    public void configureConstraintWeight(Rule rule, HardMediumSoftBigDecimalScore constraintWeight) {
        super.configureConstraintWeight(rule, constraintWeight);
        BiConsumer<RuleContext, BigDecimal> matchExecutor;
        if (constraintWeight.equals(HardMediumSoftBigDecimalScore.ZERO)) {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight) -> {};
        } else if (constraintWeight.getMediumScore().equals(BigDecimal.ZERO) && constraintWeight.getSoftScore().equals(BigDecimal.ZERO)) {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight)
                    -> addHardConstraintMatch(kcontext, constraintWeight.getHardScore().multiply(matchWeight));
        } else if (constraintWeight.getHardScore().equals(BigDecimal.ZERO) && constraintWeight.getSoftScore().equals(BigDecimal.ZERO)) {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight)
                    -> addMediumConstraintMatch(kcontext, constraintWeight.getMediumScore().multiply(matchWeight));
        } else if (constraintWeight.getHardScore().equals(BigDecimal.ZERO) && constraintWeight.getMediumScore().equals(BigDecimal.ZERO)) {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight)
                    -> addSoftConstraintMatch(kcontext, constraintWeight.getSoftScore().multiply(matchWeight));
        } else {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight)
                    -> addMultiConstraintMatch(kcontext,
                    constraintWeight.getHardScore().multiply(matchWeight),
                    constraintWeight.getMediumScore().multiply(matchWeight),
                    constraintWeight.getSoftScore().multiply(matchWeight));
        }
        matchExecutorByNumberMap.put(rule, matchExecutor);
        matchExecutorByScoreMap.put(rule, (RuleContext kcontext,
                HardMediumSoftBigDecimalScore weightMultiplier) -> addMultiConstraintMatch(kcontext,
                constraintWeight.getHardScore().multiply(weightMultiplier.getHardScore()),
                constraintWeight.getMediumScore().multiply(weightMultiplier.getMediumScore()),
                constraintWeight.getSoftScore().multiply(weightMultiplier.getSoftScore())));
    }
@Override
    public void configureConstraintWeight(Rule rule, HardMediumSoftBigDecimalScore constraintWeight) {
        super.configureConstraintWeight(rule, constraintWeight);
        BiConsumer<RuleContext, BigDecimal> matchExecutor;
        if (constraintWeight.equals(HardMediumSoftBigDecimalScore.ZERO)) {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight) -> {};
        } else if (constraintWeight.getMediumScore().equals(BigDecimal.ZERO) && constraintWeight.getSoftScore().equals(BigDecimal.ZERO)) {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight)
                    -> addHardConstraintMatch(kcontext, constraintWeight.getHardScore().multiply(matchWeight));
        } else if (constraintWeight.getHardScore().equals(BigDecimal.ZERO) && constraintWeight.getSoftScore().equals(BigDecimal.ZERO)) {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight)
                    -> addMediumConstraintMatch(kcontext, constraintWeight.getMediumScore().multiply(matchWeight));
        } else if (constraintWeight.getHardScore().equals(BigDecimal.ZERO) && constraintWeight.getMediumScore().equals(BigDecimal.ZERO)) {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight)
                    -> addSoftConstraintMatch(kcontext, constraintWeight.getSoftScore().multiply(matchWeight));
        } else {
            matchExecutor = (RuleContext kcontext, BigDecimal matchWeight)
                    -> addMultiConstraintMatch(kcontext,
                    constraintWeight.getHardScore().multiply(matchWeight),
                    constraintWeight.getMediumScore().multiply(matchWeight),
                    constraintWeight.getSoftScore().multiply(matchWeight));
        }
        matchExecutorByNumberMap.put(rule, matchExecutor);
        matchExecutorByScoreMap.put(rule, (RuleContext kcontext,
                HardMediumSoftBigDecimalScore weightMultiplier) -> addMultiConstraintMatch(kcontext,
                constraintWeight.getHardScore().multiply(weightMultiplier.getHardScore()),
                constraintWeight.getMediumScore().multiply(weightMultiplier.getMediumScore()),
                constraintWeight.getSoftScore().multiply(weightMultiplier.getSoftScore())));
    }
@ Override public void configureConstraintWeight ( Rule rule , HardMediumSoftBigDecimalScore constraintWeight ) { super . configureConstraintWeight ( rule , constraintWeight ) ; BiConsumer < RuleContext , BigDecimal > matchExecutor ; if ( constraintWeight . equals ( HardMediumSoftBigDecimalScore . ZERO ) ) { matchExecutor = ( RuleContext kcontext , BigDecimal matchWeight ) -> { } ; } else if ( constraintWeight . getMediumScore ( ) . equals ( BigDecimal . ZERO ) && constraintWeight . getSoftScore ( ) . equals ( BigDecimal . ZERO ) ) { matchExecutor = ( RuleContext kcontext , BigDecimal matchWeight ) -> addHardConstraintMatch ( kcontext , constraintWeight . getHardScore ( ) . multiply ( matchWeight ) ) ; } else if ( constraintWeight . getHardScore ( ) . equals ( BigDecimal . ZERO ) && constraintWeight . getSoftScore ( ) . equals ( BigDecimal . ZERO ) ) { matchExecutor = ( RuleContext kcontext , BigDecimal matchWeight ) -> addMediumConstraintMatch ( kcontext , constraintWeight . getMediumScore ( ) . multiply ( matchWeight ) ) ; } else if ( constraintWeight . getHardScore ( ) . equals ( BigDecimal . ZERO ) && constraintWeight . getMediumScore ( ) . equals ( BigDecimal . ZERO ) ) { matchExecutor = ( RuleContext kcontext , BigDecimal matchWeight ) -> addSoftConstraintMatch ( kcontext , constraintWeight . getSoftScore ( ) . multiply ( matchWeight ) ) ; } else { matchExecutor = ( RuleContext kcontext , BigDecimal matchWeight ) -> addMultiConstraintMatch ( kcontext , constraintWeight . getHardScore ( ) . multiply ( matchWeight ) , constraintWeight . getMediumScore ( ) . multiply ( matchWeight ) , constraintWeight . getSoftScore ( ) . multiply ( matchWeight ) ) ; } matchExecutorByNumberMap . put ( rule , matchExecutor ) ; matchExecutorByScoreMap . put ( rule , ( RuleContext kcontext , HardMediumSoftBigDecimalScore weightMultiplier ) -> addMultiConstraintMatch ( kcontext , constraintWeight . getHardScore ( ) . multiply ( weightMultiplier . getHardScore ( ) ) , constraintWeight . getMediumScore ( ) . multiply ( weightMultiplier . getMediumScore ( ) ) , constraintWeight . getSoftScore ( ) . multiply ( weightMultiplier . getSoftScore ( ) ) ) ) ; }
************************************************************************
************************************************************************