You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
362 lines
8.7 KiB
Java
362 lines
8.7 KiB
Java
package org.gcube.portlets.user.performfishanalytics.server.persistence;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import javax.persistence.EntityManager;
|
|
import javax.persistence.EntityManagerFactory;
|
|
import javax.persistence.Query;
|
|
import javax.persistence.criteria.CriteriaBuilder;
|
|
import javax.persistence.criteria.CriteriaQuery;
|
|
import javax.persistence.criteria.Root;
|
|
|
|
import org.gcube.portlets.user.performfishanalytics.server.database.JavaPersistenceHandler;
|
|
import org.gcube.portlets.user.performfishanalytics.shared.GenericDao;
|
|
import org.gcube.portlets.user.performfishanalytics.shared.exceptions.DatabaseServiceException;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
/**
|
|
* The Class AbstractPersistence.
|
|
*
|
|
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
|
* Jan 11, 2019
|
|
* @param <T> the generic type
|
|
*/
|
|
public abstract class AbstractPersistence<T extends GenericDao> implements JavaPersistenceHandler<T>{
|
|
|
|
protected Logger log = LoggerFactory.getLogger(AbstractPersistence.class);
|
|
|
|
protected EntityManagerFactory entityManagerFactory;
|
|
private String tableName;
|
|
|
|
/**
|
|
* Instantiates a new abstract persistence.
|
|
*
|
|
* @param factory the factory
|
|
* @param tableName the table name
|
|
*/
|
|
AbstractPersistence(EntityManagerFactory factory, String tableName){
|
|
this.entityManagerFactory = factory;
|
|
this.tableName = tableName;
|
|
}
|
|
|
|
/**
|
|
* Gets the entity manager factory.
|
|
*
|
|
* @return the entity manager factory
|
|
*/
|
|
public EntityManagerFactory getEntityManagerFactory() {
|
|
return entityManagerFactory;
|
|
}
|
|
|
|
/**
|
|
* Creates the new manager.
|
|
*
|
|
* @return the entity manager
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public EntityManager createNewManager() throws DatabaseServiceException{
|
|
|
|
try{
|
|
if(entityManagerFactory!=null)
|
|
return entityManagerFactory.createEntityManager();
|
|
|
|
}catch (Exception e) {
|
|
log.error("An error occurred in create new entity manager ",e);
|
|
e.printStackTrace();
|
|
throw new DatabaseServiceException("An error occurred in create new entity manager");
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Insert.
|
|
*
|
|
* @param item the item
|
|
* @return true, if successful
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public boolean insert(T item) throws DatabaseServiceException{
|
|
EntityManager em = createNewManager();
|
|
try {
|
|
|
|
em.getTransaction().begin();
|
|
em.persist(item);
|
|
em.getTransaction().commit();
|
|
|
|
} catch (Exception e) {
|
|
|
|
log.error("Error in insert: "+e.getMessage(), e);
|
|
}
|
|
finally {
|
|
if (em.getTransaction().isActive())
|
|
em.getTransaction().rollback();
|
|
em.close();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Update.
|
|
*
|
|
* @param item the item
|
|
* @return the t
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public T update(T item) throws DatabaseServiceException{
|
|
EntityManager em = createNewManager();
|
|
try {
|
|
|
|
em.getTransaction().begin();
|
|
item = em.merge(item);
|
|
em.getTransaction().commit();
|
|
|
|
} catch (Exception e) {
|
|
log.error("Error in update: "+e.getMessage(), e);
|
|
}
|
|
finally {
|
|
if (em.getTransaction().isActive())
|
|
em.getTransaction().rollback();
|
|
em.close();
|
|
}
|
|
|
|
return item;
|
|
}
|
|
|
|
/**
|
|
* Removes the.
|
|
*
|
|
* @param item the item
|
|
* @param transaction the transaction
|
|
* @return true, if successful
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public boolean remove(T item, boolean transaction) throws DatabaseServiceException {
|
|
EntityManager em = createNewManager();
|
|
try {
|
|
if(transaction){
|
|
em.getTransaction().begin();
|
|
em.remove(item);
|
|
em.getTransaction().commit();
|
|
}
|
|
else
|
|
em.remove(item);
|
|
} catch (Exception e) {
|
|
log.error("Error in remove: "+e.getMessage(), e);
|
|
}
|
|
finally {
|
|
if (em.getTransaction().isActive())
|
|
em.getTransaction().rollback();
|
|
em.close();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
/**
|
|
* Gets the list.
|
|
*
|
|
* @return the list
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public List<T> getList() throws DatabaseServiceException {
|
|
EntityManager em = createNewManager();
|
|
List<T> listT = new ArrayList<T>();
|
|
try {
|
|
Query query = em.createQuery("select t from "+tableName+" t");
|
|
listT = query.getResultList();
|
|
} catch (Exception e) {
|
|
log.error("Error during getList for table: " + tableName, e);
|
|
throw new DatabaseServiceException("Error during getList for table: " + tableName);
|
|
|
|
} finally {
|
|
em.close();
|
|
}
|
|
return listT;
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Count items.
|
|
*
|
|
* @return the int
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public int countItems() throws DatabaseServiceException {
|
|
return getList().size();
|
|
}
|
|
|
|
|
|
/**
|
|
* Removes the all.
|
|
*
|
|
* @return the int
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public int removeAll() throws DatabaseServiceException {
|
|
|
|
EntityManager em = createNewManager();
|
|
int removed = 0;
|
|
try {
|
|
|
|
em.getTransaction().begin();
|
|
removed = em.createQuery("DELETE FROM "+tableName).executeUpdate();
|
|
em.getTransaction().commit();
|
|
log.info("DELETED FROM "+tableName+" " + removed +" item/s");
|
|
|
|
} catch (Exception e) {
|
|
log.error("Error in removeAll: " + e.getMessage(), e);
|
|
|
|
} finally {
|
|
em.close();
|
|
}
|
|
|
|
return removed;
|
|
}
|
|
|
|
/**
|
|
* Gets the item by primary key.
|
|
*
|
|
* @param id the id
|
|
* @return the item by primary key
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public T getItemByPrimaryKey(Integer id) throws DatabaseServiceException {
|
|
log.debug("getItemByKey id: "+id);
|
|
EntityManager em = createNewManager();
|
|
T theObject = null;
|
|
try {
|
|
theObject = (T) em.getReference(theObject.getClass(), id);
|
|
} finally {
|
|
em.close();
|
|
}
|
|
|
|
log.debug("Returning row: "+theObject);
|
|
return theObject;
|
|
}
|
|
|
|
/**
|
|
* Gets the criteria builder.
|
|
*
|
|
* @return the criteria builder
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public CriteriaBuilder getCriteriaBuilder() throws DatabaseServiceException {
|
|
return createNewManager().getCriteriaBuilder();
|
|
}
|
|
|
|
|
|
/**
|
|
* Execute criteria query.
|
|
*
|
|
* @param criteriaQuery the criteria query
|
|
* @return the list
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public List<T> executeCriteriaQuery(CriteriaQuery<Object> criteriaQuery) throws DatabaseServiceException{
|
|
EntityManager em = createNewManager();
|
|
List<T> listOBJ = new ArrayList<T>();
|
|
try {
|
|
Query query = em.createQuery(criteriaQuery);
|
|
listOBJ = query.getResultList();
|
|
} finally {
|
|
em.close();
|
|
}
|
|
return listOBJ;
|
|
}
|
|
|
|
|
|
/**
|
|
* Gets the list.
|
|
*
|
|
* @param filterMap the filter map
|
|
* @param startIndex the start index. You must pass -1 if you do not want to use 'startIndex'
|
|
* @param offset the offset. You must pass -1 if you do not want to use 'offset'
|
|
* @return the list
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public List<T> getList(Map<String, String> filterMap, int startIndex, int offset) throws DatabaseServiceException{
|
|
|
|
EntityManager em = createNewManager();
|
|
List<T> listOBJ = new ArrayList<T>();
|
|
try {
|
|
String queryString = "select t from "+tableName+" t";
|
|
|
|
if(filterMap!=null && filterMap.size()>0){
|
|
queryString+=" where";
|
|
for (String param : filterMap.keySet()) {
|
|
String value = filterMap.get(param);
|
|
queryString+=" t."+param+"="+"'"+value+"'";
|
|
queryString+="AND";
|
|
}
|
|
|
|
queryString = queryString.substring(0, queryString.lastIndexOf("AND"));
|
|
}
|
|
Query query = em.createQuery(queryString);
|
|
|
|
if(startIndex>-1)
|
|
query.setFirstResult(startIndex);
|
|
if(offset>-1)
|
|
query.setMaxResults(offset);
|
|
|
|
listOBJ = query.getResultList();
|
|
} finally {
|
|
em.close();
|
|
}
|
|
return listOBJ;
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* Root from.
|
|
*
|
|
* @param cq the cq
|
|
* @return the root
|
|
*/
|
|
public abstract Root<T> rootFrom(CriteriaQuery<Object> cq);
|
|
|
|
|
|
/**
|
|
* Gets the list.
|
|
*
|
|
* @param startIndex the start index
|
|
* @param offset the offset
|
|
* @return the list
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public abstract List<T> getList(int startIndex, int offset) throws DatabaseServiceException;
|
|
|
|
|
|
/**
|
|
* Execute typed query.
|
|
*
|
|
* @param cq the cq
|
|
* @param startIndex the start index
|
|
* @param offset the offset
|
|
* @return the list
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public abstract List<T> executeTypedQuery(CriteriaQuery<Object> cq, int startIndex, int offset) throws DatabaseServiceException;
|
|
|
|
|
|
/**
|
|
* Delete item by id field.
|
|
*
|
|
* @param idField the id field
|
|
* @return the int
|
|
* @throws DatabaseServiceException the database service exception
|
|
*/
|
|
public abstract int deleteItemByIdField(String idField) throws DatabaseServiceException;
|
|
|
|
|
|
}
|