package nl.topicus.konijn.models;
import javax.persistence.EntityManager;
import nl.topicus.konijn.data.entity.BaseEntity;
import org.apache.wicket.model.LoadableDetachableModel;
import com.google.inject.Inject;
import com.google.inject.Provider;
/**
* Persistence Model
*
* @author Joost Limburg
* @author Jeroen Steenbeke
*
* @param <T>
*/
public class PersistenceModel<T extends BaseEntity> extends
LoadableDetachableModel<T> {
private static final long serialVersionUID = 1L;
@Inject
private transient Provider<EntityManager> em;
protected Object persistentClass = null;
private Long id = null;
@SuppressWarnings("unchecked")
public PersistenceModel(T myObject) {
org.apache.wicket.injection.Injector.get().inject(this);
if (myObject.getId() == null) {
this.persistentClass = myObject;
} else {
this.persistentClass = (Class<T>) myObject.getClass();
}
this.id = myObject.getId();
}
public Long getId() {
return id;
}
@SuppressWarnings("unchecked")
@Override
protected T load() {
if (id != null)
return (T) em.get().find((Class<T>) persistentClass, id);
else
return (T) persistentClass;
}
@Override
public void onDetach() {
em = null;
}
}