package nl.topicus.konijn.models; import java.util.ArrayList; import java.util.List; 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; /** * Persistent listmodel * * @author Joost Limburg * @author Jeroen Steenbeke * * @param <T> */ public class PersistenceListModel<T extends BaseEntity> extends LoadableDetachableModel<List<T>> { private static final long serialVersionUID = 1L; @Inject private transient Provider<EntityManager> em; private List<Long> idList = null; private Class<T> persistentClass = null; @SuppressWarnings("unchecked") public PersistenceListModel(List<T> myListObject) { org.apache.wicket.injection.Injector.get().inject(this); idList = new ArrayList<Long>(); if (myListObject != null && myListObject.size() > 0) { for (T myObject : myListObject) { if (myObject.getId() != null) { if (persistentClass == null) { persistentClass = (Class<T>) myObject.getClass(); } idList.add(myObject.getId()); } } } } @Override protected List<T> load() { org.apache.wicket.injection.Injector.get().inject(this); List<T> entityList = new ArrayList<T>(); if (idList != null && idList.size() > 0 && persistentClass != null) { for (Long id : idList) { T entity = em.get().find(persistentClass, id); if (entity != null) entityList.add(entity); } } return entityList; } }