Search in sources :

Example 11 with OrDescr

use of org.drools.compiler.lang.descr.OrDescr in project drools by kiegroup.

the class KnowledgeBuilderTest method testOr.

@Test
public void testOr() throws Exception {
    final KnowledgeBuilderImpl builder = new KnowledgeBuilderImpl();
    final RuleImpl rule = createRule(new OrDescr(), builder, "update(stilton);");
    assertLength(0, builder.getErrors().getErrors());
    final GroupElement lhs = rule.getLhs();
    assertLength(1, lhs.getChildren());
    final GroupElement or = (GroupElement) lhs.getChildren().get(0);
    assertLength(1, or.getChildren());
    final Pattern pattern = (Pattern) or.getChildren().get(0);
}
Also used : Pattern(org.drools.core.rule.Pattern) GroupElement(org.drools.core.rule.GroupElement) RuleImpl(org.drools.core.definitions.rule.impl.RuleImpl) OrDescr(org.drools.compiler.lang.descr.OrDescr) CompositeObjectSinkAdapterTest(org.drools.core.reteoo.CompositeObjectSinkAdapterTest) Test(org.junit.Test)

Example 12 with OrDescr

use of org.drools.compiler.lang.descr.OrDescr in project drools by kiegroup.

the class RuleModelDRLPersistenceImpl method parseExistentialElementDescr.

private CompositeFactPattern parseExistentialElementDescr(final RuleModel m, final ConditionalElementDescr conditionalDescr, final boolean isJavaDialect, final Map<String, String> boundParams, final PackageDataModelOracle dmo) {
    CompositeFactPattern comp;
    if (conditionalDescr instanceof NotDescr) {
        comp = new CompositeFactPattern(CompositeFactPattern.COMPOSITE_TYPE_NOT);
    } else if (conditionalDescr instanceof OrDescr) {
        comp = new CompositeFactPattern(CompositeFactPattern.COMPOSITE_TYPE_OR);
    } else if (conditionalDescr instanceof ExistsDescr) {
        comp = new CompositeFactPattern(CompositeFactPattern.COMPOSITE_TYPE_EXISTS);
    } else {
        throw new IllegalArgumentException("Unknown conditional descr type: " + conditionalDescr);
    }
    addPatternToComposite(m, conditionalDescr, comp, isJavaDialect, boundParams, dmo);
    IFactPattern[] patterns = comp.getPatterns();
    return patterns != null && patterns.length > 0 ? comp : null;
}
Also used : NotDescr(org.drools.compiler.lang.descr.NotDescr) ExistsDescr(org.drools.compiler.lang.descr.ExistsDescr) CompositeFactPattern(org.drools.workbench.models.datamodel.rule.CompositeFactPattern) FromCollectCompositeFactPattern(org.drools.workbench.models.datamodel.rule.FromCollectCompositeFactPattern) FromAccumulateCompositeFactPattern(org.drools.workbench.models.datamodel.rule.FromAccumulateCompositeFactPattern) FromCompositeFactPattern(org.drools.workbench.models.datamodel.rule.FromCompositeFactPattern) OrDescr(org.drools.compiler.lang.descr.OrDescr) IFactPattern(org.drools.workbench.models.datamodel.rule.IFactPattern)

Example 13 with OrDescr

use of org.drools.compiler.lang.descr.OrDescr in project drools by kiegroup.

the class OrHandler method end.

public Object end(final String uri, final String localName, final ExtensibleXmlParser parser) throws SAXException {
    final Element element = parser.endElementBuilder();
    final OrDescr orDescr = (OrDescr) parser.getCurrent();
    final Object parent = parser.getParent();
    if (!orDescr.getDescrs().isEmpty()) {
        if (parent instanceof RuleDescr || parent instanceof QueryDescr) {
            final RuleDescr ruleDescr = (RuleDescr) parent;
            ruleDescr.getLhs().addDescr(orDescr);
        } else if (parent instanceof MultiPatternDestinationDescr) {
            final MultiPatternDestinationDescr mpDescr = (MultiPatternDestinationDescr) parent;
            mpDescr.setInput(orDescr);
        } else if (parent instanceof ConditionalElementDescr) {
            final ConditionalElementDescr ceDescr = (ConditionalElementDescr) parent;
            ceDescr.addDescr(orDescr);
        }
    }
    return orDescr;
}
Also used : QueryDescr(org.drools.compiler.lang.descr.QueryDescr) MultiPatternDestinationDescr(org.drools.compiler.lang.descr.MultiPatternDestinationDescr) Element(org.w3c.dom.Element) RuleDescr(org.drools.compiler.lang.descr.RuleDescr) OrDescr(org.drools.compiler.lang.descr.OrDescr) ConditionalElementDescr(org.drools.compiler.lang.descr.ConditionalElementDescr)

