package de.flower.rmt.ui.page.calendar; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; import de.flower.common.ui.panel.BasePanel; import de.flower.rmt.model.db.entity.CalItem; import de.flower.rmt.model.db.entity.User; import de.flower.rmt.model.db.entity.event.Event; import de.flower.rmt.model.dto.CalItemDto; import de.flower.rmt.security.ISecurityService; import de.flower.rmt.service.ICalendarManager; import de.flower.rmt.service.type.CalendarFilter; import de.flower.rmt.ui.app.IViewResolver; import de.flower.rmt.ui.app.View; import de.flower.rmt.ui.model.CalItemModel; import de.flower.rmt.ui.model.EventModel; import de.flower.rmt.ui.model.UserModel; import de.flower.rmt.ui.page.Pages; import de.flower.rmt.ui.page.base.AbstractCommonBasePage; import de.flower.rmt.ui.page.event.EventDetailsPanel; import de.flower.rmt.ui.page.event.player.EventPage; import de.flower.rmt.ui.panel.RMTBasePanel; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.link.BookmarkablePageLink; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.spring.injection.annot.SpringBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Collection; import java.util.List; /** * @author flowerrrr */ public class CalendarPage extends AbstractCommonBasePage { private final static Logger log = LoggerFactory.getLogger(CalendarPage.class); public static final String CALENDAR_SECONDARY_PANEL_ID = "calendarSecondaryPanel"; @SpringBean private ICalendarManager calendarManager; @SpringBean private ISecurityService securityService; @SpringBean private IViewResolver viewResolver; public CalendarPage() { init(new UserModel(securityService.getUser())); } @VisibleForTesting protected CalendarPage(IModel<User> model) { init(model); } private void init(final IModel<User> model) { setDefaultModel(model); setHeading("player.calendar.heading"); final Panel placeHolderContainer = new BasePanel(CALENDAR_SECONDARY_PANEL_ID) { { add(new WebMarkupContainer("hint") { @Override public boolean isVisible() { return viewResolver.getView() == View.PLAYER; } }); } @Override protected String getPanelMarkup() { return "<span wicket:id=\"hint\"><wicket:message key=\"player.calendar.hint\" /></span>"; } }; final IModel<List<CalendarFilter>> selectedCalendarsModel = Model.of((Collection) Lists.newArrayList(CalendarFilter.USER, CalendarFilter.CLUB)); // if (viewResolver.getView() == View.MANAGER) { // selectedCalendarsModel.getObject().add(CalendarFilter.OTHERS); // } addMainPanel(new CalendarPanel(CALENDAR_SECONDARY_PANEL_ID, selectedCalendarsModel) { @Override protected void onEventClick(final AjaxRequestTarget target, final CalItemDto calItemDto, User user) { Panel panel = new CalItemEditPanel("calendarSecondaryPanel", Model.of(calItemDto), new UserModel(user)) { @Override protected void onClose(final AjaxRequestTarget target) { getSecondaryPanel().replace(placeHolderContainer); target.add(getSecondaryPanel()); } }; getSecondaryPanel().replace(panel); target.add(getSecondaryPanel()); } @Override protected void onEventClick(final AjaxRequestTarget target, final CalItem calItem) { Panel panel = new CalItemDetailsPanel(CALENDAR_SECONDARY_PANEL_ID, new CalItemModel(calItem)) { @Override protected void onClose(final AjaxRequestTarget target) { getSecondaryPanel().replace(placeHolderContainer); target.add(getSecondaryPanel()); } }; getSecondaryPanel().replace(panel); target.add(getSecondaryPanel()); } @Override protected void onEventClick(final AjaxRequestTarget target, final Event event) { Panel panel = new EventDetailsPanelExtended(CALENDAR_SECONDARY_PANEL_ID, new EventModel(event)) { @Override protected void onClose(final AjaxRequestTarget target) { getSecondaryPanel().replace(placeHolderContainer); target.add(getSecondaryPanel()); } }; getSecondaryPanel().replace(panel); target.add(getSecondaryPanel()); } }); addSecondaryPanel(new CalendarSelectPanel(selectedCalendarsModel)); addSecondaryPanel(placeHolderContainer); } @Override public String getActiveTopBarItem() { return Pages.CALENDAR.name(); } public static class EventDetailsPanelExtended extends RMTBasePanel { public EventDetailsPanelExtended(final String id, final IModel<Event> eventModel) { super(id); add(new EventDetailsPanel(eventModel)); add(eventLink("link", eventModel.getObject().getId(), getView())); } @Override protected String getPanelMarkup() { return "<div wicket:id='eventDetailsPanel'/><a class='btn-link' wicket:id='link'><wicket:message key='calendar.link.event'/></a>"; } public static BookmarkablePageLink eventLink(String id, Long eventId, View view) { if (view == View.MANAGER) { return new BookmarkablePageLink(id, de.flower.rmt.ui.page.event.manager.EventPage.class, EventPage.getPageParams(eventId)); } else { return new BookmarkablePageLink(id, EventPage.class, EventPage.getPageParams(eventId)); } } } }