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 ;
     }
 
     /**

Reply via email to