You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by mi...@apache.org on 2013/05/03 12:08:54 UTC

svn commit: r1478708 - in /clerezza/trunk: rdf.core/ rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/ rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/ rdf.core/src/test/java/org/apache/clerezza/rdf/core/access/ rdf.jena.sparql/src...

Author: misl
Date: Fri May  3 10:08:54 2013
New Revision: 1478708

URL: http://svn.apache.org/r1478708
Log:
CLEREZZA-468: Added support for string based queries, but still using the QueryEngine instead of QueryableTcProvider.

Added:
    clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java
Modified:
    clerezza/trunk/rdf.core/pom.xml
    clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/QueryableTcProvider.java
    clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
    clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryEngine.java
    clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/access/TcManagerTest.java
    clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java
    clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java
    clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java

Modified: clerezza/trunk/rdf.core/pom.xml
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/pom.xml?rev=1478708&r1=1478707&r2=1478708&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/pom.xml (original)
+++ clerezza/trunk/rdf.core/pom.xml Fri May  3 10:08:54 2013
@@ -54,6 +54,12 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+		    <dependency>
+			      <groupId>org.mockito</groupId>
+			      <artifactId>mockito-core</artifactId>
+			      <version>1.9.5</version>
+			      <scope>test</scope>
+		    </dependency>
     </dependencies>
     <build>
         <plugins>

Modified: clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/QueryableTcProvider.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/QueryableTcProvider.java?rev=1478708&r1=1478707&r2=1478708&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/QueryableTcProvider.java (original)
+++ clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/QueryableTcProvider.java Fri May  3 10:08:54 2013
@@ -19,6 +19,7 @@
 package org.apache.clerezza.rdf.core.access;
 
 import org.apache.clerezza.rdf.core.TripleCollection;
+import org.apache.clerezza.rdf.core.sparql.query.Query;
 
 /**
  * Extends the TcProvider interface for providers that support sparql queries.
@@ -37,4 +38,17 @@ public interface QueryableTcProvider ext
      * @return the resulting ResultSet, Graph or Boolean value
      */
     public Object executeSparqlQuery(String query, TripleCollection defaultGraph);
+
+    /**
+     * Executes any sparql query. The type of the result object will vary
+     * depending on the type of the query.
+     * 
+     * @param query
+     *            the sparql query to execute
+     * @param defaultGraph
+     *            the default graph against which to execute the query if not
+     *            FROM clause is present
+     * @return the resulting ResultSet, Graph or Boolean value
+     */
+    public Object executeSparqlQuery(Query query, TripleCollection defaultGraph);
 }

Modified: clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java?rev=1478708&r1=1478707&r2=1478708&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java (original)
+++ clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/access/TcManager.java Fri May  3 10:08:54 2013
@@ -18,9 +18,6 @@
  */
 package org.apache.clerezza.rdf.core.access;
 
-import org.apache.clerezza.rdf.core.impl.WriteBlockedMGraph;
-import org.apache.clerezza.rdf.core.impl.WriteBlockedTripleCollection;
-
 import java.security.AccessControlException;
 import java.util.Collection;
 import java.util.Collections;
@@ -33,28 +30,30 @@ import java.util.Properties;
 import java.util.ServiceLoader;
 import java.util.Set;
 
-import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.component.ComponentContext;
 import org.apache.clerezza.rdf.core.Graph;
 import org.apache.clerezza.rdf.core.MGraph;
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.UriRef;
 import org.apache.clerezza.rdf.core.access.security.TcAccessController;
+import org.apache.clerezza.rdf.core.impl.WriteBlockedMGraph;
+import org.apache.clerezza.rdf.core.impl.WriteBlockedTripleCollection;
+import org.apache.clerezza.rdf.core.sparql.NoQueryEngineException;
+import org.apache.clerezza.rdf.core.sparql.QueryEngine;
+import org.apache.clerezza.rdf.core.sparql.ResultSet;
 import org.apache.clerezza.rdf.core.sparql.query.AskQuery;
 import org.apache.clerezza.rdf.core.sparql.query.ConstructQuery;
 import org.apache.clerezza.rdf.core.sparql.query.DescribeQuery;
-import org.apache.clerezza.rdf.core.sparql.NoQueryEngineException;
 import org.apache.clerezza.rdf.core.sparql.query.Query;
-import org.apache.clerezza.rdf.core.sparql.QueryEngine;
-import org.apache.clerezza.rdf.core.sparql.ResultSet;
 import org.apache.clerezza.rdf.core.sparql.query.SelectQuery;
