package de.flower.rmt.ui.page.events.manager;
import de.flower.common.ui.ajax.event.AjaxEventListener;
import de.flower.common.ui.ajax.event.AjaxEventSender;
import de.flower.common.ui.ajax.markup.html.AjaxLinkWithConfirmation;
import de.flower.common.ui.panel.BasePanel;
import de.flower.common.ui.tooltips.TooltipBehavior;
import de.flower.rmt.model.db.entity.event.Event;
import de.flower.rmt.model.db.type.EventType;
import de.flower.rmt.service.IEventManager;
import de.flower.rmt.ui.model.EventModel;
import de.flower.rmt.ui.page.event.manager.EventPage;
import de.flower.rmt.ui.page.event.manager.EventTabPanel;
import de.flower.rmt.ui.page.events.EventDataProvider;
import de.flower.rmt.ui.panel.DropDownMenuPanel;
import de.flower.rmt.util.Dates;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.spring.injection.annot.SpringBean;
/**
* @author flowerrrr
*/
public class EventListPanel extends BasePanel {
public static final int ITEMS_PER_PAGE = 10;
@SpringBean
private IEventManager eventManager;
public EventListPanel() {
final EventDataProvider dataProvider = new EventDataProvider(ITEMS_PER_PAGE);
final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
add(listContainer);
final DataView<Event> dataView = new DataView<Event>("list", dataProvider) {
@Override
public boolean isVisible() {
return getItemCount() > 0;
}
@Override
protected void populateItem(final Item<Event> item) {
final Event event = item.getModelObject();
if (dataProvider.isNextEvent(event)) {
item.add(AttributeModifier.append("class", "next-event"));
}
if (event.isCanceled()) {
item.add(AttributeModifier.append("class", "canceled-event"));
}
Link link = createInvitationsLink("invitationsLink", item.getModel());
link.add(new Label("date", Dates.formatDateShortWithWeekday(event.getDateTimeAsDate())));
link.add(new Label("time", Dates.formatTimeShort(event.getDateTimeAsDate())));
item.add(link);
item.add(new Label("type", new ResourceModel(EventType.from(event).getResourceKey())));
item.add(new Label("team", event.getTeam().getName()));
item.add(new Label("summary", event.getSummary()));
item.add(new InvitationSummaryPanel(new EventModel(event)));
item.add(createNotificationLink(item.getModel()));
// now the dropdown menu
DropDownMenuPanel menuPanel = new DropDownMenuPanel();
menuPanel.addLink(createInvitationsLink("link", item.getModel()), "button.invitations");
menuPanel.addLink(createEditLink("link", item.getModel()), "button.edit");
menuPanel.addLink(new AjaxLinkWithConfirmation("link", new ResourceModel("manager.events.delete.confirm")) {
@Override
public void onClick(AjaxRequestTarget target) {
eventManager.delete(item.getModelObject().getId());
AjaxEventSender.entityEvent(this, Event.class);
}
}, "button.delete");
item.add(menuPanel);
}
};
dataView.setItemsPerPage(ITEMS_PER_PAGE);
listContainer.add(dataView);
listContainer.add(new WebMarkupContainer("noEntry") {
@Override
public boolean isVisible() {
return dataView.getItemCount() == 0;
}
});
listContainer.add(new AjaxPagingNavigator("pager", dataView) {
@Override
protected void onAjaxEvent(AjaxRequestTarget target) {
target.add(listContainer);
}
});
listContainer.add(new AjaxEventListener(Event.class));
}
private Link createInvitationsLink(String id, final IModel<Event> model) {
return new BookmarkablePageLink(id, EventPage.class, EventPage.getPageParams(model.getObject().getId(), EventTabPanel.INVITATIONS_PANEL_INDEX));
}
private Link createEditLink(String id, final IModel<Event> model) {
return new BookmarkablePageLink(id, EventPage.class, EventPage.getPageParams(model.getObject().getId()));
}
private Link createNotificationLink(final IModel<Event> model) {
Link link = new BookmarkablePageLink("notificationLink", EventPage.class, EventPage.getPageParams(model.getObject().getId())) {
@Override
public boolean isVisible() {
return !model.getObject().isInvitationSent();
}
};
// RMT-426
link.add(new TooltipBehavior(new ResourceModel("alert.message.event.noinvitationsent")));
return link;
}
}