This is an automated email from the ASF dual-hosted git repository. andy pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
commit 9db136539b9aa4f1f061d125ba5a00d59e5cc8f1 Author: Andy Seaborne <[email protected]> AuthorDate: Fri Dec 5 17:26:34 2025 +0000 Move counting open/close into jena.ontology --- .../org/apache/jena/memvalue/GraphMemValue.java | 17 ++++--- .../models/GraphRefCount.java} | 14 +++--- .../jena/ontology/models/SimpleGraphMaker.java | 17 +++---- .../jena/graph/test/AbstractTestGraphMaker.java | 3 ++ .../java/org/apache/jena/ontapi/utils/Graphs.java | 56 +++++++++------------- 5 files changed, 50 insertions(+), 57 deletions(-) diff --git a/jena-core/src/main/java/org/apache/jena/memvalue/GraphMemValue.java b/jena-core/src/main/java/org/apache/jena/memvalue/GraphMemValue.java index 27ce2a7904..34726eb7e7 100644 --- a/jena-core/src/main/java/org/apache/jena/memvalue/GraphMemValue.java +++ b/jena-core/src/main/java/org/apache/jena/memvalue/GraphMemValue.java @@ -18,12 +18,16 @@ package org.apache.jena.memvalue; -import org.apache.jena.graph.* ; +import java.util.stream.Stream; + +import org.apache.jena.graph.GraphEvents; +import org.apache.jena.graph.GraphMemFactory; +import org.apache.jena.graph.Node; +import org.apache.jena.graph.Triple; +import org.apache.jena.graph.impl.GraphBase; import org.apache.jena.graph.impl.TripleStore ; import org.apache.jena.util.iterator.ExtendedIterator ; -import java.util.stream.Stream; - /** * In-memory, non-thread-safe, non-transactional graph. * This specialised graph has same-value semantics for literals. @@ -35,7 +39,7 @@ import java.util.stream.Stream; * implementation. */ @Deprecated -public class GraphMemValue extends GraphMemRefCount { +public class GraphMemValue extends GraphBase { /** This Graph's TripleStore. @@ -47,11 +51,6 @@ public class GraphMemValue extends GraphMemRefCount { store = new GraphTripleStoreMem(this); } - @Override - protected void destroy() { - store.close(); - } - @Override public void performAdd( Triple t ) { store.add( t ); } diff --git a/jena-core/src/main/java/org/apache/jena/memvalue/GraphMemRefCount.java b/jena-core/src/main/java/org/apache/jena/ontology/models/GraphRefCount.java similarity index 86% rename from jena-core/src/main/java/org/apache/jena/memvalue/GraphMemRefCount.java rename to jena-core/src/main/java/org/apache/jena/ontology/models/GraphRefCount.java index 513b03ef99..b78f3b82a4 100644 --- a/jena-core/src/main/java/org/apache/jena/memvalue/GraphMemRefCount.java +++ b/jena-core/src/main/java/org/apache/jena/ontology/models/GraphRefCount.java @@ -16,9 +16,10 @@ * limitations under the License. */ -package org.apache.jena.memvalue; +package org.apache.jena.ontology.models; -import org.apache.jena.graph.impl.GraphBase; +import org.apache.jena.graph.Graph; +import org.apache.jena.graph.impl.WrappedGraph; /** * GraphMemRefCount - a base class for GraphMemValue @@ -29,7 +30,7 @@ import org.apache.jena.graph.impl.GraphBase; * GraphBase.close() called. Thus in normal use one close is enough, but GraphMakers * using GraphMems can arrange to re-use the same named graph. */ -abstract class GraphMemRefCount extends GraphBase { +public class GraphRefCount extends WrappedGraph { /** * The number-of-times-opened count. */ @@ -38,14 +39,15 @@ abstract class GraphMemRefCount extends GraphBase { /** * initialise a GraphMemBase with its count set to 1. */ - protected GraphMemRefCount() { + protected GraphRefCount(Graph graph) { + super(graph); count = 1; } /** * Note a re-opening of this graph by incrementing the count. Answer this Graph. */ - public GraphMemRefCount openAgain() { + public GraphRefCount openAgain() { count++; return this; } @@ -54,7 +56,7 @@ abstract class GraphMemRefCount extends GraphBase { * Sub-classes over-ride this method to release any resources they no longer need * once fully closed. */ - protected abstract void destroy(); + public void destroy() {} /** * Close this graph; if it is now fully closed, destroy its resources and run the diff --git a/jena-core/src/main/java/org/apache/jena/ontology/models/SimpleGraphMaker.java b/jena-core/src/main/java/org/apache/jena/ontology/models/SimpleGraphMaker.java index 1714f245f3..7af5f2da4a 100644 --- a/jena-core/src/main/java/org/apache/jena/ontology/models/SimpleGraphMaker.java +++ b/jena-core/src/main/java/org/apache/jena/ontology/models/SimpleGraphMaker.java @@ -40,10 +40,11 @@ public class SimpleGraphMaker extends BaseGraphMaker { /** * The mapping from the names of graphs to the Graphs themselves. */ - private Map<String, Graph> graphs = new HashMap<>(); + private Map<String, GraphRefCount> graphs = new HashMap<>(); - public Graph create() { - return GraphMemFactory.createDefaultGraph(); + public GraphRefCount create() { + Graph g = GraphMemFactory.createDefaultGraphSameValue(); + return new GraphRefCount(g); } /** @@ -51,15 +52,15 @@ public class SimpleGraphMaker extends BaseGraphMaker { */ @Override public Graph createGraph(String name, boolean strict) { - Graph already = graphs.get(name); + GraphRefCount already = graphs.get(name); if ( already == null ) { - Graph result = GraphMemFactory.createDefaultGraph(); + GraphRefCount result = create(); graphs.put(name, result); return result; } if ( strict ) throw new AlreadyExistsException(name); - return already; + return already.openAgain(); } /** @@ -67,13 +68,13 @@ public class SimpleGraphMaker extends BaseGraphMaker { */ @Override public Graph openGraph(String name, boolean strict) { - Graph already = graphs.get(name); + GraphRefCount already = graphs.get(name); if ( already == null ) if ( strict ) throw new DoesNotExistException(name); else return createGraph(name, true); - return already; + return already.openAgain(); } @Override diff --git a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraphMaker.java b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraphMaker.java index 21af1714bb..39480b6fa5 100644 --- a/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraphMaker.java +++ b/jena-core/src/test/java/org/apache/jena/graph/test/AbstractTestGraphMaker.java @@ -198,6 +198,9 @@ public abstract class AbstractTestGraphMaker extends GraphTestBase { assertFalse("no such graph", gf.hasGraph("george")); } + // Up to Jena5, the graph created did open/close counting. + // But only some graph implements provided this. + public void testCarefulClose() { Graph x = gf.createGraph("x"); Graph y = gf.openGraph("x"); diff --git a/jena-ontapi/src/main/java/org/apache/jena/ontapi/utils/Graphs.java b/jena-ontapi/src/main/java/org/apache/jena/ontapi/utils/Graphs.java index b3f449fe73..c8a8a5449c 100644 --- a/jena-ontapi/src/main/java/org/apache/jena/ontapi/utils/Graphs.java +++ b/jena-ontapi/src/main/java/org/apache/jena/ontapi/utils/Graphs.java @@ -18,10 +18,17 @@ package org.apache.jena.ontapi.utils; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import org.apache.jena.graph.*; import org.apache.jena.graph.compose.Dyadic; import org.apache.jena.graph.compose.Polyadic; import org.apache.jena.graph.impl.WrappedGraph; +import org.apache.jena.mem2.GraphMem2; +import org.apache.jena.memvalue.GraphMemValue; import org.apache.jena.ontapi.UnionGraph; import org.apache.jena.reasoner.InfGraph; import org.apache.jena.shared.PrefixMapping; @@ -33,26 +40,6 @@ import org.apache.jena.util.iterator.NullIterator; import org.apache.jena.vocabulary.OWL2; import org.apache.jena.vocabulary.RDF; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Deque; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.Spliterator; -import java.util.function.Function; -import java.util.stream.Collectors; -import java.util.stream.Stream; - /** * Helper to work with {@link Graph Jena Graph} (generally with our {@link UnionGraph}) and with its related objects: * {@link Triple} and {@link Node}. @@ -148,28 +135,28 @@ public class Graphs { if (!seen.add(g)) { continue; } - if (g instanceof GraphWrapper) { - candidates.add(((GraphWrapper) g).get()); + if (g instanceof GraphWrapper gw) { + candidates.add(gw.get()); continue; } - if (g instanceof WrappedGraph) { - candidates.add(((WrappedGraph) g).getWrapped()); + if (g instanceof WrappedGraph wg) { + candidates.add(wg.getWrapped()); continue; } - if (g instanceof UnionGraph) { - candidates.add(((UnionGraph) g).getBaseGraph()); + if (g instanceof UnionGraph ug) { + candidates.add(ug.getBaseGraph()); continue; } - if (g instanceof Polyadic) { - candidates.add(((Polyadic) g).getBaseGraph()); + if (g instanceof Polyadic pg) { + candidates.add(pg.getBaseGraph()); continue; } - if (g instanceof Dyadic) { - candidates.add(((Dyadic) g).getL()); + if (g instanceof Dyadic dg) { + candidates.add(dg.getL()); continue; } - if (g instanceof InfGraph) { - candidates.add(((InfGraph) g).getRawGraph()); + if (g instanceof InfGraph ig) { + candidates.add(ig.getRawGraph()); } return g; } @@ -193,13 +180,14 @@ public class Graphs { } /** - * Answers {@code true} if the graph specified is {@code GraphMem}. + * Answers {@code true} if the graph specified is memory storage graph. * * @param graph {@link Graph} * @return {@code boolean} */ + @SuppressWarnings("deprecation") public static boolean isGraphMem(Graph graph) { - return graph instanceof GraphMemBase; + return graph instanceof GraphMemValue || graph instanceof GraphMem2 ; } /**
