package com.mysema.rdfbean.rdb;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.sql.Time;
import java.sql.Timestamp;
import org.h2.jdbcx.JdbcConnectionPool;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.junit.After;
import org.junit.Test;
import com.mysema.converters.DateConverter;
import com.mysema.converters.DateTimeConverter;
import com.mysema.converters.LocalDateConverter;
import com.mysema.converters.LocalTimeConverter;
import com.mysema.converters.TimeConverter;
import com.mysema.converters.TimestampConverter;
import com.mysema.converters.UtilDateConverter;
import com.mysema.query.sql.H2Templates;
import com.mysema.rdfbean.TEST;
import com.mysema.rdfbean.model.Addition;
import com.mysema.rdfbean.model.CountOperation;
import com.mysema.rdfbean.model.Format;
import com.mysema.rdfbean.model.ID;
import com.mysema.rdfbean.model.LIT;
import com.mysema.rdfbean.model.MemoryIdSequence;
import com.mysema.rdfbean.model.STMT;
import com.mysema.rdfbean.model.UID;
import com.mysema.rdfbean.model.XSD;
import com.mysema.rdfbean.object.DefaultConfiguration;
public class DateTimePersistenceTest {
private RDBRepository repository;
@After
public void tearDown() {
if (repository != null) {
repository.close();
}
}
@Test
public void Round_Trip() {
JdbcConnectionPool dataSource = JdbcConnectionPool.create("jdbc:h2:mem:test", "sa", "");
dataSource.setMaxConnections(30);
repository = new RDBRepository(new DefaultConfiguration(), dataSource, new H2Templates(), new MemoryIdSequence());
repository.initialize();
DateTimeConverter dateTime = new DateTimeConverter();
LocalDateConverter localDate = new LocalDateConverter();
LocalTimeConverter localTime = new LocalTimeConverter();
DateConverter date = new DateConverter();
UtilDateConverter utilDate = new UtilDateConverter();
TimeConverter time = new TimeConverter();
TimestampConverter timestamp = new TimestampConverter();
// load data
ID sub = new UID(TEST.NS);
repository.execute(new Addition(
new STMT(sub, pre(1), new LIT(dateTime.toString(new DateTime()), XSD.dateTime)),
new STMT(sub, pre(2), new LIT(localDate.toString(new LocalDate()), XSD.date)),
new STMT(sub, pre(3), new LIT(localTime.toString(new LocalTime()), XSD.time)),
new STMT(sub, pre(4), new LIT(date.toString(new java.sql.Date(0)), XSD.date)),
new STMT(sub, pre(5), new LIT(utilDate.toString(new java.util.Date(0)), XSD.dateTime)),
new STMT(sub, pre(6), new LIT(time.toString(new Time(0)), XSD.time)),
new STMT(sub, pre(7), new LIT(timestamp.toString(new Timestamp(0)), XSD.dateTime))
));
long count = repository.execute(new CountOperation());
assertEquals(7, count);
// export
ByteArrayOutputStream out = new ByteArrayOutputStream();
repository.export(Format.TURTLE, null, out);
System.out.println(new String(out.toByteArray()));
// import
ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
repository.load(Format.TURTLE, in, new UID(TEST.NS), true);
count = repository.execute(new CountOperation());
assertEquals(7 * 2, count);
}
private UID pre(int i) {
return new UID(TEST.NS, "test" + i);
}
}