package se.cth.hedgehogphoto.database;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.logging.Level;
import javax.persistence.Query;
import se.cth.hedgehogphoto.log.Log;
/**
*
* @author Julia
*
*/
public abstract class JpaDao<E,K> implements Dao<E,K>,Entity {
protected Class<?> entityClass;
public JpaDao() {
ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
this.entityClass = (Class<?>) genericSuperclass.getActualTypeArguments()[0];
}
public void beginTransaction() { entityManager.getTransaction().begin(); }
public void commitTransaction() { entityManager.getTransaction().commit(); }
public void persist(E entity) { entityManager.persist(entity); }
public void remove(E entity) { entityManager.remove(entity); }
public E findById(K id) {
return (E) entityManager.find(entityClass, id);
}
public List<E> findByEntity(Object entity,String ent) {
String c = entity.getClass().getSimpleName().toLowerCase();
String s = "select t from " +entityClass.getSimpleName() + " t where t." + c + "=:" + c;
Object something = entity;
String theType = ent;
Class<?> theClass = null;
try {
theClass = Class.forName(theType);
} catch (ClassNotFoundException e) {
Log.getLogger().log(Level.SEVERE,"ClassNotFoundException", e);
}
Object obj = theClass.cast(something);
Query q = entityManager.createQuery(s);
q.setParameter(c,obj);
return (List<E>)q.getResultList();
}
public List<E> findByString(String quality,String search) {
Query q = entityManager.createQuery("select t from " + entityClass.getSimpleName() + " t where t." + quality.toLowerCase() + "=:" + quality.toLowerCase());
q.setParameter(quality.toLowerCase(),search.toLowerCase());
return (List<E>)q.getResultList();
}
public List<E> findByLike(String quality,String search) {
try{
search = search.toLowerCase();
String s = search.charAt(0)+"";
search = s.toUpperCase() + search.substring(1);
}catch(Exception i){
}
Query q = entityManager.createQuery("select t from " + entityClass.getSimpleName() + " t where t." + quality + " like '%" + search + "%'");
List<E> query = (List<E>)q.getResultList();
q = entityManager.createQuery("select t from " + entityClass.getSimpleName() + " t where t." + quality.toLowerCase() + " like '%" + search.toLowerCase() + "%'");
query.addAll((List<E>)q.getResultList());
return query;
}
public List<E> findbyDate(String quality,String search){
Query q = entityManager.createQuery("select t from " + entityClass.getSimpleName() + " t where t." + quality + " like '%" + search + "'");
List<E> query = (List<E>)q.getResultList();
return query;
}
public List<E> getAll(){
Query q = entityManager.createQuery("select t from " + entityClass.getSimpleName() + " t");
return (List<E>)q.getResultList();
}
}