From 8cece6d200225bbc200fdb4bca6650456f4bcd43 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 20 Apr 2023 20:10:20 +0200 Subject: refactor: lambda-based Dnf and Query factory * Helps keeping variable scoping clear by limiting variable scopes to the body of the corresponding lambda. * Overloads for convenience where variables are automatically created for lambda parameters. --- .../store/query/dnf/AbstractQueryBuilder.java | 151 +++++++++++++++++++++ .../java/tools/refinery/store/query/dnf/Dnf.java | 11 ++ .../tools/refinery/store/query/dnf/DnfBuilder.java | 90 ++++++++++++ .../store/query/dnf/FunctionalQueryBuilder.java | 40 ++---- .../java/tools/refinery/store/query/dnf/Query.java | 115 +++++++++++++++- .../refinery/store/query/dnf/QueryBuilder.java | 59 +------- .../store/query/dnf/callback/ClauseCallback0.java | 15 ++ .../query/dnf/callback/ClauseCallback1Data0.java | 16 +++ .../query/dnf/callback/ClauseCallback1Data1.java | 16 +++ .../query/dnf/callback/ClauseCallback2Data0.java | 16 +++ .../query/dnf/callback/ClauseCallback2Data1.java | 17 +++ .../query/dnf/callback/ClauseCallback2Data2.java | 16 +++ .../query/dnf/callback/ClauseCallback3Data0.java | 16 +++ .../query/dnf/callback/ClauseCallback3Data1.java | 17 +++ .../query/dnf/callback/ClauseCallback3Data2.java | 17 +++ .../query/dnf/callback/ClauseCallback3Data3.java | 16 +++ .../query/dnf/callback/ClauseCallback4Data0.java | 16 +++ .../query/dnf/callback/ClauseCallback4Data1.java | 17 +++ .../query/dnf/callback/ClauseCallback4Data2.java | 17 +++ .../query/dnf/callback/ClauseCallback4Data3.java | 17 +++ .../query/dnf/callback/ClauseCallback4Data4.java | 16 +++ .../dnf/callback/FunctionalQueryCallback0.java | 14 ++ .../dnf/callback/FunctionalQueryCallback1.java | 15 ++ .../dnf/callback/FunctionalQueryCallback2.java | 15 ++ .../dnf/callback/FunctionalQueryCallback3.java | 16 +++ .../dnf/callback/FunctionalQueryCallback4.java | 16 +++ .../store/query/dnf/callback/QueryCallback0.java | 13 ++ .../store/query/dnf/callback/QueryCallback1.java | 14 ++ .../store/query/dnf/callback/QueryCallback2.java | 14 ++ .../store/query/dnf/callback/QueryCallback3.java | 14 ++ .../store/query/dnf/callback/QueryCallback4.java | 14 ++ 31 files changed, 770 insertions(+), 86 deletions(-) create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/AbstractQueryBuilder.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback0.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data0.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data1.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data0.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data1.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data2.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data0.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data1.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data2.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data3.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data0.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data1.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data2.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data3.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data4.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback0.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback1.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback2.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback3.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback4.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback0.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback1.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback2.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback3.java create mode 100644 subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback4.java (limited to 'subprojects/store-query/src/main') diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/AbstractQueryBuilder.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/AbstractQueryBuilder.java new file mode 100644 index 00000000..ddd69b9f --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/AbstractQueryBuilder.java @@ -0,0 +1,151 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf; + +import tools.refinery.store.query.dnf.callback.*; +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.NodeVariable; +import tools.refinery.store.query.term.Variable; + +import java.util.Collection; +import java.util.List; +import java.util.Set; + +public abstract class AbstractQueryBuilder> { + protected final DnfBuilder dnfBuilder; + + protected AbstractQueryBuilder(DnfBuilder dnfBuilder) { + this.dnfBuilder = dnfBuilder; + } + + protected abstract T self(); + + public NodeVariable parameter() { + return dnfBuilder.parameter(); + } + + public NodeVariable parameter(String name) { + return dnfBuilder.parameter(name); + } + + public T parameter(NodeVariable variable) { + dnfBuilder.parameter(variable); + return self(); + } + + public T parameters(NodeVariable... variables) { + dnfBuilder.parameters(variables); + return self(); + } + + public T parameters(List variables) { + dnfBuilder.parameters(variables); + return self(); + } + + public T functionalDependencies(Collection> functionalDependencies) { + dnfBuilder.functionalDependencies(functionalDependencies); + return self(); + } + + public T functionalDependency(FunctionalDependency functionalDependency) { + dnfBuilder.functionalDependency(functionalDependency); + return self(); + } + + public T functionalDependency(Set forEach, Set unique) { + dnfBuilder.functionalDependency(forEach, unique); + return self(); + } + + public T clause(ClauseCallback0 callback) { + dnfBuilder.clause(callback); + return self(); + } + + public T clause(ClauseCallback1Data0 callback) { + dnfBuilder.clause(callback); + return self(); + } + + public T clause(Class type1, ClauseCallback1Data1 callback) { + dnfBuilder.clause(type1, callback); + return self(); + } + + public T clause(ClauseCallback2Data0 callback) { + dnfBuilder.clause(callback); + return self(); + } + + public T clause(Class type1, ClauseCallback2Data1 callback) { + dnfBuilder.clause(type1, callback); + return self(); + } + + public T clause(Class type1, Class type2, ClauseCallback2Data2 callback) { + dnfBuilder.clause(type1, type2, callback); + return self(); + } + + public T clause(ClauseCallback3Data0 callback) { + dnfBuilder.clause(callback); + return self(); + } + + public T clause(Class type1, ClauseCallback3Data1 callback) { + dnfBuilder.clause(type1, callback); + return self(); + } + + public T clause(Class type1, Class type2, ClauseCallback3Data2 callback) { + dnfBuilder.clause(type1, type2, callback); + return self(); + } + + public T clause(Class type1, Class type2, Class type3, + ClauseCallback3Data3 callback) { + dnfBuilder.clause(type1, type2, type3, callback); + return self(); + } + + public T clause(ClauseCallback4Data0 callback) { + dnfBuilder.clause(callback); + return self(); + } + + public T clause(Class type1, ClauseCallback4Data1 callback) { + dnfBuilder.clause(type1, callback); + return self(); + } + + public T clause(Class type1, Class type2, ClauseCallback4Data2 callback) { + dnfBuilder.clause(type1, type2, callback); + return self(); + } + + public T clause(Class type1, Class type2, Class type3, + ClauseCallback4Data3 callback) { + dnfBuilder.clause(type1, type2, type3, callback); + return self(); + } + + public T clause(Class type1, Class type2, Class type3, Class type4, + ClauseCallback4Data4 callback) { + dnfBuilder.clause(type1, type2, type3, type4, callback); + return self(); + } + + public T clause(Literal... literals) { + dnfBuilder.clause(literals); + return self(); + } + + public T clause(Collection literals) { + dnfBuilder.clause(literals); + return self(); + } +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java index 3321a10f..8de5079d 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java @@ -16,6 +16,7 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; public final class Dnf implements Constraint { private static final String INDENTATION = " "; @@ -196,4 +197,14 @@ public final class Dnf implements Constraint { public static DnfBuilder builder(String name) { return new DnfBuilder(name); } + + public static Dnf of(Consumer callback) { + return of(null, callback); + } + + public static Dnf of(String name, Consumer callback) { + var builder = builder(name); + callback.accept(builder); + return builder.build(); + } } diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java index 4f920f8f..a42ae558 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java @@ -5,8 +5,10 @@ */ package tools.refinery.store.query.dnf; +import tools.refinery.store.query.dnf.callback.*; import tools.refinery.store.query.literal.Literal; import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; import tools.refinery.store.query.term.Variable; import java.util.*; @@ -25,6 +27,26 @@ public final class DnfBuilder { this.name = name; } + public NodeVariable parameter() { + return parameter((String) null); + } + + public NodeVariable parameter(String name) { + var variable = Variable.of(name); + parameter(variable); + return variable; + } + + public DataVariable parameter(Class type) { + return parameter(null, type); + } + + public DataVariable parameter(String name, Class type) { + var variable = Variable.of(name, type); + parameter(variable); + return variable; + } + public DnfBuilder parameter(Variable variable) { if (parameters.contains(variable)) { throw new IllegalArgumentException("Duplicate parameter: " + variable); @@ -56,6 +78,74 @@ public final class DnfBuilder { return functionalDependency(new FunctionalDependency<>(Set.copyOf(forEach), Set.copyOf(unique))); } + public DnfBuilder clause(ClauseCallback0 callback) { + return clause(callback.toLiterals()); + } + + public DnfBuilder clause(ClauseCallback1Data0 callback) { + return clause(callback.toLiterals(Variable.of("v1"))); + } + + public DnfBuilder clause(Class type1, ClauseCallback1Data1 callback) { + return clause(callback.toLiterals(Variable.of("v1", type1))); + } + + public DnfBuilder clause(ClauseCallback2Data0 callback) { + return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"))); + } + + public DnfBuilder clause(Class type1, ClauseCallback2Data1 callback) { + return clause(callback.toLiterals(Variable.of("v1"), Variable.of("d1", type1))); + } + + public DnfBuilder clause(Class type1, Class type2, ClauseCallback2Data2 callback) { + return clause(callback.toLiterals(Variable.of("d1", type1), Variable.of("d2", type2))); + } + + public DnfBuilder clause(ClauseCallback3Data0 callback) { + return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("v3"))); + } + + public DnfBuilder clause(Class type1, ClauseCallback3Data1 callback) { + return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("d1", type1))); + } + + public DnfBuilder clause(Class type1, Class type2, ClauseCallback3Data2 callback) { + return clause(callback.toLiterals(Variable.of("v1"), Variable.of("d1", type1), Variable.of("d2", type2))); + } + + public DnfBuilder clause(Class type1, Class type2, Class type3, + ClauseCallback3Data3 callback) { + return clause(callback.toLiterals(Variable.of("d1", type1), Variable.of("d2", type2), + Variable.of("d3", type3))); + } + + public DnfBuilder clause(ClauseCallback4Data0 callback) { + return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("v3"), Variable.of("v4"))); + } + + public DnfBuilder clause(Class type1, ClauseCallback4Data1 callback) { + return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("v3"), Variable.of("d1", + type1))); + } + + public DnfBuilder clause(Class type1, Class type2, ClauseCallback4Data2 callback) { + return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("d1", type1), + Variable.of("d2", type2))); + } + + public DnfBuilder clause(Class type1, Class type2, Class type3, + ClauseCallback4Data3 callback) { + return clause(callback.toLiterals(Variable.of("v1"), Variable.of("d1", type1), Variable.of("d2", type2), + Variable.of("d3", type3))); + } + + public DnfBuilder clause(Class type1, Class type2, Class type3, Class type4, + ClauseCallback4Data4 callback) { + return clause(callback.toLiterals(Variable.of("d1", type1), Variable.of("d2", type2), + Variable.of("d3", type3), Variable.of("d4", type4))); + } + public DnfBuilder clause(Literal... literals) { clause(List.of(literals)); return this; diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/FunctionalQueryBuilder.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/FunctionalQueryBuilder.java index 63580676..d1cd7ba8 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/FunctionalQueryBuilder.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/FunctionalQueryBuilder.java @@ -5,47 +5,25 @@ */ package tools.refinery.store.query.dnf; -import tools.refinery.store.query.literal.Literal; -import tools.refinery.store.query.term.Variable; +import tools.refinery.store.query.term.DataVariable; -import java.util.Collection; -import java.util.Set; - -public final class FunctionalQueryBuilder { - private final DnfBuilder dnfBuilder; +public final class FunctionalQueryBuilder extends AbstractQueryBuilder> { + private final DataVariable outputVariable; private final Class type; - FunctionalQueryBuilder(DnfBuilder dnfBuilder, Class type) { - this.dnfBuilder = dnfBuilder; + FunctionalQueryBuilder(DataVariable outputVariable, DnfBuilder dnfBuilder, Class type) { + super(dnfBuilder); + this.outputVariable = outputVariable; this.type = type; } - public FunctionalQueryBuilder functionalDependencies(Collection> functionalDependencies) { - dnfBuilder.functionalDependencies(functionalDependencies); - return this; - } - - public FunctionalQueryBuilder functionalDependency(FunctionalDependency functionalDependency) { - dnfBuilder.functionalDependency(functionalDependency); - return this; - } - - public FunctionalQueryBuilder functionalDependency(Set forEach, Set unique) { - dnfBuilder.functionalDependency(forEach, unique); - return this; - } - - public FunctionalQueryBuilder clause(Literal... literals) { - dnfBuilder.clause(literals); - return this; - } - - public FunctionalQueryBuilder clause(Collection literals) { - dnfBuilder.clause(literals); + @Override + protected FunctionalQueryBuilder self() { return this; } public FunctionalQuery build() { + dnfBuilder.output(outputVariable); return dnfBuilder.build().asFunction(type); } } diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Query.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Query.java index d3de475f..e94c0c6b 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Query.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Query.java @@ -5,17 +5,130 @@ */ package tools.refinery.store.query.dnf; +import tools.refinery.store.query.dnf.callback.*; +import tools.refinery.store.query.term.Variable; + public sealed interface Query extends AnyQuery permits RelationalQuery, FunctionalQuery { + String OUTPUT_VARIABLE_NAME = "output"; + @Override Class valueType(); T defaultValue(); static QueryBuilder builder() { - return new QueryBuilder(); + return builder(null); } static QueryBuilder builder(String name) { return new QueryBuilder(name); } + + static RelationalQuery of(QueryCallback0 callback) { + return of(null, callback); + } + + static RelationalQuery of(String name, QueryCallback0 callback) { + var builder = builder(name); + callback.accept(builder); + return builder.build(); + } + + static RelationalQuery of(QueryCallback1 callback) { + return of(null, callback); + } + + static RelationalQuery of(String name, QueryCallback1 callback) { + var builder = builder(name); + callback.accept(builder, builder.parameter("p1")); + return builder.build(); + } + + static RelationalQuery of(QueryCallback2 callback) { + return of(null, callback); + } + + static RelationalQuery of(String name, QueryCallback2 callback) { + var builder = builder(name); + callback.accept(builder, builder.parameter("p1"), builder.parameter("p2")); + return builder.build(); + } + + static RelationalQuery of(QueryCallback3 callback) { + return of(null, callback); + } + + static RelationalQuery of(String name, QueryCallback3 callback) { + var builder = builder(name); + callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), builder.parameter("p3")); + return builder.build(); + } + + static RelationalQuery of(QueryCallback4 callback) { + return of(null, callback); + } + + static RelationalQuery of(String name, QueryCallback4 callback) { + var builder = builder(name); + callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), builder.parameter("p3"), + builder.parameter("p4")); + return builder.build(); + } + + static FunctionalQuery of(Class type, FunctionalQueryCallback0 callback) { + return of(null, type, callback); + } + + static FunctionalQuery of(String name, Class type, FunctionalQueryCallback0 callback) { + var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type); + var builder = builder(name).output(outputVariable); + callback.accept(builder, outputVariable); + return builder.build(); + } + + static FunctionalQuery of(Class type, FunctionalQueryCallback1 callback) { + return of(null, type, callback); + } + + static FunctionalQuery of(String name, Class type, FunctionalQueryCallback1 callback) { + var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type); + var builder = builder(name).output(outputVariable); + callback.accept(builder, builder.parameter("p1"), outputVariable); + return builder.build(); + } + + static FunctionalQuery of(Class type, FunctionalQueryCallback2 callback) { + return of(null, type, callback); + } + + static FunctionalQuery of(String name, Class type, FunctionalQueryCallback2 callback) { + var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type); + var builder = builder(name).output(outputVariable); + callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), outputVariable); + return builder.build(); + } + + static FunctionalQuery of(Class type, FunctionalQueryCallback3 callback) { + return of(null, type, callback); + } + + static FunctionalQuery of(String name, Class type, FunctionalQueryCallback3 callback) { + var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type); + var builder = builder(name).output(outputVariable); + callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), builder.parameter("p3"), + outputVariable); + return builder.build(); + } + + static FunctionalQuery of(Class type, FunctionalQueryCallback4 callback) { + return of(null, type, callback); + } + + static FunctionalQuery of(String name, Class type, FunctionalQueryCallback4 callback) { + var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type); + var builder = builder(name).output(outputVariable); + callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), builder.parameter("p3"), + builder.parameter("p4"), outputVariable); + return builder.build(); + } } diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/QueryBuilder.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/QueryBuilder.java index f925c9ac..138911bc 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/QueryBuilder.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/QueryBuilder.java @@ -5,69 +5,20 @@ */ package tools.refinery.store.query.dnf; -import tools.refinery.store.query.literal.Literal; import tools.refinery.store.query.term.DataVariable; -import tools.refinery.store.query.term.NodeVariable; -import tools.refinery.store.query.term.Variable; - -import java.util.Collection; -import java.util.List; -import java.util.Set; - -public final class QueryBuilder { - private final DnfBuilder dnfBuilder; +public final class QueryBuilder extends AbstractQueryBuilder { QueryBuilder(String name) { - dnfBuilder = Dnf.builder(name); - } - - QueryBuilder() { - dnfBuilder = Dnf.builder(); - } - - public QueryBuilder parameter(NodeVariable variable) { - dnfBuilder.parameter(variable); - return this; + super(Dnf.builder(name)); } - public QueryBuilder parameters(NodeVariable... variables) { - dnfBuilder.parameters(variables); - return this; - } - - public QueryBuilder parameters(List variables) { - dnfBuilder.parameters(variables); + @Override + protected QueryBuilder self() { return this; } public FunctionalQueryBuilder output(DataVariable outputVariable) { - dnfBuilder.output(outputVariable); - return new FunctionalQueryBuilder<>(dnfBuilder, outputVariable.getType()); - } - - public QueryBuilder functionalDependencies(Collection> functionalDependencies) { - dnfBuilder.functionalDependencies(functionalDependencies); - return this; - } - - public QueryBuilder functionalDependency(FunctionalDependency functionalDependency) { - dnfBuilder.functionalDependency(functionalDependency); - return this; - } - - public QueryBuilder functionalDependency(Set forEach, Set unique) { - dnfBuilder.functionalDependency(forEach, unique); - return this; - } - - public QueryBuilder clause(Literal... literals) { - dnfBuilder.clause(literals); - return this; - } - - public QueryBuilder clause(Collection literals) { - dnfBuilder.clause(literals); - return this; + return new FunctionalQueryBuilder<>(outputVariable, dnfBuilder, outputVariable.getType()); } public RelationalQuery build() { diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback0.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback0.java new file mode 100644 index 00000000..d98dda2e --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback0.java @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback0 { + Collection toLiterals(); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data0.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data0.java new file mode 100644 index 00000000..4c01a527 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data0.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback1Data0 { + Collection toLiterals(NodeVariable v1); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data1.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data1.java new file mode 100644 index 00000000..2c0cb6eb --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data1.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback1Data1 { + Collection toLiterals(DataVariable d1); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data0.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data0.java new file mode 100644 index 00000000..d764bdba --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data0.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback2Data0 { + Collection toLiterals(NodeVariable v1, NodeVariable v2); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data1.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data1.java new file mode 100644 index 00000000..140af03a --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data1.java @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback2Data1 { + Collection toLiterals(NodeVariable v1, DataVariable x1); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data2.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data2.java new file mode 100644 index 00000000..bfc8637c --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data2.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback2Data2 { + Collection toLiterals(DataVariable x1, DataVariable x2); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data0.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data0.java new file mode 100644 index 00000000..074df65b --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data0.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback3Data0 { + Collection toLiterals(NodeVariable v1, NodeVariable v2, NodeVariable v3); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data1.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data1.java new file mode 100644 index 00000000..24ba5187 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data1.java @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback3Data1 { + Collection toLiterals(NodeVariable v1, NodeVariable v2, DataVariable d1); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data2.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data2.java new file mode 100644 index 00000000..2a2e837a --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data2.java @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback3Data2 { + Collection toLiterals(NodeVariable v1, DataVariable d1, DataVariable d2); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data3.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data3.java new file mode 100644 index 00000000..8f4bdd01 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data3.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback3Data3 { + Collection toLiterals(DataVariable d1, DataVariable d2, DataVariable d3); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data0.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data0.java new file mode 100644 index 00000000..ed0f87b2 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data0.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback4Data0 { + Collection toLiterals(NodeVariable v1, NodeVariable v2, NodeVariable v3, NodeVariable v4); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data1.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data1.java new file mode 100644 index 00000000..9b27e2e1 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data1.java @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback4Data1 { + Collection toLiterals(NodeVariable v1, NodeVariable v2, NodeVariable v3, DataVariable d1); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data2.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data2.java new file mode 100644 index 00000000..cbc4808e --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data2.java @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback4Data2 { + Collection toLiterals(NodeVariable v1, NodeVariable v2, DataVariable d1, DataVariable d2); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data3.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data3.java new file mode 100644 index 00000000..a6258f36 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data3.java @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback4Data3 { + Collection toLiterals(NodeVariable v1, DataVariable d1, DataVariable d2, DataVariable d3); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data4.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data4.java new file mode 100644 index 00000000..b52a911a --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data4.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.literal.Literal; +import tools.refinery.store.query.term.DataVariable; + +import java.util.Collection; + +@FunctionalInterface +public interface ClauseCallback4Data4 { + Collection toLiterals(DataVariable d1, DataVariable d2, DataVariable d3, DataVariable d4); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback0.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback0.java new file mode 100644 index 00000000..63b3eee6 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback0.java @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.FunctionalQueryBuilder; +import tools.refinery.store.query.term.DataVariable; + +@FunctionalInterface +public interface FunctionalQueryCallback0 { + void accept(FunctionalQueryBuilder builder, DataVariable output); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback1.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback1.java new file mode 100644 index 00000000..1295a118 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback1.java @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.FunctionalQueryBuilder; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +@FunctionalInterface +public interface FunctionalQueryCallback1 { + void accept(FunctionalQueryBuilder builder, NodeVariable p1, DataVariable output); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback2.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback2.java new file mode 100644 index 00000000..d5b7f9ff --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback2.java @@ -0,0 +1,15 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.FunctionalQueryBuilder; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +@FunctionalInterface +public interface FunctionalQueryCallback2 { + void accept(FunctionalQueryBuilder builder, NodeVariable p1, NodeVariable p2, DataVariable output); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback3.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback3.java new file mode 100644 index 00000000..dc8404a0 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback3.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.FunctionalQueryBuilder; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +@FunctionalInterface +public interface FunctionalQueryCallback3 { + void accept(FunctionalQueryBuilder builder, NodeVariable p1, NodeVariable p2, NodeVariable p3, + DataVariable output); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback4.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback4.java new file mode 100644 index 00000000..b6d3ddb0 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback4.java @@ -0,0 +1,16 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.FunctionalQueryBuilder; +import tools.refinery.store.query.term.DataVariable; +import tools.refinery.store.query.term.NodeVariable; + +@FunctionalInterface +public interface FunctionalQueryCallback4 { + void accept(FunctionalQueryBuilder builder, NodeVariable p1, NodeVariable p2, NodeVariable p3, NodeVariable p4, + DataVariable output); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback0.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback0.java new file mode 100644 index 00000000..3cf1de48 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback0.java @@ -0,0 +1,13 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.QueryBuilder; + +@FunctionalInterface +public interface QueryCallback0 { + void accept(QueryBuilder builder); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback1.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback1.java new file mode 100644 index 00000000..0a150955 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback1.java @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.QueryBuilder; +import tools.refinery.store.query.term.NodeVariable; + +@FunctionalInterface +public interface QueryCallback1 { + void accept(QueryBuilder builder, NodeVariable p1); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback2.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback2.java new file mode 100644 index 00000000..9493a7b4 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback2.java @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.QueryBuilder; +import tools.refinery.store.query.term.NodeVariable; + +@FunctionalInterface +public interface QueryCallback2 { + void accept(QueryBuilder builder, NodeVariable p1, NodeVariable p2); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback3.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback3.java new file mode 100644 index 00000000..358c7da7 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback3.java @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.QueryBuilder; +import tools.refinery.store.query.term.NodeVariable; + +@FunctionalInterface +public interface QueryCallback3 { + void accept(QueryBuilder builder, NodeVariable p1, NodeVariable p2, NodeVariable p3); +} diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback4.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback4.java new file mode 100644 index 00000000..890dda16 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback4.java @@ -0,0 +1,14 @@ +/* + * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors + * + * SPDX-License-Identifier: EPL-2.0 + */ +package tools.refinery.store.query.dnf.callback; + +import tools.refinery.store.query.dnf.QueryBuilder; +import tools.refinery.store.query.term.NodeVariable; + +@FunctionalInterface +public interface QueryCallback4 { + void accept(QueryBuilder builder, NodeVariable p1, NodeVariable p2, NodeVariable p3, NodeVariable p4); +} -- cgit v1.2.3-70-g09d2