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 b43add82aeb5631e6d6635e8ec50e36eee3839ca
Author: Andy Seaborne <[email protected]>
AuthorDate: Mon Nov 6 21:31:24 2023 +0000

    GH-2077: Move NamedGraphWrapper into DatsetGraphMap
---
 .../jena/sparql/core/DatasetGraphFactory.java      |  45 ++++----
 .../apache/jena/sparql/core/DatasetGraphMap.java   | 126 ++++++++++++++-------
 .../org/apache/jena/sparql/core/NamedGraph.java    |  11 +-
 .../apache/jena/sparql/core/NamedGraphWrapper.java |  49 --------
 4 files changed, 107 insertions(+), 124 deletions(-)

diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphFactory.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphFactory.java
index 03b879801b..e4a865ce7e 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphFactory.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphFactory.java
@@ -18,15 +18,15 @@
 
 package org.apache.jena.sparql.core;
 
-import java.util.Iterator ;
-import java.util.Objects ;
+import java.util.Iterator;
+import java.util.Objects;
 
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.query.Dataset ;
-import org.apache.jena.rdf.model.Model ;
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.Node;
+import org.apache.jena.query.Dataset;
+import org.apache.jena.rdf.model.Model;
 import org.apache.jena.sparql.core.mem.DatasetGraphInMemory;
-import org.apache.jena.sparql.graph.GraphFactory ;
+import org.apache.jena.sparql.graph.GraphFactory;
 import org.apache.jena.sys.JenaSystem;
 
 public class DatasetGraphFactory
@@ -45,7 +45,7 @@ public class DatasetGraphFactory
      * @see #createTxnMem
      */
     public static DatasetGraph create() {
-        return new DatasetGraphMap() ;
+        return new DatasetGraphMap();
     }
 
     /**
@@ -94,20 +94,20 @@ public class DatasetGraphFactory
      * @return a general-purpose Dataset
      */
     public static DatasetGraph createGeneral(Graph dftGraph) {
-        return new DatasetGraphMapLink(dftGraph, graphMakerMem) ;
+        return new DatasetGraphMapLink(dftGraph, graphMakerMem);
     }
 
     /**
      * Clone the structure of a {@link DatasetGraph}.
      */
     public static DatasetGraph cloneStructure(DatasetGraph dsg) {
-        Objects.requireNonNull(dsg, "DatasetGraph must be provided") ;
-        DatasetGraphMapLink dsg2 = new 
DatasetGraphMapLink(dsg.getDefaultGraph()) ;
-        for ( Iterator<Node> names = dsg.listGraphNodes() ; names.hasNext() ; 
) {
-            Node gn = names.next() ;
-            dsg2.addGraph(gn, dsg.getGraph(gn)) ;
+        Objects.requireNonNull(dsg, "DatasetGraph must be provided");
+        DatasetGraphMapLink dsg2 = new 
DatasetGraphMapLink(dsg.getDefaultGraph());
+        for ( Iterator<Node> names = dsg.listGraphNodes(); names.hasNext(); ) {
+            Node gn = names.next();
+            dsg2.addGraph(gn, dsg.getGraph(gn));
         }
-        return dsg2 ;
+        return dsg2;
     }
 
     /**
@@ -121,7 +121,7 @@ public class DatasetGraphFactory
     /**
      * Create a DatasetGraph which only ever has a single default graph.
      */
-    public static DatasetGraph wrap(Graph graph) { return 
DatasetGraphOne.create(graph) ; }
+    public static DatasetGraph wrap(Graph graph) { return 
DatasetGraphOne.create(graph); }
 
     /**
      * An always empty {@link DatasetGraph}.
@@ -130,21 +130,14 @@ public class DatasetGraphFactory
      */
     public static DatasetGraph empty() { return DatasetGraphZero.create(); }
 
-
     /** Interface for making graphs when a dataset needs to add a new graph.
      *  Return null for no graph created.
      */
-    public interface GraphMaker { public Graph create(Node name) ; }
+    public interface GraphMaker { public Graph create(Node name); }
 
     /** A graph maker that doesn't make graphs. */
-    public static GraphMaker graphMakerNull = (name) -> null ;
+    public static GraphMaker graphMakerNull = (name) -> null;
 
     /** A graph maker that creates unnamed Jena default graphs */
-    public static GraphMaker graphMakerMem = (name) -> 
GraphFactory.createDefaultGraph() ;
-
-    /** A graph maker that creates {@link NamedGraph}s around a Jena default 
graphs */
-    public static GraphMaker graphMakerNamedGraphMem = (name) -> {
-        Graph g = GraphFactory.createDefaultGraph() ;
-        return new NamedGraphWrapper(name, g);
-    };
+    public static GraphMaker graphMakerMem = (name) -> 
GraphFactory.createDefaultGraph();
 }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
index 38fb05db60..ede679433e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/DatasetGraphMap.java
@@ -18,22 +18,23 @@
 
 package org.apache.jena.sparql.core;
 
