package de.flower.rmt.ui.page.event; import de.flower.common.ui.markup.html.basic.FallbackLabel; import de.flower.common.ui.model.AbstractChainingModel; import de.flower.common.ui.util.convert.AbstractConverter; import de.flower.rmt.model.db.entity.Uniform; import de.flower.rmt.model.db.entity.Venue; import de.flower.rmt.model.db.entity.event.Event; import de.flower.rmt.model.db.type.EventType; import de.flower.rmt.model.db.type.Surface; import de.flower.rmt.ui.markup.html.form.renderer.SurfaceRenderer; import de.flower.rmt.ui.model.ModelFactory; import de.flower.rmt.ui.model.VenueModel; import de.flower.rmt.ui.page.venues.manager.VenueEditPage; import de.flower.rmt.ui.page.venues.player.VenuePage; import de.flower.rmt.ui.panel.RMTBasePanel; import de.flower.rmt.util.Dates; import org.apache.commons.lang3.StringUtils; import org.apache.wicket.datetime.markup.html.basic.DateLabel; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.basic.MultiLineLabel; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.CompoundPropertyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.util.convert.IConverter; import java.util.Date; import java.util.List; import java.util.Locale; /** * @author flowerrrr */ public class EventDetailsPanel extends RMTBasePanel<Event> { public EventDetailsPanel(final IModel<? extends Event> model) { super(new CompoundPropertyModel<Event>(ModelFactory.eventModelWithAllAssociations(model.getObject()))); add(new Label("team.name")); add(DateLabel.forDatePattern("date", new PropertyModel<Date>(getModel(), "dateTimeAsDate"), Dates.DATE_MEDIUM_WITH_WEEKDAY)); add(DateLabel.forDatePattern("time", new PropertyModel<Date>(getModel(), "dateTimeAsDate"), Dates.TIME_SHORT)); add(new WebMarkupContainer("kickoffContainer") { { add(DateLabel.forDatePattern("kickoffAsDate", Dates.TIME_SHORT)); } @Override public boolean isVisible() { return EventType.isSoccerEvent(model.getObject()); } }); add(new Label("type", new AbstractReadOnlyModel<String>() { @Override public String getObject() { return new ResourceModel(EventType.from(model.getObject()).getResourceKey()).getObject(); } })); add(new FallbackLabel("opponent.name", new ResourceModel("opponent.nullValid")) { @Override public boolean isVisible() { return EventType.isMatch(model.getObject()); } }.setEscapeModelStrings(false)); Link link = new Link<Venue>("venue") { @Override public void onClick() { IModel<Venue> model = new VenueModel(getModel()); WebPage page = isManagerView() ? new VenueEditPage(model) : new VenuePage(model); setResponsePage(page); } @Override public boolean isEnabled() { return getModel().getObject() != null; } }; link.setBeforeDisabledLink(""); link.add(new FallbackLabel("venue.name", new ResourceModel("venue.nullValid")).setEscapeModelStrings(false)); add(link); add(new UniformLabel("uniform") { @Override public boolean isVisible() { return EventType.isSoccerEvent(model.getObject()); } }.setEscapeModelStrings(false)); add(new SurfaceListLabel("surfaceList") { @Override public boolean isVisible() { return EventType.isSoccerEvent(model.getObject()); } }); add(new Label("summary")); add(new MultiLineLabel("comment") { @Override public boolean isVisible() { return StringUtils.isNotBlank(getDefaultModelObjectAsString()); } }); } public static class UniformLabel extends Label { public UniformLabel(final String id) { super(id); } @Override protected void onInitialize() { super.onInitialize(); setDefaultModel(new AbstractChainingModel<String, Uniform>((IModel<Uniform>) getDefaultModel()) { @Override public String getObject() { if (getChainedModel().getObject() == null) { return new ResourceModel("uniform.nullValid").getObject(); } else { Uniform u = getChainedModel().getObject(); final Object[] params = new Object[]{u.getShirt(), u.getShorts(), u.getSocks()}; return new StringResourceModel("uniform.set", null, params).getObject(); } } @Override public void setObject(final String object) { throw new UnsupportedOperationException("Feature not implemented!"); } }); } } public static class SurfaceListLabel extends Label { public SurfaceListLabel(final String id) { super(id); } @Override public <C> IConverter<C> getConverter(final Class<C> type) { return (IConverter<C>) new AbstractConverter<List<Surface>>() { @Override public String convertToString(final List<Surface> value, final Locale locale) { return new SurfaceRenderer().renderList(value); } }; } } }