Search in sources :

Example 1 with RuleBuildWarning

use of org.drools.compiler.compiler.RuleBuildWarning in project drools by kiegroup.

the class RuleBuilder method buildAttributes.

public static void buildAttributes(final RuleBuildContext context) {
    final RuleImpl rule = context.getRule();
    final RuleDescr ruleDescr = context.getRuleDescr();
    boolean enforceEager = false;
    for (final AttributeDescr attributeDescr : ruleDescr.getAttributes().values()) {
        final String name = attributeDescr.getName();
        switch(name) {
            case "no-loop":
                rule.setNoLoop(getBooleanValue(attributeDescr, true));
                enforceEager = true;
                break;
            case "auto-focus":
                rule.setAutoFocus(getBooleanValue(attributeDescr, true));
                break;
            case "agenda-group":
                if (StringUtils.isEmpty(rule.getRuleFlowGroup())) {
                    // don't override if RFG has already set this
                    rule.setAgendaGroup(attributeDescr.getValue());
                } else {
                    if (rule.getRuleFlowGroup().equals(attributeDescr.getValue())) {
                        DroolsWarning warn = new RuleBuildWarning(rule, context.getParentDescr(), null, "Both an agenda-group ( " + attributeDescr.getValue() + " ) and a ruleflow-group ( " + rule.getRuleFlowGroup() + " ) are defined for rule " + rule.getName() + ". Since version 6.x the " + "two concepts have been unified, the ruleflow-group name will override the agenda-group. ");
                        context.addWarning(warn);
                    }
                }
                break;
            case "activation-group":
                rule.setActivationGroup(attributeDescr.getValue());
                break;
            case "ruleflow-group":
                rule.setRuleFlowGroup(attributeDescr.getValue());
                if (!rule.getAgendaGroup().equals(AgendaGroup.MAIN) && !rule.getAgendaGroup().equals(attributeDescr.getValue())) {
                    DroolsWarning warn = new RuleBuildWarning(rule, context.getParentDescr(), null, "Both an agenda-group ( " + attributeDescr.getValue() + " ) and a ruleflow-group ( " + rule.getRuleFlowGroup() + " ) are defined for rule " + rule.getName() + ". Since version 6.x the " + "two concepts have been unified, the ruleflow-group name will override the agenda-group. ");
                    context.addWarning(warn);
                }
                // assign AG to the same name as RFG, as they are aliased to AGs anyway
                rule.setAgendaGroup(attributeDescr.getValue());
                break;
            case "lock-on-active":
                boolean lockOnActive = getBooleanValue(attributeDescr, true);
                rule.setLockOnActive(lockOnActive);
                enforceEager |= lockOnActive;
                break;
            case DroolsSoftKeywords.DURATION:
            case DroolsSoftKeywords.TIMER:
                String duration = attributeDescr.getValue();
                buildTimer(rule, duration, context);
                break;
            case "calendars":
                buildCalendars(rule, attributeDescr.getValue(), context);
                break;
            case "date-effective":
                try {
                    Date date = DateUtils.parseDate(attributeDescr.getValue());
                    final Calendar cal = Calendar.getInstance();
                    cal.setTime(date);
                    rule.setDateEffective(cal);
                } catch (Exception e) {
                    DroolsError err = new RuleBuildError(rule, context.getParentDescr(), null, "Wrong date-effective value: " + e.getMessage());
                    context.addError(err);
                }
                break;
            case "date-expires":
                try {
                    Date date = DateUtils.parseDate(attributeDescr.getValue());
                    final Calendar cal = Calendar.getInstance();
                    cal.setTime(date);
                    rule.setDateExpires(cal);
                } catch (Exception e) {
                    DroolsError err = new RuleBuildError(rule, context.getParentDescr(), null, "Wrong date-expires value: " + e.getMessage());
                    context.addError(err);
                }
                break;
        }
    }
    buildSalience(context);
    buildEnabled(context);
    parseAnnotation(context, rule, ruleDescr, enforceEager);
}
Also used : DroolsError(org.drools.compiler.compiler.DroolsError) Calendar(java.util.Calendar) RuleBuildError(org.drools.compiler.compiler.RuleBuildError) RuleDescr(org.drools.compiler.lang.descr.RuleDescr) DroolsWarning(org.drools.compiler.compiler.DroolsWarning) RuleImpl(org.drools.core.definitions.rule.impl.RuleImpl) RuleBuildWarning(org.drools.compiler.compiler.RuleBuildWarning) AttributeDescr(org.drools.compiler.lang.descr.AttributeDescr) Date(java.util.Date) ParseException(java.text.ParseException)

Aggregations

ParseException (java.text.ParseException)1 Calendar (java.util.Calendar)1 Date (java.util.Date)1 DroolsError (org.drools.compiler.compiler.DroolsError)1 DroolsWarning (org.drools.compiler.compiler.DroolsWarning)1 RuleBuildError (org.drools.compiler.compiler.RuleBuildError)1 RuleBuildWarning (org.drools.compiler.compiler.RuleBuildWarning)1 AttributeDescr (org.drools.compiler.lang.descr.AttributeDescr)1 RuleDescr (org.drools.compiler.lang.descr.RuleDescr)1 RuleImpl (org.drools.core.definitions.rule.impl.RuleImpl)1