You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by sa...@apache.org on 2012/05/18 04:46:02 UTC

svn commit: r1339955 - in /jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql: engine/QueryExecutionBase.java util/ModelUtils.java

Author: sallen
Date: Fri May 18 02:46:02 2012
New Revision: 1339955

URL: http://svn.apache.org/viewvc?rev=1339955&view=rev
Log:
Added utility methods to convert iterators of Triples to Statements and vice-versa.

Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/ModelUtils.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java?rev=1339955&r1=1339954&r2=1339955&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/engine/QueryExecutionBase.java Fri May 18 02:46:02 2012
@@ -24,12 +24,8 @@ import java.util.List ;
 import java.util.Set ;
 import java.util.concurrent.TimeUnit ;
 
-import org.openjena.atlas.iterator.Iter ;
-import org.openjena.atlas.iterator.IteratorResourceClosing ;
-import org.openjena.atlas.iterator.Transform ;
 import org.openjena.atlas.lib.AlarmClock ;
 import org.openjena.atlas.lib.Callback ;
-import org.openjena.atlas.lib.Closeable ;
 import org.openjena.atlas.lib.Pingback ;
 import org.openjena.atlas.logging.Log ;
 
@@ -48,7 +44,6 @@ import com.hp.hpl.jena.rdf.model.ModelFa
 import com.hp.hpl.jena.rdf.model.RDFNode ;
 import com.hp.hpl.jena.rdf.model.Resource ;
 import com.hp.hpl.jena.rdf.model.Statement ;
-import com.hp.hpl.jena.rdf.model.StmtIterator ;
 import com.hp.hpl.jena.shared.PrefixMapping ;
 import com.hp.hpl.jena.sparql.ARQConstants ;
 import com.hp.hpl.jena.sparql.core.DatasetGraph ;
@@ -361,26 +356,7 @@ public class QueryExecutionBase implemen
     @Override
     public Iterator<Triple> execDescribeTriples()
     {
-        Model model = execDescribe() ;
-        
-        // TODO Is this the best way to get an Iterator<Triple> out of a model?
-        final StmtIterator it = model.listStatements() ;
-        return new IteratorResourceClosing<Triple>(Iter.map(it, new Transform<Statement, Triple>()
-        {
-            @Override
-            public Triple convert(Statement item)
-            {
-                return item.asTriple() ;
-            }
-        }),
-        new Closeable()
-        {
-            @Override
-            public void close()
-            {
-                it.close() ;
-            }
-        });
+        return ModelUtils.statementsToTriples(execDescribe().listStatements());
     }
 
     @Override

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/ModelUtils.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/ModelUtils.java?rev=1339955&r1=1339954&r2=1339955&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/ModelUtils.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/util/ModelUtils.java Fri May 18 02:46:02 2012
@@ -18,15 +18,25 @@
 
 package com.hp.hpl.jena.sparql.util;
 
+import java.util.Iterator ;
+
+import org.openjena.atlas.iterator.Iter ;
+import org.openjena.atlas.iterator.IteratorResourceClosing ;
+import org.openjena.atlas.iterator.Transform ;
+import org.openjena.atlas.lib.Closeable ;
+
 import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.graph.Triple ;
 import com.hp.hpl.jena.query.QueryException ;
 import com.hp.hpl.jena.rdf.model.Model ;
 import com.hp.hpl.jena.rdf.model.RDFNode ;
 import com.hp.hpl.jena.rdf.model.Statement ;
+import com.hp.hpl.jena.rdf.model.StmtIterator;
 import com.hp.hpl.jena.rdf.model.impl.LiteralImpl ;
 import com.hp.hpl.jena.rdf.model.impl.ResourceImpl ;
+import com.hp.hpl.jena.rdf.model.impl.StmtIteratorImpl ;
 import com.hp.hpl.jena.sparql.ARQInternalErrorException ;
+import com.hp.hpl.jena.util.iterator.ClosableIterator ;
 
 
 public class ModelUtils
@@ -78,5 +88,60 @@ public class ModelUtils
 //        Statement stmt = model.createStatement((Resource)s, (Property)p, o) ;
 //        return stmt ;
     }
+    
+    
+    public static StmtIterator triplesToStatements(final Iterator<Triple> it, final Model refModel)
+    {
+        return new StmtIteratorImpl(Iter.map(it, new Transform<Triple,Statement>()
+        {
+            @Override
+            public Statement convert(Triple item)
+            {
+                return refModel.asStatement(item);
+            }
+        }))
+        {
+            // Make sure to close the incoming iterator
+            @Override
+            public void close()
+            {
+                if (it instanceof ClosableIterator<?>)
+                {
+                    ((ClosableIterator<?>)it).close();
+                }
+                else
+                {
+                    Iter.close(it);
+                }
+            }
+        };
+    }
+    
+    public static Iterator<Triple> statementsToTriples(final Iterator<Statement> it)
+    {
+        return new IteratorResourceClosing<Triple>(Iter.map(it, new Transform<Statement,Triple>()
+        {
+            @Override
+            public Triple convert(Statement item)
+            {
+                return item.asTriple();
+            }
+        }),
+        new Closeable()
+        {
+            @Override
+            public void close()
+            {
+                if (it instanceof ClosableIterator<?>)
+                {
+                    ((ClosableIterator<?>)it).close();
+                }
+                else
+                {
+                    Iter.close(it);
+                }
+            }
+        });
+    }
  
 }