package org.openrdf.repository.object; import java.util.List; import java.util.Set; import junit.framework.Test; import org.openrdf.annotations.Iri; import org.openrdf.model.Resource; import org.openrdf.model.Statement; import org.openrdf.model.URI; import org.openrdf.model.ValueFactory; import org.openrdf.model.vocabulary.RDF; import org.openrdf.query.QueryResults; import org.openrdf.repository.RepositoryResult; import org.openrdf.repository.object.base.ObjectRepositoryTestCase; public class AugurTest extends ObjectRepositoryTestCase { private static final String NS = "urn:test:"; public static Test suite() throws Exception { return ObjectRepositoryTestCase.suite(AugurTest.class); } @Iri("urn:test:Bean") public static interface Bean extends RDFObject { @Iri("urn:test:name") String getName(); void setName(String name); @Iri("urn:test:nick") Set<String> getNicks(); void setNicks(Set<String> nicks); @Iri("urn:test:parent") Bean getParent(); void setParent(Bean parent); @Iri("urn:test:friend") Set<Bean> getFriends(); void setFriends(Set<Bean> friends); } @Override public void setUp() throws Exception { config.addConcept(Bean.class); super.setUp(); con.setNamespace("test", NS); ValueFactory vf = con.getValueFactory(); con.setAutoCommit(false); URI urn_root = vf.createURI(NS, "root"); Bean root = con.addDesignation(con.getObjectFactory().createObject(urn_root), Bean.class); for (int i = 0; i < 100; i++) { URI uri = vf.createURI(NS, String.valueOf(i)); Bean bean = con.addDesignation(con.getObjectFactory().createObject(uri), Bean.class); bean.setName("name" + i); bean.getNicks().add("nicka" + i); bean.getNicks().add("nickb" + i); bean.getNicks().add("nickc" + i); URI p = vf.createURI(NS, String.valueOf(i + 1000)); Bean parent = con.addDesignation(con.getObjectFactory().createObject(p), Bean.class); parent.setName("name" + String.valueOf(i + 1000)); bean.setParent(parent); for (int j = i - 10; j < i; j++) { if (j > 0) { URI f = vf.createURI(NS, String.valueOf(j + 1000)); Bean friend = con.addDesignation(con.getObjectFactory().createObject(f), Bean.class); friend.setName("name" + String.valueOf(j + 1000)); bean.getFriends().add(friend); } } root.getFriends().add(bean); } con.setAutoCommit(true); } public void test_concept() throws Exception { long start = System.currentTimeMillis(); ObjectQuery query = con.prepareObjectQuery("SELECT ?o ?o_class ?o_name ?o_parent ?o_parent_class ?o_parent_name " + "WHERE {?o a ?type; a ?o_class; <urn:test:name> ?o_name; <urn:test:parent> ?o_parent ." + " ?o_parent a ?o_parent_class; <urn:test:name> ?o_parent_name }"); query.setType("type", Bean.class); List<Bean> beans = query.evaluate(Bean.class).asList(); for (Bean bean : beans) { bean.getName(); if (bean.getParent() != null) { bean.getParent().getName(); } for (Bean f : bean.getFriends()) { f.getName(); } } long end = System.currentTimeMillis(); System.out.println((end - start) / 1000.0); } public void test_object() throws Exception { long start = System.currentTimeMillis(); List<Bean> beans = con.getObjects(Bean.class).asList(); for (Bean bean : beans) { bean.getName(); if (bean.getParent() != null) { bean.getParent().getName(); } for (Bean f : bean.getFriends()) { f.getName(); } } long end = System.currentTimeMillis(); System.out.println((end - start) / 1000.0); } public void test_naive() throws Exception { ValueFactory vf = con.getValueFactory(); final URI Bean = vf.createURI(NS, "Bean"); final URI name = vf.createURI(NS, "name"); final URI parent = vf.createURI(NS, "parent"); final URI friend = vf.createURI(NS, "friend"); long start = System.currentTimeMillis(); RepositoryResult<Statement> beans = con.getStatements(null, RDF.TYPE, Bean); while (beans.hasNext()) { Statement st = beans.next(); Resource bean = st.getSubject(); QueryResults.asList(con.getStatements(bean, name, null)); RepositoryResult<Statement> match; match = con.getStatements(bean, parent, null); while (match.hasNext()) { QueryResults.asList(con.getStatements((Resource)match.next().getObject(), name, null)); } match = con.getStatements(bean, friend, null); while (match.hasNext()) { QueryResults.asList(con.getStatements((Resource)match.next().getObject(), name, null)); } } long end = System.currentTimeMillis(); System.out.println((end - start) / 1000.0); } }