/* * Copyright (C) 2010 - 2012 Interactive Media Management * Copyright (C) 2014 Allan Lykke Christensen * * 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 dk.i2m.converge.core.content.NewsItemActionState; import dk.i2m.converge.core.workflow.WorkflowStateTransitionException; import dk.i2m.converge.core.DataNotFoundException; import dk.i2m.converge.core.annotations.OutletAction; import dk.i2m.converge.core.calendar.Event; import dk.i2m.converge.core.content.NewsItem; import dk.i2m.converge.core.content.NewsItemEditionState; import dk.i2m.converge.core.content.NewsItemPlacement; import dk.i2m.converge.core.dto.EditionAssignmentView; import dk.i2m.converge.core.dto.EditionView; import dk.i2m.converge.core.dto.OutletActionView; import dk.i2m.converge.core.logging.LogEntry; import dk.i2m.converge.core.security.SystemPrivilege; import dk.i2m.converge.core.security.UserAccount; import dk.i2m.converge.core.workflow.*; import dk.i2m.converge.ejb.facades.*; import dk.i2m.converge.jsf.components.tags.DialogAssignment; import dk.i2m.converge.jsf.components.tags.DialogEventSelection; import dk.i2m.converge.jsf.components.tags.UIEvent; import dk.i2m.converge.jsf.components.tags.UIEventListener; import dk.i2m.converge.core.utils.CalendarUtils; import dk.i2m.jsf.JsfUtils; import java.util.Calendar; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.PostConstruct; import javax.ejb.EJB; import javax.faces.application.FacesMessage; import javax.faces.event.ActionEvent; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; /** * Backing bean for the planning view. * * @author Allan Lykke Christensen */ public class Planning implements UIEventListener { private static final Logger LOG = Logger.getLogger(Planning.class.getName()); @EJB private OutletFacadeLocal outletFacade; @EJB private UserFacadeLocal userFacade; @EJB private CalendarFacadeLocal calendarFacade; @EJB private NewsItemFacadeLocal newsItemFacade; @EJB private WorkflowFacadeLocal workflowFacade; @EJB private SystemFacadeLocal systemFacade; private DialogAssignment dialogAssignment; private DialogEventSelection dialogEventSelection = null; private Outlet selectedOutlet; private Department selectedDepartment; private WorkflowState selectedState; private NewsItemPlacement selectedNewsItemPlacement; private Date selectedDate; private List<EditionView> selectedEditions; private List<OutletActionView> selectedOutletActions; private List<OutletActionView> selectedPlacementActions; private Edition selectedEdition; private EditionView selectedEditionView; private Date selectedCalendarDate; private Calendar useExistingEventDate; private Event selectedEventFromCalendar; private Outlet moveOutlet; private NewsItem selectedAssignment; private DataModel pipeline = new ListDataModel(); private List<UserAccount> selectedUsers; private DataModel openAssignments = null; private DataModel editionLogEntries = new ListDataModel(); private DataModel editionStates = new ListDataModel(); private DataModel actionStates = new ListDataModel(); private DataModel logEntries = new ListDataModel(); private DataModel newsItemEditionStates = new ListDataModel(); private DataModel newsItemActionStates = new ListDataModel(); private final ResourceBundle bundle = JsfUtils.getResourceBundle(Bundle.i18n.name()); /** * Creates a new instance of {@link Planning}. */ public Planning() { } @PostConstruct public void onInit() { Calendar startDate = Calendar.getInstance(); startDate.setTimeZone(getUser().getTimeZone()); int workDay = getUser().getDefaultWorkDay(); startDate.add(Calendar.DAY_OF_MONTH, workDay); selectedDate = startDate.getTime(); useExistingEventDate = Calendar.getInstance(); selectedOutlet = getUser().getDefaultOutlet(); if (selectedOutlet == null) { if (!getOutlets().isEmpty()) { selectedOutlet = getOutlets().iterator().next(); } } fetchEditions(); } /** * Event handler for when an {@link Outlet} is selected. * * @param event Event that invoked the handler */ public void onSelectOutlet(ActionEvent event) { fetchEditions(); } /** * Event handler for when a date is selected from the calendar. * * @param event Event that invoked the handler */ public void onSelectDate(ActionEvent event) { fetchEditions(); } public void onNewEdition(ActionEvent event) { if (isOutletSelected() && isDateSelected()) { Calendar startDate = Calendar.getInstance(); startDate.setTimeZone(getUser().getTimeZone()); startDate.setTime(selectedDate); startDate.set(Calendar.HOUR_OF_DAY, 0); startDate.set(Calendar.MINUTE, 0); startDate.set(Calendar.SECOND, 0); Calendar endDate = Calendar.getInstance(); endDate.setTimeZone(getUser().getTimeZone()); endDate.setTime(selectedDate); endDate.set(Calendar.HOUR_OF_DAY, 23); endDate.set(Calendar.MINUTE, 59); endDate.set(Calendar.SECOND, 59); selectedEditionView = new EditionView(null, selectedOutlet.getId(), selectedOutlet.getTitle(), true, startDate, endDate, null); } } public void setCreateEdition(EditionView edition) { if (edition.getId() == null) { selectedEdition = outletFacade.createEdition(edition.getOutletId(), edition.isOpen(), edition.getPublicationDate(), edition. getExpirationDate(), edition.getCloseDate()); fetchEditions(); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_EDITION_SAVED"); } else { LOG.warning("Selected edition already exist in the database"); } } public void setDeletePlacement(Long id) { if (id != null) { newsItemFacade.deletePlacementById(id); fetchEditions(); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_PLACEMENT_REMOVED"); } } public void onDeleteEdition(ActionEvent event) { outletFacade.deleteEdition(selectedEditionView.getId()); fetchEditions(); } public void onSaveEdition(ActionEvent event) { if (isEditionAddMode()) { outletFacade.createEdition(selectedEditionView.getOutletId(), selectedEditionView.isOpen(), selectedEditionView. getPublicationDate(), selectedEditionView.getExpirationDate(), selectedEditionView.getCloseDate()); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_EDITION_SAVED"); } else { try { selectedEdition = outletFacade.updateEdition(selectedEditionView.getId(), selectedEditionView.isOpen(), selectedEditionView. getPublicationDate(), selectedEditionView. getExpirationDate(), selectedEditionView.getCloseDate()); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_EDITION_UPDATED"); } catch (DataNotFoundException ex) { JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_ERROR, Bundle.i18n.name(), "Planning_EDITION_NO_LONGER_EXIST"); } } fetchEditions(); } /** * Event handler for scheduling the execution of edition actions. * * @param event Event that invoked the handler */ public void onExecuteAllActions(ActionEvent event) { if (selectedEditionView != null) { outletFacade.scheduleActions(selectedEditionView.getId()); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_EDITION_ACTIONS_SCHEDULED"); } } /** * Event handler for scheduling the execution of all edition actions for the {@link #getSelectedNewsItemPlacement() * }. * * @param event Event that invoked the handler */ public void onExecuteAllPlacementActions(ActionEvent event) { if (selectedNewsItemPlacement != null) { outletFacade.scheduleNewsItemPlacementActions(selectedNewsItemPlacement. getEdition().getId(), selectedNewsItemPlacement.getId()); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Editions_ACTIONS_SCHEDULED_FOR_NEWS_ITEM", null); } } /** * Schedules the execution of the given edition action on the * {@link #getSelectedNewsItemPlacement()}. * * @param action {@link OutletEditionAction} to execute */ public void setExecutePlacementAction(Long id) { if (selectedNewsItemPlacement != null && id != null) { outletFacade.scheduleNewsItemPlacementAction( selectedNewsItemPlacement.getEdition(). getId(), id, selectedNewsItemPlacement.getId()); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Editions_ACTION_SCHEDULED_FOR_NEWS_ITEM", null); } } /** * Schedules the execution of the given edition action. * * @param id Unique identifier of the {@link OutletEditionAction} to execute */ public void setExecuteAction(Long id) { if (selectedEditionView != null && id != null) { outletFacade.scheduleAction(selectedEditionView.getId(), id); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_EDITION_ACTION_SCHEDULED"); } } public void onNewEditionPlacement(ActionEvent event) { onNewAssignment(event); dialogAssignment.onChangeEdition(null); } public void onSaveEditionPlacement(ActionEvent event) { if (isAssignmentAddMode()) { try { selectedAssignment = newsItemFacade.start(selectedAssignment); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_EDITION_PLACEMENT_CREATED"); } catch (WorkflowStateTransitionException ex) { LOG.log(Level.SEVERE, null, ex); } } else { try { selectedAssignment = newsItemFacade.checkin(selectedAssignment); JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_EDITION_PLACEMENT_UPDATED"); } catch (LockingException ex) { JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_ERROR, Bundle.i18n.name(), "Generic_AN_ERROR_OCCURRED_X", new Object[]{ex.getMessage()}); } } fetchEditions(); } public void onDeleteEditionPlacement(ActionEvent event) { if (selectedAssignment.getActors().isEmpty()) { newsItemFacade.deleteNewsItem(selectedAssignment.getId()); } else { try { selectedAssignment = newsItemFacade.checkin(selectedAssignment); } catch (LockingException ex) { JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_ERROR, Bundle.i18n.name(), "Generic_AN_ERROR_OCCURRED_X", new Object[]{ex.getMessage()}); } } JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_EDITION_PLACEMENT_DELETED"); fetchEditions(); } /** * 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.OUTLET_PLANNING); } /** * Gets a {@link Map} of the {@link Outlet}s where the current user has * outlet planning privileges. * * @return {@link Map} of the {@link Outlet}s where the current user has * outlet planning 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.OUTLET_PLANNING)) { outlets.put(outlet.getTitle(), outlet); } return outlets; } /** * Gets a {@link Map} of potential authors for a {@link NewsItem} of the * selected outlet. * * @return {@link Map} of {@link UserAccount}s that are potential authors of * a new {@link NewsItem} for the selected outlet */ public Map<String, UserAccount> getAuthors() { Map<String, UserAccount> authors = new LinkedHashMap<String, UserAccount>(); WorkflowState start = selectedOutlet.getWorkflow().getStartState(); List<UserAccount> potentialAuthors = userFacade.getMembers(start. getActorRole()); for (UserAccount acc : potentialAuthors) { authors.put(acc.getFullName(), acc); } return authors; } public Map<String, UserAccount> getOutletDepartmentEditors() { Map<String, UserAccount> editors = new LinkedHashMap<String, UserAccount>(); if (selectedAssignment.getDepartment() != null) { List<UserAccount> members = userFacade.getMembers(selectedAssignment.getDepartment(). getId()); for (UserAccount acc : members) { editors.put(acc.getFullName(), acc); } } return editors; } public Outlet getSelectedOutlet() { return selectedOutlet; } public void setSelectedOutlet(Outlet selectedOutlet) { this.selectedOutlet = selectedOutlet; this.openAssignments = null; onSelectOutlet(null); } public Date getSelectedDate() { return selectedDate; } public void setSelectedDate(Date selectedDate) { this.selectedDate = selectedDate; } public List<EditionView> getSelectedEditions() { return selectedEditions; } public void setSelectedEditions(List<EditionView> selectedEditions) { this.selectedEditions = selectedEditions; } public Edition getSelectedEdition() { return selectedEdition; } public void setSelectedEdition(Edition selectedEdition) { this.selectedEdition = selectedEdition; } public boolean isEditionEditMode() { if (selectedEditionView == null || selectedEditionView.getId() == null) { return false; } else { return true; } } public boolean isEditionAddMode() { return !isEditionEditMode(); } /** * Determines if there is an {@link Edition} available for the selected * {@link Outlet} and date. * * @return < * code>true</code> if there is an {@link Edition} available for the * selected {@link Outlet} and date, otherwise <code>false</code> */ public boolean isEditionAvailable() { return selectedEditions != null && !selectedEditions.isEmpty(); } /** * Determines if a date has been selected. * * @return < * code>true</code> if a date has been selected, otherwise * <code>false</code> */ public boolean isDateSelected() { return selectedDate != null; } /** * 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; } } /** * Gets a formatted title for the Edition bar. * * @return formatted title for the Edition bar */ public String getEditionTitle() { if (selectedDate != null) { return JsfUtils.getMessage(Bundle.i18n.name(), "Planning_EDITION_TITLE", new Object[]{selectedOutlet.getTitle(), selectedDate}); } else { return JsfUtils.getMessage(Bundle.i18n.name(), "Planning_EDITION_TITLE_NO_DATE", new Object[]{selectedOutlet.getTitle()}); } } public Date getSelectedCalendarDate() { return selectedCalendarDate; } public void setSelectedCalendarDate(Date selectedCalendarDate) { this.selectedCalendarDate = selectedCalendarDate; } private UserAccount getUser() { return (UserAccount) JsfUtils.getValueOfValueExpression( "#{userSession.user}"); } /** * Updates the changes of a {@link NewsItemPlacement}. * * @param assignment Placement to update */ public void setUpdatePlacement(EditionAssignmentView assignment) { newsItemFacade.updatePlacement(assignment.getPlacementId(), assignment. getStart(), assignment.getPosition()); } public void onRefreshEditionPlacements(ActionEvent event) { fetchEditions(); } private void fetchEditions() { if (!(isOutletSelected() && isDateSelected())) { LOG.log(Level.FINEST, "Outlet [{0}] or date [{1}] is not selected", new Object[]{selectedOutlet, selectedDate}); return; } selectedEditions = outletFacade.findEditionViewsByDate(selectedOutlet.getId(), selectedDate, true, true); try { this.selectedOutletActions = outletFacade.findOutletActions(selectedOutlet.getId()); this.selectedPlacementActions = outletFacade. findOutletPlacementActions(selectedOutlet.getId()); } catch (DataNotFoundException ex) { LOG.log(Level.WARNING, "Unknown Outlet"); this.selectedOutletActions = new ArrayList<OutletActionView>(); this.selectedPlacementActions = new ArrayList<OutletActionView>(); } } public DataModel getSchedule() { Calendar start = CalendarUtils.getFirstDayOfMonth(useExistingEventDate); Calendar end = CalendarUtils.getLastDayOfMonth(useExistingEventDate); return new ListDataModel(calendarFacade.findByDate(start, end)); } public Calendar getUseExistingEventDate() { return useExistingEventDate; } public void setUseExistingEventDate(Calendar useExistingEventDate) { this.useExistingEventDate = useExistingEventDate; } public Event getSelectedEventFromCalendar() { return selectedEventFromCalendar; } public void setSelectedEventFromCalendar(Event selectedEventFromCalendar) { this.selectedEventFromCalendar = selectedEventFromCalendar; } public void onSelectEventFromCalendar(ActionEvent evet) { if (selectedEventFromCalendar == null) { return; } String title = JsfUtils.getMessage(Bundle.i18n.name(), "Planning_COVER_X_EVENT", new Object[]{selectedEventFromCalendar.getSummary()}); this.selectedAssignment.setTitle(title); this.selectedAssignment.setEvent(selectedEventFromCalendar); } public Map<String, Edition> getOutletEditionsMap() { Map<String, Edition> editionMap = new LinkedHashMap<String, Edition>(); if (moveOutlet != null) { List<Edition> editions = outletFacade.findEditionsByStatus(true, moveOutlet); for (Edition edition : editions) { editionMap.put(edition.getFriendlyName(), edition); } } return editionMap; } public Map<String, Section> getOutletSectionsMap() { Map<String, Section> activeSections = new LinkedHashMap<String, Section>(); for (Section section : selectedOutlet.getSections()) { if (section.isActive()) { activeSections.put(section.getFullName(), section); } } return activeSections; } // ------------------------------------------------------------------------ public void onNewAssignment(ActionEvent event) { onRefreshOpenAssignments(event); dialogAssignment = new DialogAssignment(outletFacade, workflowFacade, userFacade, newsItemFacade, calendarFacade, getOutlets()); dialogAssignment.addListener(this); dialogAssignment.showStoryTab(); dialogAssignment.getAssignment().setAssigned(true); dialogAssignment.getAssignment().setAssignedBy(getUser()); dialogAssignment.getAssignment().setOutlet(selectedOutlet); dialogAssignment.onChangeOutlet(null); if (selectedDate != null) { Calendar deadline = Calendar.getInstance(); deadline.setTime(selectedDate); dialogAssignment.getAssignment().setDeadline(deadline); dialogAssignment.getAssignment().getDeadline().setTimeZone(getUser(). getTimeZone()); dialogAssignment.getAssignment().getDeadline().set( Calendar.HOUR_OF_DAY, 15); dialogAssignment.getAssignment().getDeadline().set(Calendar.MINUTE, 0); dialogAssignment.getAssignment().getDeadline().set(Calendar.SECOND, 0); } else { dialogAssignment.getAssignment().setDeadline(Calendar.getInstance()); dialogAssignment.getAssignment().getDeadline().setTimeZone(getUser(). getTimeZone()); dialogAssignment.getAssignment().getDeadline().set( Calendar.HOUR_OF_DAY, 15); dialogAssignment.getAssignment().getDeadline().set(Calendar.MINUTE, 0); dialogAssignment.getAssignment().getDeadline().set(Calendar.SECOND, 0); } dialogEventSelection = new DialogEventSelection(calendarFacade); dialogEventSelection.setAssignment(dialogAssignment.getAssignment()); } public void onShowBriefing(ActionEvent event) { dialogAssignment = new DialogAssignment(outletFacade, workflowFacade, userFacade, newsItemFacade, calendarFacade, getOutlets()); dialogAssignment.showBriefingTab(); dialogAssignment.setAssignment(selectedAssignment); dialogAssignment.onChangeOutlet(null); dialogEventSelection = new DialogEventSelection(calendarFacade); dialogEventSelection.setAssignment(dialogEventSelection.getAssignment()); } public void onShowAssignment(ActionEvent event) { dialogEventSelection = new DialogEventSelection(calendarFacade); dialogAssignment = new DialogAssignment(outletFacade, workflowFacade, userFacade, newsItemFacade, calendarFacade, getOutlets()); dialogAssignment.showStoryTab(); dialogAssignment.setAssignment(selectedAssignment); dialogAssignment.onChangeOutlet(null); dialogEventSelection = new DialogEventSelection(calendarFacade); dialogEventSelection.setAssignment(dialogAssignment.getAssignment()); } public void onDeleteAssignment(ActionEvent event) { if (newsItemFacade.deleteNewsItem(selectedAssignment.getId())) { JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_INFO, Bundle.i18n.name(), "Planning_ASSIGNMENT_DELETED"); } else { JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_ERROR, Bundle.i18n.name(), "Planning_ASSIGNMENT_COULD_NOT_BE_DELETED"); } onRefreshOpenAssignments(event); onRefreshPipeline(event); } public NewsItem getSelectedAssignment() { return selectedAssignment; } public void setSelectedAssignment(NewsItem selectedAssignment) { this.selectedAssignment = selectedAssignment; try { NewsItemHolder nih = newsItemFacade.checkout(this.selectedAssignment.getId()); dialogEventSelection = new DialogEventSelection(calendarFacade); dialogAssignment = new DialogAssignment(outletFacade, workflowFacade, userFacade, newsItemFacade, calendarFacade, getOutlets()); dialogAssignment.showStoryTab(); dialogAssignment.setNewsItemHolder(nih); dialogAssignment.onChangeOutlet(null); dialogEventSelection = new DialogEventSelection(calendarFacade); dialogEventSelection.setAssignment(dialogAssignment.getAssignment()); } catch (DataNotFoundException ex) { JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_ERROR, Bundle.i18n.name(), "Generic_AN_ERROR_OCCURRED_X", new Object[]{ex.getMessage()}); } } public boolean isAssignmentEditMode() { if (selectedAssignment == null || selectedAssignment.getId() == null) { return false; } else { return true; } } public boolean isAssignmentAddMode() { return !isAssignmentEditMode(); } public void onRefreshOpenAssignments(ActionEvent event) { this.openAssignments = null; getOpenAssignments(); } public DataModel getOpenAssignments() { if (openAssignments == null) { openAssignments = new ListDataModel(newsItemFacade. findAssignmentsByOutlet(selectedOutlet)); } return openAssignments; } public Map<String, UserAccount> getAssignmentOutletDepartmentEditors() { Map<String, UserAccount> editors = new LinkedHashMap<String, UserAccount>(); if (selectedAssignment.getDepartment() != null) { List<UserAccount> members = userFacade.getMembers(selectedAssignment.getDepartment(). getId()); for (UserAccount acc : members) { editors.put(acc.getFullName(), acc); } } return editors; } public Department getSelectedDepartment() { return selectedDepartment; } public void setSelectedDepartment(Department selectedDepartment) { this.selectedDepartment = selectedDepartment; } public WorkflowState getSelectedState() { return selectedState; } public void setSelectedState(WorkflowState selectedState) { this.selectedState = selectedState; } public Map<String, WorkflowState> getOutletWorkflowStates() { Map<String, WorkflowState> workflowStates = new LinkedHashMap<String, WorkflowState>(); if (selectedOutlet != null) { for (WorkflowState state : selectedOutlet.getWorkflow().getStates()) { workflowStates.put(state.getName(), state); } } return workflowStates; } public void onRefreshPipeline(ActionEvent event) { if (selectedOutlet == null) { JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_ERROR, Bundle.i18n.name(), "Planning_SELECT_OUTLET_ERROR"); } else if (selectedState == null) { JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_ERROR, Bundle.i18n.name(), "Planning_SELECT_STATE_ERROR"); } else { List<NewsItem> items = newsItemFacade.findByStateAndOutlet( selectedState, selectedOutlet); pipeline = new ListDataModel(items); } } public DataModel getPipeline() { return pipeline; } public List<UserAccount> getSelectedUsers() { return selectedUsers; } public void setSelectedUsers(List<UserAccount> selectedUsers) { this.selectedUsers = selectedUsers; } public DialogAssignment getDialogAssignment() { return dialogAssignment; } public void setDialogAssignment(DialogAssignment dialogAssignment) { this.dialogAssignment = dialogAssignment; } public DialogEventSelection getDialogEventSelection() { if (dialogEventSelection == null) { dialogEventSelection = new DialogEventSelection(calendarFacade); } return dialogEventSelection; } public void setDialogEventSelection( DialogEventSelection dialogEventSelection) { this.dialogEventSelection = dialogEventSelection; } @Override public void onUIEvent(UIEvent event) { if (event.getType().equalsIgnoreCase("onsaveassignment")) { onRefreshOpenAssignments(null); } } public EditionView getSelectedEditionView() { return selectedEditionView; } public void setSelectedEditionView(EditionView selectedEditionView) { this.selectedEditionView = selectedEditionView; onRefreshEditionLogEntries(null); onRefreshEditionStates(null); onRefreshActionStates(null); } public List<OutletActionView> getSelectedOutletActions() { return selectedOutletActions; } public void setSelectedOutletActions( List<OutletActionView> selectedOutletActions) { this.selectedOutletActions = selectedOutletActions; } /** * Gets a {@link List} of {@link OutletAction}s that can be executed on * {@link NewsItemPlacement}s. * * @return {@link List} of {@link OutletAction}s that can be executed on * {@link NewsItemPlacement}s. */ public List<OutletActionView> getSelectedPlacementActions() { return selectedPlacementActions; } public NewsItemPlacement getSelectedNewsItemPlacement() { return selectedNewsItemPlacement; } public void setSelectedNewsItemPlacement( NewsItemPlacement selectedNewsItemPlacement) { this.selectedNewsItemPlacement = selectedNewsItemPlacement; } public void setSelectedNewsItemPlacementId(Long id) { try { this.selectedNewsItemPlacement = newsItemFacade.findNewsItemPlacementById(id); onRefreshNewsItemLogEntries(null); onRefreshNewsItemEditionState(null); onRefreshNewsItemActionState(null); } catch (DataNotFoundException ex) { JsfUtils.createMessage("frmPage", FacesMessage.SEVERITY_ERROR, Bundle.i18n.name(), "Editions_NEWS_ITEM_COULD_NOT_BE_FOUND"); } } public DataModel getEditionLogEntries() { return editionLogEntries; } public void onRefreshEditionLogEntries(ActionEvent event) { List<LogEntry> entries = systemFacade.findLogEntries(Edition.class.getName(), String. valueOf(getSelectedEditionView().getId())); editionLogEntries = new ListDataModel(entries); } public void onClearEditionLogEntries(ActionEvent event) { systemFacade.removeLogEntries(Edition.class.getName(), String.valueOf(getSelectedEditionView().getId())); onRefreshEditionLogEntries(event); } public DataModel getLogEntries() { return logEntries; } public void onRefreshNewsItemLogEntries(ActionEvent event) { NewsItem logItem = getSelectedNewsItemPlacement().getNewsItem(); List<LogEntry> entries = systemFacade.findLogEntries(NewsItem.class.getName(), String. valueOf(logItem.getId())); logEntries = new ListDataModel(entries); } public void onClearNewsItemLogEntries(ActionEvent event) { NewsItem logItem = getSelectedNewsItemPlacement().getNewsItem(); systemFacade.removeLogEntries(NewsItem.class.getName(), String.valueOf(logItem.getId())); onRefreshNewsItemLogEntries(event); } public DataModel getEditionStates() { return this.editionStates; } public void onRefreshEditionStates(ActionEvent event) { Long editionId = getSelectedEditionView().getId(); List<NewsItemEditionState> properties = newsItemFacade.findNewsItemEditionStates(editionId); this.editionStates = new ListDataModel(properties); } public DataModel getNewsItemEditionStates() { return this.newsItemEditionStates; } public void onRefreshNewsItemEditionState(ActionEvent event) { Long newsItemId = getSelectedNewsItemPlacement().getNewsItem().getId(); Long editionId = getSelectedNewsItemPlacement().getEdition().getId(); List<NewsItemEditionState> properties = newsItemFacade.findNewsItemEditionStates(editionId, newsItemId); newsItemEditionStates = new ListDataModel(properties); } public void onDeleteNewsItemEditionStates(ActionEvent event) { Long newsItemId = getSelectedNewsItemPlacement().getNewsItem().getId(); Long editionId = getSelectedNewsItemPlacement().getEdition().getId(); LOG.log(Level.FINE, "Clearing NewsItemEditionState for Edition #{0} NewsItemId #{1}", new Object[]{editionId, newsItemId}); newsItemFacade.clearNewsItemEditionState(editionId, newsItemId); onRefreshNewsItemEditionState(event); } public void onDeleteAllNewsItemEditionState(ActionEvent event) { Long editionId = getSelectedEditionView().getId(); newsItemFacade.clearNewsItemEditionState(editionId); onRefreshEditionStates(event); } public DataModel getActionStates() { return this.actionStates; } public void onRefreshActionStates(ActionEvent event) { Long editionId = getSelectedEditionView().getId(); List<NewsItemActionState> properties = newsItemFacade.findNewsItemActionStates(editionId); this.actionStates = new ListDataModel(properties); } public DataModel getNewsItemActionStates() { return this.newsItemActionStates; } public void onRefreshNewsItemActionState(ActionEvent event) { Long newsItemId = getSelectedNewsItemPlacement().getNewsItem().getId(); Long editionId = getSelectedNewsItemPlacement().getEdition().getId(); List<NewsItemActionState> properties = newsItemFacade.findNewsItemActionStates(editionId, newsItemId); newsItemActionStates = new ListDataModel(properties); } public void onDeleteNewsItemActionStates(ActionEvent event) { Long newsItemId = getSelectedNewsItemPlacement().getNewsItem().getId(); Long editionId = getSelectedNewsItemPlacement().getEdition().getId(); LOG.log(Level.FINE, "Clearing NewsItemActionState for Edition #{0} NewsItemId #{1}", new Object[]{editionId, newsItemId}); newsItemFacade.clearNewsItemActionState(editionId, newsItemId); onRefreshNewsItemActionState(event); } public void onDeleteAllNewsItemActionState(ActionEvent event) { Long editionId = getSelectedEditionView().getId(); newsItemFacade.clearNewsItemActionState(editionId); onRefreshActionStates(event); } }