-import java.util.HashMap ;
-import java.util.Iterator ;
-import java.util.Map ;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.jena.atlas.iterator.IteratorConcat ;
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.query.ReadWrite ;
+import org.apache.jena.atlas.iterator.IteratorConcat;
+import org.apache.jena.graph.Graph;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.query.ReadWrite;
 import org.apache.jena.query.TxnType;
 import org.apache.jena.riot.system.PrefixMap;
 import org.apache.jena.riot.system.Prefixes;
-import org.apache.jena.sparql.ARQException ;
-import org.apache.jena.sparql.core.DatasetGraphFactory.GraphMaker ;
+import org.apache.jena.sparql.ARQException;
+import org.apache.jena.sparql.core.DatasetGraphFactory.GraphMaker;
 import org.apache.jena.sparql.graph.GraphOps;
+import org.apache.jena.sparql.graph.GraphWrapper;
 import org.apache.jena.system.G;
 
 /** Implementation of a {@code DatasetGraph} as an extensible set of graphs.
@@ -47,32 +48,43 @@ import org.apache.jena.system.G;
  */
 public class DatasetGraphMap extends DatasetGraphTriplesQuads
 {
-    private final GraphMaker graphMaker ;
-    private final Map<Node, Graph> graphs = new HashMap<>() ;
-    private final Graph defaultGraph ;
-    private final PrefixMap prefixes ;
+    private final GraphMaker graphMaker;
+    private final Map<Node, Graph> graphs = new HashMap<>();
+    private final Graph defaultGraph;
+    private final PrefixMap prefixes;
 
     /** DatasetGraphMap defaulting to storage in memory. */
     public DatasetGraphMap() {
-        this(DatasetGraphFactory.graphMakerNamedGraphMem) ;
+        this(null, DatasetGraphFactory.graphMakerMem);
     }
 
-    /**  DatasetGraphMap with a specific policy for graph creation.
-     *   This allows control over the storage.
-     */
-    public DatasetGraphMap(GraphMaker graphMaker) {
-        this(graphMaker.create(null), graphMaker) ;
+    public DatasetGraphMap(Graph defaultGraph) {
+        this(defaultGraph, DatasetGraphFactory.graphMakerMem);
     }
 
-    private DatasetGraphMap(Graph defaultGraph, GraphMaker graphMaker) {
-        this.defaultGraph = defaultGraph ;
-        this.graphMaker = graphMaker ;
-        // Preserves legacy behaviour of "getDefaultGraph" having prefixes.
+    private DatasetGraphMap(Graph baseDefaultGraph, GraphMaker baseGraphMaker) 
{
+        this.graphMaker = namedGraphMaker(baseGraphMaker);
+        if ( baseDefaultGraph == null )
+            this.defaultGraph = this.graphMaker.create(null);
+        else if ( baseDefaultGraph instanceof NamedGraph )
+            this.defaultGraph = baseDefaultGraph;
+        else
+            this.defaultGraph =  graphMaker.create(null);
         this.prefixes = Prefixes.adapt(defaultGraph);
     }
 
+    /* Ensure a GraphMaker returns {@link NamedGraph}. */
+    private static GraphMaker namedGraphMaker(GraphMaker baseMaker) {
+        return (name) -> {
+            Graph g = baseMaker.create(name);
+            if ( g instanceof NamedGraph )
+                return g;
+            return new NamedGraphWrapper(name, g);
+        };
+    }
+
     // ----
-    private final Transactional txn                     = 
TransactionalLock.createMRSW() ;
+    private final Transactional txn                     = 
TransactionalLock.createMRSW();
     private final Transactional txn()                   { return txn; }
     @Override public void begin()                       { txn().begin(); }
     @Override public void begin(TxnType txnType)        { 
txn().begin(txnType); }
@@ -112,49 +124,49 @@ public class DatasetGraphMap extends 
DatasetGraphTriplesQuads
 
     @Override
     protected void addToDftGraph(Node s, Node p, Node o) {
-        getDefaultGraph().add(Triple.create(s, p, o)) ;
+        getDefaultGraph().add(Triple.create(s, p, o));
     }
 
     @Override
     protected void addToNamedGraph(Node g, Node s, Node p, Node o) {
-        getGraph(g).add(Triple.create(s, p, o)) ;
+        getGraph(g).add(Triple.create(s, p, o));
     }
 
     @Override
     protected void deleteFromDftGraph(Node s, Node p, Node o) {
-        getDefaultGraph().delete(Triple.create(s, p, o)) ;
+        getDefaultGraph().delete(Triple.create(s, p, o));
     }
 
     @Override
     protected void deleteFromNamedGraph(Node g, Node s, Node p, Node o) {
-        getGraph(g).delete(Triple.create(s, p, o)) ;
+        getGraph(g).delete(Triple.create(s, p, o));
     }
 
     @Override
     protected Iterator<Quad> findInDftGraph(Node s, Node p, Node o) {
-        Iterator<Triple> iter = getDefaultGraph().find(s, p, o) ;
-        return G.triples2quadsDftGraph(iter)  ;
+        Iterator<Triple> iter = getDefaultGraph().find(s, p, o);
+        return G.triples2quadsDftGraph(iter) ;
     }
 
     @Override
     protected Iterator<Quad> findInSpecificNamedGraph(Node g, Node s, Node p, 
Node o) {
-        Iterator<Triple> iter = getGraph(g).find(s, p, o) ;
-        return G.triples2quads(g, iter) ;
+        Iterator<Triple> iter = getGraph(g).find(s, p, o);
+        return G.triples2quads(g, iter);
     }
 
     @Override
     protected Iterator<Quad> findInAnyNamedGraphs(Node s, Node p, Node o) {
-        Iterator<Node> gnames = listGraphNodes() ;
-        IteratorConcat<Quad> iter = new IteratorConcat<>() ;
+        Iterator<Node> gnames = listGraphNodes();
+        IteratorConcat<Quad> iter = new IteratorConcat<>();
 
         // Named graphs
-        for ( ; gnames.hasNext() ; ) {
+        for (; gnames.hasNext(); ) {
             Node gn = gnames.next();
-            Iterator<Quad> qIter = findInSpecificNamedGraph(gn, s, p, o) ;
+            Iterator<Quad> qIter = findInSpecificNamedGraph(gn, s, p, o);
             if ( qIter != null )
-                iter.add(qIter) ;
+                iter.add(qIter);
         }
-        return iter ;
+        return iter;
     }
 
     @Override
@@ -165,9 +177,9 @@ public class DatasetGraphMap extends 
DatasetGraphTriplesQuads
     @Override
     public Graph getGraph(Node graphNode) {
         if ( Quad.isUnionGraph(graphNode) )
-            return GraphOps.unionGraph(this) ;
+            return GraphOps.unionGraph(this);
         if ( Quad.isDefaultGraph(graphNode))
-            return getDefaultGraph() ;
+            return getDefaultGraph();
         // Not a special case.
         Graph g = graphs.get(graphNode);
         if ( g == null ) {
@@ -189,14 +201,40 @@ public class DatasetGraphMap extends 
DatasetGraphTriplesQuads
      * Sub classes can reimplement this.
      */
     protected Graph getGraphCreate(Node graphNode) {
-        Graph g = graphMaker.create(graphNode) ;
+        Graph g = graphMaker.create(graphNode);
         if ( g == null )
-            throw new ARQException("Can't make new graphs") ;
-        return g ;
+            throw new ARQException("Can't make new graphs");
+        return g;
     }
 
     @Override
     public long size() {
         return graphs.size();
     }
+
+    /**
+     * Add a name to a graph.
+     *
+     * @see GraphView
+     */
+    private static class NamedGraphWrapper extends GraphWrapper implements 
NamedGraph {
+
+        private final Node graphName;
+
+        public NamedGraphWrapper(Node graphName, Graph graph) {
+            super(graph);
+            this.graphName = graphName;
+        }
+
+        @Override
+        public Node getGraphName() {
+            return graphName;
+        }
+
+        @Override
+        public String toString() {
+            return "NamedGraphWrapper("+graphName+")";
+        }
+    }
+
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/core/NamedGraph.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/NamedGraph.java
index 77db174c0d..8ec566df9e 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/NamedGraph.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/core/NamedGraph.java
@@ -27,11 +27,12 @@ import org.apache.jena.graph.Node ;
  * Sometimes there is an associated name with a graph, where it lives on the 
web,
  * or the name in a dataset.
  * <p>
- * This interface is for graph that have one associated name.
- * What "associated" means is left open.  
- * 
+ * This interface is for graph that has one associated name.
+ * What "associated" means is left open.
+ * <p>
+ * This interface is used be Jena Text.
+ *
  * @see GraphView
- * @see NamedGraphWrapper
  */
 
 public interface NamedGraph extends Graph {
@@ -39,7 +40,7 @@ public interface NamedGraph extends Graph {
      * Return the graph name for this graph.
      * Blank nodes can be used.
      * <p>
-     * A named graph of "null" is discouraged - use {@link 
Quad#defaultGraphIRI} 
+     * A named graph of "null" is discouraged - use {@link 
Quad#defaultGraphIRI} - but is legal.
      * for a default graph in the context of use.
      */
     public Node getGraphName();
diff --git 
a/jena-arq/src/main/java/org/apache/jena/sparql/core/NamedGraphWrapper.java 
b/jena-arq/src/main/java/org/apache/jena/sparql/core/NamedGraphWrapper.java
deleted file mode 100644
index 110d1eaa3e..0000000000
--- a/jena-arq/src/main/java/org/apache/jena/sparql/core/NamedGraphWrapper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.jena.sparql.core;
-
-import org.apache.jena.graph.Graph ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.sparql.graph.GraphWrapper ;
-
-/**
- * Add a name to a graph.
- * 
- * @see GraphView
- */
-
-public class NamedGraphWrapper extends GraphWrapper implements NamedGraph {
-
-    private final Node graphName;
-
-    public NamedGraphWrapper(Node graphName, Graph graph) {
-        super(graph);
-        this.graphName = graphName;
-    }
-
-    @Override
-    public Node getGraphName() {
-        return graphName;
-    }
-    
-    @Override
-    public String toString() {
-        return "NamedGraphWrapper("+graphName+")";
-    }
-}

Reply via email to