Search in sources :

Example 1 with DroolsError

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

the class KnowledgeBuilderImpl method addPackageFromInputStream.

void addPackageFromInputStream(final Resource resource) throws IOException, ClassNotFoundException {
    InputStream is = resource.getInputStream();
    Object object = DroolsStreamUtils.streamIn(is, this.configuration.getClassLoader());
    is.close();
    if (object instanceof Collection) {
        // KnowledgeBuilder API
        @SuppressWarnings("unchecked") Collection<KiePackage> pkgs = (Collection<KiePackage>) object;
        for (KiePackage kpkg : pkgs) {
            overrideReSource((KnowledgePackageImpl) kpkg, resource);
            addPackage((KnowledgePackageImpl) kpkg);
        }
    } else if (object instanceof KnowledgePackageImpl) {
        // KnowledgeBuilder API
        KnowledgePackageImpl kpkg = (KnowledgePackageImpl) object;
        overrideReSource(kpkg, resource);
        addPackage(kpkg);
    } else {
        results.add(new DroolsError(resource) {

            @Override
            public String getMessage() {
                return "Unknown binary format trying to load resource " + resource.toString();
            }

            @Override
            public int[] getLines() {
                return new int[0];
            }
        });
    }
}
Also used : DroolsError(org.drools.compiler.compiler.DroolsError) KiePackage(org.kie.api.definition.KiePackage) InputStream(java.io.InputStream) Collection(java.util.Collection) KnowledgePackageImpl(org.drools.core.definitions.impl.KnowledgePackageImpl)

Example 2 with DroolsError

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

the class ConditionalBranchBuilder method build.

public ConditionalBranch build(RuleBuildContext context, BaseDescr descr, Pattern prefixPattern) {
    ConditionalBranchDescr conditionalBranch = (ConditionalBranchDescr) descr;
    String consequenceName = conditionalBranch.getConsequence().getName();
    if (!context.getRuleDescr().getNamedConsequences().keySet().contains(consequenceName)) {
        DroolsError err = new RuleBuildError(context.getRule(), context.getParentDescr(), null, "Unknown consequence name: " + consequenceName);
        context.addError(err);
        return null;
    }
    RuleConditionBuilder evalBuilder = (RuleConditionBuilder) context.getDialect().getBuilder(EvalDescr.class);
    EvalCondition condition = (EvalCondition) evalBuilder.build(context, conditionalBranch.getCondition(), getLastPattern(context));
    NamedConsequenceBuilder namedConsequenceBuilder = (NamedConsequenceBuilder) context.getDialect().getBuilder(NamedConsequenceDescr.class);
    NamedConsequence consequence = namedConsequenceBuilder.build(context, conditionalBranch.getConsequence());
    ConditionalBranchDescr elseBranchDescr = conditionalBranch.getElseBranch();
    return new ConditionalBranch(condition, consequence, elseBranchDescr != null ? build(context, elseBranchDescr, prefixPattern) : null);
}
Also used : DroolsError(org.drools.compiler.compiler.DroolsError) NamedConsequenceDescr(org.drools.compiler.lang.descr.NamedConsequenceDescr) ConditionalBranchDescr(org.drools.compiler.lang.descr.ConditionalBranchDescr) RuleBuildError(org.drools.compiler.compiler.RuleBuildError) EvalDescr(org.drools.compiler.lang.descr.EvalDescr) ConditionalBranch(org.drools.core.rule.ConditionalBranch) EvalCondition(org.drools.core.rule.EvalCondition) NamedConsequence(org.drools.core.rule.NamedConsequence)

Example 3 with DroolsError

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

the class RuleBuilder method parseAnnotation.

private static void parseAnnotation(RuleBuildContext context, RuleImpl rule, RuleDescr ruleDescr, boolean enforceEager) {
    try {
        ActivationListener activationListener = ruleDescr.getTypedAnnotation(ActivationListener.class);
        if (activationListener != null) {
            rule.setActivationListener(MVELSafeHelper.getEvaluator().evalToString(activationListener.value()));
        }
        if (enforceEager) {
            rule.setEager(true);
        } else {
            Propagation propagation = ruleDescr.getTypedAnnotation(Propagation.class);
            if (propagation != null) {
                if (propagation.value() == Propagation.Type.IMMEDIATE) {
                    rule.setDataDriven(true);
                } else if (propagation.value() == Propagation.Type.EAGER) {
                    rule.setEager(true);
                }
            }
        }
        Direct direct = ruleDescr.getTypedAnnotation(Direct.class);
        if (direct != null && direct.value()) {
            rule.setActivationListener("direct");
        }
        rule.setAllMatches(ruleDescr.hasAnnotation(All.class));
    } catch (Exception e) {
        DroolsError err = new RuleBuildError(rule, context.getParentDescr(), null, e.getMessage());
        context.addError(err);
    }
}
Also used : All(org.kie.api.definition.rule.All) DroolsError(org.drools.compiler.compiler.DroolsError) Propagation(org.kie.api.definition.rule.Propagation) RuleBuildError(org.drools.compiler.compiler.RuleBuildError) ParseException(java.text.ParseException) ActivationListener(org.kie.api.definition.rule.ActivationListener) Direct(org.kie.api.definition.rule.Direct)

Example 4 with DroolsError

use of org.drools.compiler.compiler.DroolsError 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)

Example 5 with DroolsError

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

the class RuleBuilder method buildCalendars.

private static void buildCalendars(RuleImpl rule, String calendarsString, RuleBuildContext context) {
    Object val = null;
    try {
        val = MVELSafeHelper.getEvaluator().eval(calendarsString);
        String[] calNames = null;
        if (val instanceof List) {
            calNames = (String[]) ((List) val).toArray(new String[((List) val).size()]);
        } else if (val instanceof String) {
            calNames = new String[] { (String) val };
        } else {
            DroolsError err = new RuleBuildError(rule, context.getParentDescr(), null, "Calendars attribute did not return a String or String[] '" + val + "'");
            context.addError(err);
        }
        if (calNames != null) {
            rule.setCalendars(calNames);
        }
    } catch (Exception e) {
        DroolsError err = new RuleBuildError(rule, context.getParentDescr(), null, "Unable to build Calendars attribute '" + val + "'" + e.getMessage());
        context.addError(err);
    }
}
Also used : DroolsError(org.drools.compiler.compiler.DroolsError) RuleBuildError(org.drools.compiler.compiler.RuleBuildError) List(java.util.List) ParseException(java.text.ParseException)

Aggregations

DroolsError (org.drools.compiler.compiler.DroolsError)10 RuleBuildError (org.drools.compiler.compiler.RuleBuildError)5 ParseException (java.text.ParseException)4 ArrayList (java.util.ArrayList)2 List (java.util.List)2 AttributeDescr (org.drools.compiler.lang.descr.AttributeDescr)2 RuleDescr (org.drools.compiler.lang.descr.RuleDescr)2 Test (org.junit.Test)2 Resource (org.kie.api.io.Resource)2 IOException (java.io.IOException)1 InputStream (java.io.InputStream)1 Calendar (java.util.Calendar)1 Collection (java.util.Collection)1 Date (java.util.Date)1 StringTokenizer (java.util.StringTokenizer)1 ExecutionException (java.util.concurrent.ExecutionException)1 Cheese (org.drools.compiler.Cheese)1 DescrBuildError (org.drools.compiler.compiler.DescrBuildError)1 DialectCompiletimeRegistry (org.drools.compiler.compiler.DialectCompiletimeRegistry)1 DrlParser (org.drools.compiler.compiler.DrlParser)1