class DroolsFromUniConstraintStream<Solution_, A> extends DroolsAbstractUniConstraintStream<Solution_, A> {

    private final Class<A> fromClass;

    public DroolsFromUniConstraintStream(DroolsConstraintFactory<Solution_> constraintFactory, Class<A> fromClass,
            RetrievalSemantics retrievalSemantics) {
        super(constraintFactory, retrievalSemantics);
        this.fromClass = fromClass;
    }

    @Override
    public boolean guaranteesDistinct() {
        return true;
    }

    // ************************************************************************
    // Pattern creation
    // ************************************************************************

    @Override
    public UniLeftHandSide<A> createLeftHandSide() {
        return new UniLeftHandSide<>(fromClass, constraintFactory.getVariableFactory());
    }

    // ************************************************************************
    // Getters/setters
    // ************************************************************************

    @Override
    public String toString() {<FILL_FUNCTION_BODY>}

}

        return "From(" + fromClass.getSimpleName() + ") with " + getChildStreams().size() + " children";
    
<methods>public void <init>(DroolsConstraintFactory<Solution_>, org.optaplanner.constraint.streams.common.RetrievalSemantics) ,public UniConstraintStream<A> filter(Predicate<A>) ,public UniConstraintStream<ResultA_> flattenLast(Function<A,Iterable<ResultA_>>) ,public UniConstraintStream<Result_> groupBy(UniConstraintCollector<A,ResultContainer_,Result_>) ,public BiConstraintStream<ResultA_,ResultB_> groupBy(UniConstraintCollector<A,ResultContainerA_,ResultA_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>) ,public TriConstraintStream<ResultA_,ResultB_,ResultC_> groupBy(UniConstraintCollector<A,ResultContainerA_,ResultA_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>) ,public QuadConstraintStream<ResultA_,ResultB_,ResultC_,ResultD_> groupBy(UniConstraintCollector<A,ResultContainerA_,ResultA_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>, UniConstraintCollector<A,ResultContainerD_,ResultD_>) ,public UniConstraintStream<GroupKey_> groupBy(Function<A,GroupKey_>) ,public BiConstraintStream<GroupKey_,Result_> groupBy(Function<A,GroupKey_>, UniConstraintCollector<A,ResultContainer_,Result_>) ,public TriConstraintStream<GroupKey_,ResultB_,ResultC_> groupBy(Function<A,GroupKey_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>) ,public QuadConstraintStream<GroupKey_,ResultB_,ResultC_,ResultD_> groupBy(Function<A,GroupKey_>, UniConstraintCollector<A,ResultContainerB_,ResultB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>, UniConstraintCollector<A,ResultContainerD_,ResultD_>) ,public BiConstraintStream<GroupKeyA_,GroupKeyB_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>) ,public TriConstraintStream<GroupKeyA_,GroupKeyB_,Result_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, UniConstraintCollector<A,ResultContainer_,Result_>) ,public QuadConstraintStream<GroupKeyA_,GroupKeyB_,ResultC_,ResultD_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, UniConstraintCollector<A,ResultContainerC_,ResultC_>, UniConstraintCollector<A,ResultContainerD_,ResultD_>) ,public TriConstraintStream<GroupKeyA_,GroupKeyB_,GroupKeyC_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, Function<A,GroupKeyC_>) ,public QuadConstraintStream<GroupKeyA_,GroupKeyB_,GroupKeyC_,ResultD_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, Function<A,GroupKeyC_>, UniConstraintCollector<A,ResultContainerD_,ResultD_>) ,public QuadConstraintStream<GroupKeyA_,GroupKeyB_,GroupKeyC_,GroupKeyD_> groupBy(Function<A,GroupKeyA_>, Function<A,GroupKeyB_>, Function<A,GroupKeyC_>, Function<A,GroupKeyD_>) ,public final transient UniConstraintStream<A> ifExists(Class<B>, BiJoiner<A,B>[]) ,public final transient UniConstraintStream<A> ifExistsIncludingNullVars(Class<B>, BiJoiner<A,B>[]) ,public final transient UniConstraintStream<A> ifNotExists(Class<B>, BiJoiner<A,B>[]) ,public final transient UniConstraintStream<A> ifNotExistsIncludingNullVars(Class<B>, BiJoiner<A,B>[]) ,public UniConstraintBuilder<A,Score_> innerImpact(Score_, ToIntFunction<A>, org.optaplanner.constraint.streams.common.ScoreImpactType) ,public UniConstraintBuilder<A,Score_> innerImpact(Score_, ToLongFunction<A>, org.optaplanner.constraint.streams.common.ScoreImpactType) ,public UniConstraintBuilder<A,Score_> innerImpact(Score_, Function<A,java.math.BigDecimal>, org.optaplanner.constraint.streams.common.ScoreImpactType) ,public final transient BiConstraintStream<A,B> join(UniConstraintStream<B>, BiJoiner<A,B>[]) ,public final BiConstraintStream<A,B> join(UniConstraintStream<B>, BiJoinerComber<A,B>) ,public UniConstraintStream<ResultA_> map(Function<A,ResultA_>) <variables>