package fr.openwide.core.basicapp.web.application.common.template; import static fr.openwide.core.basicapp.web.application.property.BasicApplicationWebappPropertyIds.MAINTENANCE_URL; import static fr.openwide.core.jpa.more.property.JpaMorePropertyIds.MAINTENANCE; import org.apache.wicket.Component; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.head.CssHeaderItem; import org.apache.wicket.markup.head.IHeaderResponse; import org.apache.wicket.markup.html.TransparentWebMarkupContainer; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.model.IModel; import org.apache.wicket.model.ResourceModel; import org.apache.wicket.request.flow.RedirectToUrlException; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.spring.injection.annot.SpringBean; import fr.openwide.core.basicapp.web.application.BasicApplicationSession; import fr.openwide.core.basicapp.web.application.common.component.EnvironmentPanel; import fr.openwide.core.basicapp.web.application.common.template.styles.application_access.ApplicationAccessLessCssResourceReference; import fr.openwide.core.jpa.security.service.IAuthenticationService; import fr.openwide.core.spring.property.service.IPropertyService; import fr.openwide.core.wicket.markup.html.basic.CoreLabel; import fr.openwide.core.wicket.markup.html.panel.InvisiblePanel; import fr.openwide.core.wicket.more.markup.html.feedback.AnimatedGlobalFeedbackPanel; import fr.openwide.core.wicket.more.markup.html.template.AbstractWebPageTemplate; import fr.openwide.core.wicket.more.markup.html.template.model.BreadCrumbElement; public abstract class ApplicationAccessTemplate extends AbstractWebPageTemplate { private static final long serialVersionUID = 3342562716259012460L; @SpringBean private IPropertyService propertyService; @SpringBean private IAuthenticationService authenticationService; public ApplicationAccessTemplate(PageParameters parameters) { super(parameters); if (Boolean.TRUE.equals(propertyService.get(MAINTENANCE)) && !authenticationService.hasAdminRole() && hasMaintenanceRestriction()) { throw new RedirectToUrlException(propertyService.get(MAINTENANCE_URL)); } add(new EnvironmentPanel("environment")); add(new AnimatedGlobalFeedbackPanel("feedback")); add(new TransparentWebMarkupContainer("htmlRootElement") .add(AttributeAppender.append("lang", BasicApplicationSession.get().getLocale().getLanguage()))); addHeadPageTitlePrependedElement(new BreadCrumbElement(new ResourceModel("common.rootPageTitle"))); add(createHeadPageTitle("headPageTitle")); add(new CoreLabel("title", getTitleModel())); } @Override protected void onInitialize() { super.onInitialize(); add(getIntroComponent("intro")); add(getContentComponent("content")); add(getFooterComponent("footer")); } protected abstract IModel<String> getTitleModel(); protected Component getIntroComponent(String wicketId) { return new InvisiblePanel(wicketId); } protected abstract Component getContentComponent(String wicketId); protected Component getFooterComponent(String wicketId) { return new InvisiblePanel(wicketId); } protected boolean hasMaintenanceRestriction() { return true; } @Override public void renderHead(IHeaderResponse response) { super.renderHead(response); response.render(CssHeaderItem.forReference(ApplicationAccessLessCssResourceReference.get())); } @Override protected Class<? extends WebPage> getFirstMenuPage() { return null; } @Override protected Class<? extends WebPage> getSecondMenuPage() { return null; } }