package org.openrdf.repository.object; import java.sql.Date; import java.util.Calendar; import java.util.List; import java.util.TimeZone; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import junit.framework.Test; import org.openrdf.annotations.Iri; import org.openrdf.repository.Repository; import org.openrdf.repository.object.base.RepositoryTestCase; import org.openrdf.repository.object.config.ObjectRepositoryConfig; import org.openrdf.repository.object.config.ObjectRepositoryFactory; public class SesameQueryTest extends RepositoryTestCase { private static final int OFFSET = TimeZone.getDefault().getOffset(new Date(2007, Calendar.NOVEMBER, 6).getTime()) / 1000 / 60; private static final String SELECT_BY_DATE = "SELECT ?c WHERE { ?c <http://example.org/rdf/date> ?d . FILTER (?d <= ?date) }"; private static final String NS = "http://example.org/rdf/"; @Iri(NS + "Concept") public interface Concept { @Iri(NS + "date") XMLGregorianCalendar getDate(); void setDate(XMLGregorianCalendar xcal); } public static Test suite() throws Exception { return RepositoryTestCase.suite(SesameQueryTest.class); } private ObjectConnection manager; private DatatypeFactory data; private ObjectRepositoryConfig module; public void testXmlCalendarZ() throws Exception { XMLGregorianCalendar xcal = data.newXMLGregorianCalendar(); xcal.setYear(2007); xcal.setMonth(11); xcal.setDay(6); xcal.setTimezone(OFFSET); ObjectQuery query = manager.prepareObjectQuery(SELECT_BY_DATE); query.setObject("date", xcal); List list = query.evaluate().asList(); assertEquals(7, list.size()); } public void testXmlCalendar() throws Exception { XMLGregorianCalendar xcal = data.newXMLGregorianCalendar(); xcal.setYear(2000); xcal.setMonth(11); xcal.setDay(6); ObjectQuery query = manager.prepareObjectQuery(SELECT_BY_DATE); query.setObject("date", xcal); List list = query.evaluate().asList(); assertEquals(3, list.size()); } @Override protected void setUp() throws Exception { module = new ObjectRepositoryConfig(); module.addConcept(Concept.class); super.setUp(); ObjectRepository factory = (ObjectRepository) repository; manager = factory.getConnection(); data = DatatypeFactory.newInstance(); for (int i=1;i<5;i++) { Class<?>[] concepts = {}; Concept concept = manager.addDesignation(manager.getObject(NS + "concept" + i), Concept.class); XMLGregorianCalendar xcal = data.newXMLGregorianCalendar(); xcal.setYear(2000); xcal.setMonth(11); xcal.setDay(i*2); concept.setDate(xcal); Class<?>[] concepts1 = {}; concept = manager.addDesignation(manager.getObject(NS + "conceptZ" + i), Concept.class); xcal = data.newXMLGregorianCalendar(); xcal.setYear(2007); xcal.setMonth(11); xcal.setDay(i*2); xcal.setTimezone(OFFSET); concept.setDate(xcal); } } @Override protected Repository getRepository() throws Exception { return new ObjectRepositoryFactory().createRepository(module,super.getRepository()); } @Override protected void tearDown() throws Exception { manager.close(); super.tearDown(); } }