Skip to content

Commit

Permalink
Moved DrlxParseResult to separated package (apache#1746)
Browse files Browse the repository at this point in the history
Renamed drlxParse to ConstraintParser

Constraint Parser is a class with context, packageModel

Introducing two cases for failure
  • Loading branch information
lucamolteni authored and mariofusco committed Feb 3, 2018
1 parent 8c11b9d commit 2b017da
Show file tree
Hide file tree
Showing 14 changed files with 490 additions and 352 deletions.

Large diffs are not rendered by default.

Expand Up @@ -14,6 +14,9 @@
import org.drools.javaparser.ast.expr.MethodCallExpr; import org.drools.javaparser.ast.expr.MethodCallExpr;
import org.drools.javaparser.ast.expr.NameExpr; import org.drools.javaparser.ast.expr.NameExpr;
import org.drools.modelcompiler.builder.PackageModel; import org.drools.modelcompiler.builder.PackageModel;
import org.drools.modelcompiler.builder.generator.drlxparse.ConstraintParser;
import org.drools.modelcompiler.builder.generator.drlxparse.DrlxParseResult;
import org.drools.modelcompiler.builder.generator.drlxparse.DrlxParseSuccess;


import static org.drools.core.util.ClassUtils.extractGenericType; import static org.drools.core.util.ClassUtils.extractGenericType;
import static org.drools.modelcompiler.builder.generator.DrlxParseUtil.generateLambdaWithoutParameters; import static org.drools.modelcompiler.builder.generator.DrlxParseUtil.generateLambdaWithoutParameters;
Expand All @@ -31,7 +34,7 @@ public OOPathExprGenerator(RuleContext context, PackageModel packageModel) {
this.packageModel = packageModel; this.packageModel = packageModel;
} }


