package com.oceaneconsulting.tanaguru.dao.impl;
import javax.persistence.Query;
import org.tanaguru.sdk.entity.dao.jpa.AbstractJPADAO;
import org.springframework.stereotype.Repository;
import com.oceaneconsulting.tanaguru.dao.WsInvocationDao;
import com.oceaneconsulting.tanaguru.entity.WsInvocation;
import com.oceaneconsulting.tanaguru.entity.WsRole;
import com.oceaneconsulting.tanaguru.entity.WsUser;
import com.oceaneconsulting.tanaguru.entity.impl.WsInvocationImpl;
/**
* Classe de DAO des invocations
*
* @author msobahi
*
*/
@Repository("invocationDao")
public class WsInvocationDaoImpl extends AbstractJPADAO<WsInvocation, Long> implements WsInvocationDao {
/**
* Option de la mise en cache de la requete
*/
private static final String CACHEABLE_OPTION = "org.hibernate.cacheable";
@Override
protected Class<? extends WsInvocation> getEntityClass() {
return WsInvocationImpl.class;
}
@Override
public int getCountInvocByUser(WsUser user) {
Query query = entityManager.createQuery("SELECT COUNT(inv.id) FROM " + getEntityClass().getName() + " inv "
+ " WHERE inv.user = :user");
query.setParameter("user", user);
query.setHint(CACHEABLE_OPTION, "true");
return Long.valueOf((Long) query.getSingleResult()).intValue();
}
@Override
public int getCountInvocByUser(WsUser user, String hostName, String hostIp, WsRole role) {
StringBuffer querySB= new StringBuffer();
querySB.append("SELECT COUNT(inv.id) ");
querySB.append( "FROM " + getEntityClass().getName() + " inv WHERE 1=1 " );
if(user != null){
querySB.append("AND inv.user = :user " );
}
if(role != null) {
querySB.append("AND inv.user.role = :role " );
}
if(hostName != null || hostIp!= null){
querySB.append("AND ( " );
if(hostName != null){
querySB.append("inv.hostName = :hostName " );
}
if(hostName != null && hostIp != null){
querySB.append(" OR " );
}
if(hostIp != null){
querySB.append("inv.hostIp = :hostIp " );
}
querySB.append(")" );
}
Query query = entityManager.createQuery(querySB.toString());
if (user != null) {
query.setParameter("user", user);
}
if (role != null) {
query.setParameter("role", role);
}
if (hostName != null) {
query.setParameter("hostName", hostName);
}
if (hostIp != null) {
query.setParameter("hostIp", hostIp);
}
query.setHint(CACHEABLE_OPTION, "true");
return Long.valueOf((Long) query.getSingleResult()).intValue();
}
@Override
public int getCountInvocByUserId(Long userId) {
Query query = entityManager.createQuery("SELECT COUNT(inv.id) FROM " + getEntityClass().getName() + " inv "
+ " WHERE inv.user.id = :userId");
query.setParameter("userId", userId);
query.setHint(CACHEABLE_OPTION, "true");
return Long.valueOf((Long) query.getSingleResult()).intValue();
}
}