package org.xenei.jdbc4sparql.impl.rdf; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.xenei.jdbc4sparql.iface.NameFilter; import org.xenei.jdbc4sparql.iface.Schema; import org.xenei.jena.entities.EntityManager; import org.xenei.jena.entities.EntityManagerFactory; import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryFactory; import com.hp.hpl.jena.query.QuerySolution; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.rdf.model.Property; import com.hp.hpl.jena.rdf.model.RDFNode; import com.hp.hpl.jena.rdf.model.Resource; public class CatalogTest { private Model model; private Model dataModel; private RdfCatalog catalog; private EntityManager entityManager; @Before public void setUp() throws Exception { model = ModelFactory.createDefaultModel(); dataModel = ModelFactory.createDefaultModel(); catalog = new RdfCatalog.Builder().setName("testCatalog") .setLocalModel(dataModel).build(model); entityManager = EntityManagerFactory.getEntityManager(); } @After public void tearDown() throws Exception { catalog.close(); model.close(); dataModel.close(); } @Test public void testClose() { Assert.assertFalse(model.isClosed()); Assert.assertFalse(dataModel.isClosed()); catalog.close(); Assert.assertFalse(model.isClosed()); Assert.assertFalse(dataModel.isClosed()); } @Test public void testCloseMultiple() { new RdfCatalog.Builder().setName("testCatalog2") .setLocalModel(dataModel).build(model); Assert.assertFalse(model.isClosed()); Assert.assertFalse(dataModel.isClosed()); catalog.close(); Assert.assertFalse(model.isClosed()); Assert.assertFalse(dataModel.isClosed()); } @Test public void testExecuteLocalQuery() throws Exception { final Resource r = dataModel.createResource("http://example.com/res"); final Property p = dataModel.createProperty("http://example.com/prop"); r.addLiteral(p, "foo"); r.addLiteral(p, "bar"); final String qry = "Select * WHERE { ?s ?p ?o }"; final Query query = QueryFactory.create(qry); List<QuerySolution> lqs = catalog.executeLocalQuery(query); Assert.assertEquals(2, lqs.size()); /* * // test reading from model final RdfCatalog cat2 = * entityManager.read(catalog.getResource(), RdfCatalog.class); lqs = * cat2.executeLocalQuery(query); Assert.assertEquals(2, lqs.size()); */ // build a catalog with service node final RdfCatalog cat3 = new RdfCatalog.Builder() .setName("testCatalog2") .setSparqlEndpoint(new URL("http://example.com")) .setLocalModel(dataModel).build(model); lqs = cat3.executeLocalQuery(query); Assert.assertEquals(2, lqs.size()); /* * // check reading from model final RdfCatalog cat4 = * entityManager.read(cat3.getResource(), RdfCatalog.class); * Assert.assertEquals("http://example.com", cat3.getServiceNode() * .getURI()); lqs = cat4.executeLocalQuery(query); * Assert.assertEquals(2, lqs.size()); */ } @Test public void testExecuteQueryQuery() throws Exception { final Resource r = dataModel.createResource("http://example.com/res"); final Property p = dataModel.createProperty("http://example.com/prop"); r.addLiteral(p, "foo"); r.addLiteral(p, "bar"); final String qry = "Select * WHERE { ?s ?p ?o }"; final Query query = QueryFactory.create(qry); final List<QuerySolution> lqs = catalog.executeQuery(query); Assert.assertEquals(2, lqs.size()); new RdfCatalog.Builder().setName("testCatalog2") .setSparqlEndpoint(new URL("http://example.com")).build(model); } @Test public void testExecuteQueryString() throws Exception { final Resource r = dataModel.createResource("http://example.com/res"); final Property p = dataModel.createProperty("http://example.com/prop"); r.addLiteral(p, "foo"); r.addLiteral(p, "bar"); final String query = "Select * WHERE { ?s ?p ?o }"; final List<QuerySolution> lqs = catalog.executeQuery(query); Assert.assertEquals(2, lqs.size()); new RdfCatalog.Builder().setName("testCatalog2") .setSparqlEndpoint(new URL("http://example.com")).build(model); } @Test public void testFindSchemas() throws Exception { new RdfSchema.Builder().setName("testSchema1").setCatalog(catalog) .build(model); new RdfSchema.Builder().setName("testSchema2").setCatalog(catalog) .build(model); NameFilter<Schema> schemas = catalog.findSchemas(null); Assert.assertEquals(2, schemas.toList().size()); schemas = catalog.findSchemas(""); Assert.assertEquals(0, schemas.toList().size()); schemas = catalog.findSchemas("testSchema1"); Assert.assertEquals(1, schemas.toList().size()); schemas = catalog.findSchemas("testSchema2"); Assert.assertEquals(1, schemas.toList().size()); entityManager.read(catalog.getResource(), RdfCatalog.class); schemas = catalog.findSchemas(null); Assert.assertEquals(2, schemas.toList().size()); schemas = catalog.findSchemas(""); Assert.assertEquals(0, schemas.toList().size()); schemas = catalog.findSchemas("testSchema1"); Assert.assertEquals(1, schemas.toList().size()); schemas = catalog.findSchemas("testSchema2"); Assert.assertEquals(1, schemas.toList().size()); } @Test public void testGetName() { Assert.assertEquals("testCatalog", catalog.getName().getShortName()); } @Test public void testGetResource() { Assert.assertNotNull(catalog.getResource()); final Resource r = catalog.getResource(); Assert.assertTrue(model.contains(r, null, (RDFNode) null)); } @Test public void testGetSchema() throws Exception { Assert.assertNull(catalog.getSchema(null)); Assert.assertNull(catalog.getSchema("")); Assert.assertNull(catalog.getSchema("testSchema1")); Assert.assertNull(catalog.getSchema("testSchema2")); new RdfSchema.Builder().setName("testSchema1").setCatalog(catalog) .build(model); Assert.assertNull(catalog.getSchema(null)); Assert.assertNull(catalog.getSchema("")); Schema schema = catalog.getSchema("testSchema1"); Assert.assertNotNull(schema); Assert.assertEquals("testSchema1", schema.getName().getShortName()); Assert.assertNull(catalog.getSchema("testSchema2")); new RdfSchema.Builder().setName("testSchema2").setCatalog(catalog) .build(model); Assert.assertNull(catalog.getSchema(null)); Assert.assertNull(catalog.getSchema("")); schema = catalog.getSchema("testSchema1"); Assert.assertNotNull(schema); Assert.assertEquals("testSchema1", schema.getName().getShortName()); schema = catalog.getSchema("testSchema2"); Assert.assertNotNull(schema); Assert.assertEquals("testSchema2", schema.getName().getShortName()); entityManager.read(catalog.getResource(), RdfCatalog.class); Assert.assertNull(catalog.getSchema(null)); Assert.assertNull(catalog.getSchema("")); schema = catalog.getSchema("testSchema1"); Assert.assertNotNull(schema); Assert.assertEquals("testSchema1", schema.getName().getShortName()); schema = catalog.getSchema("testSchema2"); Assert.assertNotNull(schema); Assert.assertEquals("testSchema2", schema.getName().getShortName()); } @Test public void testGetSchemas() throws Exception { final List<String> names = new ArrayList<String>(); Set<Schema> schemas = catalog.getSchemas(); Assert.assertEquals(0, schemas.size()); new RdfSchema.Builder().setName("testSchema1").setCatalog(catalog) .build(model); names.add("testSchema1"); schemas = catalog.getSchemas(); Assert.assertEquals(1, schemas.size()); for (final Schema schema : schemas) { Assert.assertTrue(names.contains(schema.getName().getShortName())); Assert.assertEquals(catalog, schema.getCatalog()); } new RdfSchema.Builder().setName("testSchema2").setCatalog(catalog) .build(model); names.add("testSchema2"); schemas = catalog.getSchemas(); Assert.assertEquals(2, schemas.size()); for (final Schema schema : schemas) { Assert.assertTrue(names.contains(schema.getName().getShortName())); } // test reading from model final RdfCatalog cat2 = entityManager.read(catalog.getResource(), RdfCatalog.class); schemas = cat2.getSchemas(); Assert.assertEquals(2, schemas.size()); for (final Schema schema : schemas) { Assert.assertTrue(names.contains(schema.getName().getShortName())); } } @Test public void testGetServiceNode() throws Exception { Assert.assertNull(catalog.getServiceNode()); // check reading from model final RdfCatalog cat2 = entityManager.read(catalog.getResource(), RdfCatalog.class); Assert.assertNull(cat2.getServiceNode()); // build a catalog with service node final RdfCatalog cat3 = new RdfCatalog.Builder() .setName("testCatalog2") .setSparqlEndpoint(new URL("http://example.com")).build(model); Assert.assertEquals("http://example.com", cat3.getServiceNode() .getURI()); entityManager.read(cat3.getResource(), RdfCatalog.class); Assert.assertEquals("http://example.com", cat3.getServiceNode() .getURI()); } // @Test // public void testGetViewSchema() throws Exception // { // Schema schema = catalog.getViewSchema(); // Assert.assertNotNull(schema); // Assert.assertEquals("", schema.getName().getShortName()); // // // check reading from model // final RdfCatalog cat2 = entityManager.read(catalog.getResource(), // RdfCatalog.class); // schema = cat2.getViewSchema(); // Assert.assertNotNull(schema); // Assert.assertEquals("", schema.getName().getShortName()); // } @Test public void testIsService() throws Exception { Assert.assertFalse(catalog.isService()); // check reading from model final RdfCatalog cat2 = entityManager.read(catalog.getResource(), RdfCatalog.class); Assert.assertFalse(cat2.isService()); // build a catalog with service node final RdfCatalog cat3 = new RdfCatalog.Builder() .setName("testCatalog2") .setSparqlEndpoint(new URL("http://example.com")).build(model); Assert.assertTrue(cat3.isService()); // check reading from model final RdfCatalog cat4 = entityManager.read(cat3.getResource(), RdfCatalog.class); Assert.assertTrue(cat4.isService()); } }