public void visit(Class<?> originalClass, String originalBind, DrlxParseResult patternParseResult) { public void visit(Class<?> originalClass, String originalBind, DrlxParseSuccess patternParseResult) {


final OOPathExpr ooPathExpr = (OOPathExpr) patternParseResult.getExpr(); final OOPathExpr ooPathExpr = (OOPathExpr) patternParseResult.getExpr();


Expand Down Expand Up @@ -77,11 +80,11 @@ public void visit(Class<?> originalClass, String originalBind, DrlxParseResult p
if (!conditions.isEmpty()) { if (!conditions.isEmpty()) {
Class<?> finalFieldType = fieldType; Class<?> finalFieldType = fieldType;
final List<DrlxParseResult> conditionParseResult = conditions.stream().map((Expression c) -> final List<DrlxParseResult> conditionParseResult = conditions.stream().map((Expression c) ->
ModelGenerator.drlxParse(context, packageModel, finalFieldType, bindingId, c.toString()) new ConstraintParser(context, packageModel).drlxParse(finalFieldType, bindingId, c.toString())
).collect(Collectors.toList()); ).collect(Collectors.toList());
ooPathConditionExpressions.put(chunkKey, conditionParseResult); ooPathConditionExpressions.put(chunkKey, conditionParseResult);
} else { } else {
final DrlxParseResult drlxParseResult = new DrlxParseResult(fieldType, "", bindingId, new BooleanLiteralExpr(true), fieldType); final DrlxParseSuccess drlxParseResult = new DrlxParseSuccess(fieldType, "", bindingId, new BooleanLiteralExpr(true), fieldType);
ooPathConditionExpressions.put(chunkKey, Collections.singletonList(drlxParseResult)); ooPathConditionExpressions.put(chunkKey, Collections.singletonList(drlxParseResult));
} }


Expand All @@ -98,7 +101,11 @@ private List<Expression> buildExpressions(Map<String, List<DrlxParseResult>> ooP
// Condition with same key were defined as , and need to be put in an AND expression // Condition with same key were defined as , and need to be put in an AND expression
return ooPathConditionExpressions.entrySet().stream() return ooPathConditionExpressions.entrySet().stream()
.map((Map.Entry<String, List<DrlxParseResult>> kv) -> { .map((Map.Entry<String, List<DrlxParseResult>> kv) -> {
final List<DrlxParseResult> value = kv.getValue(); final List<DrlxParseSuccess> value = kv.getValue()
.stream()
.filter(r -> r instanceof DrlxParseSuccess)
.map(x -> (DrlxParseSuccess)x)
.collect(Collectors.toList());
if (value.size() == 1) { if (value.size() == 1) {
return buildExpressionWithIndexing(context, value.get(0)); return buildExpressionWithIndexing(context, value.get(0));
} else { } else {
Expand Down
Expand Up @@ -24,10 +24,14 @@
import org.drools.model.Window; import org.drools.model.Window;
import org.drools.model.WindowDefinition; import org.drools.model.WindowDefinition;
import org.drools.modelcompiler.builder.PackageModel; import org.drools.modelcompiler.builder.PackageModel;
import org.drools.modelcompiler.builder.generator.drlxparse.DrlxParseFail;
import org.drools.modelcompiler.builder.generator.drlxparse.DrlxParseResult;
import org.drools.modelcompiler.builder.generator.drlxparse.DrlxParseSuccess;
import org.drools.modelcompiler.builder.generator.drlxparse.ConstraintParser;
import org.drools.modelcompiler.builder.generator.drlxparse.ParseResultVisitor;


import static org.drools.modelcompiler.builder.generator.DrlxParseUtil.generateLambdaWithoutParameters; import static org.drools.modelcompiler.builder.generator.DrlxParseUtil.generateLambdaWithoutParameters;
import static org.drools.modelcompiler.builder.generator.DrlxParseUtil.toVar; import static org.drools.modelcompiler.builder.generator.DrlxParseUtil.toVar;
import static org.drools.modelcompiler.builder.generator.ModelGenerator.drlxParse;


public class WindowReferenceGenerator { public class WindowReferenceGenerator {


Expand Down Expand Up @@ -90,12 +94,22 @@ private void addField( KnowledgeBuilderImpl kbuilder, PackageModel packageModel,
} }


private Optional<Expression> parseCondition( KnowledgeBuilderImpl kbuilder, PackageModel packageModel, PatternDescr pattern, Class<?> patternType ) { private Optional<Expression> parseCondition( KnowledgeBuilderImpl kbuilder, PackageModel packageModel, PatternDescr pattern, Class<?> patternType ) {
return Optional.ofNullable(pattern.getConstraint().getDescrs().iterator().next()).map(d -> { return Optional.ofNullable(pattern.getConstraint().getDescrs().iterator().next()).flatMap(d -> {
String expression = d.toString(); String expression = d.toString();
RuleContext context = new RuleContext(kbuilder, pkg, packageModel.getExprIdGenerator(), null); RuleContext context = new RuleContext(kbuilder, pkg, packageModel.getExprIdGenerator(), null);
DrlxParseResult drlxParseResult = drlxParse(context, packageModel, patternType, pattern.getIdentifier(), expression); final DrlxParseResult drlxParseResult = new ConstraintParser(context, packageModel).drlxParse(patternType, pattern.getIdentifier(), expression);


return generateLambdaWithoutParameters(drlxParseResult.getUsedDeclarations(), drlxParseResult.getExpr()); return drlxParseResult.acceptWithReturnValue(new ParseResultVisitor<Optional<Expression>>() {
@Override
public Optional<Expression> onSuccess(DrlxParseSuccess drlxParseResult) {
return Optional.of(generateLambdaWithoutParameters(drlxParseResult.getUsedDeclarations(), drlxParseResult.getExpr()));
}

@Override
public Optional<Expression> onFail(DrlxParseFail failure) {
return Optional.empty();
}
});
}); });
} }


Expand Down

0 comments on commit 2b017da

Please sign in to comment.