Class UniLeftHandSide<A>
java.lang.Object
org.optaplanner.constraint.streams.drools.common.UniLeftHandSide<A>
- Type Parameters:
A- generic type of the resulting variable
Represents the left-hand side of a Drools rule, the result of which is a single variable.
The simplest variant of such rule, with no filters or groupBys applied, would look like this in equivalent DRL:
rule "Simplest univariate rule"
when
$a: Something()
then
// Do something with the $a variable.
end
Left-hand side is that part of the rule between the "when" and "then" keywords.
The part between the "then" and "end" keywords is called the consequence of the rule, and this class does not represent it.
It can be created by calling andTerminate(Function) etc.
There are also more complex variants of rules that still result in just one variable:
rule "Complex univariate rule"
when
$accumulateResult: Collection() from accumulate(
...
)
$a: Object() from $accumulateResult
exists Something()
then
// Do something with the $a variable.
end
To create the simplest possible variant, call UniLeftHandSide(Class, DroolsVariableFactory).
Further specializations can be introduced by calling builder methods such as andFilter(Predicate).
These builder methods will always return a new instance of AbstractLeftHandSide, as these are immutable.
Some builder methods, such as andJoin(UniLeftHandSide, BiJoiner), will return an instance of
BiLeftHandSide (TriLeftHandSide, ...), as that particular operation will increase the cardinality
of the parent constraint stream.-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription<B> UniLeftHandSide<A><NewA> UniLeftHandSide<NewA>andFlattenLast(Function<A, Iterable<NewA>> mapping) <NewA> UniLeftHandSide<NewA>andGroupBy(Function<A, NewA> keyMapping) <NewA,NewB>
BiLeftHandSide<NewA,NewB> andGroupBy(Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB) <NewA,NewB, NewC>
TriLeftHandSide<NewA,NewB, NewC> andGroupBy(Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB, Function<A, NewC> keyMappingC) <NewA,NewB, NewC, NewD>
QuadLeftHandSide<NewA,NewB, NewC, NewD> andGroupBy(Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB, Function<A, NewC> keyMappingC, Function<A, NewD> keyMappingD) <NewA,NewB, NewC, NewD>
QuadLeftHandSide<NewA,NewB, NewC, NewD> andGroupBy(Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB, Function<A, NewC> keyMappingC, UniConstraintCollector<A, ?, NewD> collectorD) <NewA,NewB, NewC>
TriLeftHandSide<NewA,NewB, NewC> andGroupBy(Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB, UniConstraintCollector<A, ?, NewC> collectorC) <NewA,NewB, NewC, NewD>
QuadLeftHandSide<NewA,NewB, NewC, NewD> andGroupBy(Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB, UniConstraintCollector<A, ?, NewC> collectorC, UniConstraintCollector<A, ?, NewD> collectorD) <NewA,NewB>
BiLeftHandSide<NewA,NewB> andGroupBy(Function<A, NewA> keyMappingA, UniConstraintCollector<A, ?, NewB> collectorB) <NewA,NewB, NewC>
TriLeftHandSide<NewA,NewB, NewC> andGroupBy(Function<A, NewA> keyMappingA, UniConstraintCollector<A, ?, NewB> collectorB, UniConstraintCollector<A, ?, NewC> collectorC) <NewA,NewB, NewC, NewD>
QuadLeftHandSide<NewA,NewB, NewC, NewD> andGroupBy(Function<A, NewA> keyMappingA, UniConstraintCollector<A, ?, NewB> collectorB, UniConstraintCollector<A, ?, NewC> collectorC, UniConstraintCollector<A, ?, NewD> collectorD) <NewA> UniLeftHandSide<NewA>andGroupBy(UniConstraintCollector<A, ?, NewA> collector) <NewA,NewB>
BiLeftHandSide<NewA,NewB> andGroupBy(UniConstraintCollector<A, ?, NewA> collectorA, UniConstraintCollector<A, ?, NewB> collectorB) <NewA,NewB, NewC>
TriLeftHandSide<NewA,NewB, NewC> andGroupBy(UniConstraintCollector<A, ?, NewA> collectorA, UniConstraintCollector<A, ?, NewB> collectorB, UniConstraintCollector<A, ?, NewC> collectorC) <NewA,NewB, NewC, NewD>
QuadLeftHandSide<NewA,NewB, NewC, NewD> andGroupBy(UniConstraintCollector<A, ?, NewA> collectorA, UniConstraintCollector<A, ?, NewB> collectorB, UniConstraintCollector<A, ?, NewC> collectorC, UniConstraintCollector<A, ?, NewD> collectorD) <B> BiLeftHandSide<A,B> andJoin(UniLeftHandSide<B> right, BiJoiner<A, B> joiner) <NewA> UniLeftHandSide<NewA><B> UniLeftHandSide<A>andNotExists(Class<B> bClass, BiJoiner<A, B>[] joiners, Predicate<B> nullityFilter) <Solution_>
RuleBuilder<Solution_>andTerminate(Function<A, BigDecimal> matchWeigher) <Solution_>
RuleBuilder<Solution_>andTerminate(ToIntFunction<A> matchWeigher) <Solution_>
RuleBuilder<Solution_>andTerminate(ToLongFunction<A> matchWeigher) protected static org.drools.model.view.ViewItem<?>buildAccumulate(org.drools.model.view.ViewItem<?> innerAccumulatePattern, org.drools.model.functions.accumulate.AccumulateFunction... accFunctions) protected static <A,B> org.optaplanner.constraint.streams.drools.common.IndirectPatternVariable<B, org.optaplanner.constraint.streams.drools.common.BiTuple<A, B>> decompose(org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.BiTuple<A, B>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB) Create anIndirectPatternVariableonBiTuplewith pre-made bindings for its components variables.protected static <A,B, C, D> org.optaplanner.constraint.streams.drools.common.IndirectPatternVariable<D, org.optaplanner.constraint.streams.drools.common.QuadTuple<A, B, C, D>> decompose(org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.QuadTuple<A, B, C, D>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB, org.drools.model.Variable<C> boundVarC, org.drools.model.Variable<D> boundVarD) Create anIndirectPatternVariableonQuadTuplewith pre-made bindings for its components variables.protected static <A,B, C> org.optaplanner.constraint.streams.drools.common.IndirectPatternVariable<C, org.optaplanner.constraint.streams.drools.common.TriTuple<A, B, C>> decompose(org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.TriTuple<A, B, C>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB, org.drools.model.Variable<C> boundVarC) Create anIndirectPatternVariableonTriTuplewith pre-made bindings for its components variables.protected static <A,B, C> org.optaplanner.constraint.streams.drools.common.DirectPatternVariable<C> decomposeWithAccumulate(org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.BiTuple<A, B>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB, org.drools.model.Variable<C> accumulateOutput) Create aDirectPatternVariableonBiTuplewith pre-made bindings for its components variables and one accumulate output variable.protected static <A,B, C, D> org.optaplanner.constraint.streams.drools.common.DirectPatternVariable<D> decomposeWithAccumulate(org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.TriTuple<A, B, C>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB, org.drools.model.Variable<C> boundVarC, org.drools.model.Variable<D> accumulateOutput) Create aDirectPatternVariableonTriTuplewith pre-made bindings for its components variables and one accumulate output variable.protected static org.drools.model.Index.ConstraintTypegetConstraintType(JoinerType type) PatternVariable<A,?, ?> protected static org.drools.model.view.ViewItem<?>joinViewItemsWithLogicalAnd(PatternVariable<?, ?, ?>... patternVariables) protected static List<org.drools.model.view.ViewItem<?>>mergeViewItems(PatternVariable<?, ?, ?>... patternVariables)
-
Field Details
-
variableFactory
-
-
Constructor Details
-
UniLeftHandSide
-
-
Method Details
-
getPatternVariableA
-
andFilter
-
andExists
-
andNotExists
-
andJoin
-
andGroupBy
-
andGroupBy
public <NewA,NewB> BiLeftHandSide<NewA,NewB> andGroupBy(UniConstraintCollector<A, ?, NewA> collectorA, UniConstraintCollector<A, ?, NewB> collectorB) -
andGroupBy
public <NewA,NewB, TriLeftHandSide<NewA,NewC> NewB, andGroupByNewC> (UniConstraintCollector<A, ?, NewA> collectorA, UniConstraintCollector<A, ?, NewB> collectorB, UniConstraintCollector<A, ?, NewC> collectorC) -
andGroupBy
public <NewA,NewB, QuadLeftHandSide<NewA,NewC, NewD> NewB, andGroupByNewC, NewD> (UniConstraintCollector<A, ?, NewA> collectorA, UniConstraintCollector<A, ?, NewB> collectorB, UniConstraintCollector<A, ?, NewC> collectorC, UniConstraintCollector<A, ?, NewD> collectorD) -
andGroupBy
-
andGroupBy
public <NewA,NewB> BiLeftHandSide<NewA,NewB> andGroupBy(Function<A, NewA> keyMappingA, UniConstraintCollector<A, ?, NewB> collectorB) -
andGroupBy
public <NewA,NewB, TriLeftHandSide<NewA,NewC> NewB, andGroupByNewC> (Function<A, NewA> keyMappingA, UniConstraintCollector<A, ?, NewB> collectorB, UniConstraintCollector<A, ?, NewC> collectorC) -
andGroupBy
public <NewA,NewB, QuadLeftHandSide<NewA,NewC, NewD> NewB, andGroupByNewC, NewD> (Function<A, NewA> keyMappingA, UniConstraintCollector<A, ?, NewB> collectorB, UniConstraintCollector<A, ?, NewC> collectorC, UniConstraintCollector<A, ?, NewD> collectorD) -
andGroupBy
public <NewA,NewB> BiLeftHandSide<NewA,NewB> andGroupBy(Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB) -
andGroupBy
public <NewA,NewB, TriLeftHandSide<NewA,NewC> NewB, andGroupByNewC> (Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB, UniConstraintCollector<A, ?, NewC> collectorC) -
andGroupBy
public <NewA,NewB, QuadLeftHandSide<NewA,NewC, NewD> NewB, andGroupByNewC, NewD> (Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB, UniConstraintCollector<A, ?, NewC> collectorC, UniConstraintCollector<A, ?, NewD> collectorD) -
andGroupBy
-
andGroupBy
public <NewA,NewB, QuadLeftHandSide<NewA,NewC, NewD> NewB, andGroupByNewC, NewD> (Function<A, NewA> keyMappingA, Function<A, NewB> keyMappingB, Function<A, NewC> keyMappingC, UniConstraintCollector<A, ?, NewD> collectorD) -
andGroupBy
-
andMap
-
andFlattenLast
-
andTerminate
-
andTerminate
-
andTerminate
-
getConstraintType
-
joinViewItemsWithLogicalAnd
protected static org.drools.model.view.ViewItem<?> joinViewItemsWithLogicalAnd(PatternVariable<?, ?, ?>... patternVariables) -
mergeViewItems
protected static List<org.drools.model.view.ViewItem<?>> mergeViewItems(PatternVariable<?, ?, ?>... patternVariables) -
decompose
protected static <A,B> org.optaplanner.constraint.streams.drools.common.IndirectPatternVariable<B,org.optaplanner.constraint.streams.drools.common.BiTuple<A, decomposeB>> (org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.BiTuple<A, B>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB) Create anIndirectPatternVariableonBiTuplewith pre-made bindings for its components variables.- Type Parameters:
A- generic type of the first bound variableB- generic type of the second bound variable- Parameters:
primaryVariable- never nullprerequisitePattern- never null, pattern required to construct the variableboundVarA- never null,BiTuple.aboundVarB- never null,BiTuple.b- Returns:
- never null
-
decomposeWithAccumulate
protected static <A,B, org.optaplanner.constraint.streams.drools.common.DirectPatternVariable<C> decomposeWithAccumulateC> (org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.BiTuple<A, B>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB, org.drools.model.Variable<C> accumulateOutput) Create aDirectPatternVariableonBiTuplewith pre-made bindings for its components variables and one accumulate output variable.- Type Parameters:
A- generic type of the first bound variableB- generic type of the second bound variableC- generic type of the accumulate output variable- Parameters:
primaryVariable- never nullprerequisitePattern- never null, pattern required to construct the variableboundVarA- never null,TriTuple.aboundVarB- never null,TriTuple.baccumulateOutput- never null, output of the accumulate function- Returns:
- never null
-
decompose
protected static <A,B, org.optaplanner.constraint.streams.drools.common.IndirectPatternVariable<C,C> org.optaplanner.constraint.streams.drools.common.TriTuple<A, decomposeB, C>> (org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.TriTuple<A, B, C>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB, org.drools.model.Variable<C> boundVarC) Create anIndirectPatternVariableonTriTuplewith pre-made bindings for its components variables.- Type Parameters:
A- generic type of the first bound variableB- generic type of the second bound variableC- generic type of the third bound variable- Parameters:
primaryVariable- never nullprerequisitePattern- never null, pattern required to construct the variableboundVarA- never null,TriTuple.aboundVarB- never null,TriTuple.bboundVarC- never null,TriTuple.c- Returns:
- never null
-
decompose
protected static <A,B, org.optaplanner.constraint.streams.drools.common.IndirectPatternVariable<D,C, D> org.optaplanner.constraint.streams.drools.common.QuadTuple<A, decomposeB, C, D>> (org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.QuadTuple<A, B, C, D>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB, org.drools.model.Variable<C> boundVarC, org.drools.model.Variable<D> boundVarD) Create anIndirectPatternVariableonQuadTuplewith pre-made bindings for its components variables.- Type Parameters:
A- generic type of the first bound variableB- generic type of the second bound variableC- generic type of the third bound variableD- generic type of the fourth bound variable- Parameters:
primaryVariable- never nullprerequisitePattern- never null, pattern required to construct the variableboundVarA- never null,QuadTuple.aboundVarB- never null,QuadTuple.bboundVarC- never null,QuadTuple.cboundVarD- never null,QuadTuple.d- Returns:
- never null
-
decomposeWithAccumulate
protected static <A,B, org.optaplanner.constraint.streams.drools.common.DirectPatternVariable<D> decomposeWithAccumulateC, D> (org.drools.model.Variable<org.optaplanner.constraint.streams.drools.common.TriTuple<A, B, C>> primaryVariable, org.drools.model.view.ViewItem<?> prerequisitePattern, org.drools.model.Variable<A> boundVarA, org.drools.model.Variable<B> boundVarB, org.drools.model.Variable<C> boundVarC, org.drools.model.Variable<D> accumulateOutput) Create aDirectPatternVariableonTriTuplewith pre-made bindings for its components variables and one accumulate output variable.- Type Parameters:
A- generic type of the first bound variableB- generic type of the second bound variableC- generic type of the third bound variableD- generic type of the accumulate output variable- Parameters:
primaryVariable- never nullprerequisitePattern- never null, pattern required to construct the variableboundVarA- never null,TriTuple.aboundVarB- never null,TriTuple.bboundVarC- never null,TriTuple.caccumulateOutput- never null, output of the accumulate function- Returns:
- never null
-
buildAccumulate
protected static org.drools.model.view.ViewItem<?> buildAccumulate(org.drools.model.view.ViewItem<?> innerAccumulatePattern, org.drools.model.functions.accumulate.AccumulateFunction... accFunctions)
-