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];
}
});
}
}
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);
}
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);
}
}
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);
}
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);
}
}
Aggregations