/**
* ESUP-Portail Helpdesk - Copyright (c) 2004-2009 ESUP-Portail consortium.
*/
package org.esupportail.helpdesk.web.controllers;
import java.util.ArrayList;
import java.util.List;
import javax.faces.model.SelectItem;
import org.esupportail.commons.aop.cache.RequestCache;
import org.esupportail.commons.services.authentication.AuthUtils;
import org.esupportail.commons.utils.Assert;
import org.esupportail.commons.web.beans.Paginator;
import org.esupportail.helpdesk.domain.beans.Action;
import org.esupportail.helpdesk.domain.beans.Department;
import org.esupportail.helpdesk.domain.beans.Ticket;
import org.esupportail.helpdesk.domain.beans.User;
/**
* The journal controller.
*/
public class JournalController extends AbstractContextAwareController {
/**
* The serialization id.
*/
private static final long serialVersionUID = -2199813366288386290L;
/**
* The paginator.
*/
private Paginator<Action> paginator;
/**
* The ticket to view.
*/
private Ticket ticketToView;
/**
* The ticket Controller.
*/
private TicketController ticketController;
/**
* Bean constructor.
*/
public JournalController() {
super();
}
/**
* @see org.esupportail.helpdesk.web.controllers.AbstractContextAwareController#afterPropertiesSetInternal()
*/
@Override
public void afterPropertiesSetInternal() {
super.afterPropertiesSetInternal();
Assert.notNull(paginator,
"property paginator of class " + getClass().getName()
+ " can not be null");
Assert.notNull(ticketController,
"property ticketController of class " + getClass().getName()
+ " can not be null");
}
/**
* @see org.esupportail.helpdesk.web.controllers.AbstractContextAwareController#reset()
*/
@Override
public void reset() {
super.reset();
ticketToView = null;
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return getClass().getSimpleName() + "#" + hashCode() + "[paginator=" + paginator
+ "]";
}
/**
* @return true if the current user is allowed to access the view.
*/
@RequestCache
public boolean isPageAuthorized() {
if (getCurrentUser() == null) {
return false;
}
if (!getDomainService().isDepartmentManager(getCurrentUser())) {
return false;
}
return true;
}
/**
* JSF callback.
* @return A String.
*/
public String enter() {
if (!isPageAuthorized()) {
return null;
}
getSessionController().setShowShortMenu(false);
User currentUser = getCurrentUser();
if (currentUser.getJournalPageSize() == null || currentUser.getJournalPageSize() <= 0) {
currentUser.setJournalPageSize(paginator.getDefaultPageSize());
}
getDomainService().updateUser(getCurrentUser());
paginator.setPageSize(getCurrentUser().getJournalPageSize());
paginator.forceReload();
return "navigationJournal";
}
/**
* JSF callback.
* @return A String.
*/
public String viewTicket() {
ticketToView = getDomainService().reloadTicket(ticketToView);
if (!getDomainService().userCanViewTicket(getCurrentUser(), getClient(), ticketToView)) {
addUnauthorizedActionMessage();
return null;
}
ticketController.setTicket(ticketToView);
return "view";
}
/**
* @return the paginator.
*/
public Paginator<Action> getPaginator() {
return paginator;
}
/**
* @return the departmentItems
*/
public List<SelectItem> getDepartmentItems() {
List<SelectItem> departmentItems = new ArrayList<SelectItem>();
departmentItems.add(
new SelectItem("", getString("JOURNAL.DEPARTMENT_FILTER.ANY")));
for (Department dep : getDomainService().getManagedDepartments(getCurrentUser())) {
departmentItems.add(new SelectItem(dep, dep.getLabel()));
}
return departmentItems;
}
/**
* @return a permanent link to the page for application users.
*/
public String getApplicationPermLink() {
return getUrlBuilder().getJournalUrl(AuthUtils.APPLICATION);
}
/**
* @return a permanent link to the page for CAS users.
*/
public String getCasPermLink() {
return getUrlBuilder().getJournalUrl(AuthUtils.CAS);
}
/**
* @return a permanent link to the page for Shibboleth users.
*/
public String getShibbolethPermLink() {
return getUrlBuilder().getJournalUrl(AuthUtils.SHIBBOLETH);
}
/**
* @return a permanent link to the page for specific users.
*/
public String getSpecificPermLink() {
return getUrlBuilder().getJournalUrl(AuthUtils.SPECIFIC);
}
/**
* @param paginator the paginator to set
*/
public void setPaginator(final Paginator<Action> paginator) {
this.paginator = paginator;
}
/**
* @param ticketToView the ticketToView to set
*/
public void setTicketToView(final Ticket ticketToView) {
this.ticketToView = ticketToView;
}
/**
* @param ticketController the ticketController to set
*/
public void setTicketController(final TicketController ticketController) {
this.ticketController = ticketController;
}
}