Example 14 with OrDescr

use of org.drools.compiler.lang.descr.OrDescr in project drools by kiegroup.

the class OrHandler method start.

public Object start(final String uri, final String localName, final Attributes attrs, final ExtensibleXmlParser parser) throws SAXException {
    parser.startElementBuilder(localName, attrs);
    final OrDescr orDescr = new OrDescr();
    return orDescr;
}
Also used : OrDescr(org.drools.compiler.lang.descr.OrDescr)

Example 15 with OrDescr

use of org.drools.compiler.lang.descr.OrDescr in project drools by kiegroup.

the class DRL6StrictParser method lhsPatternBind.

/**
 * lhsPatternBind := label?
 *                ( LEFT_PAREN lhsPattern (OR lhsPattern)* RIGHT_PAREN
 *                | lhsPattern )
 *
 * @param ce
 * @return
 * @throws org.antlr.runtime.RecognitionException
 */
@SuppressWarnings("unchecked")
private BaseDescr lhsPatternBind(PatternContainerDescrBuilder<?, ?> ce, final boolean allowOr) throws RecognitionException {
    PatternDescrBuilder<?> pattern = null;
    CEDescrBuilder<?, OrDescr> or = null;
    BaseDescr result = null;
    Token first = input.LT(1);
    pattern = helper.start((DescrBuilder<?, ?>) ce, PatternDescrBuilder.class, null);
    if (pattern != null) {
        result = pattern.getDescr();
    }
    String label = null;
    boolean isUnification = false;
    if (input.LA(1) == DRL6Lexer.ID && input.LA(2) == DRL6Lexer.COLON && !helper.validateCEKeyword(1)) {
        label = label(DroolsEditorType.IDENTIFIER_PATTERN);
        if (state.failed)
            return null;
    } else if (input.LA(1) == DRL6Lexer.ID && input.LA(2) == DRL6Lexer.UNIFY && !helper.validateCEKeyword(1)) {
        label = unif(DroolsEditorType.IDENTIFIER_PATTERN);
        if (state.failed)
            return null;
        isUnification = true;
    }
    if (input.LA(1) == DRL6Lexer.LEFT_PAREN) {
        try {
            match(input, DRL6Lexer.LEFT_PAREN, null, null, DroolsEditorType.SYMBOL);
            if (state.failed)
                return null;
            if (helper.validateCEKeyword(1)) {
                failMismatchedTokenException();
                // in case it is backtracking
                return null;
            }
            lhsPattern(pattern, label, isUnification);
            if (state.failed)
                return null;
            if (allowOr && helper.validateIdentifierKey(DroolsSoftKeywords.OR) && ce instanceof CEDescrBuilder) {
                if (state.backtracking == 0) {
                    // this is necessary because of the crappy bind with multi-pattern OR syntax
                    or = ((CEDescrBuilder<DescrBuilder<?, ?>, OrDescr>) ce).or();
                    result = or.getDescr();
                    helper.end(PatternDescrBuilder.class, pattern);
                    helper.start(or, CEDescrBuilder.class, null);
                    // adjust real or starting token:
                    helper.setStart(or, first);
                    // remove original pattern from the parent CE child list:
                    ((ConditionalElementDescr) ce.getDescr()).getDescrs().remove(pattern.getDescr());
                    // add pattern to the OR instead
                    or.getDescr().addDescr(pattern.getDescr());
                }
                while (helper.validateIdentifierKey(DroolsSoftKeywords.OR)) {
                    match(input, DRL6Lexer.ID, DroolsSoftKeywords.OR, null, DroolsEditorType.KEYWORD);
                    if (state.failed)
                        return null;
                    pattern = helper.start(or, PatternDescrBuilder.class, null);
                    // new pattern, same binding
                    lhsPattern(pattern, label, isUnification);
                    if (state.failed)
                        return null;
                    helper.end(PatternDescrBuilder.class, pattern);
                }
            }
            match(input, DRL6Lexer.RIGHT_PAREN, null, null, DroolsEditorType.SYMBOL);
            if (state.failed)
                return null;
        } finally {
            if (or != null) {
                helper.end(CEDescrBuilder.class, or);
            } else {
                helper.end(PatternDescrBuilder.class, pattern);
            }
        }
    } else {
        try {
            lhsPattern(pattern, label, isUnification);
            if (state.failed)
                return null;
        } finally {
            helper.end(PatternDescrBuilder.class, pattern);
        }
    }
    return result;
}
Also used : CEDescrBuilder(org.drools.compiler.lang.api.CEDescrBuilder) PatternDescrBuilder(org.drools.compiler.lang.api.PatternDescrBuilder) BaseDescr(org.drools.compiler.lang.descr.BaseDescr) AnnotatedBaseDescr(org.drools.compiler.lang.descr.AnnotatedBaseDescr) Token(org.antlr.runtime.Token) CommonToken(org.antlr.runtime.CommonToken) DescrBuilder(org.drools.compiler.lang.api.DescrBuilder) AccumulateImportDescrBuilder(org.drools.compiler.lang.api.AccumulateImportDescrBuilder) AccumulateDescrBuilder(org.drools.compiler.lang.api.AccumulateDescrBuilder) EnumDeclarationDescrBuilder(org.drools.compiler.lang.api.EnumDeclarationDescrBuilder) PatternContainerDescrBuilder(org.drools.compiler.lang.api.PatternContainerDescrBuilder) WindowDeclarationDescrBuilder(org.drools.compiler.lang.api.WindowDeclarationDescrBuilder) ForallDescrBuilder(org.drools.compiler.lang.api.ForallDescrBuilder) TypeDeclarationDescrBuilder(org.drools.compiler.lang.api.TypeDeclarationDescrBuilder) PackageDescrBuilder(org.drools.compiler.lang.api.PackageDescrBuilder) CEDescrBuilder(org.drools.compiler.lang.api.CEDescrBuilder) DeclareDescrBuilder(org.drools.compiler.lang.api.DeclareDescrBuilder) FunctionDescrBuilder(org.drools.compiler.lang.api.FunctionDescrBuilder) RuleDescrBuilder(org.drools.compiler.lang.api.RuleDescrBuilder) EntryPointDeclarationDescrBuilder(org.drools.compiler.lang.api.EntryPointDeclarationDescrBuilder) EnumLiteralDescrBuilder(org.drools.compiler.lang.api.EnumLiteralDescrBuilder) QueryDescrBuilder(org.drools.compiler.lang.api.QueryDescrBuilder) AnnotatedDescrBuilder(org.drools.compiler.lang.api.AnnotatedDescrBuilder) PatternDescrBuilder(org.drools.compiler.lang.api.PatternDescrBuilder) AnnotationDescrBuilder(org.drools.compiler.lang.api.AnnotationDescrBuilder) ImportDescrBuilder(org.drools.compiler.lang.api.ImportDescrBuilder) CollectDescrBuilder(org.drools.compiler.lang.api.CollectDescrBuilder) AttributeDescrBuilder(org.drools.compiler.lang.api.AttributeDescrBuilder) EvalDescrBuilder(org.drools.compiler.lang.api.EvalDescrBuilder) ConditionalBranchDescrBuilder(org.drools.compiler.lang.api.ConditionalBranchDescrBuilder) UnitDescrBuilder(org.drools.compiler.lang.api.UnitDescrBuilder) NamedConsequenceDescrBuilder(org.drools.compiler.lang.api.NamedConsequenceDescrBuilder) FieldDescrBuilder(org.drools.compiler.lang.api.FieldDescrBuilder) BehaviorDescrBuilder(org.drools.compiler.lang.api.BehaviorDescrBuilder) GlobalDescrBuilder(org.drools.compiler.lang.api.GlobalDescrBuilder) OrDescr(org.drools.compiler.lang.descr.OrDescr)

