/**
* ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium.
*/
package org.esupportail.helpdesk.web.beans;
import java.util.ArrayList;
import java.util.List;
import org.esupportail.commons.dao.AbstractHibernateQueryPaginator;
import org.esupportail.commons.dao.HqlUtils;
import org.esupportail.commons.utils.Assert;
import org.esupportail.helpdesk.domain.DomainService;
import org.esupportail.helpdesk.domain.beans.Action;
import org.esupportail.helpdesk.domain.beans.Department;
import org.esupportail.helpdesk.domain.beans.User;
import org.esupportail.helpdesk.web.controllers.SessionController;
/**
* A paginator for the journal.
*/
public class JournalPaginator
extends AbstractHibernateQueryPaginator<Action> {
/**
* The serialization id.
*/
private static final long serialVersionUID = -6049383923323536348L;
/**
* The domain service.
*/
private DomainService domainService;
/**
* The session controller.
*/
private SessionController sessionController;
/**
* Constructor.
*/
public JournalPaginator() {
super();
}
/**
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
@Override
public void afterPropertiesSet() {
super.afterPropertiesSet();
Assert.notNull(this.domainService,
"property domainService of class " + this.getClass().getName() + " can not be null");
Assert.notNull(this.sessionController,
"property sessionController of class " + this.getClass().getName()
+ " can not be null");
}
/**
* @see org.esupportail.commons.web.beans.AbstractPaginator#getPageSizeInternal()
*/
@Override
public int getPageSizeInternal() {
return sessionController.getCurrentUser().getJournalPageSize();
}
/**
* @see org.esupportail.commons.web.beans.AbstractPaginator#setPageSizeInternal(int)
*/
@Override
protected void setPageSizeInternal(final int pageSize) {
sessionController.getCurrentUser().setJournalPageSize(pageSize);
domainService.updateUser(sessionController.getCurrentUser());
}
/**
* @see org.esupportail.commons.dao.AbstractHibernateQueryPaginator#getQueryString()
*/
@Override
protected String getQueryString() {
User currentUser = sessionController.getCurrentUser();
if (currentUser == null) {
return null;
}
List<Department> managedDepartments = domainService.getManagedDepartments(currentUser);
if (managedDepartments.isEmpty()) {
return null;
}
String departmentCondition;
if (currentUser.getJournalDepartmentFilter() == null) {
List<Long> departmentIds = new ArrayList<Long>();
for (Department department : managedDepartments) {
departmentIds.add(department.getId());
}
departmentCondition = HqlUtils.longIn("action.ticket.department.id", departmentIds);
} else {
departmentCondition = HqlUtils.equals(
"action.ticket.department.id",
currentUser.getJournalDepartmentFilter().getId());
}
return HqlUtils.fromWhereOrderByDesc(
Action.class.getSimpleName() + HqlUtils.AS_KEYWORD + "action",
HqlUtils.and(
departmentCondition,
HqlUtils.alwaysTrue()),
"action.date");
}
/**
* @return the current user.
*/
public User getCurrentUser() {
return sessionController.getCurrentUser();
}
/**
* @param sessionController the sessionController to set
*/
public void setSessionController(final SessionController sessionController) {
this.sessionController = sessionController;
}
/**
* @param domainService the domainService to set
*/
public void setDomainService(final DomainService domainService) {
this.domainService = domainService;
}
}