package fi.arcusys.koku.common.service.impl;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ejb.Stateless;
import fi.arcusys.koku.common.service.CalendarUtil;
import fi.arcusys.koku.common.service.RequestDAO;
import fi.arcusys.koku.common.service.datamodel.Request;
import fi.arcusys.koku.common.service.datamodel.RequestTemplate;
import fi.arcusys.koku.common.service.datamodel.User;
/**
* DAO implementation for CRUD operations with 'Request' Entity
*
* @author Dmitry Kudinov (dmitry.kudinov@arcusys.fi)
* Jun 23, 2011
*/
@Stateless
public class RequestDAOImpl extends AbstractEntityDAOImpl<Request> implements RequestDAO {
public RequestDAOImpl() {
super(Request.class);
}
/**
* @param entityId
* @return
*/
@Override
public Request getById(final Long requestId) {
return super.getById(requestId);
}
/**
* @return
*/
@Override
protected String getListByIdsQueryName() {
return Request.GET_REQUESTS_BY_IDS;
}
/**
* @param template
* @return
*/
@Override
public Long getTotalByTemplate(RequestTemplate template) {
return getSingleResult("countRequestsByTemplate", Collections.singletonMap("template", template));
}
/**
* @param userId
* @param startNum
* @param maxNum
* @return
*/
@Override
public List<Request> getRequestsByUserAndRoles(User user, List<String> userRoles, int startNum, int maxNum) {
if (userRoles != null && !userRoles.isEmpty()) {
return super.getResultList("findRequestsByUserUidOrRoles", getUserAndRolesParams(user, userRoles), startNum, maxNum);
} else {
return super.getResultList("findRequestsByUserUid", Collections.singletonMap("user", user), startNum, maxNum);
}
}
/**
* @param user
* @return
*/
@Override
public Long getTotalRequestsByUserAndRoles(User user, List<String> userRoles) {
if (userRoles != null && !userRoles.isEmpty()) {
return getSingleResult("countRequestsByUserUidOrRoles", getUserAndRolesParams(user, userRoles));
} else {
return getSingleResult("countRequestsByUserUid", Collections.singletonMap("user", user));
}
}
/**
* @param userByUid
* @param startNum
* @param maxResults
* @return
*/
@Override
public List<Request> getOldRequestsByUserAndRoles(User user, List<String> userRoles, int startNum, int maxResults) {
if (userRoles != null && !userRoles.isEmpty()) {
return super.getResultList("findOldRequestsByUserUidOrRoles", getUserAndRolesParams(user, userRoles), startNum, maxResults);
} else {
return super.getResultList("findOldRequestsByUserUid", Collections.singletonMap("user", user), startNum, maxResults);
}
}
/**
* @param userByUid
* @return
*/
@Override
public Long getTotalOldRequestsByUserAndRoles(User user, List<String> userRoles) {
if (userRoles != null && !userRoles.isEmpty()) {
return getSingleResult("countOldRequestsByUserUidOrRoles", getUserAndRolesParams(user, userRoles));
} else {
return getSingleResult("countOldRequestsByUserUid", Collections.singletonMap("user", user));
}
}
private Map<String, Object> getUserAndRolesParams(User user, List<String> userRoles) {
final Map<String, Object> params = new HashMap<String, Object>();
params.put("user", user);
params.put("userRoles", userRoles);
return params;
}
/**
* @param time
* @return
*/
@Override
public List<Request> getOpenRequestsByNotifyDate(Date time) {
final Map<String, Object> params = new HashMap<String, Object>();
final Calendar calendar = CalendarUtil.getXmlDate(time).toGregorianCalendar();
params.put("notifyDateFrom", calendar.getTime());
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1);
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - 1);
params.put("notifyDateTo", calendar.getTime());
return getResultList("findOpenRequestsByNotificationDate", params);
}
}