package org.qi4j.library.struts2.support; import org.qi4j.api.injection.scope.Structure; import org.qi4j.api.injection.scope.This; import org.qi4j.api.unitofwork.NoSuchEntityException; import org.qi4j.api.unitofwork.UnitOfWork; import org.qi4j.api.unitofwork.UnitOfWorkFactory; import static org.qi4j.library.struts2.util.ParameterizedTypes.findTypeVariables; public abstract class ProvidesEntityOfMixin<T> implements ProvidesEntityOf<T>, StrutsAction { @This private ProvidesEntityOf<T> entityProvider; @Structure private UnitOfWorkFactory uowf; private String id; private T entity; @Override public String getId() { return id; } @Override public void setId( String id ) { this.id = id; } @Override public T getEntity() { return entity; } protected void loadEntity() { UnitOfWork uow = uowf.currentUnitOfWork(); try { entity = uow.get( typeToLoad(), entityProvider.getId() ); } catch( NoSuchEntityException e ) { addActionError( getText( "entity.not.found" ) ); } } protected Class<T> typeToLoad() { return (Class<T>) findTypeVariables( entityProvider.getClass(), ProvidesEntityOf.class )[ 0 ]; } }