PostInitializer.java
package org.codefilarete.stalactite.engine.configurer.builder;
import org.codefilarete.stalactite.dsl.MappingConfigurationException;
import org.codefilarete.stalactite.engine.runtime.ConfiguredRelationalPersister;
import org.codefilarete.tool.Reflections;
/**
* Dedicated {@link BuildLifeCycleListener} that will consume the persister found in the registry.
* Used in particular to deal with bean cycle load.
*
* @param <P> entity type to be persisted
* @see #consume(ConfiguredRelationalPersister)
*/
public abstract class PostInitializer<P> implements BuildLifeCycleListener {
/**
* Entity type of persister to be post initialized
*/
private final Class<P> entityType;
protected PostInitializer(Class<P> entityType) {
this.entityType = entityType;
}
public Class<P> getEntityType() {
return entityType;
}
@Override
public final void afterBuild() {
try {
consume((ConfiguredRelationalPersister<P, ?>) PersisterBuilderContext.CURRENT.get().getPersisterRegistry().getPersister(entityType));
} catch (RuntimeException e) {
throw new MappingConfigurationException("Error while post processing persister of type "
+ Reflections.toString(entityType), e);
}
}
@Override
public final void afterAllBuild() {
// nothing special to do here
}
/**
* Invoked after main entity graph creation
*
* @param persister entity type persister
*/
public abstract void consume(ConfiguredRelationalPersister<P, ?> persister);
}