aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-reasoning
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2024-07-09 21:17:59 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2024-07-10 00:11:07 +0200
commitbf3b06f8cc775216e69e7f3e14d595a1db244f05 (patch)
treebfb6511e249cbe07d5cb183b42dac11cda9f94f7 /subprojects/store-reasoning
parentbuild: do not build shadow jars (diff)
downloadrefinery-bf3b06f8cc775216e69e7f3e14d595a1db244f05.tar.gz
refinery-bf3b06f8cc775216e69e7f3e14d595a1db244f05.tar.zst
refinery-bf3b06f8cc775216e69e7f3e14d595a1db244f05.zip
feat: generator facade timeout and non-existent objects
Quality of life improvements for the semantics and generator facade APIs.
Diffstat (limited to 'subprojects/store-reasoning')
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java2
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/CleanupPropagator.java9
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectTranslator.java16
3 files changed, 23 insertions, 4 deletions
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 386ae1d8..b83d162e 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
@@ -204,6 +204,8 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
204 if (nodeToDelete == currentModelSize - 1) { 204 if (nodeToDelete == currentModelSize - 1) {
205 nodeCountInterpretation.put(Tuple.of(), nodeToDelete); 205 nodeCountInterpretation.put(Tuple.of(), nodeToDelete);
206 } 206 }
207 // We mustn't reuse the ID of {@code nodeToDelete} in any circumstance, because clients may depend on stable
208 // node IDs for nodes in the initial partial model.
207 return true; 209 return true;
208 } 210 }
209 211
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/CleanupPropagator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/CleanupPropagator.java
index f14b4783..6feccae3 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/CleanupPropagator.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/CleanupPropagator.java
@@ -11,6 +11,7 @@ import tools.refinery.logic.term.uppercardinality.UpperCardinalities;
11import tools.refinery.logic.term.uppercardinality.UpperCardinality; 11import tools.refinery.logic.term.uppercardinality.UpperCardinality;
12import tools.refinery.logic.term.uppercardinality.UpperCardinalityTerms; 12import tools.refinery.logic.term.uppercardinality.UpperCardinalityTerms;
13import tools.refinery.store.dse.propagation.BoundPropagator; 13import tools.refinery.store.dse.propagation.BoundPropagator;
14import tools.refinery.store.dse.propagation.PropagationRejectedResult;
14import tools.refinery.store.dse.propagation.PropagationResult; 15import tools.refinery.store.dse.propagation.PropagationResult;
15import tools.refinery.store.dse.propagation.Propagator; 16import tools.refinery.store.dse.propagation.Propagator;
16import tools.refinery.store.model.Model; 17import tools.refinery.store.model.Model;
@@ -48,7 +49,7 @@ public class CleanupPropagator implements Propagator {
48 return new BoundCleanupPropagator(model); 49 return new BoundCleanupPropagator(model);
49 } 50 }
50 51
51 private static class BoundCleanupPropagator implements BoundPropagator { 52 private class BoundCleanupPropagator implements BoundPropagator {
52 private final Model model; 53 private final Model model;
53 private final ModelQueryAdapter queryEngine; 54 private final ModelQueryAdapter queryEngine;
54 private final ResultSet<Boolean> resultSet; 55 private final ResultSet<Boolean> resultSet;
@@ -70,7 +71,11 @@ public class CleanupPropagator implements Propagator {
70 var cursor = resultSet.getAll(); 71 var cursor = resultSet.getAll();
71 while (cursor.move()) { 72 while (cursor.move()) {
72 propagated = true; 73 propagated = true;
73 reasoningAdapter.cleanup(cursor.getKey().get(0)); 74 var nodeToDelete = cursor.getKey().get(0);
75 if (!reasoningAdapter.cleanup(nodeToDelete)) {
76 return new PropagationRejectedResult(CleanupPropagator.this,
77 "Failed to remove node: " + nodeToDelete, true);
78 }
74 } 79 }
75 return propagated ? PropagationResult.PROPAGATED : PropagationResult.UNCHANGED; 80 return propagated ? PropagationResult.PROPAGATED : PropagationResult.UNCHANGED;
76 } 81 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectTranslator.java
index 05d96689..7b3be76d 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectTranslator.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectTranslator.java
@@ -41,6 +41,16 @@ public class MultiObjectTranslator implements ModelStoreConfiguration {
41 public static final PartialFunction<CardinalityInterval, Integer> COUNT_SYMBOL = new PartialFunction<>("COUNT", 1, 41 public static final PartialFunction<CardinalityInterval, Integer> COUNT_SYMBOL = new PartialFunction<>("COUNT", 1,
42 CardinalityDomain.INSTANCE); 42 CardinalityDomain.INSTANCE);
43 43
44 private final boolean keepNonExistingObjects;
45
46 public MultiObjectTranslator(boolean keepNonExistingObjects) {
47 this.keepNonExistingObjects = keepNonExistingObjects;
48 }
49
50 public MultiObjectTranslator() {
51 this(true);
52 }
53
44 @Override 54 @Override
45 public void apply(ModelStoreBuilder storeBuilder) { 55 public void apply(ModelStoreBuilder storeBuilder) {
46 storeBuilder.symbol(COUNT_STORAGE); 56 storeBuilder.symbol(COUNT_STORAGE);
@@ -90,7 +100,9 @@ public class MultiObjectTranslator implements ModelStoreConfiguration {
90 reasoningBuilder.initializer(new MultiObjectInitializer(COUNT_STORAGE)); 100 reasoningBuilder.initializer(new MultiObjectInitializer(COUNT_STORAGE));
91 reasoningBuilder.storageRefiner(COUNT_STORAGE, MultiObjectStorageRefiner::new); 101 reasoningBuilder.storageRefiner(COUNT_STORAGE, MultiObjectStorageRefiner::new);
92 102
93 storeBuilder.tryGetAdapter(PropagationBuilder.class) 103 if (!keepNonExistingObjects) {
94 .ifPresent(propagationBuilder -> propagationBuilder.propagator(new CleanupPropagator())); 104 storeBuilder.tryGetAdapter(PropagationBuilder.class)
105 .ifPresent(propagationBuilder -> propagationBuilder.propagator(new CleanupPropagator()));
106 }
95 } 107 }
96} 108}