aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-query/src/main/java
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-20 20:10:20 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-21 02:31:09 +0200
commit8cece6d200225bbc200fdb4bca6650456f4bcd43 (patch)
tree4c58176e102974b2ac3468c322a3b626eed501b3 /subprojects/store-query/src/main/java
parentchore(deps): downgrade to Java 17 (diff)
downloadrefinery-8cece6d200225bbc200fdb4bca6650456f4bcd43.tar.gz
refinery-8cece6d200225bbc200fdb4bca6650456f4bcd43.tar.zst
refinery-8cece6d200225bbc200fdb4bca6650456f4bcd43.zip
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.
Diffstat (limited to 'subprojects/store-query/src/main/java')
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/AbstractQueryBuilder.java151
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Dnf.java11
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/DnfBuilder.java90
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/FunctionalQueryBuilder.java40
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/Query.java115
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/QueryBuilder.java59
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback0.java15
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data0.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback1Data1.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data0.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data1.java17
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback2Data2.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data0.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data1.java17
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data2.java17
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback3Data3.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data0.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data1.java17
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data2.java17
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data3.java17
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/ClauseCallback4Data4.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback0.java14
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback1.java15
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback2.java15
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback3.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/FunctionalQueryCallback4.java16
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback0.java13
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback1.java14
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback2.java14
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback3.java14
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/dnf/callback/QueryCallback4.java14
31 files changed, 770 insertions, 86 deletions
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf;
7
8import tools.refinery.store.query.dnf.callback.*;
9import tools.refinery.store.query.literal.Literal;
10import tools.refinery.store.query.term.NodeVariable;
11import tools.refinery.store.query.term.Variable;
12
13import java.util.Collection;
14import java.util.List;
15import java.util.Set;
16
17public abstract class AbstractQueryBuilder<T extends AbstractQueryBuilder<T>> {
18 protected final DnfBuilder dnfBuilder;
19
20 protected AbstractQueryBuilder(DnfBuilder dnfBuilder) {
21 this.dnfBuilder = dnfBuilder;
22 }
23
24 protected abstract T self();
25
26 public NodeVariable parameter() {
27 return dnfBuilder.parameter();
28 }
29
30 public NodeVariable parameter(String name) {
31 return dnfBuilder.parameter(name);
32 }
33
34 public T parameter(NodeVariable variable) {
35 dnfBuilder.parameter(variable);
36 return self();
37 }
38
39 public T parameters(NodeVariable... variables) {
40 dnfBuilder.parameters(variables);
41 return self();
42 }
43
44 public T parameters(List<NodeVariable> variables) {
45 dnfBuilder.parameters(variables);
46 return self();
47 }
48
49 public T functionalDependencies(Collection<FunctionalDependency<Variable>> functionalDependencies) {
50 dnfBuilder.functionalDependencies(functionalDependencies);
51 return self();
52 }
53
54 public T functionalDependency(FunctionalDependency<Variable> functionalDependency) {
55 dnfBuilder.functionalDependency(functionalDependency);
56 return self();
57 }
58
59 public T functionalDependency(Set<? extends Variable> forEach, Set<? extends Variable> unique) {
60 dnfBuilder.functionalDependency(forEach, unique);
61 return self();
62 }
63
64 public T clause(ClauseCallback0 callback) {
65 dnfBuilder.clause(callback);
66 return self();
67 }
68
69 public T clause(ClauseCallback1Data0 callback) {
70 dnfBuilder.clause(callback);
71 return self();
72 }
73
74 public <U1> T clause(Class<U1> type1, ClauseCallback1Data1<U1> callback) {
75 dnfBuilder.clause(type1, callback);
76 return self();
77 }
78
79 public T clause(ClauseCallback2Data0 callback) {
80 dnfBuilder.clause(callback);
81 return self();
82 }
83
84 public <U1> T clause(Class<U1> type1, ClauseCallback2Data1<U1> callback) {
85 dnfBuilder.clause(type1, callback);
86 return self();
87 }
88
89 public <U1, U2> T clause(Class<U1> type1, Class<U2> type2, ClauseCallback2Data2<U1, U2> callback) {
90 dnfBuilder.clause(type1, type2, callback);
91 return self();
92 }
93
94 public T clause(ClauseCallback3Data0 callback) {
95 dnfBuilder.clause(callback);
96 return self();
97 }
98
99 public <U1> T clause(Class<U1> type1, ClauseCallback3Data1<U1> callback) {
100 dnfBuilder.clause(type1, callback);
101 return self();
102 }
103
104 public <U1, U2> T clause(Class<U1> type1, Class<U2> type2, ClauseCallback3Data2<U1, U2> callback) {
105 dnfBuilder.clause(type1, type2, callback);
106 return self();
107 }
108
109 public <U1, U2, U3> T clause(Class<U1> type1, Class<U2> type2, Class<U3> type3,
110 ClauseCallback3Data3<U1, U2, U3> callback) {
111 dnfBuilder.clause(type1, type2, type3, callback);
112 return self();
113 }
114
115 public T clause(ClauseCallback4Data0 callback) {
116 dnfBuilder.clause(callback);
117 return self();
118 }
119
120 public <U1> T clause(Class<U1> type1, ClauseCallback4Data1<U1> callback) {
121 dnfBuilder.clause(type1, callback);
122 return self();
123 }
124
125 public <U1, U2> T clause(Class<U1> type1, Class<U2> type2, ClauseCallback4Data2<U1, U2> callback) {
126 dnfBuilder.clause(type1, type2, callback);
127 return self();
128 }
129
130 public <U1, U2, U3> T clause(Class<U1> type1, Class<U2> type2, Class<U3> type3,
131 ClauseCallback4Data3<U1, U2, U3> callback) {
132 dnfBuilder.clause(type1, type2, type3, callback);
133 return self();
134 }
135
136 public <U1, U2, U3, U4> T clause(Class<U1> type1, Class<U2> type2, Class<U3> type3, Class<U4> type4,
137 ClauseCallback4Data4<U1, U2, U3, U4> callback) {
138 dnfBuilder.clause(type1, type2, type3, type4, callback);
139 return self();
140 }
141
142 public T clause(Literal... literals) {
143 dnfBuilder.clause(literals);
144 return self();
145 }
146
147 public T clause(Collection<? extends Literal> literals) {
148 dnfBuilder.clause(literals);
149 return self();
150 }
151}
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;
16import java.util.HashSet; 16import java.util.HashSet;
17import java.util.List; 17import java.util.List;
18import java.util.Set; 18import java.util.Set;
19import java.util.function.Consumer;
19 20
20public final class Dnf implements Constraint { 21public final class Dnf implements Constraint {
21 private static final String INDENTATION = " "; 22 private static final String INDENTATION = " ";
@@ -196,4 +197,14 @@ public final class Dnf implements Constraint {
196 public static DnfBuilder builder(String name) { 197 public static DnfBuilder builder(String name) {
197 return new DnfBuilder(name); 198 return new DnfBuilder(name);
198 } 199 }
200
201 public static Dnf of(Consumer<DnfBuilder> callback) {
202 return of(null, callback);
203 }
204
205 public static Dnf of(String name, Consumer<DnfBuilder> callback) {
206 var builder = builder(name);
207 callback.accept(builder);
208 return builder.build();
209 }
199} 210}
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 @@
5 */ 5 */
6package tools.refinery.store.query.dnf; 6package tools.refinery.store.query.dnf;
7 7
8import tools.refinery.store.query.dnf.callback.*;
8import tools.refinery.store.query.literal.Literal; 9import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable; 10import tools.refinery.store.query.term.DataVariable;
11import tools.refinery.store.query.term.NodeVariable;
10import tools.refinery.store.query.term.Variable; 12import tools.refinery.store.query.term.Variable;
11 13
12import java.util.*; 14import java.util.*;
@@ -25,6 +27,26 @@ public final class DnfBuilder {
25 this.name = name; 27 this.name = name;
26 } 28 }
27 29
30 public NodeVariable parameter() {
31 return parameter((String) null);
32 }
33
34 public NodeVariable parameter(String name) {
35 var variable = Variable.of(name);
36 parameter(variable);
37 return variable;
38 }
39
40 public <T> DataVariable<T> parameter(Class<T> type) {
41 return parameter(null, type);
42 }
43
44 public <T> DataVariable<T> parameter(String name, Class<T> type) {
45 var variable = Variable.of(name, type);
46 parameter(variable);
47 return variable;
48 }
49
28 public DnfBuilder parameter(Variable variable) { 50 public DnfBuilder parameter(Variable variable) {
29 if (parameters.contains(variable)) { 51 if (parameters.contains(variable)) {
30 throw new IllegalArgumentException("Duplicate parameter: " + variable); 52 throw new IllegalArgumentException("Duplicate parameter: " + variable);
@@ -56,6 +78,74 @@ public final class DnfBuilder {
56 return functionalDependency(new FunctionalDependency<>(Set.copyOf(forEach), Set.copyOf(unique))); 78 return functionalDependency(new FunctionalDependency<>(Set.copyOf(forEach), Set.copyOf(unique)));
57 } 79 }
58 80
81 public DnfBuilder clause(ClauseCallback0 callback) {
82 return clause(callback.toLiterals());
83 }
84
85 public DnfBuilder clause(ClauseCallback1Data0 callback) {
86 return clause(callback.toLiterals(Variable.of("v1")));
87 }
88
89 public <T> DnfBuilder clause(Class<T> type1, ClauseCallback1Data1<T> callback) {
90 return clause(callback.toLiterals(Variable.of("v1", type1)));
91 }
92
93 public DnfBuilder clause(ClauseCallback2Data0 callback) {
94 return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2")));
95 }
96
97 public <T> DnfBuilder clause(Class<T> type1, ClauseCallback2Data1<T> callback) {
98 return clause(callback.toLiterals(Variable.of("v1"), Variable.of("d1", type1)));
99 }
100
101 public <T1, T2> DnfBuilder clause(Class<T1> type1, Class<T2> type2, ClauseCallback2Data2<T1, T2> callback) {
102 return clause(callback.toLiterals(Variable.of("d1", type1), Variable.of("d2", type2)));
103 }
104
105 public DnfBuilder clause(ClauseCallback3Data0 callback) {
106 return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("v3")));
107 }
108
109 public <T> DnfBuilder clause(Class<T> type1, ClauseCallback3Data1<T> callback) {
110 return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("d1", type1)));
111 }
112
113 public <T1, T2> DnfBuilder clause(Class<T1> type1, Class<T2> type2, ClauseCallback3Data2<T1, T2> callback) {
114 return clause(callback.toLiterals(Variable.of("v1"), Variable.of("d1", type1), Variable.of("d2", type2)));
115 }
116
117 public <T1, T2, T3> DnfBuilder clause(Class<T1> type1, Class<T2> type2, Class<T3> type3,
118 ClauseCallback3Data3<T1, T2, T3> callback) {
119 return clause(callback.toLiterals(Variable.of("d1", type1), Variable.of("d2", type2),
120 Variable.of("d3", type3)));
121 }
122
123 public DnfBuilder clause(ClauseCallback4Data0 callback) {
124 return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("v3"), Variable.of("v4")));
125 }
126
127 public <T> DnfBuilder clause(Class<T> type1, ClauseCallback4Data1<T> callback) {
128 return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("v3"), Variable.of("d1",
129 type1)));
130 }
131
132 public <T1, T2> DnfBuilder clause(Class<T1> type1, Class<T2> type2, ClauseCallback4Data2<T1, T2> callback) {
133 return clause(callback.toLiterals(Variable.of("v1"), Variable.of("v2"), Variable.of("d1", type1),
134 Variable.of("d2", type2)));
135 }
136
137 public <T1, T2, T3> DnfBuilder clause(Class<T1> type1, Class<T2> type2, Class<T3> type3,
138 ClauseCallback4Data3<T1, T2, T3> callback) {
139 return clause(callback.toLiterals(Variable.of("v1"), Variable.of("d1", type1), Variable.of("d2", type2),
140 Variable.of("d3", type3)));
141 }
142
143 public <T1, T2, T3, T4> DnfBuilder clause(Class<T1> type1, Class<T2> type2, Class<T3> type3, Class<T4> type4,
144 ClauseCallback4Data4<T1, T2, T3, T4> callback) {
145 return clause(callback.toLiterals(Variable.of("d1", type1), Variable.of("d2", type2),
146 Variable.of("d3", type3), Variable.of("d4", type4)));
147 }
148
59 public DnfBuilder clause(Literal... literals) { 149 public DnfBuilder clause(Literal... literals) {
60 clause(List.of(literals)); 150 clause(List.of(literals));
61 return this; 151 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 @@
5 */ 5 */
6package tools.refinery.store.query.dnf; 6package tools.refinery.store.query.dnf;
7 7
8import tools.refinery.store.query.literal.Literal; 8import tools.refinery.store.query.term.DataVariable;
9import tools.refinery.store.query.term.Variable;
10 9
11import java.util.Collection; 10public final class FunctionalQueryBuilder<T> extends AbstractQueryBuilder<FunctionalQueryBuilder<T>> {
12import java.util.Set; 11 private final DataVariable<T> outputVariable;
13
14public final class FunctionalQueryBuilder<T> {
15 private final DnfBuilder dnfBuilder;
16 private final Class<T> type; 12 private final Class<T> type;
17 13
18 FunctionalQueryBuilder(DnfBuilder dnfBuilder, Class<T> type) { 14 FunctionalQueryBuilder(DataVariable<T> outputVariable, DnfBuilder dnfBuilder, Class<T> type) {
19 this.dnfBuilder = dnfBuilder; 15 super(dnfBuilder);
16 this.outputVariable = outputVariable;
20 this.type = type; 17 this.type = type;
21 } 18 }
22 19
23 public FunctionalQueryBuilder<T> functionalDependencies(Collection<FunctionalDependency<Variable>> functionalDependencies) { 20 @Override
24 dnfBuilder.functionalDependencies(functionalDependencies); 21 protected FunctionalQueryBuilder<T> self() {
25 return this;
26 }
27
28 public FunctionalQueryBuilder<T> functionalDependency(FunctionalDependency<Variable> functionalDependency) {
29 dnfBuilder.functionalDependency(functionalDependency);
30 return this;
31 }
32
33 public FunctionalQueryBuilder<T> functionalDependency(Set<? extends Variable> forEach, Set<? extends Variable> unique) {
34 dnfBuilder.functionalDependency(forEach, unique);
35 return this;
36 }
37
38 public FunctionalQueryBuilder<T> clause(Literal... literals) {
39 dnfBuilder.clause(literals);
40 return this;
41 }
42
43 public FunctionalQueryBuilder<T> clause(Collection<? extends Literal> literals) {
44 dnfBuilder.clause(literals);
45 return this; 22 return this;
46 } 23 }
47 24
48 public FunctionalQuery<T> build() { 25 public FunctionalQuery<T> build() {
26 dnfBuilder.output(outputVariable);
49 return dnfBuilder.build().asFunction(type); 27 return dnfBuilder.build().asFunction(type);
50 } 28 }
51} 29}
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 @@
5 */ 5 */
6package tools.refinery.store.query.dnf; 6package tools.refinery.store.query.dnf;
7 7
8import tools.refinery.store.query.dnf.callback.*;
9import tools.refinery.store.query.term.Variable;
10
8public sealed interface Query<T> extends AnyQuery permits RelationalQuery, FunctionalQuery { 11public sealed interface Query<T> extends AnyQuery permits RelationalQuery, FunctionalQuery {
12 String OUTPUT_VARIABLE_NAME = "output";
13
9 @Override 14 @Override
10 Class<T> valueType(); 15 Class<T> valueType();
11 16
12 T defaultValue(); 17 T defaultValue();
13 18
14 static QueryBuilder builder() { 19 static QueryBuilder builder() {
15 return new QueryBuilder(); 20 return builder(null);
16 } 21 }
17 22
18 static QueryBuilder builder(String name) { 23 static QueryBuilder builder(String name) {
19 return new QueryBuilder(name); 24 return new QueryBuilder(name);
20 } 25 }
26
27 static RelationalQuery of(QueryCallback0 callback) {
28 return of(null, callback);
29 }
30
31 static RelationalQuery of(String name, QueryCallback0 callback) {
32 var builder = builder(name);
33 callback.accept(builder);
34 return builder.build();
35 }
36
37 static RelationalQuery of(QueryCallback1 callback) {
38 return of(null, callback);
39 }
40
41 static RelationalQuery of(String name, QueryCallback1 callback) {
42 var builder = builder(name);
43 callback.accept(builder, builder.parameter("p1"));
44 return builder.build();
45 }
46
47 static RelationalQuery of(QueryCallback2 callback) {
48 return of(null, callback);
49 }
50
51 static RelationalQuery of(String name, QueryCallback2 callback) {
52 var builder = builder(name);
53 callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"));
54 return builder.build();
55 }
56
57 static RelationalQuery of(QueryCallback3 callback) {
58 return of(null, callback);
59 }
60
61 static RelationalQuery of(String name, QueryCallback3 callback) {
62 var builder = builder(name);
63 callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), builder.parameter("p3"));
64 return builder.build();
65 }
66
67 static RelationalQuery of(QueryCallback4 callback) {
68 return of(null, callback);
69 }
70
71 static RelationalQuery of(String name, QueryCallback4 callback) {
72 var builder = builder(name);
73 callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), builder.parameter("p3"),
74 builder.parameter("p4"));
75 return builder.build();
76 }
77
78 static <T> FunctionalQuery<T> of(Class<T> type, FunctionalQueryCallback0<T> callback) {
79 return of(null, type, callback);
80 }
81
82 static <T> FunctionalQuery<T> of(String name, Class<T> type, FunctionalQueryCallback0<T> callback) {
83 var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type);
84 var builder = builder(name).output(outputVariable);
85 callback.accept(builder, outputVariable);
86 return builder.build();
87 }
88
89 static <T> FunctionalQuery<T> of(Class<T> type, FunctionalQueryCallback1<T> callback) {
90 return of(null, type, callback);
91 }
92
93 static <T> FunctionalQuery<T> of(String name, Class<T> type, FunctionalQueryCallback1<T> callback) {
94 var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type);
95 var builder = builder(name).output(outputVariable);
96 callback.accept(builder, builder.parameter("p1"), outputVariable);
97 return builder.build();
98 }
99
100 static <T> FunctionalQuery<T> of(Class<T> type, FunctionalQueryCallback2<T> callback) {
101 return of(null, type, callback);
102 }
103
104 static <T> FunctionalQuery<T> of(String name, Class<T> type, FunctionalQueryCallback2<T> callback) {
105 var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type);
106 var builder = builder(name).output(outputVariable);
107 callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), outputVariable);
108 return builder.build();
109 }
110
111 static <T> FunctionalQuery<T> of(Class<T> type, FunctionalQueryCallback3<T> callback) {
112 return of(null, type, callback);
113 }
114
115 static <T> FunctionalQuery<T> of(String name, Class<T> type, FunctionalQueryCallback3<T> callback) {
116 var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type);
117 var builder = builder(name).output(outputVariable);
118 callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), builder.parameter("p3"),
119 outputVariable);
120 return builder.build();
121 }
122
123 static <T> FunctionalQuery<T> of(Class<T> type, FunctionalQueryCallback4<T> callback) {
124 return of(null, type, callback);
125 }
126
127 static <T> FunctionalQuery<T> of(String name, Class<T> type, FunctionalQueryCallback4<T> callback) {
128 var outputVariable = Variable.of(OUTPUT_VARIABLE_NAME, type);
129 var builder = builder(name).output(outputVariable);
130 callback.accept(builder, builder.parameter("p1"), builder.parameter("p2"), builder.parameter("p3"),
131 builder.parameter("p4"), outputVariable);
132 return builder.build();
133 }
21} 134}
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 @@
5 */ 5 */
6package tools.refinery.store.query.dnf; 6package tools.refinery.store.query.dnf;
7 7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable; 8import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11import tools.refinery.store.query.term.Variable;
12
13import java.util.Collection;
14import java.util.List;
15import java.util.Set;
16
17public final class QueryBuilder {
18 private final DnfBuilder dnfBuilder;
19 9
10public final class QueryBuilder extends AbstractQueryBuilder<QueryBuilder> {
20 QueryBuilder(String name) { 11 QueryBuilder(String name) {
21 dnfBuilder = Dnf.builder(name); 12 super(Dnf.builder(name));
22 }
23
24 QueryBuilder() {
25 dnfBuilder = Dnf.builder();
26 }
27
28 public QueryBuilder parameter(NodeVariable variable) {
29 dnfBuilder.parameter(variable);
30 return this;
31 } 13 }
32 14
33 public QueryBuilder parameters(NodeVariable... variables) { 15 @Override
34 dnfBuilder.parameters(variables); 16 protected QueryBuilder self() {
35 return this;
36 }
37
38 public QueryBuilder parameters(List<NodeVariable> variables) {
39 dnfBuilder.parameters(variables);
40 return this; 17 return this;
41 } 18 }
42 19
43 public <T> FunctionalQueryBuilder<T> output(DataVariable<T> outputVariable) { 20 public <T> FunctionalQueryBuilder<T> output(DataVariable<T> outputVariable) {
44 dnfBuilder.output(outputVariable); 21 return new FunctionalQueryBuilder<>(outputVariable, dnfBuilder, outputVariable.getType());
45 return new FunctionalQueryBuilder<>(dnfBuilder, outputVariable.getType());
46 }
47
48 public QueryBuilder functionalDependencies(Collection<FunctionalDependency<Variable>> functionalDependencies) {
49 dnfBuilder.functionalDependencies(functionalDependencies);
50 return this;
51 }
52
53 public QueryBuilder functionalDependency(FunctionalDependency<Variable> functionalDependency) {
54 dnfBuilder.functionalDependency(functionalDependency);
55 return this;
56 }
57
58 public QueryBuilder functionalDependency(Set<? extends Variable> forEach, Set<? extends Variable> unique) {
59 dnfBuilder.functionalDependency(forEach, unique);
60 return this;
61 }
62
63 public QueryBuilder clause(Literal... literals) {
64 dnfBuilder.clause(literals);
65 return this;
66 }
67
68 public QueryBuilder clause(Collection<? extends Literal> literals) {
69 dnfBuilder.clause(literals);
70 return this;
71 } 22 }
72 23
73 public RelationalQuery build() { 24 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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9
10import java.util.Collection;
11
12@FunctionalInterface
13public interface ClauseCallback0 {
14 Collection<Literal> toLiterals();
15}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.NodeVariable;
10
11import java.util.Collection;
12
13@FunctionalInterface
14public interface ClauseCallback1Data0 {
15 Collection<Literal> toLiterals(NodeVariable v1);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10
11import java.util.Collection;
12
13@FunctionalInterface
14public interface ClauseCallback1Data1<T> {
15 Collection<Literal> toLiterals(DataVariable<T> d1);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.NodeVariable;
10
11import java.util.Collection;
12
13@FunctionalInterface
14public interface ClauseCallback2Data0 {
15 Collection<Literal> toLiterals(NodeVariable v1, NodeVariable v2);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12import java.util.Collection;
13
14@FunctionalInterface
15public interface ClauseCallback2Data1<T> {
16 Collection<Literal> toLiterals(NodeVariable v1, DataVariable<T> x1);
17}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10
11import java.util.Collection;
12
13@FunctionalInterface
14public interface ClauseCallback2Data2<T1, T2> {
15 Collection<Literal> toLiterals(DataVariable<T1> x1, DataVariable<T2> x2);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.NodeVariable;
10
11import java.util.Collection;
12
13@FunctionalInterface
14public interface ClauseCallback3Data0 {
15 Collection<Literal> toLiterals(NodeVariable v1, NodeVariable v2, NodeVariable v3);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12import java.util.Collection;
13
14@FunctionalInterface
15public interface ClauseCallback3Data1<T> {
16 Collection<Literal> toLiterals(NodeVariable v1, NodeVariable v2, DataVariable<T> d1);
17}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12import java.util.Collection;
13
14@FunctionalInterface
15public interface ClauseCallback3Data2<T1, T2> {
16 Collection<Literal> toLiterals(NodeVariable v1, DataVariable<T1> d1, DataVariable<T2> d2);
17}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10
11import java.util.Collection;
12
13@FunctionalInterface
14public interface ClauseCallback3Data3<T1, T2, T3> {
15 Collection<Literal> toLiterals(DataVariable<T1> d1, DataVariable<T2> d2, DataVariable<T3> d3);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.NodeVariable;
10
11import java.util.Collection;
12
13@FunctionalInterface
14public interface ClauseCallback4Data0 {
15 Collection<Literal> toLiterals(NodeVariable v1, NodeVariable v2, NodeVariable v3, NodeVariable v4);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12import java.util.Collection;
13
14@FunctionalInterface
15public interface ClauseCallback4Data1<T> {
16 Collection<Literal> toLiterals(NodeVariable v1, NodeVariable v2, NodeVariable v3, DataVariable<T> d1);
17}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12import java.util.Collection;
13
14@FunctionalInterface
15public interface ClauseCallback4Data2<T1, T2> {
16 Collection<Literal> toLiterals(NodeVariable v1, NodeVariable v2, DataVariable<T1> d1, DataVariable<T2> d2);
17}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12import java.util.Collection;
13
14@FunctionalInterface
15public interface ClauseCallback4Data3<T1, T2, T3> {
16 Collection<Literal> toLiterals(NodeVariable v1, DataVariable<T1> d1, DataVariable<T2> d2, DataVariable<T3> d3);
17}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.literal.Literal;
9import tools.refinery.store.query.term.DataVariable;
10
11import java.util.Collection;
12
13@FunctionalInterface
14public interface ClauseCallback4Data4<T1, T2, T3, T4> {
15 Collection<Literal> toLiterals(DataVariable<T1> d1, DataVariable<T2> d2, DataVariable<T3> d3, DataVariable<T4> d4);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.FunctionalQueryBuilder;
9import tools.refinery.store.query.term.DataVariable;
10
11@FunctionalInterface
12public interface FunctionalQueryCallback0<T> {
13 void accept(FunctionalQueryBuilder<T> builder, DataVariable<T> output);
14}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.FunctionalQueryBuilder;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12@FunctionalInterface
13public interface FunctionalQueryCallback1<T> {
14 void accept(FunctionalQueryBuilder<T> builder, NodeVariable p1, DataVariable<T> output);
15}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.FunctionalQueryBuilder;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12@FunctionalInterface
13public interface FunctionalQueryCallback2<T> {
14 void accept(FunctionalQueryBuilder<T> builder, NodeVariable p1, NodeVariable p2, DataVariable<T> output);
15}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.FunctionalQueryBuilder;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12@FunctionalInterface
13public interface FunctionalQueryCallback3<T> {
14 void accept(FunctionalQueryBuilder<T> builder, NodeVariable p1, NodeVariable p2, NodeVariable p3,
15 DataVariable<T> output);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.FunctionalQueryBuilder;
9import tools.refinery.store.query.term.DataVariable;
10import tools.refinery.store.query.term.NodeVariable;
11
12@FunctionalInterface
13public interface FunctionalQueryCallback4<T> {
14 void accept(FunctionalQueryBuilder<T> builder, NodeVariable p1, NodeVariable p2, NodeVariable p3, NodeVariable p4,
15 DataVariable<T> output);
16}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.QueryBuilder;
9
10@FunctionalInterface
11public interface QueryCallback0 {
12 void accept(QueryBuilder builder);
13}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.QueryBuilder;
9import tools.refinery.store.query.term.NodeVariable;
10
11@FunctionalInterface
12public interface QueryCallback1 {
13 void accept(QueryBuilder builder, NodeVariable p1);
14}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.QueryBuilder;
9import tools.refinery.store.query.term.NodeVariable;
10
11@FunctionalInterface
12public interface QueryCallback2 {
13 void accept(QueryBuilder builder, NodeVariable p1, NodeVariable p2);
14}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.QueryBuilder;
9import tools.refinery.store.query.term.NodeVariable;
10
11@FunctionalInterface
12public interface QueryCallback3 {
13 void accept(QueryBuilder builder, NodeVariable p1, NodeVariable p2, NodeVariable p3);
14}
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 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.dnf.callback;
7
8import tools.refinery.store.query.dnf.QueryBuilder;
9import tools.refinery.store.query.term.NodeVariable;
10
11@FunctionalInterface
12public interface QueryCallback4 {
13 void accept(QueryBuilder builder, NodeVariable p1, NodeVariable p2, NodeVariable p3, NodeVariable p4);
14}