Aggregations

OrDescr (org.drools.compiler.lang.descr.OrDescr)24 RuleDescr (org.drools.compiler.lang.descr.RuleDescr)14 Test (org.junit.Test)14 PatternDescr (org.drools.compiler.lang.descr.PatternDescr)11 PackageDescr (org.drools.compiler.lang.descr.PackageDescr)10 AndDescr (org.drools.compiler.lang.descr.AndDescr)8 BaseDescr (org.drools.compiler.lang.descr.BaseDescr)7 ConditionalElementDescr (org.drools.compiler.lang.descr.ConditionalElementDescr)5 NotDescr (org.drools.compiler.lang.descr.NotDescr)4 CommonToken (org.antlr.runtime.CommonToken)3 Token (org.antlr.runtime.Token)3 AccumulateDescrBuilder (org.drools.compiler.lang.api.AccumulateDescrBuilder)3 AnnotatedDescrBuilder (org.drools.compiler.lang.api.AnnotatedDescrBuilder)3 AnnotationDescrBuilder (org.drools.compiler.lang.api.AnnotationDescrBuilder)3 AttributeDescrBuilder (org.drools.compiler.lang.api.AttributeDescrBuilder)3 BehaviorDescrBuilder (org.drools.compiler.lang.api.BehaviorDescrBuilder)3 CEDescrBuilder (org.drools.compiler.lang.api.CEDescrBuilder)3 CollectDescrBuilder (org.drools.compiler.lang.api.CollectDescrBuilder)3 ConditionalBranchDescrBuilder (org.drools.compiler.lang.api.ConditionalBranchDescrBuilder)3 DeclareDescrBuilder (org.drools.compiler.lang.api.DeclareDescrBuilder)3