Skip to content

Commit 81eab0a

Browse files
committed
GH-5118 Extend methods of SailConnectionListener with inferred argument.
1 parent a5dc15b commit 81eab0a

3 files changed

Lines changed: 46 additions & 14 deletions

File tree

core/sail/api/src/main/java/org/eclipse/rdf4j/sail/SailConnectionListener.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,39 @@
1313
import org.eclipse.rdf4j.model.Statement;
1414

1515
public interface SailConnectionListener {
16+
/**
17+
* Notifies the listener that a statement has been added in a transaction that it has registered itself with.
18+
*
19+
* @param st The statement that was added.
20+
* @param inferred The flag that indicates whether the statement is inferred or explicit.
21+
*/
22+
default void statementAdded(Statement st, boolean inferred) {
23+
statementAdded(st);
24+
}
25+
26+
/**
27+
* Notifies the listener that a statement has been removed in a transaction that it has registered itself with.
28+
*
29+
* @param st The statement that was removed.
30+
* @param inferred The flag that indicates whether the statement was inferred or explicit.
31+
*/
32+
default void statementRemoved(Statement st, boolean inferred) {
33+
statementRemoved(st);
34+
}
1635

1736
/**
1837
* Notifies the listener that a statement has been added in a transaction that it has registered itself with.
1938
*
2039
* @param st The statement that was added.
2140
*/
41+
@Deprecated(since = "5.2.0", forRemoval = true)
2242
void statementAdded(Statement st);
2343

2444
/**
2545
* Notifies the listener that a statement has been removed in a transaction that it has registered itself with.
2646
*
2747
* @param st The statement that was removed.
2848
*/
49+
@Deprecated(since = "5.2.0", forRemoval = true)
2950
void statementRemoved(Statement st);
3051
}

core/sail/api/src/main/java/org/eclipse/rdf4j/sail/helpers/AbstractNotifyingSailConnection.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,26 @@ protected boolean hasConnectionListeners() {
4848
return !listeners.isEmpty();
4949
}
5050

51+
@Deprecated(since = "5.2.0", forRemoval = true)
5152
protected void notifyStatementAdded(Statement st) {
53+
notifyStatementAdded(st, false);
54+
}
55+
56+
protected void notifyStatementAdded(Statement st, boolean inferred) {
5257
for (SailConnectionListener listener : listeners) {
53-
listener.statementAdded(st);
58+
listener.statementAdded(st, inferred);
5459
}
5560

5661
}
5762

63+
@Deprecated(since = "5.2.0", forRemoval = true)
5864
protected void notifyStatementRemoved(Statement st) {
65+
notifyStatementRemoved(st, false);
66+
}
67+
68+
protected void notifyStatementRemoved(Statement st, boolean inferred) {
5969
for (SailConnectionListener listener : listeners) {
60-
listener.statementRemoved(st);
70+
listener.statementRemoved(st, inferred);
6171
}
6272
}
6373
}

