/* * Copyright (C) 2010 Interactive Media Management * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package dk.i2m.converge.jsf.beans; import java.util.Date; import java.util.LinkedHashMap; import java.util.Map; import java.util.TimeZone; import javax.annotation.PostConstruct; import dk.i2m.converge.core.workflow.Outlet; import dk.i2m.converge.core.workflow.Edition; import dk.i2m.converge.core.security.UserAccount; import dk.i2m.converge.core.security.SystemPrivilege; import dk.i2m.converge.ejb.facades.OutletFacadeLocal; import javax.ejb.EJB; import dk.i2m.jsf.JsfUtils; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import java.util.logging.Level; import javax.faces.event.ActionEvent; /** * Managed bean for {@code /NewsReader.jspx}. * * @author Allan Lykke Christensen */ public class NewsReader { private static final Logger LOG = Logger.getLogger(NewsReader.class.getName()); @EJB private OutletFacadeLocal outletFacade; private dk.i2m.converge.core.workflow.Outlet selectedOutlet; private Date selectedDate; private List<Edition> selectedEditions = new ArrayList<Edition>(); private Edition selectedEdition; private String selectedEditionTitle = ""; @PostConstruct public void onInit() { selectedDate = null; selectedOutlet = getUser().getDefaultOutlet(); fetchEditions(); } private UserAccount getUser() { return (UserAccount) JsfUtils.getValueOfValueExpression("#{userSession.user}"); } /** * Gets a {@link Map} of the {@link Outlet}s where the current user has * news reader privileges. * * @return {@link Map} of the {@link Outlet}s where the current user has * news reader privileges */ public Map<String, Outlet> getOutletsMap() { Map<String, Outlet> outlets = new LinkedHashMap<String, Outlet>(); UserAccount currentUser = (UserAccount) JsfUtils.getValueOfValueExpression("#{userSession.user}"); for (Outlet outlet : currentUser.getPrivilegedOutlets(SystemPrivilege.NEWS_READER)) { outlets.put(outlet.getTitle(), outlet); } return outlets; } /** * Gets a {@link List} of the {@link Outlet}s where the current user has * outlet planning privileges. * * @return {@link List} of the {@link Outlet}s where the current user has * outlet planning privileges */ public List<Outlet> getOutlets() { UserAccount currentUser = (UserAccount) JsfUtils.getValueOfValueExpression("#{userSession.user}"); return currentUser.getPrivilegedOutlets(SystemPrivilege.NEWS_READER); } public Date getSelectedDate() { return selectedDate; } public void setSelectedDate(Date selectedDate) { this.selectedDate = selectedDate; } /** * Event handler for when a date is selected from the calendar. * * @param event * Event that invoked the handler */ public void onSelectDate(ActionEvent event) { fetchEditions(); } private void fetchEditions() { if (isOutletSelected() && isDateSelected()) { java.util.Calendar editionDate = java.util.Calendar.getInstance(); editionDate.setTime(selectedDate); //selectedEditions = outletFacade.findEditionByOutletAndDate(selectedOutlet.getId(), editionDate); selectedEditions = outletFacade.findEditionsByDate(selectedOutlet, editionDate); } else { LOG.log(Level.FINEST, "Outlet [{0}] or date [{1}] is not selected", new Object[]{selectedOutlet, selectedDate}); } } /** * Determines if an {@link Outlet} has been selected. * * @return <code>true</code> if an {@link Outlet} has been selected, * otherwise <code>false</code> */ public boolean isOutletSelected() { if (selectedOutlet == null) { return false; } else { return true; } } /** * Determines if a date has been selected. * * @return <code>true</code> if a date has been selected, otherwise * <code>false</code> */ public boolean isDateSelected() { if (selectedDate == null) { return false; } else { return true; } } public List<Edition> getSelectedEditions() { return selectedEditions; } public void setSelectedEditions(List<Edition> selectedEditions) { this.selectedEditions = selectedEditions; } public Outlet getSelectedOutlet() { return selectedOutlet; } public void setSelectedOutlet(Outlet selectedOutlet) { this.selectedOutlet = selectedOutlet; } public Edition getSelectedEdition() { return selectedEdition; } public void setSelectedEdition(Edition selectedEdition) { this.selectedEdition = selectedEdition; try { DateFormat df = new SimpleDateFormat("EEEE d. MMMM yyyy hh:mm aa"); df.setTimeZone((TimeZone) JsfUtils.getValueOfValueExpression("#{common.systemTimeZone}")); this.selectedEditionTitle = getSelectedEdition().getOutlet().getTitle() + " - " + df.format(getSelectedEdition().getPublicationDate().getTime()); } catch (Exception ex) { this.selectedEditionTitle = ex.getMessage(); } } public String getSelectedEditionTitle() { return this.selectedEditionTitle; } }