package org.tests.changelog; import io.ebean.BaseTestCase; import io.ebean.EbeanServerFactory; import io.ebean.annotation.ChangeLog; import io.ebean.config.ServerConfig; import io.ebean.event.BeanPersistRequest; import io.ebean.event.changelog.ChangeLogFilter; import io.ebean.event.changelog.ChangeLogListener; import io.ebean.event.changelog.ChangeLogPrepare; import io.ebean.event.changelog.ChangeLogRegister; import io.ebean.event.changelog.ChangeSet; import io.ebeaninternal.api.SpiEbeanServer; import org.tests.model.basic.EBasicChangeLog; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.After; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; public class TestChangeLog extends BaseTestCase { TDChangeLogPrepare changeLogPrepare = new TDChangeLogPrepare(); TDChangeLogListener changeLogListener = new TDChangeLogListener(); TDChangeLogRegister changeLogRegister = new TDChangeLogRegister(); SpiEbeanServer server; @Before public void setup() { server = getServer(); } @After public void shutdown() { server.shutdown(true, false); } @Test public void test() { EBasicChangeLog bean = new EBasicChangeLog(); bean.setName("logBean"); bean.setShortDescription("hello"); server.save(bean); bean.setName("ChangedName"); server.save(bean); server.delete(bean); } private SpiEbeanServer getServer() { System.setProperty("ebean.ignoreExtraDdl", "true"); ServerConfig config = new ServerConfig(); config.setName("h2other"); config.loadFromProperties(); config.setDdlGenerate(true); config.setDdlRun(true); config.setDefaultServer(false); config.setRegister(false); config.addClass(EBasicChangeLog.class); config.setChangeLogPrepare(changeLogPrepare); config.setChangeLogListener(changeLogListener); config.setChangeLogRegister(changeLogRegister); return (SpiEbeanServer) EbeanServerFactory.create(config); } class TDChangeLogPrepare implements ChangeLogPrepare { @Override public boolean prepare(ChangeSet changes) { changes.setUserId("appUser1"); changes.setUserIpAddress("1.1.1.1"); return true; } } class TDChangeLogListener implements ChangeLogListener { ObjectMapper objectMapper = new ObjectMapper(); ChangeSet changes; /** */ public TDChangeLogListener() { objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } @Override public void log(ChangeSet changes) { this.changes = changes; try { String json = objectMapper.writeValueAsString(changes); ChangeSet changes1 = objectMapper.readValue(json, ChangeSet.class); assertEquals(changes.getTxnId(), changes1.getTxnId()); assertEquals(changes.getUserId(), changes1.getUserId()); assertEquals(changes.getUserIpAddress(), changes1.getUserIpAddress()); } catch (Exception e) { e.printStackTrace(); } } } class TDChangeLogRegister implements ChangeLogRegister { @Override public ChangeLogFilter getChangeFilter(Class<?> beanType) { ChangeLog changeLog = beanType.getAnnotation(ChangeLog.class); if (changeLog != null) { return new TDFilter(); } return null; } } /** * Change log filter that includes all the inserts, updates and deletes. */ class TDFilter implements ChangeLogFilter { /** * Returns true including all the inserts. */ @Override public boolean includeInsert(BeanPersistRequest<?> insertRequest) { return true; } @Override public boolean includeUpdate(BeanPersistRequest<?> updateRequest) { return true; } @Override public boolean includeDelete(BeanPersistRequest<?> deleteRequest) { return true; } } }