core/sail/base/src/main/java/org/eclipse/rdf4j/sail/base/SailSourceConnection.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -632,7 +632,7 @@ public void removeStatement(UpdateContext op, Resource subj, IRI pred, Value obj
632632
explicitSinks.put(null, source.sink(getIsolationLevel()));
633633
}
634634
assert explicitSinks.containsKey(op);
635-
remove(subj, pred, obj, datasets.get(op), explicitSinks.get(op), contexts);
635+
remove(subj, pred, obj, false, datasets.get(op), explicitSinks.get(op), contexts);
636636
}
637637
removeStatementsInternal(subj, pred, obj, contexts);
638638
}
@@ -723,7 +723,7 @@ public boolean addInferredStatement(Resource subj, IRI pred, Value obj, Resource
723723
// only report inferred statements that don't already
724724
// exist
725725
addStatementInternal(subj, pred, obj, contexts);
726-
notifyStatementAdded(vf.createStatement(subj, pred, obj));
726+
notifyStatementAdded(vf.createStatement(subj, pred, obj), true);
727727
setStatementsAdded();
728728
modified = true;
729729
}
@@ -746,7 +746,7 @@ public boolean addInferredStatement(Resource subj, IRI pred, Value obj, Resource
746746
// only report inferred statements that don't
747747
// already exist
748748
addStatementInternal(subj, pred, obj, ctx);
749-
notifyStatementAdded(vf.createStatement(subj, pred, obj, ctx));
749+
notifyStatementAdded(vf.createStatement(subj, pred, obj, ctx), true);
750750
setStatementsAdded();
751751
modified = true;
752752
}
@@ -762,9 +762,9 @@ private void add(Resource subj, IRI pred, Value obj, SailDataset dataset, SailSi
762762
if (contexts.length == 0 || (contexts.length == 1 && contexts[0] == null)) {
763763
if (hasConnectionListeners()) {
764764
if (!hasStatement(dataset, subj, pred, obj, NULL_CTX)) {
765-
notifyStatementAdded(vf.createStatement(subj, pred, obj));
765+
notifyStatementAdded(vf.createStatement(subj, pred, obj), false);
766766
} else if (sink instanceof Changeset && ((Changeset) sink).hasDeprecated(subj, pred, obj, NULL_CTX)) {
767-
notifyStatementAdded(vf.createStatement(subj, pred, obj));
767+
notifyStatementAdded(vf.createStatement(subj, pred, obj), false);
768768
}
769769

770770
// always approve the statement, even if it already exists
@@ -788,10 +788,10 @@ private void add(Resource subj, IRI pred, Value obj, SailDataset dataset, SailSi
788788

789789
if (hasConnectionListeners()) {
790790
if (!hasStatement(dataset, subj, pred, obj, contextsToCheck)) {
791-
notifyStatementAdded(vf.createStatement(subj, pred, obj, ctx));
791+
notifyStatementAdded(vf.createStatement(subj, pred, obj, ctx), false);
792792
} else if (sink instanceof Changeset
793793
&& ((Changeset) sink).hasDeprecated(subj, pred, obj, contextsToCheck)) {
794-
notifyStatementAdded(vf.createStatement(subj, pred, obj));
794+
notifyStatementAdded(vf.createStatement(subj, pred, obj), false);
795795
}
796796
sink.approve(subj, pred, obj, ctx);
797797
} else {
@@ -815,15 +815,16 @@ public boolean removeInferredStatement(Resource subj, IRI pred, Value obj, Resou
815815
explicitOnlyDataset = branch(IncludeInferred.explicitOnly).dataset(level);
816816
}
817817
removeStatementsInternal(subj, pred, obj, contexts);
818-
boolean removed = remove(subj, pred, obj, inferredOnlyDataset, inferredOnlySink, contexts);
818+
boolean removed = remove(subj, pred, obj, true, inferredOnlyDataset, inferredOnlySink, contexts);
819819
if (removed) {
820820
setStatementsRemoved();
821821
}
822822
return removed;
823823
}
824824
}
825825

826-
private boolean remove(Resource subj, IRI pred, Value obj, SailDataset dataset, SailSink sink, Resource... contexts)
826+
private boolean remove(Resource subj, IRI pred, Value obj, boolean inferred, SailDataset dataset, SailSink sink,
827+
Resource... contexts)
827828
throws SailException {
828829

829830
// Use deprecateByQuery if we don't need to notify anyone of which statements have been deleted.
@@ -839,7 +840,7 @@ private boolean remove(Resource subj, IRI pred, Value obj, SailDataset dataset,
839840
Statement st = iter.next();
840841
sink.deprecate(st);
841842
statementsRemoved = true;
842-
notifyStatementRemoved(st);
843+
notifyStatementRemoved(st, inferred);
843844
}
844845
}
845846
return statementsRemoved;
@@ -857,7 +858,7 @@ protected void clearInternal(Resource... contexts) throws SailException {
857858
}
858859
assert explicitSinks.containsKey(null);
859860
if (this.hasConnectionListeners()) {
860-
remove(null, null, null, datasets.get(null), explicitSinks.get(null), contexts);
861+
remove(null, null, null, false, datasets.get(null), explicitSinks.get(null), contexts);
861862
}
862863
explicitSinks.get(null).clear(contexts);
863864
}
@@ -876,7 +877,7 @@ public void clearInferred(Resource... contexts) throws SailException {
876877
explicitOnlyDataset = branch(IncludeInferred.explicitOnly).dataset(level);
877878
}
878879
if (this.hasConnectionListeners()) {
879-
remove(null, null, null, inferredOnlyDataset, inferredOnlySink, contexts);
880+
remove(null, null, null, true, inferredOnlyDataset, inferredOnlySink, contexts);
880881
}
881882
inferredOnlySink.clear(contexts);
882883
setStatementsRemoved();

0 commit comments

Comments
 (0)