package de.flower.rmt.ui.page.base; import de.flower.common.ui.alert.AlertMessageFeedbackPanel; import de.flower.common.ui.markup.html.panel.WrappingPanel; import de.flower.common.ui.panel.BasePanel; import de.flower.rmt.security.ISecurityService; import de.flower.rmt.ui.app.IPropertyProvider; import de.flower.rmt.ui.app.Links; import de.flower.rmt.ui.page.about.AboutPage; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; 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.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; /** * This class only defines layout but not content. * Content is provided by subclasses. * * @author flowerrrr */ public abstract class AbstractBaseLayoutPage extends AbstractBasePage { @SpringBean private IPropertyProvider propertyProvider; @SpringBean private ISecurityService securityService; private Panel secondaryPanel; private Label heading; private Label subheading; private WebMarkupContainer container; public AbstractBaseLayoutPage() { this(null); } public AbstractBaseLayoutPage(final IModel<?> model) { super(model); container = new WebMarkupContainer("container"); add(container); container.add(AttributeModifier.append("class", BasePanel.getCssClass(getClass()))); container.add(new AlertMessageFeedbackPanel("alertMessagesPanel") { @Override public boolean isVisible() { return showAlertMessages(); } }); container.add(heading = new Label("heading", Model.of(getClass().getSimpleName()))); container.add(subheading = new Label("subheading", Model.of(""))); add(new BookmarkablePageLink("aboutLink", AboutPage.class)); add(Links.mailLink("adminLink", propertyProvider.getAdminEmail(), false)); } /** * In case no secondary panel was added use default panel. */ @Override protected void onInitialize() { super.onInitialize(); if (secondaryPanel == null) { addSecondaryPanel(new DefaultSecondaryPanel()); } } @Override protected void onBeforeRender() { super.onBeforeRender(); // makes messages back-button and reload-save if (showAlertMessages()) { info(new MessageOfTheDayMessage()); if (securityService.isCurrentUserLoggedIn() && securityService.getUser().hasInitialPassword()) { info(new PasswordChangeRequiredMessage()); } } } protected void setHeading(String headingResourceKey) { setHeading(headingResourceKey, headingResourceKey + ".sub"); } protected void setHeading(String headingResourceKey, final String subHeadingResourceKey) { heading.setDefaultModel(new ResourceModel(headingResourceKey)); if (subHeadingResourceKey != null) { subheading.setDefaultModel(new ResourceModel(subHeadingResourceKey)); } } protected void setHeadingModel(IModel<String> headingModel, IModel<String> subHeadingModel) { heading.setDefaultModel(headingModel); subheading.setDefaultModel(subHeadingModel); } protected void setHeadingText(String text) { heading.setDefaultModel(Model.of(text)); } protected void setSubheadingText(String text) { subheading.setDefaultModel(Model.of(text)); } protected void addMainPanel(Component... components) { container.add(new WrappingPanel("mainPanel", components)); } protected void addSecondaryPanel(Component... components) { getSecondaryPanel().add(components); } public Panel getSecondaryPanel() { if (secondaryPanel == null) { secondaryPanel = new WrappingPanel("secondaryPanel"); container.add(secondaryPanel); } return secondaryPanel; } /** * Allow subclasses to disable alert messages (e.g. Error pages). * * @return */ protected boolean showAlertMessages() { return true; } }