+import org.apache.clerezza.rdf.core.sparql.query.impl.SimpleStringQuerySerializer;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.ReferencePolicy;
 import org.apache.felix.scr.annotations.Service;
 import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.ComponentContext;
 
 /**
  * This class implements <code>TcManager</code>, delegating the actual
@@ -277,6 +276,26 @@ public class TcManager extends TcProvide
      *            FROM clause is present
      * @return the resulting ResultSet, Graph or Boolean value
      */
+    public Object executeSparqlQuery(String query, TripleCollection defaultGraph) {
+        final QueryEngine queryEngine = this.queryEngine;
+        if (queryEngine != null) {
+            return queryEngine.execute(this, defaultGraph, query);
+        } else {
+            throw new NoQueryEngineException();
+        }
+    }
+
+    /**
+     * Executes any sparql query. The type of the result object will vary
+     * depending on the type of the query.
+     * 
+     * @param query
+     *            the sparql query to execute
+     * @param defaultGraph
+     *            the default graph against which to execute the query if not
+     *            FROM clause is present
+     * @return the resulting ResultSet, Graph or Boolean value
+     */
     public Object executeSparqlQuery(Query query, TripleCollection defaultGraph) {
         final QueryEngine queryEngine = this.queryEngine;
         if (queryEngine != null) {
@@ -298,12 +317,7 @@ public class TcManager extends TcProvide
      */
     public ResultSet executeSparqlQuery(SelectQuery query,
             TripleCollection defaultGraph) {
-        final QueryEngine queryEngine = this.queryEngine;
-        if (queryEngine != null) {
-            return (ResultSet) queryEngine.execute(this, defaultGraph, query);
-        } else {
-            throw new NoQueryEngineException();
-        }
+        return (ResultSet) executeSparqlQuery((Query)query, defaultGraph);
     }
 
     /**
@@ -318,12 +332,7 @@ public class TcManager extends TcProvide
      */
     public boolean executeSparqlQuery(AskQuery query,
             TripleCollection defaultGraph) {
-        final QueryEngine queryEngine = this.queryEngine;
-        if (queryEngine != null) {
-            return (Boolean) queryEngine.execute(this, defaultGraph, query);
-        } else {
-            throw new NoQueryEngineException();
-        }
+        return (Boolean) executeSparqlQuery((Query)query, defaultGraph);
     }
 
     /**
@@ -338,12 +347,7 @@ public class TcManager extends TcProvide
      */
     public Graph executeSparqlQuery(DescribeQuery query,
             TripleCollection defaultGraph) {
-        final QueryEngine queryEngine = this.queryEngine;
-        if (queryEngine != null) {
-            return (Graph) queryEngine.execute(this, defaultGraph, query);
-        } else {
-            throw new NoQueryEngineException();
-        }
+        return (Graph) executeSparqlQuery((Query)query, defaultGraph);
     }
 
     /**
@@ -358,12 +362,7 @@ public class TcManager extends TcProvide
      */
     public Graph executeSparqlQuery(ConstructQuery query,
             TripleCollection defaultGraph) {
-        final QueryEngine queryEngine = this.queryEngine;
-        if (queryEngine != null) {
-            return (Graph) queryEngine.execute(this, defaultGraph, query);
-        } else {
-            throw new NoQueryEngineException();
-        }
+        return (Graph) executeSparqlQuery((Query)query, defaultGraph);
     }
 
     /**

Modified: clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryEngine.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryEngine.java?rev=1478708&r1=1478707&r2=1478708&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryEngine.java (original)
+++ clerezza/trunk/rdf.core/src/main/java/org/apache/clerezza/rdf/core/sparql/QueryEngine.java Fri May  3 10:08:54 2013
@@ -18,18 +18,46 @@
  */
 package org.apache.clerezza.rdf.core.sparql;
 
-import org.apache.clerezza.rdf.core.sparql.query.Query;
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.access.TcManager;
+import org.apache.clerezza.rdf.core.sparql.query.Query;
 
 /**
  * A QueryEngine can process SPARQL queries against an arbitrary set of graphs.
- *
+ * 
  * @author rbn
  */
 public interface QueryEngine {
 
-    public Object execute(TcManager tcManager, TripleCollection dafaultGraph, Query query);
-
+	/**
+	 * Executes any sparql query. The type of the result object will vary
+	 * depending on the type of the query.
+	 * 
+	 * @param tcManager
+	 *            where the query originates.
+	 * @param defaultGraph
+	 *            the default graph against which to execute the query if no
+	 *            FROM clause is present
+	 * @param query
+	 *            Query object to be executed
+	 * @return the resulting ResultSet, Graph or Boolean value
+	 */
+	public Object execute(TcManager tcManager, TripleCollection defaultGraph,
+			Query query);
 
+	/**
+	 * Executes any sparql query. The type of the result object will vary
+	 * depending on the type of the query.
+	 * 
+	 * @param tcManager
+	 *            where the query originates.
+	 * @param defaultGraph
+	 *            the default graph against which to execute the query if no
+	 *            FROM clause is present
+	 * @param query
+	 *            string to be executed.
+	 * @return the resulting ResultSet, Graph or Boolean value
+	 */
+	public Object execute(TcManager tcManager, TripleCollection defaultGraph,
+			String query);
 }

Modified: clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/access/TcManagerTest.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/access/TcManagerTest.java?rev=1478708&r1=1478707&r2=1478708&view=diff
==============================================================================
--- clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/access/TcManagerTest.java (original)
+++ clerezza/trunk/rdf.core/src/test/java/org/apache/clerezza/rdf/core/access/TcManagerTest.java Fri May  3 10:08:54 2013
@@ -18,10 +18,12 @@
  */
 package org.apache.clerezza.rdf.core.access;
 
+import java.lang.reflect.Field;
 import java.util.Iterator;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
 import org.apache.clerezza.rdf.core.Graph;
 import org.apache.clerezza.rdf.core.Triple;
 import org.apache.clerezza.rdf.core.TripleCollection;
@@ -30,90 +32,271 @@ import org.apache.clerezza.rdf.core.acce
 import org.apache.clerezza.rdf.core.access.providers.WeightedA1;
 import org.apache.clerezza.rdf.core.access.providers.WeightedAHeavy;
 import org.apache.clerezza.rdf.core.access.providers.WeightedBlight;
+import org.apache.clerezza.rdf.core.impl.SimpleMGraph;
 import org.apache.clerezza.rdf.core.impl.TripleImpl;
+import org.apache.clerezza.rdf.core.sparql.NoQueryEngineException;
+import org.apache.clerezza.rdf.core.sparql.QueryEngine;
+import org.apache.clerezza.rdf.core.sparql.query.AskQuery;
+import org.apache.clerezza.rdf.core.sparql.query.ConstructQuery;
+import org.apache.clerezza.rdf.core.sparql.query.DescribeQuery;
+import org.apache.clerezza.rdf.core.sparql.query.Query;
+import org.apache.clerezza.rdf.core.sparql.query.SelectQuery;
+
 import static org.junit.Assert.*;
 
 /**
- *
+ * 
  * @author reto
  */
 public class TcManagerTest {
 
-    public static UriRef uriRefAHeavy = new UriRef("http://example.org/aHeavy");
-    public static UriRef uriRefB = new UriRef("http://example.org/b");
-    ;
-    public static final UriRef uriRefA = new UriRef("http://example.org/a");
-    public static final UriRef uriRefA1 = new UriRef("http://example.org/a1");
-    private TcManager graphAccess;
-    private final WeightedA weightedA = new WeightedA();
-    private final WeightedA1 weightedA1 = new WeightedA1();
-    private WeightedTcProvider weightedBlight = new WeightedBlight();
-
-    @Before
-    public void setUp() {
-        graphAccess = TcManager.getInstance();
-        graphAccess.bindWeightedTcProvider(weightedA);
-        graphAccess.bindWeightedTcProvider(weightedA1);
-        graphAccess.bindWeightedTcProvider(weightedBlight);
-    }
-
-    @After
-    public void tearDown() {
-        graphAccess = TcManager.getInstance();
-        graphAccess.unbindWeightedTcProvider(weightedA);
-        graphAccess.unbindWeightedTcProvider(weightedA1);
-        graphAccess.unbindWeightedTcProvider(weightedBlight);
-    }
-
-    @Test
-    public void getGraphFromA() {
-        Graph graphA = graphAccess.getGraph(uriRefA);
-        Iterator<Triple> iterator = graphA.iterator();
-        assertEquals(new TripleImpl(uriRefA, uriRefA, uriRefA), iterator.next());
-        assertFalse(iterator.hasNext());
-        TripleCollection triplesA = graphAccess.getTriples(uriRefA);
-        iterator = triplesA.iterator();
-        assertEquals(new TripleImpl(uriRefA, uriRefA, uriRefA), iterator.next());
-        assertFalse(iterator.hasNext());
-    }
-
-    @Test
-    public void getGraphFromB() {
-        Graph graphA = graphAccess.getGraph(uriRefB);
-        Iterator<Triple> iterator = graphA.iterator();
-        assertEquals(new TripleImpl(uriRefB, uriRefB, uriRefB), iterator.next());
-        assertFalse(iterator.hasNext());
-        TripleCollection triplesA = graphAccess.getTriples(uriRefB);
-        iterator = triplesA.iterator();
-        assertEquals(new TripleImpl(uriRefB, uriRefB, uriRefB), iterator.next());
-        assertFalse(iterator.hasNext());
-    }
-
-    @Test
-    public void getGraphFromAAfterUnbinding() {
-        graphAccess.unbindWeightedTcProvider(weightedA);
-        Graph graphA = graphAccess.getGraph(uriRefA);
-        Iterator<Triple> iterator = graphA.iterator();
-        assertEquals(new TripleImpl(uriRefA1, uriRefA1, uriRefA1), iterator.next());
-        assertFalse(iterator.hasNext());
-        TripleCollection triplesA = graphAccess.getTriples(uriRefA);
-        iterator = triplesA.iterator();
-        assertEquals(new TripleImpl(uriRefA1, uriRefA1, uriRefA1), iterator.next());
-        assertFalse(iterator.hasNext());
-    }
-
-    @Test
-    public void getGraphFromAWithHeavy() {
-        final WeightedAHeavy weightedAHeavy = new WeightedAHeavy();
-        graphAccess.bindWeightedTcProvider(weightedAHeavy);
-        Graph graphA = graphAccess.getGraph(uriRefA);
-        Iterator<Triple> iterator = graphA.iterator();
-        assertEquals(new TripleImpl(uriRefAHeavy, uriRefAHeavy, uriRefAHeavy), iterator.next());
-        assertFalse(iterator.hasNext());
-        TripleCollection triplesA = graphAccess.getTriples(uriRefA);
-        iterator = triplesA.iterator();
-        assertEquals(new TripleImpl(uriRefAHeavy, uriRefAHeavy, uriRefAHeavy), iterator.next());
-        assertFalse(iterator.hasNext());
-        graphAccess.unbindWeightedTcProvider(weightedAHeavy);
-    }
+	public static UriRef uriRefAHeavy = new UriRef("http://example.org/aHeavy");
+	public static UriRef uriRefB = new UriRef("http://example.org/b");;
+	public static final UriRef uriRefA = new UriRef("http://example.org/a");
+	public static final UriRef uriRefA1 = new UriRef("http://example.org/a1");
+	private TcManager graphAccess;
+	private QueryEngine queryEngine;
+	private final WeightedA weightedA = new WeightedA();
+	private final WeightedA1 weightedA1 = new WeightedA1();
+	private WeightedTcProvider weightedBlight = new WeightedBlight();
+
+	@Before
+	public void setUp() {
+		graphAccess = TcManager.getInstance();
+		graphAccess.bindWeightedTcProvider(weightedA);
+		graphAccess.bindWeightedTcProvider(weightedA1);
+		graphAccess.bindWeightedTcProvider(weightedBlight);
+
+		queryEngine = Mockito.mock(QueryEngine.class);
+	}
+
+	@After
+	public void tearDown() {
+		graphAccess = TcManager.getInstance();
+		graphAccess.unbindWeightedTcProvider(weightedA);
+		graphAccess.unbindWeightedTcProvider(weightedA1);
+		graphAccess.unbindWeightedTcProvider(weightedBlight);
+
+		queryEngine = null;
+	}
+
+	@Test
+	public void getGraphFromA() {
+		Graph graphA = graphAccess.getGraph(uriRefA);
+		Iterator<Triple> iterator = graphA.iterator();
+		assertEquals(new TripleImpl(uriRefA, uriRefA, uriRefA), iterator.next());
+		assertFalse(iterator.hasNext());
+		TripleCollection triplesA = graphAccess.getTriples(uriRefA);
+		iterator = triplesA.iterator();
+		assertEquals(new TripleImpl(uriRefA, uriRefA, uriRefA), iterator.next());
+		assertFalse(iterator.hasNext());
+	}
+
+	@Test
+	public void getGraphFromB() {
+		Graph graphA = graphAccess.getGraph(uriRefB);
+		Iterator<Triple> iterator = graphA.iterator();
+		assertEquals(new TripleImpl(uriRefB, uriRefB, uriRefB), iterator.next());
+		assertFalse(iterator.hasNext());
+		TripleCollection triplesA = graphAccess.getTriples(uriRefB);
+		iterator = triplesA.iterator();
+		assertEquals(new TripleImpl(uriRefB, uriRefB, uriRefB), iterator.next());
+		assertFalse(iterator.hasNext());
+	}
+
+	@Test
+	public void getGraphFromAAfterUnbinding() {
+		graphAccess.unbindWeightedTcProvider(weightedA);
+		Graph graphA = graphAccess.getGraph(uriRefA);
+		Iterator<Triple> iterator = graphA.iterator();
+		assertEquals(new TripleImpl(uriRefA1, uriRefA1, uriRefA1),
+				iterator.next());
+		assertFalse(iterator.hasNext());
+		TripleCollection triplesA = graphAccess.getTriples(uriRefA);
+		iterator = triplesA.iterator();
+		assertEquals(new TripleImpl(uriRefA1, uriRefA1, uriRefA1),
+				iterator.next());
+		assertFalse(iterator.hasNext());
+	}
+
+	@Test
+	public void getGraphFromAWithHeavy() {
+		final WeightedAHeavy weightedAHeavy = new WeightedAHeavy();
+		graphAccess.bindWeightedTcProvider(weightedAHeavy);
+		Graph graphA = graphAccess.getGraph(uriRefA);
+		Iterator<Triple> iterator = graphA.iterator();
+		assertEquals(new TripleImpl(uriRefAHeavy, uriRefAHeavy, uriRefAHeavy),
+				iterator.next());
+		assertFalse(iterator.hasNext());
+		TripleCollection triplesA = graphAccess.getTriples(uriRefA);
+		iterator = triplesA.iterator();
+		assertEquals(new TripleImpl(uriRefAHeavy, uriRefAHeavy, uriRefAHeavy),
+				iterator.next());
+		assertFalse(iterator.hasNext());
+		graphAccess.unbindWeightedTcProvider(weightedAHeavy);
+	}
+
+	@Test(expected = NoQueryEngineException.class)
+	public void executeSparqlQueryNoEngineWithString() throws Exception {
+		// Prepare
+		injectQueryEngine(null);
+
+		// Execute
+		graphAccess.executeSparqlQuery("", new SimpleMGraph());
+	}
+
+	@Test(expected = NoQueryEngineException.class)
+	public void executeSparqlQueryNoEngineWithQuery() throws Exception {
+		// Prepare
+		injectQueryEngine(null);
+
+		// Execute
+		graphAccess.executeSparqlQuery((Query) null, new SimpleMGraph());
+	}
+
+	@Test(expected = NoQueryEngineException.class)
+	public void executeSparqlQueryNoEngineWithSelectQuery() throws Exception {
+		// Prepare
+		injectQueryEngine(null);
+
+		// Execute
+		graphAccess.executeSparqlQuery((SelectQuery) null, new SimpleMGraph());
+	}
+
+	@Test(expected = NoQueryEngineException.class)
+	public void executeSparqlQueryNoEngineWithAskQuery() throws Exception {
+		// Prepare
+		injectQueryEngine(null);
+
+		// Execute
+		graphAccess.executeSparqlQuery((AskQuery) null, new SimpleMGraph());
+	}
+
+	@Test(expected = NoQueryEngineException.class)
+	public void executeSparqlQueryNoEngineWithDescribeQuery() throws Exception {
+		// Prepare
+		injectQueryEngine(null);
+
+		// Execute
+		graphAccess
+				.executeSparqlQuery((DescribeQuery) null, new SimpleMGraph());
+	}
+
+	@Test(expected = NoQueryEngineException.class)
+	public void executeSparqlQueryNoEngineWithConstructQuery() throws Exception {
+		// Prepare
+		injectQueryEngine(null);
+
+		// Execute
+		graphAccess.executeSparqlQuery((ConstructQuery) null,
+				new SimpleMGraph());
+	}
+
+	@Test
+	public void executeSparqlQueryWithEngineWithString() throws Exception {
+		// Prepare
+		injectQueryEngine(queryEngine);
+		TripleCollection tripleCollection = new SimpleMGraph();
+
+		// Execute
+		graphAccess.executeSparqlQuery("", tripleCollection);
+
+		// Verify
+		Mockito.verify(queryEngine).execute(graphAccess, tripleCollection, "");
+		Mockito.verify(queryEngine, Mockito.never()).execute(
+				(TcManager) Mockito.anyObject(),
+				(TripleCollection) Mockito.anyObject(),
+				(Query) Mockito.anyObject());
+	}
+
+	@Test
+	public void executeSparqlQueryWithEngineWithSelectQuery() throws Exception {
+		// Prepare
+		injectQueryEngine(queryEngine);
+		TripleCollection tripleCollection = new SimpleMGraph();
+		SelectQuery query = Mockito.mock(SelectQuery.class);
+
+		// Execute
+		graphAccess.executeSparqlQuery(query, tripleCollection);
+
+		// Verify
+		Mockito.verify(queryEngine).execute(graphAccess, tripleCollection,
+				(Query) query);
+		Mockito.verify(queryEngine, Mockito.never()).execute(
+				(TcManager) Mockito.anyObject(),
+				(TripleCollection) Mockito.anyObject(), Mockito.anyString());
+	}
+
+	@Test
+	public void executeSparqlQueryWithEngineWithAskQuery() throws Exception {
+		// Prepare
+		injectQueryEngine(queryEngine);
+		TripleCollection tripleCollection = new SimpleMGraph();
+		AskQuery query = Mockito.mock(AskQuery.class);
+
+		Mockito.when(
+				queryEngine.execute((TcManager) Mockito.anyObject(),
+						(TripleCollection) Mockito.anyObject(),
+						(Query) Mockito.anyObject())).thenReturn(Boolean.TRUE);
+
+		// Execute
+		graphAccess.executeSparqlQuery(query, tripleCollection);
+
+		// Verify
+		Mockito.verify(queryEngine).execute(graphAccess, tripleCollection,
+				(Query) query);
+		Mockito.verify(queryEngine, Mockito.never()).execute(
+				(TcManager) Mockito.anyObject(),
+				(TripleCollection) Mockito.anyObject(), Mockito.anyString());
+	}
+
+	@Test
+	public void executeSparqlQueryWithEngineWithDescribeQuery()
+			throws Exception {
+		// Prepare
+		injectQueryEngine(queryEngine);
+		TripleCollection tripleCollection = new SimpleMGraph();
+		DescribeQuery query = Mockito.mock(DescribeQuery.class);
+
+		// Execute
+		graphAccess.executeSparqlQuery(query, tripleCollection);
+
+		// Verify
+		Mockito.verify(queryEngine).execute(graphAccess, tripleCollection,
+				(Query) query);
+		Mockito.verify(queryEngine, Mockito.never()).execute(
+				(TcManager) Mockito.anyObject(),
+				(TripleCollection) Mockito.anyObject(), Mockito.anyString());
+	}
+
+	@Test
+	public void executeSparqlQueryWithEngineWithConstructQuery()
+			throws Exception {
+		// Prepare
+		injectQueryEngine(queryEngine);
+		TripleCollection tripleCollection = new SimpleMGraph();
+		ConstructQuery query = Mockito.mock(ConstructQuery.class);
+
+		// Execute
+		graphAccess.executeSparqlQuery(query, tripleCollection);
+
+		// Verify
+		Mockito.verify(queryEngine).execute(graphAccess, tripleCollection,
+				(Query) query);
+		Mockito.verify(queryEngine, Mockito.never()).execute(
+				(TcManager) Mockito.anyObject(),
+				(TripleCollection) Mockito.anyObject(), Mockito.anyString());
+	}
+
+	// ------------------------------------------------------------------------
+	// Implementing QueryableTcProvider
+	// ------------------------------------------------------------------------
+
+	private void injectQueryEngine(QueryEngine engine)
+			throws NoSuchFieldException, IllegalAccessException {
+		Field queryEngineField = TcManager.class
+				.getDeclaredField("queryEngine");
+		queryEngineField.setAccessible(true);
+		queryEngineField.set(graphAccess, engine);
+	}
 }
\ No newline at end of file

Modified: clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java?rev=1478708&r1=1478707&r2=1478708&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java (original)
+++ clerezza/trunk/rdf.jena.sparql/src/main/java/org/apache/clerezza/rdf/jena/sparql/JenaSparqlEngine.java Fri May  3 10:08:54 2013
@@ -18,19 +18,23 @@
  */
 package org.apache.clerezza.rdf.jena.sparql;
 
-import com.hp.hpl.jena.query.Dataset;
-import com.hp.hpl.jena.query.QueryExecException;
-import com.hp.hpl.jena.query.QueryExecution;
-import com.hp.hpl.jena.query.QueryExecutionFactory;
-import com.hp.hpl.jena.query.QueryFactory;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+
 import org.apache.clerezza.rdf.core.TripleCollection;
 import org.apache.clerezza.rdf.core.access.TcManager;
 import org.apache.clerezza.rdf.core.sparql.QueryEngine;
+import org.apache.clerezza.rdf.core.sparql.query.AskQuery;
+import org.apache.clerezza.rdf.core.sparql.query.ConstructQuery;
+import org.apache.clerezza.rdf.core.sparql.query.DescribeQuery;
 import org.apache.clerezza.rdf.core.sparql.query.Query;
 import org.apache.clerezza.rdf.jena.storage.JenaGraphAdaptor;
 
+import com.hp.hpl.jena.query.Dataset;
+import com.hp.hpl.jena.query.QueryExecException;
+import com.hp.hpl.jena.query.QueryExecution;
+import com.hp.hpl.jena.query.QueryExecutionFactory;
+import com.hp.hpl.jena.query.QueryFactory;
 
 /**
  * 
@@ -41,48 +45,89 @@ import org.apache.clerezza.rdf.jena.stor
  */
 public class JenaSparqlEngine implements QueryEngine {
 
-    @Override
-    public Object execute(TcManager tcManager, TripleCollection defaultGraph,
-            final Query query) {
-        final Dataset dataset = new TcDataset(tcManager, defaultGraph);
-
-        // Missing permission (java.lang.RuntimePermission getClassLoader)
-        // when calling QueryFactory.create causes ExceptionInInitializerError
-        // to be thrown.
-        // QueryExecutionFactory.create requires
-        // (java.io.FilePermission [etc/]location-mapping.* read)
-        // Thus, they are placed within doPrivileged
-        QueryExecution qexec = AccessController.doPrivileged (
-                new PrivilegedAction<QueryExecution>() {
-
-            @Override
-            public QueryExecution run() {
-                com.hp.hpl.jena.query.Query jenaQuery =
-                        QueryFactory.create(query.toString());
-                return QueryExecutionFactory.create(jenaQuery, dataset);
-            }
-        });
-
-        try {
-            try {
-                return new ResultSetWrapper(qexec.execSelect());
-            } catch (QueryExecException e) {
-                try {
-                    return Boolean.valueOf(qexec.execAsk());
-                } catch (QueryExecException e2) {
-                    try {
-                        return new JenaGraphAdaptor(
-                                qexec.execDescribe().getGraph()).getGraph();
-                    } catch (QueryExecException e3) {
-                        return new JenaGraphAdaptor(
-                                qexec.execConstruct().getGraph()).getGraph();
-                    }
-                }
-            }
-        } finally {
-            qexec.close();
-        }
-
-    }
-
+	// ------------------------------------------------------------------------
+	// Implementing QueryEngine
+	// ------------------------------------------------------------------------
+
+	@Override
+	public Object execute(TcManager tcManager, TripleCollection defaultGraph,
+			final Query query) {
+		final Dataset dataset = new TcDataset(tcManager, defaultGraph);
+
+		// Missing permission (java.lang.RuntimePermission getClassLoader)
+		// when calling QueryFactory.create causes ExceptionInInitializerError
+		// to be thrown.
+		// QueryExecutionFactory.create requires
+		// (java.io.FilePermission [etc/]location-mapping.* read)
+		// Thus, they are placed within doPrivileged
+		QueryExecution qexec = AccessController
+				.doPrivileged(new PrivilegedAction<QueryExecution>() {
+
+					@Override
+					public QueryExecution run() {
+						com.hp.hpl.jena.query.Query jenaQuery = QueryFactory
+								.create(query.toString());
+						return QueryExecutionFactory.create(jenaQuery, dataset);
+					}
+				});
+
+		try {
+			if (query instanceof AskQuery) {
+				return Boolean.valueOf(qexec.execAsk());
+			} else if (query instanceof DescribeQuery) {
+				return new JenaGraphAdaptor(qexec.execDescribe().getGraph())
+						.getGraph();
+			} else if (query instanceof ConstructQuery) {
+				return new JenaGraphAdaptor(qexec.execConstruct().getGraph())
+						.getGraph();
+			} else {
+				return new ResultSetWrapper(qexec.execSelect());
+			}
+		} finally {
+			qexec.close();
+		}
+	}
+
+	@Override
+	public Object execute(TcManager tcManager, TripleCollection defaultGraph,
+			final String query) {
+		final Dataset dataset = new TcDataset(tcManager, defaultGraph);
+
+		// Missing permission (java.lang.RuntimePermission getClassLoader)
+		// when calling QueryFactory.create causes ExceptionInInitializerError
+		// to be thrown.
+		// QueryExecutionFactory.create requires
+		// (java.io.FilePermission [etc/]location-mapping.* read)
+		// Thus, they are placed within doPrivileged
+		QueryExecution qexec = AccessController
+				.doPrivileged(new PrivilegedAction<QueryExecution>() {
+
+					@Override
+					public QueryExecution run() {
+						com.hp.hpl.jena.query.Query jenaQuery = QueryFactory
+								.create(query);
+						return QueryExecutionFactory.create(jenaQuery, dataset);
+					}
+				});
+
+		try {
+			try {
+				return new ResultSetWrapper(qexec.execSelect());
+			} catch (QueryExecException e) {
+				try {
+					return Boolean.valueOf(qexec.execAsk());
+				} catch (QueryExecException e2) {
+					try {
+						return new JenaGraphAdaptor(qexec.execDescribe()
+								.getGraph()).getGraph();
+					} catch (QueryExecException e3) {
+						return new JenaGraphAdaptor(qexec.execConstruct()
+								.getGraph()).getGraph();
+					}
+				}
+			}
+		} finally {
+			qexec.close();
+		}
+	}
 }

Modified: clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java?rev=1478708&r1=1478707&r2=1478708&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java (original)
+++ clerezza/trunk/rdf.jena.sparql/src/test/java/org/apache/clerezza/rdf/jena/sparql/SimpleTest.java Fri May  3 10:08:54 2013
@@ -39,6 +39,22 @@ import org.apache.clerezza.rdf.ontologie
 public class SimpleTest {
 
     @Test
+    public void simpleStringQuery() throws ParseException {
+        SimpleMGraph data = new SimpleMGraph();
+        final String titleValue = "SPARQL Tutorial";
+        data.add(new TripleImpl(new UriRef("http://example.org/book/book1"),
+                DC.title, new PlainLiteralImpl(titleValue)));
+        String query = "SELECT ?title WHERE" +
+                "{" +
+                "    <http://example.org/book/book1> <"+DC.title.getUnicodeString()+"> ?title ." +
+                "}";
+        ResultSet resultSet = (ResultSet) TcManager.getInstance().executeSparqlQuery(
+                query, data);
+        Assert.assertEquals(titleValue, 
+                ((Literal)resultSet.next().get("title")).getLexicalForm());
+    }
+
+    @Test
     public void simpleSelectQuery() throws ParseException {
         SimpleMGraph data = new SimpleMGraph();
         final String titleValue = "SPARQL Tutorial";

Added: clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java?rev=1478708&view=auto
==============================================================================
--- clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java (added)
+++ clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/BaseTdbTcProvider.java Fri May  3 10:08:54 2013
@@ -0,0 +1,23 @@
+package org.apache.clerezza.rdf.jena.tdb.storage;
+
+import org.apache.clerezza.rdf.core.TripleCollection;
+import org.apache.clerezza.rdf.core.access.QueryableTcProvider;
+import org.apache.clerezza.rdf.core.sparql.query.Query;
+
+abstract class BaseTdbTcProvider implements QueryableTcProvider{
+
+	// ------------------------------------------------------------------------
+	// Implementing QueryableTcProvider
+	// ------------------------------------------------------------------------
+
+    @Override
+    public Object executeSparqlQuery(String query, TripleCollection defaultGraph) {
+    	// TODO Auto-generated method stub
+    	return null;
+    }
+    
+    @Override
+    public Object executeSparqlQuery(Query query, TripleCollection defaultGraph) {
+    	return executeSparqlQuery(query.toString(), defaultGraph);
+    }
+}

Modified: clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java
URL: http://svn.apache.org/viewvc/clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java?rev=1478708&r1=1478707&r2=1478708&view=diff
==============================================================================
--- clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java (original)
+++ clerezza/trunk/rdf.jena.tdb.storage/src/main/java/org/apache/clerezza/rdf/jena/tdb/storage/TdbTcProvider.java Fri May  3 10:08:54 2013
@@ -69,7 +69,7 @@ import org.apache.felix.scr.annotations.
 @Component(metatype=true, immediate=true)
 @Service(WeightedTcProvider.class)
 @Property(name="weight", intValue=105)
-public class TdbTcProvider implements WeightedTcProvider {
+public class TdbTcProvider extends BaseTdbTcProvider implements WeightedTcProvider {
 
     static {
         //not sure what the perfomance implication of this is
@@ -94,7 +94,7 @@ public class TdbTcProvider implements We
     private final Map<File, Dataset> dir2Dataset = new HashMap<File, Dataset>();
     private static final Logger log = LoggerFactory.getLogger(TdbTcProvider.class);
     private int weight = 105;
-
+    
     class SyncThread extends Thread {
         private boolean stopRequested = false;