package org.myeslib.util.jdbi;
import java.util.UUID;
import lombok.extern.slf4j.Slf4j;
import org.myeslib.core.data.UnitOfWork;
import org.skife.jdbi.v2.Handle;
import com.google.common.base.Function;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
@Slf4j
public class JdbiUnitOfWorkJournalDao implements UnitOfWorkJournalDao<UUID> {
@Inject
public JdbiUnitOfWorkJournalDao(@Assisted Handle handle,
ArTablesMetadata tables,
Function<UnitOfWork, String> toStringFunction) {
this.handle = handle;
this.tables = tables;
this.toStringFunction = toStringFunction;
}
private final Handle handle;
private final ArTablesMetadata tables;
private final Function<UnitOfWork, String> toStringFunction;
/*
* (non-Javadoc)
* @see org.myeslib.util.jdbi.UnitOfWorkJournalDao#append(java.lang.Object, org.myeslib.core.data.UnitOfWork)
*/
@Override
public void append(final UUID id, final UnitOfWork uow) {
String sql = String.format("insert into %s (id, uow_data, version) values (:id, :uow_data, :version)", tables.getUnitOfWorkTable());
log.debug(sql);
log.info("writing {}", id);
String asString = toStringFunction.apply(uow);
handle.createStatement(sql)
.bind("id", id.toString())
.bind("uow_data", asString)
.bind("version", uow.getVersion())
.execute();
}
}