diff options
Diffstat (limited to 'subprojects')
32 files changed, 316 insertions, 597 deletions
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQuery.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQuery.java deleted file mode 100644 index 3fff6f2e..00000000 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQuery.java +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.query.viatra; | ||
7 | |||
8 | import tools.refinery.store.adapter.ModelAdapterBuilderFactory; | ||
9 | import tools.refinery.store.model.ModelStoreBuilder; | ||
10 | import tools.refinery.store.query.ModelQuery; | ||
11 | import tools.refinery.store.query.viatra.internal.ViatraModelQueryBuilderImpl; | ||
12 | |||
13 | public final class ViatraModelQuery extends ModelAdapterBuilderFactory<ViatraModelQueryAdapter, | ||
14 | ViatraModelQueryStoreAdapter, ViatraModelQueryBuilder> { | ||
15 | public static final ViatraModelQuery ADAPTER = new ViatraModelQuery(); | ||
16 | |||
17 | private ViatraModelQuery() { | ||
18 | super(ViatraModelQueryAdapter.class, ViatraModelQueryStoreAdapter.class, ViatraModelQueryBuilder.class); | ||
19 | extendsAdapter(ModelQuery.ADAPTER); | ||
20 | } | ||
21 | |||
22 | @Override | ||
23 | public ViatraModelQueryBuilder createBuilder(ModelStoreBuilder storeBuilder) { | ||
24 | return new ViatraModelQueryBuilderImpl(storeBuilder); | ||
25 | } | ||
26 | } | ||
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryAdapter.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryAdapter.java index 411e251e..12c93f62 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryAdapter.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryAdapter.java | |||
@@ -6,8 +6,13 @@ | |||
6 | package tools.refinery.store.query.viatra; | 6 | package tools.refinery.store.query.viatra; |
7 | 7 | ||
8 | import tools.refinery.store.query.ModelQueryAdapter; | 8 | import tools.refinery.store.query.ModelQueryAdapter; |
9 | import tools.refinery.store.query.viatra.internal.ViatraModelQueryBuilderImpl; | ||
9 | 10 | ||
10 | public interface ViatraModelQueryAdapter extends ModelQueryAdapter { | 11 | public interface ViatraModelQueryAdapter extends ModelQueryAdapter { |
11 | @Override | 12 | @Override |
12 | ViatraModelQueryStoreAdapter getStoreAdapter(); | 13 | ViatraModelQueryStoreAdapter getStoreAdapter(); |
14 | |||
15 | static ViatraModelQueryBuilder builder() { | ||
16 | return new ViatraModelQueryBuilderImpl(); | ||
17 | } | ||
13 | } | 18 | } |
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryBuilder.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryBuilder.java index 310171e8..931a07aa 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryBuilder.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/ViatraModelQueryBuilder.java | |||
@@ -50,5 +50,5 @@ public interface ViatraModelQueryBuilder extends ModelQueryBuilder { | |||
50 | ViatraModelQueryBuilder hint(Dnf dnf, QueryEvaluationHint queryEvaluationHint); | 50 | ViatraModelQueryBuilder hint(Dnf dnf, QueryEvaluationHint queryEvaluationHint); |
51 | 51 | ||
52 | @Override | 52 | @Override |
53 | ViatraModelQueryStoreAdapter createStoreAdapter(ModelStore store); | 53 | ViatraModelQueryStoreAdapter build(ModelStore store); |
54 | } | 54 | } |
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java index 44ed1505..ce2467b4 100644 --- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java +++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java | |||
@@ -25,7 +25,8 @@ import tools.refinery.store.query.viatra.internal.pquery.Dnf2PQuery; | |||
25 | import java.util.*; | 25 | import java.util.*; |
26 | import java.util.function.Function; | 26 | import java.util.function.Function; |
27 | 27 | ||
28 | public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder implements ViatraModelQueryBuilder { | 28 | public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder<ViatraModelQueryStoreAdapterImpl> |
29 | implements ViatraModelQueryBuilder { | ||
29 | private ViatraQueryEngineOptions.Builder engineOptionsBuilder; | 30 | private ViatraQueryEngineOptions.Builder engineOptionsBuilder; |
30 | private QueryEvaluationHint defaultHint = new QueryEvaluationHint(Map.of( | 31 | private QueryEvaluationHint defaultHint = new QueryEvaluationHint(Map.of( |
31 | // Use a cost function that ignores the initial (empty) model but allows higher arity input keys. | 32 | // Use a cost function that ignores the initial (empty) model but allows higher arity input keys. |
@@ -35,8 +36,7 @@ public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder imp | |||
35 | private final Set<AnyQuery> vacuousQueries = new LinkedHashSet<>(); | 36 | private final Set<AnyQuery> vacuousQueries = new LinkedHashSet<>(); |
36 | private final Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications = new LinkedHashMap<>(); | 37 | private final Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications = new LinkedHashMap<>(); |
37 | 38 | ||
38 | public ViatraModelQueryBuilderImpl(ModelStoreBuilder storeBuilder) { | 39 | public ViatraModelQueryBuilderImpl() { |
39 | super(storeBuilder); | ||
40 | engineOptionsBuilder = new ViatraQueryEngineOptions.Builder() | 40 | engineOptionsBuilder = new ViatraQueryEngineOptions.Builder() |
41 | .withDefaultBackend(ReteBackendFactory.INSTANCE) | 41 | .withDefaultBackend(ReteBackendFactory.INSTANCE) |
42 | .withDefaultCachingBackend(ReteBackendFactory.INSTANCE) | 42 | .withDefaultCachingBackend(ReteBackendFactory.INSTANCE) |
@@ -45,36 +45,42 @@ public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder imp | |||
45 | 45 | ||
46 | @Override | 46 | @Override |
47 | public ViatraModelQueryBuilder engineOptions(ViatraQueryEngineOptions engineOptions) { | 47 | public ViatraModelQueryBuilder engineOptions(ViatraQueryEngineOptions engineOptions) { |
48 | checkNotConfigured(); | ||
48 | engineOptionsBuilder = new ViatraQueryEngineOptions.Builder(engineOptions); | 49 | engineOptionsBuilder = new ViatraQueryEngineOptions.Builder(engineOptions); |
49 | return this; | 50 | return this; |
50 | } | 51 | } |
51 | 52 | ||
52 | @Override | 53 | @Override |
53 | public ViatraModelQueryBuilder defaultHint(QueryEvaluationHint queryEvaluationHint) { | 54 | public ViatraModelQueryBuilder defaultHint(QueryEvaluationHint queryEvaluationHint) { |
55 | checkNotConfigured(); | ||
54 | defaultHint = defaultHint.overrideBy(queryEvaluationHint); | 56 | defaultHint = defaultHint.overrideBy(queryEvaluationHint); |
55 | return this; | 57 | return this; |
56 | } | 58 | } |
57 | 59 | ||
58 | @Override | 60 | @Override |
59 | public ViatraModelQueryBuilder backend(IQueryBackendFactory queryBackendFactory) { | 61 | public ViatraModelQueryBuilder backend(IQueryBackendFactory queryBackendFactory) { |
62 | checkNotConfigured(); | ||
60 | engineOptionsBuilder.withDefaultBackend(queryBackendFactory); | 63 | engineOptionsBuilder.withDefaultBackend(queryBackendFactory); |
61 | return this; | 64 | return this; |
62 | } | 65 | } |
63 | 66 | ||
64 | @Override | 67 | @Override |
65 | public ViatraModelQueryBuilder cachingBackend(IQueryBackendFactory queryBackendFactory) { | 68 | public ViatraModelQueryBuilder cachingBackend(IQueryBackendFactory queryBackendFactory) { |
69 | checkNotConfigured(); | ||
66 | engineOptionsBuilder.withDefaultCachingBackend(queryBackendFactory); | 70 | engineOptionsBuilder.withDefaultCachingBackend(queryBackendFactory); |
67 | return this; | 71 | return this; |
68 | } | 72 | } |
69 | 73 | ||
70 | @Override | 74 | @Override |
71 | public ViatraModelQueryBuilder searchBackend(IQueryBackendFactory queryBackendFactory) { | 75 | public ViatraModelQueryBuilder searchBackend(IQueryBackendFactory queryBackendFactory) { |
76 | checkNotConfigured(); | ||
72 | engineOptionsBuilder.withDefaultSearchBackend(queryBackendFactory); | 77 | engineOptionsBuilder.withDefaultSearchBackend(queryBackendFactory); |
73 | return this; | 78 | return this; |
74 | } | 79 | } |
75 | 80 | ||
76 | @Override | 81 | @Override |
77 | public ViatraModelQueryBuilder query(AnyQuery query) { | 82 | public ViatraModelQueryBuilder query(AnyQuery query) { |
83 | checkNotConfigured(); | ||
78 | if (querySpecifications.containsKey(query) || vacuousQueries.contains(query)) { | 84 | if (querySpecifications.containsKey(query) || vacuousQueries.contains(query)) { |
79 | // Ignore duplicate queries. | 85 | // Ignore duplicate queries. |
80 | return this; | 86 | return this; |
@@ -103,20 +109,26 @@ public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder imp | |||
103 | 109 | ||
104 | @Override | 110 | @Override |
105 | public ViatraModelQueryBuilder computeHint(Function<Dnf, QueryEvaluationHint> computeHint) { | 111 | public ViatraModelQueryBuilder computeHint(Function<Dnf, QueryEvaluationHint> computeHint) { |
112 | checkNotConfigured(); | ||
106 | dnf2PQuery.setComputeHint(computeHint); | 113 | dnf2PQuery.setComputeHint(computeHint); |
107 | return this; | 114 | return this; |
108 | } | 115 | } |
109 | 116 | ||
110 | @Override | 117 | @Override |
111 | public ViatraModelQueryBuilder hint(Dnf dnf, QueryEvaluationHint queryEvaluationHint) { | 118 | public ViatraModelQueryBuilder hint(Dnf dnf, QueryEvaluationHint queryEvaluationHint) { |
119 | checkNotConfigured(); | ||
112 | dnf2PQuery.hint(dnf, queryEvaluationHint); | 120 | dnf2PQuery.hint(dnf, queryEvaluationHint); |
113 | return this; | 121 | return this; |
114 | } | 122 | } |
115 | 123 | ||
116 | @Override | 124 | @Override |
117 | public ViatraModelQueryStoreAdapterImpl createStoreAdapter(ModelStore store) { | 125 | public void doConfigure(ModelStoreBuilder storeBuilder) { |
118 | validateSymbols(store); | ||
119 | dnf2PQuery.assertNoUnusedHints(); | 126 | dnf2PQuery.assertNoUnusedHints(); |
127 | } | ||
128 | |||
129 | @Override | ||
130 | public ViatraModelQueryStoreAdapterImpl doBuild(ModelStore store) { | ||
131 | validateSymbols(store); | ||
120 | return new ViatraModelQueryStoreAdapterImpl(store, buildEngineOptions(), dnf2PQuery.getSymbolViews(), | 132 | return new ViatraModelQueryStoreAdapterImpl(store, buildEngineOptions(), dnf2PQuery.getSymbolViews(), |
121 | Collections.unmodifiableMap(querySpecifications), Collections.unmodifiableSet(vacuousQueries)); | 133 | Collections.unmodifiableMap(querySpecifications), Collections.unmodifiableSet(vacuousQueries)); |
122 | } | 134 | } |
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/DiagonalQueryTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/DiagonalQueryTest.java index 3ff01064..56ddb9b4 100644 --- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/DiagonalQueryTest.java +++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/DiagonalQueryTest.java | |||
@@ -7,7 +7,7 @@ package tools.refinery.store.query.viatra; | |||
7 | 7 | ||
8 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | 8 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; |
9 | import tools.refinery.store.model.ModelStore; | 9 | import tools.refinery.store.model.ModelStore; |
10 | import tools.refinery.store.query.ModelQuery; | 10 | import tools.refinery.store.query.ModelQueryAdapter; |
11 | import tools.refinery.store.query.dnf.Dnf; | 11 | import tools.refinery.store.query.dnf.Dnf; |
12 | import tools.refinery.store.query.dnf.Query; | 12 | import tools.refinery.store.query.dnf.Query; |
13 | import tools.refinery.store.query.viatra.tests.QueryEngineTest; | 13 | import tools.refinery.store.query.viatra.tests.QueryEngineTest; |
@@ -40,15 +40,15 @@ class DiagonalQueryTest { | |||
40 | 40 | ||
41 | var store = ModelStore.builder() | 41 | var store = ModelStore.builder() |
42 | .symbols(person, symbol) | 42 | .symbols(person, symbol) |
43 | .with(ViatraModelQuery.ADAPTER) | 43 | .with(ViatraModelQueryAdapter.builder() |
44 | .defaultHint(hint) | 44 | .defaultHint(hint) |
45 | .queries(query) | 45 | .queries(query)) |
46 | .build(); | 46 | .build(); |
47 | 47 | ||
48 | var model = store.createEmptyModel(); | 48 | var model = store.createEmptyModel(); |
49 | var personInterpretation = model.getInterpretation(person); | 49 | var personInterpretation = model.getInterpretation(person); |
50 | var symbolInterpretation = model.getInterpretation(symbol); | 50 | var symbolInterpretation = model.getInterpretation(symbol); |
51 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 51 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
52 | var queryResultSet = queryEngine.getResultSet(query); | 52 | var queryResultSet = queryEngine.getResultSet(query); |
53 | 53 | ||
54 | personInterpretation.put(Tuple.of(0), true); | 54 | personInterpretation.put(Tuple.of(0), true); |
@@ -97,15 +97,15 @@ class DiagonalQueryTest { | |||
97 | 97 | ||
98 | var store = ModelStore.builder() | 98 | var store = ModelStore.builder() |
99 | .symbols(person, symbol) | 99 | .symbols(person, symbol) |
100 | .with(ViatraModelQuery.ADAPTER) | 100 | .with(ViatraModelQueryAdapter.builder() |
101 | .defaultHint(hint) | 101 | .defaultHint(hint) |
102 | .queries(query) | 102 | .queries(query)) |
103 | .build(); | 103 | .build(); |
104 | 104 | ||
105 | var model = store.createEmptyModel(); | 105 | var model = store.createEmptyModel(); |
106 | var personInterpretation = model.getInterpretation(person); | 106 | var personInterpretation = model.getInterpretation(person); |
107 | var symbolInterpretation = model.getInterpretation(symbol); | 107 | var symbolInterpretation = model.getInterpretation(symbol); |
108 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 108 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
109 | var queryResultSet = queryEngine.getResultSet(query); | 109 | var queryResultSet = queryEngine.getResultSet(query); |
110 | 110 | ||
111 | personInterpretation.put(Tuple.of(0), true); | 111 | personInterpretation.put(Tuple.of(0), true); |
@@ -140,15 +140,15 @@ class DiagonalQueryTest { | |||
140 | 140 | ||
141 | var store = ModelStore.builder() | 141 | var store = ModelStore.builder() |
142 | .symbols(person, symbol) | 142 | .symbols(person, symbol) |
143 | .with(ViatraModelQuery.ADAPTER) | 143 | .with(ViatraModelQueryAdapter.builder() |
144 | .defaultHint(hint) | 144 | .defaultHint(hint) |
145 | .queries(query) | 145 | .queries(query)) |
146 | .build(); | 146 | .build(); |
147 | 147 | ||
148 | var model = store.createEmptyModel(); | 148 | var model = store.createEmptyModel(); |
149 | var personInterpretation = model.getInterpretation(person); | 149 | var personInterpretation = model.getInterpretation(person); |
150 | var symbolInterpretation = model.getInterpretation(symbol); | 150 | var symbolInterpretation = model.getInterpretation(symbol); |
151 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 151 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
152 | var queryResultSet = queryEngine.getResultSet(query); | 152 | var queryResultSet = queryEngine.getResultSet(query); |
153 | 153 | ||
154 | personInterpretation.put(Tuple.of(0), true); | 154 | personInterpretation.put(Tuple.of(0), true); |
@@ -198,15 +198,15 @@ class DiagonalQueryTest { | |||
198 | 198 | ||
199 | var store = ModelStore.builder() | 199 | var store = ModelStore.builder() |
200 | .symbols(person, symbol) | 200 | .symbols(person, symbol) |
201 | .with(ViatraModelQuery.ADAPTER) | 201 | .with(ViatraModelQueryAdapter.builder() |
202 | .defaultHint(hint) | 202 | .defaultHint(hint) |
203 | .queries(query) | 203 | .queries(query)) |
204 | .build(); | 204 | .build(); |
205 | 205 | ||
206 | var model = store.createEmptyModel(); | 206 | var model = store.createEmptyModel(); |
207 | var personInterpretation = model.getInterpretation(person); | 207 | var personInterpretation = model.getInterpretation(person); |
208 | var symbolInterpretation = model.getInterpretation(symbol); | 208 | var symbolInterpretation = model.getInterpretation(symbol); |
209 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 209 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
210 | var queryResultSet = queryEngine.getResultSet(query); | 210 | var queryResultSet = queryEngine.getResultSet(query); |
211 | 211 | ||
212 | personInterpretation.put(Tuple.of(0), true); | 212 | personInterpretation.put(Tuple.of(0), true); |
@@ -243,15 +243,15 @@ class DiagonalQueryTest { | |||
243 | 243 | ||
244 | var store = ModelStore.builder() | 244 | var store = ModelStore.builder() |
245 | .symbols(person, symbol) | 245 | .symbols(person, symbol) |
246 | .with(ViatraModelQuery.ADAPTER) | 246 | .with(ViatraModelQueryAdapter.builder() |
247 | .defaultHint(hint) | 247 | .defaultHint(hint) |
248 | .queries(query) | 248 | .queries(query)) |
249 | .build(); | 249 | .build(); |
250 | 250 | ||
251 | var model = store.createEmptyModel(); | 251 | var model = store.createEmptyModel(); |
252 | var personInterpretation = model.getInterpretation(person); | 252 | var personInterpretation = model.getInterpretation(person); |
253 | var symbolInterpretation = model.getInterpretation(symbol); | 253 | var symbolInterpretation = model.getInterpretation(symbol); |
254 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 254 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
255 | var queryResultSet = queryEngine.getResultSet(query); | 255 | var queryResultSet = queryEngine.getResultSet(query); |
256 | 256 | ||
257 | personInterpretation.put(Tuple.of(0), true); | 257 | personInterpretation.put(Tuple.of(0), true); |
@@ -306,15 +306,15 @@ class DiagonalQueryTest { | |||
306 | 306 | ||
307 | var store = ModelStore.builder() | 307 | var store = ModelStore.builder() |
308 | .symbols(person, symbol) | 308 | .symbols(person, symbol) |
309 | .with(ViatraModelQuery.ADAPTER) | 309 | .with(ViatraModelQueryAdapter.builder() |
310 | .defaultHint(hint) | 310 | .defaultHint(hint) |
311 | .queries(query) | 311 | .queries(query)) |
312 | .build(); | 312 | .build(); |
313 | 313 | ||
314 | var model = store.createEmptyModel(); | 314 | var model = store.createEmptyModel(); |
315 | var personInterpretation = model.getInterpretation(person); | 315 | var personInterpretation = model.getInterpretation(person); |
316 | var symbolInterpretation = model.getInterpretation(symbol); | 316 | var symbolInterpretation = model.getInterpretation(symbol); |
317 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 317 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
318 | var queryResultSet = queryEngine.getResultSet(query); | 318 | var queryResultSet = queryEngine.getResultSet(query); |
319 | 319 | ||
320 | personInterpretation.put(Tuple.of(0), true); | 320 | personInterpretation.put(Tuple.of(0), true); |
@@ -350,15 +350,15 @@ class DiagonalQueryTest { | |||
350 | 350 | ||
351 | var store = ModelStore.builder() | 351 | var store = ModelStore.builder() |
352 | .symbols(person, symbol) | 352 | .symbols(person, symbol) |
353 | .with(ViatraModelQuery.ADAPTER) | 353 | .with(ViatraModelQueryAdapter.builder() |
354 | .defaultHint(hint) | 354 | .defaultHint(hint) |
355 | .queries(query) | 355 | .queries(query)) |
356 | .build(); | 356 | .build(); |
357 | 357 | ||
358 | var model = store.createEmptyModel(); | 358 | var model = store.createEmptyModel(); |
359 | var personInterpretation = model.getInterpretation(person); | 359 | var personInterpretation = model.getInterpretation(person); |
360 | var symbolInterpretation = model.getInterpretation(symbol); | 360 | var symbolInterpretation = model.getInterpretation(symbol); |
361 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 361 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
362 | var queryResultSet = queryEngine.getResultSet(query); | 362 | var queryResultSet = queryEngine.getResultSet(query); |
363 | 363 | ||
364 | personInterpretation.put(Tuple.of(0), true); | 364 | personInterpretation.put(Tuple.of(0), true); |
@@ -404,15 +404,15 @@ class DiagonalQueryTest { | |||
404 | 404 | ||
405 | var store = ModelStore.builder() | 405 | var store = ModelStore.builder() |
406 | .symbols(person, symbol) | 406 | .symbols(person, symbol) |
407 | .with(ViatraModelQuery.ADAPTER) | 407 | .with(ViatraModelQueryAdapter.builder() |
408 | .defaultHint(hint) | 408 | .defaultHint(hint) |
409 | .queries(query) | 409 | .queries(query)) |
410 | .build(); | 410 | .build(); |
411 | 411 | ||
412 | var model = store.createEmptyModel(); | 412 | var model = store.createEmptyModel(); |
413 | var personInterpretation = model.getInterpretation(person); | 413 | var personInterpretation = model.getInterpretation(person); |
414 | var symbolInterpretation = model.getInterpretation(symbol); | 414 | var symbolInterpretation = model.getInterpretation(symbol); |
415 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 415 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
416 | var queryResultSet = queryEngine.getResultSet(query); | 416 | var queryResultSet = queryEngine.getResultSet(query); |
417 | 417 | ||
418 | personInterpretation.put(Tuple.of(0), true); | 418 | personInterpretation.put(Tuple.of(0), true); |
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/FunctionalQueryTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/FunctionalQueryTest.java index ffa5e60b..98c8cd92 100644 --- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/FunctionalQueryTest.java +++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/FunctionalQueryTest.java | |||
@@ -8,7 +8,7 @@ package tools.refinery.store.query.viatra; | |||
8 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | 8 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; |
9 | import tools.refinery.store.map.Cursor; | 9 | import tools.refinery.store.map.Cursor; |
10 | import tools.refinery.store.model.ModelStore; | 10 | import tools.refinery.store.model.ModelStore; |
11 | import tools.refinery.store.query.ModelQuery; | 11 | import tools.refinery.store.query.ModelQueryAdapter; |
12 | import tools.refinery.store.query.dnf.Dnf; | 12 | import tools.refinery.store.query.dnf.Dnf; |
13 | import tools.refinery.store.query.dnf.Query; | 13 | import tools.refinery.store.query.dnf.Query; |
14 | import tools.refinery.store.query.term.Variable; | 14 | import tools.refinery.store.query.term.Variable; |
@@ -49,15 +49,15 @@ class FunctionalQueryTest { | |||
49 | 49 | ||
50 | var store = ModelStore.builder() | 50 | var store = ModelStore.builder() |
51 | .symbols(person, age) | 51 | .symbols(person, age) |
52 | .with(ViatraModelQuery.ADAPTER) | 52 | .with(ViatraModelQueryAdapter.builder() |
53 | .defaultHint(hint) | 53 | .defaultHint(hint) |
54 | .queries(query) | 54 | .queries(query)) |
55 | .build(); | 55 | .build(); |
56 | 56 | ||
57 | var model = store.createEmptyModel(); | 57 | var model = store.createEmptyModel(); |
58 | var personInterpretation = model.getInterpretation(person); | 58 | var personInterpretation = model.getInterpretation(person); |
59 | var ageInterpretation = model.getInterpretation(age); | 59 | var ageInterpretation = model.getInterpretation(age); |
60 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 60 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
61 | var queryResultSet = queryEngine.getResultSet(query); | 61 | var queryResultSet = queryEngine.getResultSet(query); |
62 | 62 | ||
63 | personInterpretation.put(Tuple.of(0), true); | 63 | personInterpretation.put(Tuple.of(0), true); |
@@ -97,15 +97,15 @@ class FunctionalQueryTest { | |||
97 | 97 | ||
98 | var store = ModelStore.builder() | 98 | var store = ModelStore.builder() |
99 | .symbols(person, age) | 99 | .symbols(person, age) |
100 | .with(ViatraModelQuery.ADAPTER) | 100 | .with(ViatraModelQueryAdapter.builder() |
101 | .defaultHint(hint) | 101 | .defaultHint(hint) |
102 | .queries(query) | 102 | .queries(query)) |
103 | .build(); | 103 | .build(); |
104 | 104 | ||
105 | var model = store.createEmptyModel(); | 105 | var model = store.createEmptyModel(); |
106 | var personInterpretation = model.getInterpretation(person); | 106 | var personInterpretation = model.getInterpretation(person); |
107 | var ageInterpretation = model.getInterpretation(age); | 107 | var ageInterpretation = model.getInterpretation(age); |
108 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 108 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
109 | var queryResultSet = queryEngine.getResultSet(query); | 109 | var queryResultSet = queryEngine.getResultSet(query); |
110 | 110 | ||
111 | personInterpretation.put(Tuple.of(0), true); | 111 | personInterpretation.put(Tuple.of(0), true); |
@@ -141,15 +141,15 @@ class FunctionalQueryTest { | |||
141 | 141 | ||
142 | var store = ModelStore.builder() | 142 | var store = ModelStore.builder() |
143 | .symbols(person, age) | 143 | .symbols(person, age) |
144 | .with(ViatraModelQuery.ADAPTER) | 144 | .with(ViatraModelQueryAdapter.builder() |
145 | .defaultHint(hint) | 145 | .defaultHint(hint) |
146 | .queries(query) | 146 | .queries(query)) |
147 | .build(); | 147 | .build(); |
148 | 148 | ||
149 | var model = store.createEmptyModel(); | 149 | var model = store.createEmptyModel(); |
150 | var personInterpretation = model.getInterpretation(person); | 150 | var personInterpretation = model.getInterpretation(person); |
151 | var ageInterpretation = model.getInterpretation(age); | 151 | var ageInterpretation = model.getInterpretation(age); |
152 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 152 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
153 | var queryResultSet = queryEngine.getResultSet(query); | 153 | var queryResultSet = queryEngine.getResultSet(query); |
154 | 154 | ||
155 | personInterpretation.put(Tuple.of(0), true); | 155 | personInterpretation.put(Tuple.of(0), true); |
@@ -180,15 +180,15 @@ class FunctionalQueryTest { | |||
180 | 180 | ||
181 | var store = ModelStore.builder() | 181 | var store = ModelStore.builder() |
182 | .symbols(person, friend) | 182 | .symbols(person, friend) |
183 | .with(ViatraModelQuery.ADAPTER) | 183 | .with(ViatraModelQueryAdapter.builder() |
184 | .defaultHint(hint) | 184 | .defaultHint(hint) |
185 | .queries(query) | 185 | .queries(query)) |
186 | .build(); | 186 | .build(); |
187 | 187 | ||
188 | var model = store.createEmptyModel(); | 188 | var model = store.createEmptyModel(); |
189 | var personInterpretation = model.getInterpretation(person); | 189 | var personInterpretation = model.getInterpretation(person); |
190 | var friendInterpretation = model.getInterpretation(friend); | 190 | var friendInterpretation = model.getInterpretation(friend); |
191 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 191 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
192 | var queryResultSet = queryEngine.getResultSet(query); | 192 | var queryResultSet = queryEngine.getResultSet(query); |
193 | 193 | ||
194 | personInterpretation.put(Tuple.of(0), true); | 194 | personInterpretation.put(Tuple.of(0), true); |
@@ -231,15 +231,15 @@ class FunctionalQueryTest { | |||
231 | 231 | ||
232 | var store = ModelStore.builder() | 232 | var store = ModelStore.builder() |
233 | .symbols(person, friend) | 233 | .symbols(person, friend) |
234 | .with(ViatraModelQuery.ADAPTER) | 234 | .with(ViatraModelQueryAdapter.builder() |
235 | .defaultHint(hint) | 235 | .defaultHint(hint) |
236 | .queries(query) | 236 | .queries(query)) |
237 | .build(); | 237 | .build(); |
238 | 238 | ||
239 | var model = store.createEmptyModel(); | 239 | var model = store.createEmptyModel(); |
240 | var personInterpretation = model.getInterpretation(person); | 240 | var personInterpretation = model.getInterpretation(person); |
241 | var friendInterpretation = model.getInterpretation(friend); | 241 | var friendInterpretation = model.getInterpretation(friend); |
242 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 242 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
243 | var queryResultSet = queryEngine.getResultSet(query); | 243 | var queryResultSet = queryEngine.getResultSet(query); |
244 | 244 | ||
245 | personInterpretation.put(Tuple.of(0), true); | 245 | personInterpretation.put(Tuple.of(0), true); |
@@ -269,14 +269,14 @@ class FunctionalQueryTest { | |||
269 | 269 | ||
270 | var store = ModelStore.builder() | 270 | var store = ModelStore.builder() |
271 | .symbols(age) | 271 | .symbols(age) |
272 | .with(ViatraModelQuery.ADAPTER) | 272 | .with(ViatraModelQueryAdapter.builder() |
273 | .defaultHint(hint) | 273 | .defaultHint(hint) |
274 | .queries(query) | 274 | .queries(query)) |
275 | .build(); | 275 | .build(); |
276 | 276 | ||
277 | var model = store.createEmptyModel(); | 277 | var model = store.createEmptyModel(); |
278 | var ageInterpretation = model.getInterpretation(age); | 278 | var ageInterpretation = model.getInterpretation(age); |
279 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 279 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
280 | var queryResultSet = queryEngine.getResultSet(query); | 280 | var queryResultSet = queryEngine.getResultSet(query); |
281 | 281 | ||
282 | ageInterpretation.put(Tuple.of(0), 12); | 282 | ageInterpretation.put(Tuple.of(0), 12); |
@@ -306,15 +306,15 @@ class FunctionalQueryTest { | |||
306 | 306 | ||
307 | var store = ModelStore.builder() | 307 | var store = ModelStore.builder() |
308 | .symbols(person, age) | 308 | .symbols(person, age) |
309 | .with(ViatraModelQuery.ADAPTER) | 309 | .with(ViatraModelQueryAdapter.builder() |
310 | .defaultHint(hint) | 310 | .defaultHint(hint) |
311 | .queries(query) | 311 | .queries(query)) |
312 | .build(); | 312 | .build(); |
313 | 313 | ||
314 | var model = store.createEmptyModel(); | 314 | var model = store.createEmptyModel(); |
315 | var personInterpretation = model.getInterpretation(person); | 315 | var personInterpretation = model.getInterpretation(person); |
316 | var ageInterpretation = model.getInterpretation(age); | 316 | var ageInterpretation = model.getInterpretation(age); |
317 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 317 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
318 | var queryResultSet = queryEngine.getResultSet(query); | 318 | var queryResultSet = queryEngine.getResultSet(query); |
319 | 319 | ||
320 | personInterpretation.put(Tuple.of(0), true); | 320 | personInterpretation.put(Tuple.of(0), true); |
@@ -349,15 +349,15 @@ class FunctionalQueryTest { | |||
349 | 349 | ||
350 | var store = ModelStore.builder() | 350 | var store = ModelStore.builder() |
351 | .symbols(person, friend) | 351 | .symbols(person, friend) |
352 | .with(ViatraModelQuery.ADAPTER) | 352 | .with(ViatraModelQueryAdapter.builder() |
353 | .defaultHint(hint) | 353 | .defaultHint(hint) |
354 | .queries(minQuery, maxQuery) | 354 | .queries(minQuery, maxQuery)) |
355 | .build(); | 355 | .build(); |
356 | 356 | ||
357 | var model = store.createEmptyModel(); | 357 | var model = store.createEmptyModel(); |
358 | var personInterpretation = model.getInterpretation(person); | 358 | var personInterpretation = model.getInterpretation(person); |
359 | var friendInterpretation = model.getInterpretation(friend); | 359 | var friendInterpretation = model.getInterpretation(friend); |
360 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 360 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
361 | var minResultSet = queryEngine.getResultSet(minQuery); | 361 | var minResultSet = queryEngine.getResultSet(minQuery); |
362 | var maxResultSet = queryEngine.getResultSet(maxQuery); | 362 | var maxResultSet = queryEngine.getResultSet(maxQuery); |
363 | 363 | ||
@@ -408,15 +408,15 @@ class FunctionalQueryTest { | |||
408 | 408 | ||
409 | var store = ModelStore.builder() | 409 | var store = ModelStore.builder() |
410 | .symbols(person, age) | 410 | .symbols(person, age) |
411 | .with(ViatraModelQuery.ADAPTER) | 411 | .with(ViatraModelQueryAdapter.builder() |
412 | .defaultHint(hint) | 412 | .defaultHint(hint) |
413 | .queries(query) | 413 | .queries(query)) |
414 | .build(); | 414 | .build(); |
415 | 415 | ||
416 | var model = store.createEmptyModel(); | 416 | var model = store.createEmptyModel(); |
417 | var personInterpretation = model.getInterpretation(person); | 417 | var personInterpretation = model.getInterpretation(person); |
418 | var ageInterpretation = model.getInterpretation(age); | 418 | var ageInterpretation = model.getInterpretation(age); |
419 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 419 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
420 | var queryResultSet = queryEngine.getResultSet(query); | 420 | var queryResultSet = queryEngine.getResultSet(query); |
421 | 421 | ||
422 | personInterpretation.put(Tuple.of(0), true); | 422 | personInterpretation.put(Tuple.of(0), true); |
@@ -448,15 +448,15 @@ class FunctionalQueryTest { | |||
448 | 448 | ||
449 | var store = ModelStore.builder() | 449 | var store = ModelStore.builder() |
450 | .symbols(person, age) | 450 | .symbols(person, age) |
451 | .with(ViatraModelQuery.ADAPTER) | 451 | .with(ViatraModelQueryAdapter.builder() |
452 | .defaultHint(hint) | 452 | .defaultHint(hint) |
453 | .queries(query) | 453 | .queries(query)) |
454 | .build(); | 454 | .build(); |
455 | 455 | ||
456 | var model = store.createEmptyModel(); | 456 | var model = store.createEmptyModel(); |
457 | var personInterpretation = model.getInterpretation(person); | 457 | var personInterpretation = model.getInterpretation(person); |
458 | var ageInterpretation = model.getInterpretation(age); | 458 | var ageInterpretation = model.getInterpretation(age); |
459 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 459 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
460 | var queryResultSet = queryEngine.getResultSet(query); | 460 | var queryResultSet = queryEngine.getResultSet(query); |
461 | 461 | ||
462 | personInterpretation.put(Tuple.of(0), true); | 462 | personInterpretation.put(Tuple.of(0), true); |
@@ -493,16 +493,16 @@ class FunctionalQueryTest { | |||
493 | 493 | ||
494 | var store = ModelStore.builder() | 494 | var store = ModelStore.builder() |
495 | .symbols(person, age, friend) | 495 | .symbols(person, age, friend) |
496 | .with(ViatraModelQuery.ADAPTER) | 496 | .with(ViatraModelQueryAdapter.builder() |
497 | .defaultHint(hint) | 497 | .defaultHint(hint) |
498 | .query(query) | 498 | .queries(query)) |
499 | .build(); | 499 | .build(); |
500 | 500 | ||
501 | var model = store.createEmptyModel(); | 501 | var model = store.createEmptyModel(); |
502 | var personInterpretation = model.getInterpretation(person); | 502 | var personInterpretation = model.getInterpretation(person); |
503 | var ageInterpretation = model.getInterpretation(age); | 503 | var ageInterpretation = model.getInterpretation(age); |
504 | var friendInterpretation = model.getInterpretation(friend); | 504 | var friendInterpretation = model.getInterpretation(friend); |
505 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 505 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
506 | var queryResultSet = queryEngine.getResultSet(query); | 506 | var queryResultSet = queryEngine.getResultSet(query); |
507 | 507 | ||
508 | personInterpretation.put(Tuple.of(0), true); | 508 | personInterpretation.put(Tuple.of(0), true); |
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java index a90889c6..46ce37b4 100644 --- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java +++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java | |||
@@ -8,7 +8,7 @@ package tools.refinery.store.query.viatra; | |||
8 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | 8 | import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; |
9 | import org.junit.jupiter.api.Test; | 9 | import org.junit.jupiter.api.Test; |
10 | import tools.refinery.store.model.ModelStore; | 10 | import tools.refinery.store.model.ModelStore; |
11 | import tools.refinery.store.query.ModelQuery; | 11 | import tools.refinery.store.query.ModelQueryAdapter; |
12 | import tools.refinery.store.query.dnf.Dnf; | 12 | import tools.refinery.store.query.dnf.Dnf; |
13 | import tools.refinery.store.query.dnf.Query; | 13 | import tools.refinery.store.query.dnf.Query; |
14 | import tools.refinery.store.query.term.Variable; | 14 | import tools.refinery.store.query.term.Variable; |
@@ -41,15 +41,15 @@ class QueryTest { | |||
41 | 41 | ||
42 | var store = ModelStore.builder() | 42 | var store = ModelStore.builder() |
43 | .symbols(person, asset) | 43 | .symbols(person, asset) |
44 | .with(ViatraModelQuery.ADAPTER) | 44 | .with(ViatraModelQueryAdapter.builder() |
45 | .defaultHint(hint) | 45 | .defaultHint(hint) |
46 | .query(predicate) | 46 | .queries(predicate)) |
47 | .build(); | 47 | .build(); |
48 | 48 | ||
49 | var model = store.createEmptyModel(); | 49 | var model = store.createEmptyModel(); |
50 | var personInterpretation = model.getInterpretation(person); | 50 | var personInterpretation = model.getInterpretation(person); |
51 | var assetInterpretation = model.getInterpretation(asset); | 51 | var assetInterpretation = model.getInterpretation(asset); |
52 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 52 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
53 | var predicateResultSet = queryEngine.getResultSet(predicate); | 53 | var predicateResultSet = queryEngine.getResultSet(predicate); |
54 | 54 | ||
55 | personInterpretation.put(Tuple.of(0), true); | 55 | personInterpretation.put(Tuple.of(0), true); |
@@ -81,15 +81,15 @@ class QueryTest { | |||
81 | 81 | ||
82 | var store = ModelStore.builder() | 82 | var store = ModelStore.builder() |
83 | .symbols(person, friend) | 83 | .symbols(person, friend) |
84 | .with(ViatraModelQuery.ADAPTER) | 84 | .with(ViatraModelQueryAdapter.builder() |
85 | .defaultHint(hint) | 85 | .defaultHint(hint) |
86 | .queries(predicate) | 86 | .queries(predicate)) |
87 | .build(); | 87 | .build(); |
88 | 88 | ||
89 | var model = store.createEmptyModel(); | 89 | var model = store.createEmptyModel(); |
90 | var personInterpretation = model.getInterpretation(person); | 90 | var personInterpretation = model.getInterpretation(person); |
91 | var friendInterpretation = model.getInterpretation(friend); | 91 | var friendInterpretation = model.getInterpretation(friend); |
92 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 92 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
93 | var predicateResultSet = queryEngine.getResultSet(predicate); | 93 | var predicateResultSet = queryEngine.getResultSet(predicate); |
94 | 94 | ||
95 | personInterpretation.put(Tuple.of(0), true); | 95 | personInterpretation.put(Tuple.of(0), true); |
@@ -125,15 +125,15 @@ class QueryTest { | |||
125 | 125 | ||
126 | var store = ModelStore.builder() | 126 | var store = ModelStore.builder() |
127 | .symbols(person, friend) | 127 | .symbols(person, friend) |
128 | .with(ViatraModelQuery.ADAPTER) | 128 | .with(ViatraModelQueryAdapter.builder() |
129 | .defaultHint(hint) | 129 | .defaultHint(hint) |
130 | .queries(predicate) | 130 | .queries(predicate)) |
131 | .build(); | 131 | .build(); |
132 | 132 | ||
133 | var model = store.createEmptyModel(); | 133 | var model = store.createEmptyModel(); |
134 | var personInterpretation = model.getInterpretation(person); | 134 | var personInterpretation = model.getInterpretation(person); |
135 | var friendInterpretation = model.getInterpretation(friend); | 135 | var friendInterpretation = model.getInterpretation(friend); |
136 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 136 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
137 | var predicateResultSet = queryEngine.getResultSet(predicate); | 137 | var predicateResultSet = queryEngine.getResultSet(predicate); |
138 | 138 | ||
139 | personInterpretation.put(Tuple.of(0), true); | 139 | personInterpretation.put(Tuple.of(0), true); |
@@ -175,16 +175,16 @@ class QueryTest { | |||
175 | 175 | ||
176 | var store = ModelStore.builder() | 176 | var store = ModelStore.builder() |
177 | .symbols(person, animal, friend) | 177 | .symbols(person, animal, friend) |
178 | .with(ViatraModelQuery.ADAPTER) | 178 | .with(ViatraModelQueryAdapter.builder() |
179 | .defaultHint(hint) | 179 | .defaultHint(hint) |
180 | .queries(predicate) | 180 | .queries(predicate)) |
181 | .build(); | 181 | .build(); |
182 | 182 | ||
183 | var model = store.createEmptyModel(); | 183 | var model = store.createEmptyModel(); |
184 | var personInterpretation = model.getInterpretation(person); | 184 | var personInterpretation = model.getInterpretation(person); |
185 | var animalInterpretation = model.getInterpretation(animal); | 185 | var animalInterpretation = model.getInterpretation(animal); |
186 | var friendInterpretation = model.getInterpretation(friend); | 186 | var friendInterpretation = model.getInterpretation(friend); |
187 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 187 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
188 | var predicateResultSet = queryEngine.getResultSet(predicate); | 188 | var predicateResultSet = queryEngine.getResultSet(predicate); |
189 | 189 | ||
190 | personInterpretation.put(Tuple.of(0), true); | 190 | personInterpretation.put(Tuple.of(0), true); |
@@ -221,14 +221,14 @@ class QueryTest { | |||
221 | 221 | ||
222 | var store = ModelStore.builder() | 222 | var store = ModelStore.builder() |
223 | .symbols(person) | 223 | .symbols(person) |
224 | .with(ViatraModelQuery.ADAPTER) | 224 | .with(ViatraModelQueryAdapter.builder() |
225 | .defaultHint(hint) | 225 | .defaultHint(hint) |
226 | .queries(predicate) | 226 | .queries(predicate)) |
227 | .build(); | 227 | .build(); |
228 | 228 | ||
229 | var model = store.createEmptyModel(); | 229 | var model = store.createEmptyModel(); |
230 | var personInterpretation = model.getInterpretation(person); | 230 | var personInterpretation = model.getInterpretation(person); |
231 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 231 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
232 | var predicateResultSet = queryEngine.getResultSet(predicate); | 232 | var predicateResultSet = queryEngine.getResultSet(predicate); |
233 | 233 | ||
234 | personInterpretation.put(Tuple.of(0), true); | 234 | personInterpretation.put(Tuple.of(0), true); |
@@ -262,15 +262,15 @@ class QueryTest { | |||
262 | 262 | ||
263 | var store = ModelStore.builder() | 263 | var store = ModelStore.builder() |
264 | .symbols(person, friend) | 264 | .symbols(person, friend) |
265 | .with(ViatraModelQuery.ADAPTER) | 265 | .with(ViatraModelQueryAdapter.builder() |
266 | .defaultHint(hint) | 266 | .defaultHint(hint) |
267 | .queries(predicate) | 267 | .queries(predicate)) |
268 | .build(); | 268 | .build(); |
269 | 269 | ||
270 | var model = store.createEmptyModel(); | 270 | var model = store.createEmptyModel(); |
271 | var personInterpretation = model.getInterpretation(person); | 271 | var personInterpretation = model.getInterpretation(person); |
272 | var friendInterpretation = model.getInterpretation(friend); | 272 | var friendInterpretation = model.getInterpretation(friend); |
273 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 273 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
274 | var predicateResultSet = queryEngine.getResultSet(predicate); | 274 | var predicateResultSet = queryEngine.getResultSet(predicate); |
275 | 275 | ||
276 | personInterpretation.put(Tuple.of(0), true); | 276 | personInterpretation.put(Tuple.of(0), true); |
@@ -312,15 +312,15 @@ class QueryTest { | |||
312 | 312 | ||
313 | var store = ModelStore.builder() | 313 | var store = ModelStore.builder() |
314 | .symbols(person, friend) | 314 | .symbols(person, friend) |
315 | .with(ViatraModelQuery.ADAPTER) | 315 | .with(ViatraModelQueryAdapter.builder() |
316 | .defaultHint(hint) | 316 | .defaultHint(hint) |
317 | .queries(predicate) | 317 | .queries(predicate)) |
318 | .build(); | 318 | .build(); |
319 | 319 | ||
320 | var model = store.createEmptyModel(); | 320 | var model = store.createEmptyModel(); |
321 | var personInterpretation = model.getInterpretation(person); | 321 | var personInterpretation = model.getInterpretation(person); |
322 | var friendInterpretation = model.getInterpretation(friend); | 322 | var friendInterpretation = model.getInterpretation(friend); |
323 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 323 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
324 | var predicateResultSet = queryEngine.getResultSet(predicate); | 324 | var predicateResultSet = queryEngine.getResultSet(predicate); |
325 | 325 | ||
326 | personInterpretation.put(Tuple.of(0), true); | 326 | personInterpretation.put(Tuple.of(0), true); |
@@ -355,15 +355,15 @@ class QueryTest { | |||
355 | 355 | ||
356 | var store = ModelStore.builder() | 356 | var store = ModelStore.builder() |
357 | .symbols(person, friend) | 357 | .symbols(person, friend) |
358 | .with(ViatraModelQuery.ADAPTER) | 358 | .with(ViatraModelQueryAdapter.builder() |
359 | .defaultHint(hint) | 359 | .defaultHint(hint) |
360 | .queries(predicate) | 360 | .queries(predicate)) |
361 | .build(); | 361 | .build(); |
362 | 362 | ||
363 | var model = store.createEmptyModel(); | 363 | var model = store.createEmptyModel(); |
364 | var personInterpretation = model.getInterpretation(person); | 364 | var personInterpretation = model.getInterpretation(person); |
365 | var friendInterpretation = model.getInterpretation(friend); | 365 | var friendInterpretation = model.getInterpretation(friend); |
366 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 366 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
367 | var predicateResultSet = queryEngine.getResultSet(predicate); | 367 | var predicateResultSet = queryEngine.getResultSet(predicate); |
368 | 368 | ||
369 | personInterpretation.put(Tuple.of(0), true); | 369 | personInterpretation.put(Tuple.of(0), true); |
@@ -413,15 +413,15 @@ class QueryTest { | |||
413 | 413 | ||
414 | var store = ModelStore.builder() | 414 | var store = ModelStore.builder() |
415 | .symbols(person, friend) | 415 | .symbols(person, friend) |
416 | .with(ViatraModelQuery.ADAPTER) | 416 | .with(ViatraModelQueryAdapter.builder() |
417 | .defaultHint(hint) | 417 | .defaultHint(hint) |
418 | .queries(predicate) | 418 | .queries(predicate)) |
419 | .build(); | 419 | .build(); |
420 | 420 | ||
421 | var model = store.createEmptyModel(); | 421 | var model = store.createEmptyModel(); |
422 | var personInterpretation = model.getInterpretation(person); | 422 | var personInterpretation = model.getInterpretation(person); |
423 | var friendInterpretation = model.getInterpretation(friend); | 423 | var friendInterpretation = model.getInterpretation(friend); |
424 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 424 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
425 | var predicateResultSet = queryEngine.getResultSet(predicate); | 425 | var predicateResultSet = queryEngine.getResultSet(predicate); |
426 | 426 | ||
427 | personInterpretation.put(Tuple.of(0), true); | 427 | personInterpretation.put(Tuple.of(0), true); |
@@ -461,15 +461,15 @@ class QueryTest { | |||
461 | 461 | ||
462 | var store = ModelStore.builder() | 462 | var store = ModelStore.builder() |
463 | .symbols(person, friend) | 463 | .symbols(person, friend) |
464 | .with(ViatraModelQuery.ADAPTER) | 464 | .with(ViatraModelQueryAdapter.builder() |
465 | .defaultHint(hint) | 465 | .defaultHint(hint) |
466 | .queries(predicate) | 466 | .queries(predicate)) |
467 | .build(); | 467 | .build(); |
468 | 468 | ||
469 | var model = store.createEmptyModel(); | 469 | var model = store.createEmptyModel(); |
470 | var personInterpretation = model.getInterpretation(person); | 470 | var personInterpretation = model.getInterpretation(person); |
471 | var friendInterpretation = model.getInterpretation(friend); | 471 | var friendInterpretation = model.getInterpretation(friend); |
472 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 472 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
473 | var predicateResultSet = queryEngine.getResultSet(predicate); | 473 | var predicateResultSet = queryEngine.getResultSet(predicate); |
474 | 474 | ||
475 | personInterpretation.put(Tuple.of(0), true); | 475 | personInterpretation.put(Tuple.of(0), true); |
@@ -511,15 +511,15 @@ class QueryTest { | |||
511 | 511 | ||
512 | var store = ModelStore.builder() | 512 | var store = ModelStore.builder() |
513 | .symbols(person, friend) | 513 | .symbols(person, friend) |
514 | .with(ViatraModelQuery.ADAPTER) | 514 | .with(ViatraModelQueryAdapter.builder() |
515 | .defaultHint(hint) | 515 | .defaultHint(hint) |
516 | .queries(predicate) | 516 | .queries(predicate)) |
517 | .build(); | 517 | .build(); |
518 | 518 | ||
519 | var model = store.createEmptyModel(); | 519 | var model = store.createEmptyModel(); |
520 | var personInterpretation = model.getInterpretation(person); | 520 | var personInterpretation = model.getInterpretation(person); |
521 | var friendInterpretation = model.getInterpretation(friend); | 521 | var friendInterpretation = model.getInterpretation(friend); |
522 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 522 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
523 | var predicateResultSet = queryEngine.getResultSet(predicate); | 523 | var predicateResultSet = queryEngine.getResultSet(predicate); |
524 | 524 | ||
525 | personInterpretation.put(Tuple.of(0), true); | 525 | personInterpretation.put(Tuple.of(0), true); |
@@ -553,15 +553,15 @@ class QueryTest { | |||
553 | 553 | ||
554 | var store = ModelStore.builder() | 554 | var store = ModelStore.builder() |
555 | .symbols(person, friend) | 555 | .symbols(person, friend) |
556 | .with(ViatraModelQuery.ADAPTER) | 556 | .with(ViatraModelQueryAdapter.builder() |
557 | .defaultHint(hint) | 557 | .defaultHint(hint) |
558 | .queries(predicate) | 558 | .queries(predicate)) |
559 | .build(); | 559 | .build(); |
560 | 560 | ||
561 | var model = store.createEmptyModel(); | 561 | var model = store.createEmptyModel(); |
562 | var personInterpretation = model.getInterpretation(person); | 562 | var personInterpretation = model.getInterpretation(person); |
563 | var friendInterpretation = model.getInterpretation(friend); | 563 | var friendInterpretation = model.getInterpretation(friend); |
564 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 564 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
565 | var predicateResultSet = queryEngine.getResultSet(predicate); | 565 | var predicateResultSet = queryEngine.getResultSet(predicate); |
566 | 566 | ||
567 | personInterpretation.put(Tuple.of(0), true); | 567 | personInterpretation.put(Tuple.of(0), true); |
@@ -610,15 +610,15 @@ class QueryTest { | |||
610 | 610 | ||
611 | var store = ModelStore.builder() | 611 | var store = ModelStore.builder() |
612 | .symbols(person, friend) | 612 | .symbols(person, friend) |
613 | .with(ViatraModelQuery.ADAPTER) | 613 | .with(ViatraModelQueryAdapter.builder() |
614 | .defaultHint(hint) | 614 | .defaultHint(hint) |
615 | .queries(predicate) | 615 | .queries(predicate)) |
616 | .build(); | 616 | .build(); |
617 | 617 | ||
618 | var model = store.createEmptyModel(); | 618 | var model = store.createEmptyModel(); |
619 | var personInterpretation = model.getInterpretation(person); | 619 | var personInterpretation = model.getInterpretation(person); |
620 | var friendInterpretation = model.getInterpretation(friend); | 620 | var friendInterpretation = model.getInterpretation(friend); |
621 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 621 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
622 | var predicateResultSet = queryEngine.getResultSet(predicate); | 622 | var predicateResultSet = queryEngine.getResultSet(predicate); |
623 | 623 | ||
624 | personInterpretation.put(Tuple.of(0), true); | 624 | personInterpretation.put(Tuple.of(0), true); |
@@ -658,15 +658,15 @@ class QueryTest { | |||
658 | 658 | ||
659 | var store = ModelStore.builder() | 659 | var store = ModelStore.builder() |
660 | .symbols(person, age) | 660 | .symbols(person, age) |
661 | .with(ViatraModelQuery.ADAPTER) | 661 | .with(ViatraModelQueryAdapter.builder() |
662 | .defaultHint(hint) | 662 | .defaultHint(hint) |
663 | .queries(query) | 663 | .queries(query)) |
664 | .build(); | 664 | .build(); |
665 | 665 | ||
666 | var model = store.createEmptyModel(); | 666 | var model = store.createEmptyModel(); |
667 | var personInterpretation = model.getInterpretation(person); | 667 | var personInterpretation = model.getInterpretation(person); |
668 | var ageInterpretation = model.getInterpretation(age); | 668 | var ageInterpretation = model.getInterpretation(age); |
669 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 669 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
670 | var queryResultSet = queryEngine.getResultSet(query); | 670 | var queryResultSet = queryEngine.getResultSet(query); |
671 | 671 | ||
672 | personInterpretation.put(Tuple.of(0), true); | 672 | personInterpretation.put(Tuple.of(0), true); |
@@ -691,13 +691,13 @@ class QueryTest { | |||
691 | 691 | ||
692 | var store = ModelStore.builder() | 692 | var store = ModelStore.builder() |
693 | .symbols(person) | 693 | .symbols(person) |
694 | .with(ViatraModelQuery.ADAPTER) | 694 | .with(ViatraModelQueryAdapter.builder() |
695 | .queries(predicate) | 695 | .queries(predicate)) |
696 | .build(); | 696 | .build(); |
697 | 697 | ||
698 | var model = store.createEmptyModel(); | 698 | var model = store.createEmptyModel(); |
699 | var personInterpretation = model.getInterpretation(person); | 699 | var personInterpretation = model.getInterpretation(person); |
700 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 700 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
701 | var predicateResultSet = queryEngine.getResultSet(predicate); | 701 | var predicateResultSet = queryEngine.getResultSet(predicate); |
702 | 702 | ||
703 | personInterpretation.put(Tuple.of(0), true); | 703 | personInterpretation.put(Tuple.of(0), true); |
@@ -713,8 +713,7 @@ class QueryTest { | |||
713 | var p1 = Variable.of("p1"); | 713 | var p1 = Variable.of("p1"); |
714 | var predicate = Query.builder("AlwaysTrue").parameters(p1).clause().build(); | 714 | var predicate = Query.builder("AlwaysTrue").parameters(p1).clause().build(); |
715 | 715 | ||
716 | var storeBuilder = ModelStore.builder().symbols(person); | 716 | var queryBuilder = ViatraModelQueryAdapter.builder(); |
717 | var queryBuilder = storeBuilder.with(ViatraModelQuery.ADAPTER); | ||
718 | 717 | ||
719 | assertThrows(IllegalArgumentException.class, () -> queryBuilder.queries(predicate)); | 718 | assertThrows(IllegalArgumentException.class, () -> queryBuilder.queries(predicate)); |
720 | } | 719 | } |
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTransactionTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTransactionTest.java index 9de2655f..6860ece9 100644 --- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTransactionTest.java +++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTransactionTest.java | |||
@@ -9,7 +9,7 @@ import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint; | |||
9 | import org.junit.jupiter.api.Disabled; | 9 | import org.junit.jupiter.api.Disabled; |
10 | import org.junit.jupiter.api.Test; | 10 | import org.junit.jupiter.api.Test; |
11 | import tools.refinery.store.model.ModelStore; | 11 | import tools.refinery.store.model.ModelStore; |
12 | import tools.refinery.store.query.ModelQuery; | 12 | import tools.refinery.store.query.ModelQueryAdapter; |
13 | import tools.refinery.store.query.dnf.Query; | 13 | import tools.refinery.store.query.dnf.Query; |
14 | import tools.refinery.store.query.view.FilteredView; | 14 | import tools.refinery.store.query.view.FilteredView; |
15 | import tools.refinery.store.query.view.FunctionView; | 15 | import tools.refinery.store.query.view.FunctionView; |
@@ -35,13 +35,13 @@ class QueryTransactionTest { | |||
35 | 35 | ||
36 | var store = ModelStore.builder() | 36 | var store = ModelStore.builder() |
37 | .symbols(person) | 37 | .symbols(person) |
38 | .with(ViatraModelQuery.ADAPTER) | 38 | .with(ViatraModelQueryAdapter.builder() |
39 | .queries(predicate) | 39 | .queries(predicate)) |
40 | .build(); | 40 | .build(); |
41 | 41 | ||
42 | var model = store.createEmptyModel(); | 42 | var model = store.createEmptyModel(); |
43 | var personInterpretation = model.getInterpretation(person); | 43 | var personInterpretation = model.getInterpretation(person); |
44 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 44 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
45 | var predicateResultSet = queryEngine.getResultSet(predicate); | 45 | var predicateResultSet = queryEngine.getResultSet(predicate); |
46 | 46 | ||
47 | assertResults(Map.of( | 47 | assertResults(Map.of( |
@@ -102,14 +102,14 @@ class QueryTransactionTest { | |||
102 | 102 | ||
103 | var store = ModelStore.builder() | 103 | var store = ModelStore.builder() |
104 | .symbols(person) | 104 | .symbols(person) |
105 | .with(ViatraModelQuery.ADAPTER) | 105 | .with(ViatraModelQueryAdapter.builder() |
106 | .defaultHint(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.DEFAULT_SEARCH)) | 106 | .defaultHint(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.DEFAULT_SEARCH)) |
107 | .queries(predicate) | 107 | .queries(predicate)) |
108 | .build(); | 108 | .build(); |
109 | 109 | ||
110 | var model = store.createEmptyModel(); | 110 | var model = store.createEmptyModel(); |
111 | var personInterpretation = model.getInterpretation(person); | 111 | var personInterpretation = model.getInterpretation(person); |
112 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 112 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
113 | var predicateResultSet = queryEngine.getResultSet(predicate); | 113 | var predicateResultSet = queryEngine.getResultSet(predicate); |
114 | 114 | ||
115 | assertResults(Map.of( | 115 | assertResults(Map.of( |
@@ -153,14 +153,14 @@ class QueryTransactionTest { | |||
153 | 153 | ||
154 | var store = ModelStore.builder() | 154 | var store = ModelStore.builder() |
155 | .symbols(person, asset) | 155 | .symbols(person, asset) |
156 | .with(ViatraModelQuery.ADAPTER) | 156 | .with(ViatraModelQueryAdapter.builder() |
157 | .queries(predicate) | 157 | .queries(predicate)) |
158 | .build(); | 158 | .build(); |
159 | 159 | ||
160 | var model = store.createEmptyModel(); | 160 | var model = store.createEmptyModel(); |
161 | var personInterpretation = model.getInterpretation(person); | 161 | var personInterpretation = model.getInterpretation(person); |
162 | var assetInterpretation = model.getInterpretation(asset); | 162 | var assetInterpretation = model.getInterpretation(asset); |
163 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 163 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
164 | var predicateResultSet = queryEngine.getResultSet(predicate); | 164 | var predicateResultSet = queryEngine.getResultSet(predicate); |
165 | 165 | ||
166 | assertFalse(queryEngine.hasPendingChanges()); | 166 | assertFalse(queryEngine.hasPendingChanges()); |
@@ -226,14 +226,14 @@ class QueryTransactionTest { | |||
226 | 226 | ||
227 | var store = ModelStore.builder() | 227 | var store = ModelStore.builder() |
228 | .symbols(person, age) | 228 | .symbols(person, age) |
229 | .with(ViatraModelQuery.ADAPTER) | 229 | .with(ViatraModelQueryAdapter.builder() |
230 | .query(query) | 230 | .queries(query)) |
231 | .build(); | 231 | .build(); |
232 | 232 | ||
233 | var model = store.createEmptyModel(); | 233 | var model = store.createEmptyModel(); |
234 | var personInterpretation = model.getInterpretation(person); | 234 | var personInterpretation = model.getInterpretation(person); |
235 | var ageInterpretation = model.getInterpretation(age); | 235 | var ageInterpretation = model.getInterpretation(age); |
236 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 236 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
237 | var queryResultSet = queryEngine.getResultSet(query); | 237 | var queryResultSet = queryEngine.getResultSet(query); |
238 | 238 | ||
239 | personInterpretation.put(Tuple.of(0), true); | 239 | personInterpretation.put(Tuple.of(0), true); |
@@ -268,14 +268,14 @@ class QueryTransactionTest { | |||
268 | 268 | ||
269 | var store = ModelStore.builder() | 269 | var store = ModelStore.builder() |
270 | .symbols(person, age) | 270 | .symbols(person, age) |
271 | .with(ViatraModelQuery.ADAPTER) | 271 | .with(ViatraModelQueryAdapter.builder() |
272 | .query(query) | 272 | .queries(query)) |
273 | .build(); | 273 | .build(); |
274 | 274 | ||
275 | var model = store.createEmptyModel(); | 275 | var model = store.createEmptyModel(); |
276 | var personInterpretation = model.getInterpretation(person); | 276 | var personInterpretation = model.getInterpretation(person); |
277 | var ageInterpretation = model.getInterpretation(age); | 277 | var ageInterpretation = model.getInterpretation(age); |
278 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 278 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
279 | var queryResultSet = queryEngine.getResultSet(query); | 279 | var queryResultSet = queryEngine.getResultSet(query); |
280 | 280 | ||
281 | personInterpretation.put(Tuple.of(0), true); | 281 | personInterpretation.put(Tuple.of(0), true); |
@@ -306,13 +306,13 @@ class QueryTransactionTest { | |||
306 | 306 | ||
307 | var store = ModelStore.builder() | 307 | var store = ModelStore.builder() |
308 | .symbols(person) | 308 | .symbols(person) |
309 | .with(ViatraModelQuery.ADAPTER) | 309 | .with(ViatraModelQueryAdapter.builder() |
310 | .queries(predicate) | 310 | .queries(predicate)) |
311 | .build(); | 311 | .build(); |
312 | 312 | ||
313 | var model = store.createEmptyModel(); | 313 | var model = store.createEmptyModel(); |
314 | var personInterpretation = model.getInterpretation(person); | 314 | var personInterpretation = model.getInterpretation(person); |
315 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 315 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
316 | var predicateResultSet = queryEngine.getResultSet(predicate); | 316 | var predicateResultSet = queryEngine.getResultSet(predicate); |
317 | 317 | ||
318 | personInterpretation.put(Tuple.of(0), true); | 318 | personInterpretation.put(Tuple.of(0), true); |
@@ -360,13 +360,13 @@ class QueryTransactionTest { | |||
360 | 360 | ||
361 | var store = ModelStore.builder() | 361 | var store = ModelStore.builder() |
362 | .symbols(person) | 362 | .symbols(person) |
363 | .with(ViatraModelQuery.ADAPTER) | 363 | .with(ViatraModelQueryAdapter.builder() |
364 | .queries(predicate) | 364 | .queries(predicate)) |
365 | .build(); | 365 | .build(); |
366 | 366 | ||
367 | var model = store.createEmptyModel(); | 367 | var model = store.createEmptyModel(); |
368 | var personInterpretation = model.getInterpretation(person); | 368 | var personInterpretation = model.getInterpretation(person); |
369 | var queryEngine = model.getAdapter(ModelQuery.ADAPTER); | 369 | var queryEngine = model.getAdapter(ModelQueryAdapter.class); |
370 | var predicateResultSet = queryEngine.getResultSet(predicate); | 370 | var predicateResultSet = queryEngine.getResultSet(predicate); |
371 | 371 | ||
372 | personInterpretation.put(Tuple.of(0), true); | 372 | personInterpretation.put(Tuple.of(0), true); |
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQuery.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQuery.java deleted file mode 100644 index 60698498..00000000 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQuery.java +++ /dev/null | |||
@@ -1,16 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.query; | ||
7 | |||
8 | import tools.refinery.store.adapter.ModelAdapterType; | ||
9 | |||
10 | public final class ModelQuery extends ModelAdapterType<ModelQueryAdapter, ModelQueryStoreAdapter, ModelQueryBuilder> { | ||
11 | public static final ModelQuery ADAPTER = new ModelQuery(); | ||
12 | |||
13 | private ModelQuery() { | ||
14 | super(ModelQueryAdapter.class, ModelQueryStoreAdapter.class, ModelQueryBuilder.class); | ||
15 | } | ||
16 | } | ||
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQueryBuilder.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQueryBuilder.java index 76d6c3ba..c62a95b5 100644 --- a/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQueryBuilder.java +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQueryBuilder.java | |||
@@ -26,5 +26,5 @@ public interface ModelQueryBuilder extends ModelAdapterBuilder { | |||
26 | ModelQueryBuilder query(AnyQuery query); | 26 | ModelQueryBuilder query(AnyQuery query); |
27 | 27 | ||
28 | @Override | 28 | @Override |
29 | ModelQueryStoreAdapter createStoreAdapter(ModelStore store); | 29 | ModelQueryStoreAdapter build(ModelStore store); |
30 | } | 30 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java deleted file mode 100644 index 3d3df2b2..00000000 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.reasoning; | ||
7 | |||
8 | import tools.refinery.store.reasoning.internal.ReasoningBuilderImpl; | ||
9 | import tools.refinery.store.adapter.ModelAdapterBuilderFactory; | ||
10 | import tools.refinery.store.model.ModelStoreBuilder; | ||
11 | import tools.refinery.store.reasoning.representation.PartialRelation; | ||
12 | |||
13 | public final class Reasoning extends ModelAdapterBuilderFactory<ReasoningAdapter, | ||
14 | ReasoningStoreAdapter, ReasoningBuilder> { | ||
15 | public static final Reasoning ADAPTER = new Reasoning(); | ||
16 | |||
17 | public static final PartialRelation EXISTS = new PartialRelation("exists", 1); | ||
18 | |||
19 | public static final PartialRelation EQUALS = new PartialRelation("equals", 1); | ||
20 | |||
21 | private Reasoning() { | ||
22 | super(ReasoningAdapter.class, ReasoningStoreAdapter.class, ReasoningBuilder.class); | ||
23 | } | ||
24 | |||
25 | @Override | ||
26 | public ReasoningBuilder createBuilder(ModelStoreBuilder storeBuilder) { | ||
27 | return new ReasoningBuilderImpl(storeBuilder); | ||
28 | } | ||
29 | } | ||
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java index 8dedddf7..8f319242 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java | |||
@@ -6,12 +6,15 @@ | |||
6 | package tools.refinery.store.reasoning; | 6 | package tools.refinery.store.reasoning; |
7 | 7 | ||
8 | import tools.refinery.store.adapter.ModelAdapter; | 8 | import tools.refinery.store.adapter.ModelAdapter; |
9 | import tools.refinery.store.query.ResultSet; | ||
10 | import tools.refinery.store.query.dnf.Dnf; | ||
9 | import tools.refinery.store.reasoning.representation.AnyPartialSymbol; | 11 | import tools.refinery.store.reasoning.representation.AnyPartialSymbol; |
12 | import tools.refinery.store.reasoning.representation.PartialRelation; | ||
10 | import tools.refinery.store.reasoning.representation.PartialSymbol; | 13 | import tools.refinery.store.reasoning.representation.PartialSymbol; |
11 | import tools.refinery.store.query.dnf.Dnf; | ||
12 | import tools.refinery.store.query.ResultSet; | ||
13 | 14 | ||
14 | public interface ReasoningAdapter extends ModelAdapter { | 15 | public interface ReasoningAdapter extends ModelAdapter { |
16 | PartialRelation EXISTS = new PartialRelation("exists", 1); | ||
17 | |||
15 | @Override | 18 | @Override |
16 | ReasoningStoreAdapter getStoreAdapter(); | 19 | ReasoningStoreAdapter getStoreAdapter(); |
17 | 20 | ||
@@ -23,5 +26,5 @@ public interface ReasoningAdapter extends ModelAdapter { | |||
23 | 26 | ||
24 | <A, C> PartialInterpretation<A, C> getPartialInterpretation(PartialSymbol<A, C> partialSymbol); | 27 | <A, C> PartialInterpretation<A, C> getPartialInterpretation(PartialSymbol<A, C> partialSymbol); |
25 | 28 | ||
26 | ResultSet getLiftedResultSet(Dnf query); | 29 | ResultSet<Boolean> getLiftedResultSet(Dnf query); |
27 | } | 30 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java index df7b6e4d..d3a337e8 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java | |||
@@ -29,5 +29,5 @@ public interface ReasoningBuilder extends ModelAdapterBuilder { | |||
29 | Dnf lift(Modality modality, Dnf query); | 29 | Dnf lift(Modality modality, Dnf query); |
30 | 30 | ||
31 | @Override | 31 | @Override |
32 | ReasoningStoreAdapter createStoreAdapter(ModelStore store); | 32 | ReasoningStoreAdapter build(ModelStore store); |
33 | } | 33 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java index 96514d36..33b6f3c6 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java | |||
@@ -37,7 +37,7 @@ public class ReasoningAdapterImpl implements ReasoningAdapter { | |||
37 | } | 37 | } |
38 | 38 | ||
39 | @Override | 39 | @Override |
40 | public ResultSet getLiftedResultSet(Dnf query) { | 40 | public ResultSet<Boolean> getLiftedResultSet(Dnf query) { |
41 | return null; | 41 | return null; |
42 | } | 42 | } |
43 | } | 43 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java index 49f7c7d3..aa71496c 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java | |||
@@ -7,16 +7,12 @@ package tools.refinery.store.reasoning.internal; | |||
7 | 7 | ||
8 | import tools.refinery.store.adapter.AbstractModelAdapterBuilder; | 8 | import tools.refinery.store.adapter.AbstractModelAdapterBuilder; |
9 | import tools.refinery.store.model.ModelStore; | 9 | import tools.refinery.store.model.ModelStore; |
10 | import tools.refinery.store.model.ModelStoreBuilder; | 10 | import tools.refinery.store.query.dnf.Dnf; |
11 | import tools.refinery.store.reasoning.ReasoningBuilder; | 11 | import tools.refinery.store.reasoning.ReasoningBuilder; |
12 | import tools.refinery.store.reasoning.literal.Modality; | 12 | import tools.refinery.store.reasoning.literal.Modality; |
13 | import tools.refinery.store.query.dnf.Dnf; | ||
14 | |||
15 | public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder implements ReasoningBuilder { | ||
16 | public ReasoningBuilderImpl(ModelStoreBuilder storeBuilder) { | ||
17 | super(storeBuilder); | ||
18 | } | ||
19 | 13 | ||
14 | public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder<ReasoningStoreAdapterImpl> | ||
15 | implements ReasoningBuilder { | ||
20 | @Override | 16 | @Override |
21 | public ReasoningBuilder liftedQuery(Dnf liftedQuery) { | 17 | public ReasoningBuilder liftedQuery(Dnf liftedQuery) { |
22 | return null; | 18 | return null; |
@@ -24,11 +20,12 @@ public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder implements | |||
24 | 20 | ||
25 | @Override | 21 | @Override |
26 | public Dnf lift(Modality modality, Dnf query) { | 22 | public Dnf lift(Modality modality, Dnf query) { |
23 | checkNotConfigured(); | ||
27 | return null; | 24 | return null; |
28 | } | 25 | } |
29 | 26 | ||
30 | @Override | 27 | @Override |
31 | public ReasoningStoreAdapterImpl createStoreAdapter(ModelStore store) { | 28 | public ReasoningStoreAdapterImpl doBuild(ModelStore store) { |
32 | return null; | 29 | return null; |
33 | } | 30 | } |
34 | } | 31 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java index 157f06e8..594005f1 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java | |||
@@ -14,7 +14,7 @@ import tools.refinery.store.query.literal.CallPolarity; | |||
14 | import tools.refinery.store.query.literal.Literal; | 14 | import tools.refinery.store.query.literal.Literal; |
15 | import tools.refinery.store.query.term.DataVariable; | 15 | import tools.refinery.store.query.term.DataVariable; |
16 | import tools.refinery.store.query.term.Variable; | 16 | import tools.refinery.store.query.term.Variable; |
17 | import tools.refinery.store.reasoning.Reasoning; | 17 | import tools.refinery.store.reasoning.ReasoningAdapter; |
18 | import tools.refinery.store.reasoning.literal.ModalConstraint; | 18 | import tools.refinery.store.reasoning.literal.ModalConstraint; |
19 | import tools.refinery.store.reasoning.literal.Modality; | 19 | import tools.refinery.store.reasoning.literal.Modality; |
20 | import tools.refinery.store.reasoning.literal.PartialLiterals; | 20 | import tools.refinery.store.reasoning.literal.PartialLiterals; |
@@ -74,8 +74,8 @@ public class DnfLifter { | |||
74 | } | 74 | } |
75 | for (var quantifiedVariable : quantifiedVariables) { | 75 | for (var quantifiedVariable : quantifiedVariables) { |
76 | // Quantify over data variables that are not already quantified with the expected modality. | 76 | // Quantify over data variables that are not already quantified with the expected modality. |
77 | liftedLiterals.add(new CallLiteral(CallPolarity.POSITIVE, new ModalConstraint(modality, Reasoning.EXISTS), | 77 | liftedLiterals.add(new CallLiteral(CallPolarity.POSITIVE, |
78 | List.of(quantifiedVariable))); | 78 | new ModalConstraint(modality, ReasoningAdapter.EXISTS), List.of(quantifiedVariable))); |
79 | } | 79 | } |
80 | builder.clause(liftedLiterals); | 80 | builder.clause(liftedLiterals); |
81 | return changed || !quantifiedVariables.isEmpty(); | 81 | return changed || !quantifiedVariables.isEmpty(); |
@@ -87,7 +87,7 @@ public class DnfLifter { | |||
87 | callLiteral.getPolarity() == CallPolarity.POSITIVE && | 87 | callLiteral.getPolarity() == CallPolarity.POSITIVE && |
88 | callLiteral.getTarget() instanceof ModalConstraint modalConstraint && | 88 | callLiteral.getTarget() instanceof ModalConstraint modalConstraint && |
89 | modalConstraint.modality() == modality && | 89 | modalConstraint.modality() == modality && |
90 | modalConstraint.constraint().equals(Reasoning.EXISTS)) { | 90 | modalConstraint.constraint().equals(ReasoningAdapter.EXISTS)) { |
91 | return callLiteral.getArguments().get(0); | 91 | return callLiteral.getArguments().get(0); |
92 | } | 92 | } |
93 | return null; | 93 | return null; |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java index e4c702ea..0beee248 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java | |||
@@ -5,7 +5,7 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.reasoning.rule; | 6 | package tools.refinery.store.reasoning.rule; |
7 | 7 | ||
8 | import tools.refinery.store.reasoning.Reasoning; | 8 | import tools.refinery.store.reasoning.ReasoningAdapter; |
9 | import tools.refinery.store.reasoning.representation.PartialRelation; | 9 | import tools.refinery.store.reasoning.representation.PartialRelation; |
10 | import tools.refinery.store.model.Model; | 10 | import tools.refinery.store.model.Model; |
11 | import tools.refinery.store.query.term.Variable; | 11 | import tools.refinery.store.query.term.Variable; |
@@ -28,7 +28,7 @@ public record RelationRefinementAction(PartialRelation target, List<Variable> ar | |||
28 | 28 | ||
29 | @Override | 29 | @Override |
30 | public RuleActionExecutor createExecutor(int[] argumentIndices, Model model) { | 30 | public RuleActionExecutor createExecutor(int[] argumentIndices, Model model) { |
31 | var targetInterpretation = model.getAdapter(Reasoning.ADAPTER).getPartialInterpretation(target); | 31 | var targetInterpretation = model.getAdapter(ReasoningAdapter.class).getPartialInterpretation(target); |
32 | return activationTuple -> { | 32 | return activationTuple -> { |
33 | int arity = argumentIndices.length; | 33 | int arity = argumentIndices.length; |
34 | var arguments = new int[arity]; | 34 | var arguments = new int[arity]; |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java index 7f01122b..6e44a7d7 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java | |||
@@ -6,7 +6,6 @@ | |||
6 | package tools.refinery.store.reasoning.translator; | 6 | package tools.refinery.store.reasoning.translator; |
7 | 7 | ||
8 | import tools.refinery.store.model.Model; | 8 | import tools.refinery.store.model.Model; |
9 | import tools.refinery.store.model.ModelStoreBuilder; | ||
10 | import tools.refinery.store.reasoning.ReasoningBuilder; | 9 | import tools.refinery.store.reasoning.ReasoningBuilder; |
11 | 10 | ||
12 | import java.util.Collection; | 11 | import java.util.Collection; |
@@ -23,10 +22,6 @@ public abstract class TranslationUnit { | |||
23 | configureReasoningBuilder(); | 22 | configureReasoningBuilder(); |
24 | } | 23 | } |
25 | 24 | ||
26 | protected ModelStoreBuilder getModelStoreBuilder() { | ||
27 | return reasoningBuilder.getStoreBuilder(); | ||
28 | } | ||
29 | |||
30 | protected void configureReasoningBuilder() { | 25 | protected void configureReasoningBuilder() { |
31 | // Nothing to configure by default. | 26 | // Nothing to configure by default. |
32 | } | 27 | } |
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java index d41e11c6..405e58ac 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java | |||
@@ -37,11 +37,6 @@ public class BaseDecisionTranslationUnit extends TranslationUnit { | |||
37 | } | 37 | } |
38 | 38 | ||
39 | @Override | 39 | @Override |
40 | protected void configureReasoningBuilder() { | ||
41 | getModelStoreBuilder().symbol(symbol); | ||
42 | } | ||
43 | |||
44 | @Override | ||
45 | public Collection<TranslatedRelation> getTranslatedRelations() { | 40 | public Collection<TranslatedRelation> getTranslatedRelations() { |
46 | return List.of(new TranslatedBaseDecision(getReasoningBuilder(), partialRelation, symbol)); | 41 | return List.of(new TranslatedBaseDecision(getReasoningBuilder(), partialRelation, symbol)); |
47 | } | 42 | } |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/adapter/AbstractModelAdapterBuilder.java b/subprojects/store/src/main/java/tools/refinery/store/adapter/AbstractModelAdapterBuilder.java index 70602ef5..8d3e998e 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/adapter/AbstractModelAdapterBuilder.java +++ b/subprojects/store/src/main/java/tools/refinery/store/adapter/AbstractModelAdapterBuilder.java | |||
@@ -1,32 +1,48 @@ | |||
1 | package tools.refinery.store.adapter; | ||
1 | /* | 2 | /* |
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | 3 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> |
3 | * | 4 | * |
4 | * SPDX-License-Identifier: EPL-2.0 | 5 | * SPDX-License-Identifier: EPL-2.0 |
5 | */ | 6 | */ |
6 | package tools.refinery.store.adapter; | ||
7 | |||
8 | import tools.refinery.store.model.ModelStore; | 7 | import tools.refinery.store.model.ModelStore; |
9 | import tools.refinery.store.model.ModelStoreBuilder; | 8 | import tools.refinery.store.model.ModelStoreBuilder; |
10 | 9 | ||
11 | public abstract class AbstractModelAdapterBuilder implements ModelAdapterBuilder { | 10 | public abstract class AbstractModelAdapterBuilder<T extends ModelStoreAdapter> implements ModelAdapterBuilder { |
12 | private final ModelStoreBuilder storeBuilder; | 11 | private boolean configured; |
13 | 12 | ||
14 | protected AbstractModelAdapterBuilder(ModelStoreBuilder storeBuilder) { | 13 | @Override |
15 | this.storeBuilder = storeBuilder; | 14 | public boolean isConfigured() { |
15 | return configured; | ||
16 | } | 16 | } |
17 | 17 | ||
18 | @Override | 18 | protected void checkConfigured() { |
19 | public <T extends ModelAdapterBuilder> T with(ModelAdapterBuilderFactory<?, ?, T> adapterBuilderFactory) { | 19 | if (!configured) { |
20 | return storeBuilder.with(adapterBuilderFactory); | 20 | throw new IllegalStateException("Model adapter builder was not configured"); |
21 | } | ||
22 | } | ||
23 | |||
24 | protected void checkNotConfigured() { | ||
25 | if (configured) { | ||
26 | throw new IllegalStateException("Model adapter builder was already configured"); | ||
27 | } | ||
28 | } | ||
29 | |||
30 | protected void doConfigure(ModelStoreBuilder storeBuilder) { | ||
31 | // Nothing to configure by default. | ||
21 | } | 32 | } |
22 | 33 | ||
23 | @Override | 34 | @Override |
24 | public ModelStoreBuilder getStoreBuilder() { | 35 | public final void configure(ModelStoreBuilder storeBuilder) { |
25 | return storeBuilder; | 36 | checkNotConfigured(); |
37 | doConfigure(storeBuilder); | ||
38 | configured = true; | ||
26 | } | 39 | } |
27 | 40 | ||
41 | protected abstract T doBuild(ModelStore store); | ||
42 | |||
28 | @Override | 43 | @Override |
29 | public ModelStore build() { | 44 | public final T build(ModelStore store) { |
30 | return storeBuilder.build(); | 45 | checkConfigured(); |
46 | return doBuild(store); | ||
31 | } | 47 | } |
32 | } | 48 | } |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/adapter/AdapterList.java b/subprojects/store/src/main/java/tools/refinery/store/adapter/AdapterList.java deleted file mode 100644 index e896d8d9..00000000 --- a/subprojects/store/src/main/java/tools/refinery/store/adapter/AdapterList.java +++ /dev/null | |||
@@ -1,102 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.adapter; | ||
7 | |||
8 | import org.jetbrains.annotations.NotNull; | ||
9 | |||
10 | import java.util.*; | ||
11 | import java.util.function.Consumer; | ||
12 | |||
13 | public class AdapterList<T> implements Iterable<T> { | ||
14 | private final List<AnyModelAdapterType> adapterTypes; | ||
15 | private final List<T> adapters; | ||
16 | |||
17 | public AdapterList() { | ||
18 | adapterTypes = new ArrayList<>(); | ||
19 | adapters = new ArrayList<>(); | ||
20 | } | ||
21 | |||
22 | public AdapterList(int adapterCount) { | ||
23 | adapterTypes = new ArrayList<>(adapterCount); | ||
24 | adapters = new ArrayList<>(adapterCount); | ||
25 | } | ||
26 | |||
27 | public int size() { | ||
28 | return adapters.size(); | ||
29 | } | ||
30 | |||
31 | public void add(AnyModelAdapterType adapterType, T adapter) { | ||
32 | adapterTypes.add(adapterType); | ||
33 | adapters.add(adapter); | ||
34 | } | ||
35 | |||
36 | public <U extends T> Optional<U> tryGet(AnyModelAdapterType adapterType, Class<? extends U> adapterClass) { | ||
37 | int size = size(); | ||
38 | for (int i = 0; i < size; i++) { | ||
39 | if (getType(i).supports(adapterType)) { | ||
40 | return Optional.of(adapterClass.cast(get(i))); | ||
41 | } | ||
42 | } | ||
43 | return Optional.empty(); | ||
44 | } | ||
45 | |||
46 | public <U extends T> U get(AnyModelAdapterType adapterType, Class<U> adapterClass) { | ||
47 | return tryGet(adapterType, adapterClass).orElseThrow(() -> new IllegalArgumentException( | ||
48 | "No %s was configured".formatted(adapterType))); | ||
49 | } | ||
50 | |||
51 | public AnyModelAdapterType getType(int i) { | ||
52 | return adapterTypes.get(i); | ||
53 | } | ||
54 | |||
55 | public T get(int i) { | ||
56 | return adapters.get(i); | ||
57 | } | ||
58 | |||
59 | public Collection<AnyModelAdapterType> getAdapterTypes() { | ||
60 | return Collections.unmodifiableCollection(adapterTypes); | ||
61 | } | ||
62 | |||
63 | public Iterable<Entry<T>> withAdapterTypes() { | ||
64 | return () -> new Iterator<>() { | ||
65 | private int i = 0; | ||
66 | |||
67 | @Override | ||
68 | public boolean hasNext() { | ||
69 | return i < size(); | ||
70 | } | ||
71 | |||
72 | @Override | ||
73 | public Entry<T> next() { | ||
74 | if (i >= size()) { | ||
75 | throw new NoSuchElementException(); | ||
76 | } | ||
77 | var entry = new Entry<>(getType(i), get(i)); | ||
78 | i++; | ||
79 | return entry; | ||
80 | } | ||
81 | }; | ||
82 | } | ||
83 | |||
84 | @NotNull | ||
85 | @Override | ||
86 | public Iterator<T> iterator() { | ||
87 | return adapters.iterator(); | ||
88 | } | ||
89 | |||
90 | @Override | ||
91 | public void forEach(Consumer<? super T> action) { | ||
92 | adapters.forEach(action); | ||
93 | } | ||
94 | |||
95 | @Override | ||
96 | public Spliterator<T> spliterator() { | ||
97 | return adapters.spliterator(); | ||
98 | } | ||
99 | |||
100 | public record Entry<T>(AnyModelAdapterType adapterType, T adapter) { | ||
101 | } | ||
102 | } | ||
diff --git a/subprojects/store/src/main/java/tools/refinery/store/adapter/AdapterUtils.java b/subprojects/store/src/main/java/tools/refinery/store/adapter/AdapterUtils.java new file mode 100644 index 00000000..556e99f0 --- /dev/null +++ b/subprojects/store/src/main/java/tools/refinery/store/adapter/AdapterUtils.java | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.adapter; | ||
7 | |||
8 | import java.util.Collection; | ||
9 | import java.util.Optional; | ||
10 | |||
11 | public class AdapterUtils { | ||
12 | private AdapterUtils() { | ||
13 | throw new IllegalStateException("This is a static utility class and should not be instantiated directly"); | ||
14 | } | ||
15 | |||
16 | public static <T, U extends T> Optional<U> tryGetAdapter(Collection<T> adapters, Class<? extends U> type) { | ||
17 | var iterator = adapters.stream().filter(type::isInstance).iterator(); | ||
18 | if (!iterator.hasNext()) { | ||
19 | return Optional.empty(); | ||
20 | } | ||
21 | var adapter = type.cast(iterator.next()); | ||
22 | if (iterator.hasNext()) { | ||
23 | throw new IllegalArgumentException("Ambiguous adapter: both %s and %s match %s" | ||
24 | .formatted(adapter.getClass().getName(), iterator.next().getClass().getName(), type.getName())); | ||
25 | } | ||
26 | return Optional.of(adapter); | ||
27 | } | ||
28 | |||
29 | public static <T> T getAdapter(Collection<? super T> adapters, Class<T> type) { | ||
30 | return tryGetAdapter(adapters, type).orElseThrow(() -> new IllegalArgumentException( | ||
31 | "No %s adapter was configured".formatted(type.getName()))); | ||
32 | } | ||
33 | } | ||
diff --git a/subprojects/store/src/main/java/tools/refinery/store/adapter/AnyModelAdapterType.java b/subprojects/store/src/main/java/tools/refinery/store/adapter/AnyModelAdapterType.java deleted file mode 100644 index f161a60b..00000000 --- a/subprojects/store/src/main/java/tools/refinery/store/adapter/AnyModelAdapterType.java +++ /dev/null | |||
@@ -1,24 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.adapter; | ||
7 | |||
8 | import java.util.Collection; | ||
9 | |||
10 | public sealed interface AnyModelAdapterType permits ModelAdapterType { | ||
11 | Class<? extends ModelAdapter> getModelAdapterClass(); | ||
12 | |||
13 | Class<? extends ModelStoreAdapter> getModelStoreAdapterClass(); | ||
14 | |||
15 | Class<? extends ModelAdapterBuilder> getModelAdapterBuilderClass(); | ||
16 | |||
17 | Collection<AnyModelAdapterType> getSupportedAdapterTypes(); | ||
18 | |||
19 | default boolean supports(AnyModelAdapterType targetAdapter) { | ||
20 | return getSupportedAdapterTypes().contains(targetAdapter); | ||
21 | } | ||
22 | |||
23 | String getName(); | ||
24 | } | ||
diff --git a/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterBuilder.java b/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterBuilder.java index 709cbb3e..75e5e07d 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterBuilder.java +++ b/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterBuilder.java | |||
@@ -9,14 +9,9 @@ import tools.refinery.store.model.ModelStore; | |||
9 | import tools.refinery.store.model.ModelStoreBuilder; | 9 | import tools.refinery.store.model.ModelStoreBuilder; |
10 | 10 | ||
11 | public interface ModelAdapterBuilder { | 11 | public interface ModelAdapterBuilder { |
12 | ModelStoreAdapter createStoreAdapter(ModelStore store); | 12 | boolean isConfigured(); |
13 | 13 | ||
14 | <T extends ModelAdapterBuilder> T with(ModelAdapterBuilderFactory<?, ?, T> adapterBuilderFactory); | 14 | void configure(ModelStoreBuilder storeBuilder); |
15 | 15 | ||
16 | ModelStoreBuilder getStoreBuilder(); | 16 | ModelStoreAdapter build(ModelStore store); |
17 | |||
18 | default void configure() { | ||
19 | } | ||
20 | |||
21 | ModelStore build(); | ||
22 | } | 17 | } |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterBuilderFactory.java b/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterBuilderFactory.java deleted file mode 100644 index 1d549d5b..00000000 --- a/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterBuilderFactory.java +++ /dev/null | |||
@@ -1,19 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.adapter; | ||
7 | |||
8 | import tools.refinery.store.model.ModelStoreBuilder; | ||
9 | |||
10 | public abstract class ModelAdapterBuilderFactory<T1 extends ModelAdapter, T2 extends ModelStoreAdapter, | ||
11 | T3 extends ModelAdapterBuilder> extends ModelAdapterType<T1, T2, T3> { | ||
12 | |||
13 | protected ModelAdapterBuilderFactory(Class<T1> modelAdapterClass, Class<T2> modelStoreAdapterClass, | ||
14 | Class<T3> modelAdapterBuilderClass) { | ||
15 | super(modelAdapterClass, modelStoreAdapterClass, modelAdapterBuilderClass); | ||
16 | } | ||
17 | |||
18 | public abstract T3 createBuilder(ModelStoreBuilder storeBuilder); | ||
19 | } | ||
diff --git a/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterType.java b/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterType.java deleted file mode 100644 index 6255fe52..00000000 --- a/subprojects/store/src/main/java/tools/refinery/store/adapter/ModelAdapterType.java +++ /dev/null | |||
@@ -1,84 +0,0 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.adapter; | ||
7 | |||
8 | import tools.refinery.store.model.Model; | ||
9 | import tools.refinery.store.model.ModelStore; | ||
10 | |||
11 | import java.lang.reflect.Method; | ||
12 | import java.util.Collection; | ||
13 | import java.util.Collections; | ||
14 | import java.util.HashSet; | ||
15 | import java.util.Set; | ||
16 | |||
17 | public abstract non-sealed class ModelAdapterType<T1 extends ModelAdapter, T2 extends ModelStoreAdapter, | ||
18 | T3 extends ModelAdapterBuilder> implements AnyModelAdapterType { | ||
19 | private final Class<? extends T1> modelAdapterClass; | ||
20 | private final Class<? extends T2> modelStoreAdapterClass; | ||
21 | private final Class<? extends T3> modelAdapterBuilderClass; | ||
22 | private final Set<AnyModelAdapterType> supportedAdapters = new HashSet<>(); | ||
23 | |||
24 | protected ModelAdapterType(Class<T1> modelAdapterClass, Class<T2> modelStoreAdapterClass, | ||
25 | Class<T3> modelAdapterBuilderClass) { | ||
26 | checkReturnType(modelAdapterClass, modelStoreAdapterClass, "createModelAdapter", Model.class); | ||
27 | checkReturnType(modelStoreAdapterClass, modelAdapterBuilderClass, "createStoreAdapter", ModelStore.class); | ||
28 | this.modelAdapterClass = modelAdapterClass; | ||
29 | this.modelStoreAdapterClass = modelStoreAdapterClass; | ||
30 | this.modelAdapterBuilderClass = modelAdapterBuilderClass; | ||
31 | supportedAdapters.add(this); | ||
32 | } | ||
33 | |||
34 | private void checkReturnType(Class<?> expectedReturnType, Class<?> ownerClass, String methodName, | ||
35 | Class<?>... argumentTypes) { | ||
36 | Method method; | ||
37 | try { | ||
38 | method = ownerClass.getMethod(methodName, argumentTypes); | ||
39 | } catch (NoSuchMethodException e) { | ||
40 | throw new IllegalStateException("Invalid %s: %s#%s method is required" | ||
41 | .formatted(this, ownerClass.getName(), methodName), e); | ||
42 | } | ||
43 | var returnType = method.getReturnType(); | ||
44 | if (!expectedReturnType.isAssignableFrom(returnType)) { | ||
45 | throw new IllegalStateException("Invalid %s: %s is not assignable from the return type %s of %s#%s" | ||
46 | .formatted(this, expectedReturnType.getName(), returnType.getCanonicalName(), | ||
47 | ownerClass.getName(), methodName)); | ||
48 | } | ||
49 | } | ||
50 | |||
51 | protected void extendsAdapter(ModelAdapterType<? super T1, ? super T2, ? super T3> superAdapter) { | ||
52 | supportedAdapters.addAll(superAdapter.supportedAdapters); | ||
53 | } | ||
54 | |||
55 | @Override | ||
56 | public final Class<? extends T1> getModelAdapterClass() { | ||
57 | return modelAdapterClass; | ||
58 | } | ||
59 | |||
60 | @Override | ||
61 | public final Class<? extends T2> getModelStoreAdapterClass() { | ||
62 | return modelStoreAdapterClass; | ||
63 | } | ||
64 | |||
65 | @Override | ||
66 | public final Class<? extends T3> getModelAdapterBuilderClass() { | ||
67 | return modelAdapterBuilderClass; | ||
68 | } | ||
69 | |||
70 | @Override | ||
71 | public Collection<AnyModelAdapterType> getSupportedAdapterTypes() { | ||
72 | return Collections.unmodifiableCollection(supportedAdapters); | ||
73 | } | ||
74 | |||
75 | @Override | ||
76 | public String getName() { | ||
77 | return "%s.ADAPTER".formatted(this.getClass().getName()); | ||
78 | } | ||
79 | |||
80 | @Override | ||
81 | public String toString() { | ||
82 | return getName(); | ||
83 | } | ||
84 | } | ||
diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/Model.java b/subprojects/store/src/main/java/tools/refinery/store/model/Model.java index f4131756..d58d91c3 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/model/Model.java +++ b/subprojects/store/src/main/java/tools/refinery/store/model/Model.java | |||
@@ -6,7 +6,6 @@ | |||
6 | package tools.refinery.store.model; | 6 | package tools.refinery.store.model; |
7 | 7 | ||
8 | import tools.refinery.store.adapter.ModelAdapter; | 8 | import tools.refinery.store.adapter.ModelAdapter; |
9 | import tools.refinery.store.adapter.ModelAdapterType; | ||
10 | import tools.refinery.store.map.Versioned; | 9 | import tools.refinery.store.map.Versioned; |
11 | import tools.refinery.store.representation.AnySymbol; | 10 | import tools.refinery.store.representation.AnySymbol; |
12 | import tools.refinery.store.representation.Symbol; | 11 | import tools.refinery.store.representation.Symbol; |
@@ -30,9 +29,9 @@ public interface Model extends Versioned { | |||
30 | 29 | ||
31 | ModelDiffCursor getDiffCursor(long to); | 30 | ModelDiffCursor getDiffCursor(long to); |
32 | 31 | ||
33 | <T extends ModelAdapter> Optional<T> tryGetAdapter(ModelAdapterType<? extends T, ?, ?> adapterType); | 32 | <T extends ModelAdapter> Optional<T> tryGetAdapter(Class<? extends T> adapterType); |
34 | 33 | ||
35 | <T extends ModelAdapter> T getAdapter(ModelAdapterType<T, ?, ?> adapterType); | 34 | <T extends ModelAdapter> T getAdapter(Class<T> adapterType); |
36 | 35 | ||
37 | void addListener(ModelListener listener); | 36 | void addListener(ModelListener listener); |
38 | 37 | ||
diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/ModelStore.java b/subprojects/store/src/main/java/tools/refinery/store/model/ModelStore.java index a72399f7..b10eb8a4 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/model/ModelStore.java +++ b/subprojects/store/src/main/java/tools/refinery/store/model/ModelStore.java | |||
@@ -5,7 +5,6 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.model; | 6 | package tools.refinery.store.model; |
7 | 7 | ||
8 | import tools.refinery.store.adapter.ModelAdapterType; | ||
9 | import tools.refinery.store.adapter.ModelStoreAdapter; | 8 | import tools.refinery.store.adapter.ModelStoreAdapter; |
10 | import tools.refinery.store.model.internal.ModelStoreBuilderImpl; | 9 | import tools.refinery.store.model.internal.ModelStoreBuilderImpl; |
11 | import tools.refinery.store.representation.AnySymbol; | 10 | import tools.refinery.store.representation.AnySymbol; |
@@ -25,9 +24,9 @@ public interface ModelStore { | |||
25 | 24 | ||
26 | ModelDiffCursor getDiffCursor(long from, long to); | 25 | ModelDiffCursor getDiffCursor(long from, long to); |
27 | 26 | ||
28 | <T extends ModelStoreAdapter> Optional<T> tryGetAdapter(ModelAdapterType<?, ? extends T, ?> adapterType); | 27 | <T extends ModelStoreAdapter> Optional<T> tryGetAdapter(Class<? extends T> adapterType); |
29 | 28 | ||
30 | <T extends ModelStoreAdapter> T getAdapter(ModelAdapterType<?, T, ?> adapterType); | 29 | <T extends ModelStoreAdapter> T getAdapter(Class<T> adapterType); |
31 | 30 | ||
32 | static ModelStoreBuilder builder() { | 31 | static ModelStoreBuilder builder() { |
33 | return new ModelStoreBuilderImpl(); | 32 | return new ModelStoreBuilderImpl(); |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/ModelStoreBuilder.java b/subprojects/store/src/main/java/tools/refinery/store/model/ModelStoreBuilder.java index d9354bdb..3a4024b5 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/model/ModelStoreBuilder.java +++ b/subprojects/store/src/main/java/tools/refinery/store/model/ModelStoreBuilder.java | |||
@@ -6,8 +6,6 @@ | |||
6 | package tools.refinery.store.model; | 6 | package tools.refinery.store.model; |
7 | 7 | ||
8 | import tools.refinery.store.adapter.ModelAdapterBuilder; | 8 | import tools.refinery.store.adapter.ModelAdapterBuilder; |
9 | import tools.refinery.store.adapter.ModelAdapterBuilderFactory; | ||
10 | import tools.refinery.store.adapter.ModelAdapterType; | ||
11 | import tools.refinery.store.representation.AnySymbol; | 9 | import tools.refinery.store.representation.AnySymbol; |
12 | import tools.refinery.store.representation.Symbol; | 10 | import tools.refinery.store.representation.Symbol; |
13 | 11 | ||
@@ -31,11 +29,11 @@ public interface ModelStoreBuilder { | |||
31 | 29 | ||
32 | <T> ModelStoreBuilder symbol(Symbol<T> symbol); | 30 | <T> ModelStoreBuilder symbol(Symbol<T> symbol); |
33 | 31 | ||
34 | <T extends ModelAdapterBuilder> T with(ModelAdapterBuilderFactory<?, ?, T> adapterBuilderFactory); | 32 | <T extends ModelAdapterBuilder> ModelStoreBuilder with(T adapterBuilder); |
35 | 33 | ||
36 | <T extends ModelAdapterBuilder> Optional<T> tryGetAdapter(ModelAdapterType<?, ?, ? extends T> adapterType); | 34 | <T extends ModelAdapterBuilder> Optional<T> tryGetAdapter(Class<? extends T> adapterType); |
37 | 35 | ||
38 | <T extends ModelAdapterBuilder> T getAdapter(ModelAdapterType<?, ?, T> adapterType); | 36 | <T extends ModelAdapterBuilder> T getAdapter(Class<T> adapterType); |
39 | 37 | ||
40 | ModelStore build(); | 38 | ModelStore build(); |
41 | } | 39 | } |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelImpl.java b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelImpl.java index 50a408da..c5475a1a 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelImpl.java +++ b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelImpl.java | |||
@@ -5,10 +5,8 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.model.internal; | 6 | package tools.refinery.store.model.internal; |
7 | 7 | ||
8 | import tools.refinery.store.adapter.AdapterList; | 8 | import tools.refinery.store.adapter.AdapterUtils; |
9 | import tools.refinery.store.adapter.AnyModelAdapterType; | ||
10 | import tools.refinery.store.adapter.ModelAdapter; | 9 | import tools.refinery.store.adapter.ModelAdapter; |
11 | import tools.refinery.store.adapter.ModelAdapterType; | ||
12 | import tools.refinery.store.map.DiffCursor; | 10 | import tools.refinery.store.map.DiffCursor; |
13 | import tools.refinery.store.model.*; | 11 | import tools.refinery.store.model.*; |
14 | import tools.refinery.store.representation.AnySymbol; | 12 | import tools.refinery.store.representation.AnySymbol; |
@@ -21,7 +19,7 @@ public class ModelImpl implements Model { | |||
21 | private final ModelStore store; | 19 | private final ModelStore store; |
22 | private long state; | 20 | private long state; |
23 | private Map<? extends AnySymbol, ? extends VersionedInterpretation<?>> interpretations; | 21 | private Map<? extends AnySymbol, ? extends VersionedInterpretation<?>> interpretations; |
24 | private final AdapterList<ModelAdapter> adapters; | 22 | private final List<ModelAdapter> adapters; |
25 | private final List<ModelListener> listeners = new ArrayList<>(); | 23 | private final List<ModelListener> listeners = new ArrayList<>(); |
26 | private boolean uncommittedChanges; | 24 | private boolean uncommittedChanges; |
27 | private ModelAction pendingAction = ModelAction.NONE; | 25 | private ModelAction pendingAction = ModelAction.NONE; |
@@ -30,7 +28,7 @@ public class ModelImpl implements Model { | |||
30 | ModelImpl(ModelStore store, long state, int adapterCount) { | 28 | ModelImpl(ModelStore store, long state, int adapterCount) { |
31 | this.store = store; | 29 | this.store = store; |
32 | this.state = state; | 30 | this.state = state; |
33 | adapters = new AdapterList<>(adapterCount); | 31 | adapters = new ArrayList<>(adapterCount); |
34 | } | 32 | } |
35 | 33 | ||
36 | void setInterpretations(Map<? extends AnySymbol, ? extends VersionedInterpretation<?>> interpretations) { | 34 | void setInterpretations(Map<? extends AnySymbol, ? extends VersionedInterpretation<?>> interpretations) { |
@@ -167,17 +165,17 @@ public class ModelImpl implements Model { | |||
167 | } | 165 | } |
168 | 166 | ||
169 | @Override | 167 | @Override |
170 | public <T extends ModelAdapter> Optional<T> tryGetAdapter(ModelAdapterType<? extends T, ?, ?> adapterType) { | 168 | public <T extends ModelAdapter> Optional<T> tryGetAdapter(Class<? extends T> adapterType) { |
171 | return adapters.tryGet(adapterType, adapterType.getModelAdapterClass()); | 169 | return AdapterUtils.tryGetAdapter(adapters, adapterType); |
172 | } | 170 | } |
173 | 171 | ||
174 | @Override | 172 | @Override |
175 | public <T extends ModelAdapter> T getAdapter(ModelAdapterType<T, ?, ?> adapterType) { | 173 | public <T extends ModelAdapter> T getAdapter(Class<T> adapterType) { |
176 | return adapters.get(adapterType, adapterType.getModelAdapterClass()); | 174 | return AdapterUtils.getAdapter(adapters, adapterType); |
177 | } | 175 | } |
178 | 176 | ||
179 | void addAdapter(AnyModelAdapterType adapterType, ModelAdapter adapter) { | 177 | void addAdapter(ModelAdapter adapter) { |
180 | adapters.add(adapterType, adapter); | 178 | adapters.add(adapter); |
181 | } | 179 | } |
182 | 180 | ||
183 | @Override | 181 | @Override |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreBuilderImpl.java b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreBuilderImpl.java index 70bccb96..aafbe130 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreBuilderImpl.java +++ b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreBuilderImpl.java | |||
@@ -5,10 +5,8 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.model.internal; | 6 | package tools.refinery.store.model.internal; |
7 | 7 | ||
8 | import tools.refinery.store.adapter.AdapterList; | 8 | import tools.refinery.store.adapter.AdapterUtils; |
9 | import tools.refinery.store.adapter.ModelAdapterBuilder; | 9 | import tools.refinery.store.adapter.ModelAdapterBuilder; |
10 | import tools.refinery.store.adapter.ModelAdapterBuilderFactory; | ||
11 | import tools.refinery.store.adapter.ModelAdapterType; | ||
12 | import tools.refinery.store.map.VersionedMapStore; | 10 | import tools.refinery.store.map.VersionedMapStore; |
13 | import tools.refinery.store.map.VersionedMapStoreImpl; | 11 | import tools.refinery.store.map.VersionedMapStoreImpl; |
14 | import tools.refinery.store.model.ModelStore; | 12 | import tools.refinery.store.model.ModelStore; |
@@ -23,7 +21,7 @@ import java.util.*; | |||
23 | public class ModelStoreBuilderImpl implements ModelStoreBuilder { | 21 | public class ModelStoreBuilderImpl implements ModelStoreBuilder { |
24 | private final Set<AnySymbol> allSymbols = new HashSet<>(); | 22 | private final Set<AnySymbol> allSymbols = new HashSet<>(); |
25 | private final Map<SymbolEquivalenceClass<?>, List<AnySymbol>> equivalenceClasses = new HashMap<>(); | 23 | private final Map<SymbolEquivalenceClass<?>, List<AnySymbol>> equivalenceClasses = new HashMap<>(); |
26 | private final AdapterList<ModelAdapterBuilder> adapters = new AdapterList<>(); | 24 | private final List<ModelAdapterBuilder> adapters = new ArrayList<>(); |
27 | 25 | ||
28 | @Override | 26 | @Override |
29 | public <T> ModelStoreBuilder symbol(Symbol<T> symbol) { | 27 | public <T> ModelStoreBuilder symbol(Symbol<T> symbol) { |
@@ -38,46 +36,25 @@ public class ModelStoreBuilderImpl implements ModelStoreBuilder { | |||
38 | } | 36 | } |
39 | 37 | ||
40 | @Override | 38 | @Override |
41 | public <T extends ModelAdapterBuilder> T with(ModelAdapterBuilderFactory<?, ?, T> adapterBuilderFactory) { | 39 | public <T extends ModelAdapterBuilder> ModelStoreBuilder with(T adapterBuilder) { |
42 | return adapters.<T>tryGet(adapterBuilderFactory, adapterBuilderFactory.getModelAdapterBuilderClass()) | 40 | for (var existingAdapter : adapters) { |
43 | .orElseGet(() -> addAdapter(adapterBuilderFactory)); | 41 | if (existingAdapter.getClass().equals(adapterBuilder.getClass())) { |
44 | } | 42 | throw new IllegalArgumentException("%s adapter was already configured for store builder" |
45 | 43 | .formatted(adapterBuilder.getClass().getName())); | |
46 | private <T extends ModelAdapterBuilder> T addAdapter(ModelAdapterBuilderFactory<?, ?, T> adapterBuilderFactory) { | ||
47 | for (var configuredAdapterType : adapters.getAdapterTypes()) { | ||
48 | var intersection = new HashSet<>(adapterBuilderFactory.getSupportedAdapterTypes()); | ||
49 | intersection.retainAll(configuredAdapterType.getSupportedAdapterTypes()); | ||
50 | if (!intersection.isEmpty()) { | ||
51 | if (configuredAdapterType.supports(adapterBuilderFactory)) { | ||
52 | // Impossible to end up here from <code>#with</code>, because we should have returned | ||
53 | // the existing adapter there instead of adding a new one. | ||
54 | throw new IllegalArgumentException( | ||
55 | "Cannot add %s, because it is already provided by configured adapter %s" | ||
56 | .formatted(adapterBuilderFactory, configuredAdapterType)); | ||
57 | } else if (adapterBuilderFactory.supports(configuredAdapterType)) { | ||
58 | throw new IllegalArgumentException( | ||
59 | "Cannot add %s, because it provides already configured adapter %s" | ||
60 | .formatted(adapterBuilderFactory, configuredAdapterType)); | ||
61 | } else { | ||
62 | throw new IllegalArgumentException( | ||
63 | "Cannot add %s, because configured adapter %s already provides %s" | ||
64 | .formatted(adapterBuilderFactory, configuredAdapterType, intersection)); | ||
65 | } | ||
66 | } | 44 | } |
67 | } | 45 | } |
68 | var newAdapter = adapterBuilderFactory.createBuilder(this); | 46 | adapters.add(adapterBuilder); |
69 | adapters.add(adapterBuilderFactory, newAdapter); | 47 | return this; |
70 | return newAdapter; | ||
71 | } | 48 | } |
72 | 49 | ||
73 | @Override | 50 | @Override |
74 | public <T extends ModelAdapterBuilder> Optional<T> tryGetAdapter(ModelAdapterType<?, ?, ? extends T> adapterType) { | 51 | public <T extends ModelAdapterBuilder> Optional<T> tryGetAdapter(Class<? extends T> adapterType) { |
75 | return adapters.tryGet(adapterType, adapterType.getModelAdapterBuilderClass()); | 52 | return AdapterUtils.tryGetAdapter(adapters, adapterType); |
76 | } | 53 | } |
77 | 54 | ||
78 | @Override | 55 | @Override |
79 | public <T extends ModelAdapterBuilder> T getAdapter(ModelAdapterType<?, ?, T> adapterType) { | 56 | public <T extends ModelAdapterBuilder> T getAdapter(Class<T> adapterType) { |
80 | return adapters.get(adapterType, adapterType.getModelAdapterBuilderClass()); | 57 | return AdapterUtils.getAdapter(adapters, adapterType); |
81 | } | 58 | } |
82 | 59 | ||
83 | @Override | 60 | @Override |
@@ -86,13 +63,13 @@ public class ModelStoreBuilderImpl implements ModelStoreBuilder { | |||
86 | for (var entry : equivalenceClasses.entrySet()) { | 63 | for (var entry : equivalenceClasses.entrySet()) { |
87 | createStores(stores, entry.getKey(), entry.getValue()); | 64 | createStores(stores, entry.getKey(), entry.getValue()); |
88 | } | 65 | } |
89 | var modelStore = new ModelStoreImpl(stores, adapters.size()); | ||
90 | for (int i = adapters.size() - 1; i >= 0; i--) { | 66 | for (int i = adapters.size() - 1; i >= 0; i--) { |
91 | adapters.get(i).configure(); | 67 | adapters.get(i).configure(this); |
92 | } | 68 | } |
93 | for (var entry : adapters.withAdapterTypes()) { | 69 | var modelStore = new ModelStoreImpl(stores, adapters.size()); |
94 | var adapter = entry.adapter().createStoreAdapter(modelStore); | 70 | for (var adapterBuilder : adapters) { |
95 | modelStore.addAdapter(entry.adapterType(), adapter); | 71 | var storeAdapter = adapterBuilder.build(modelStore); |
72 | modelStore.addAdapter(storeAdapter); | ||
96 | } | 73 | } |
97 | return modelStore; | 74 | return modelStore; |
98 | } | 75 | } |
diff --git a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreImpl.java b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreImpl.java index bfae7181..60b735e6 100644 --- a/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreImpl.java +++ b/subprojects/store/src/main/java/tools/refinery/store/model/internal/ModelStoreImpl.java | |||
@@ -5,9 +5,7 @@ | |||
5 | */ | 5 | */ |
6 | package tools.refinery.store.model.internal; | 6 | package tools.refinery.store.model.internal; |
7 | 7 | ||
8 | import tools.refinery.store.adapter.AdapterList; | 8 | import tools.refinery.store.adapter.AdapterUtils; |
9 | import tools.refinery.store.adapter.AnyModelAdapterType; | ||
10 | import tools.refinery.store.adapter.ModelAdapterType; | ||
11 | import tools.refinery.store.adapter.ModelStoreAdapter; | 9 | import tools.refinery.store.adapter.ModelStoreAdapter; |
12 | import tools.refinery.store.map.DiffCursor; | 10 | import tools.refinery.store.map.DiffCursor; |
13 | import tools.refinery.store.map.VersionedMapStore; | 11 | import tools.refinery.store.map.VersionedMapStore; |
@@ -21,11 +19,11 @@ import java.util.*; | |||
21 | 19 | ||
22 | public class ModelStoreImpl implements ModelStore { | 20 | public class ModelStoreImpl implements ModelStore { |
23 | private final Map<? extends AnySymbol, ? extends VersionedMapStore<Tuple, ?>> stores; | 21 | private final Map<? extends AnySymbol, ? extends VersionedMapStore<Tuple, ?>> stores; |
24 | private final AdapterList<ModelStoreAdapter> adapters; | 22 | private final List<ModelStoreAdapter> adapters; |
25 | 23 | ||
26 | ModelStoreImpl(Map<? extends AnySymbol, ? extends VersionedMapStore<Tuple, ?>> stores, int adapterCount) { | 24 | ModelStoreImpl(Map<? extends AnySymbol, ? extends VersionedMapStore<Tuple, ?>> stores, int adapterCount) { |
27 | this.stores = stores; | 25 | this.stores = stores; |
28 | adapters = new AdapterList<>(adapterCount); | 26 | adapters = new ArrayList<>(adapterCount); |
29 | } | 27 | } |
30 | 28 | ||
31 | @Override | 29 | @Override |
@@ -64,9 +62,9 @@ public class ModelStoreImpl implements ModelStore { | |||
64 | } | 62 | } |
65 | 63 | ||
66 | private void adaptModel(ModelImpl model) { | 64 | private void adaptModel(ModelImpl model) { |
67 | for (var entry : adapters.withAdapterTypes()) { | 65 | for (var storeAdapter : adapters) { |
68 | var adapter = entry.adapter().createModelAdapter(model); | 66 | var adapter = storeAdapter.createModelAdapter(model); |
69 | model.addAdapter(entry.adapterType(), adapter); | 67 | model.addAdapter(adapter); |
70 | } | 68 | } |
71 | } | 69 | } |
72 | 70 | ||
@@ -91,16 +89,16 @@ public class ModelStoreImpl implements ModelStore { | |||
91 | } | 89 | } |
92 | 90 | ||
93 | @Override | 91 | @Override |
94 | public <T extends ModelStoreAdapter> Optional<T> tryGetAdapter(ModelAdapterType<?, ? extends T, ?> adapterType) { | 92 | public <T extends ModelStoreAdapter> Optional<T> tryGetAdapter(Class<? extends T> adapterType) { |
95 | return adapters.tryGet(adapterType, adapterType.getModelStoreAdapterClass()); | 93 | return AdapterUtils.tryGetAdapter(adapters, adapterType); |
96 | } | 94 | } |
97 | 95 | ||
98 | @Override | 96 | @Override |
99 | public <T extends ModelStoreAdapter> T getAdapter(ModelAdapterType<?, T, ?> adapterType) { | 97 | public <T extends ModelStoreAdapter> T getAdapter(Class<T> adapterType) { |
100 | return adapters.get(adapterType, adapterType.getModelStoreAdapterClass()); | 98 | return AdapterUtils.getAdapter(adapters, adapterType); |
101 | } | 99 | } |
102 | 100 | ||
103 | void addAdapter(AnyModelAdapterType adapterType, ModelStoreAdapter adapter) { | 101 | void addAdapter(ModelStoreAdapter adapter) { |
104 | adapters.add(adapterType, adapter); | 102 | adapters.add(adapter); |
105 | } | 103 | } |
106 | } | 104 | } |