package fr.openwide.core.basicapp.web.application; import java.util.Locale; import org.apache.wicket.Application; import org.apache.wicket.ConverterLocator; import org.apache.wicket.IConverterLocator; import org.apache.wicket.Page; import org.apache.wicket.WicketRuntimeException; import org.apache.wicket.authroles.authentication.AuthenticatedWebSession; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.resource.loader.ClassStringResourceLoader; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.collect.ImmutableList; import fr.openwide.core.basicapp.core.business.common.model.PostalCode; import fr.openwide.core.basicapp.core.business.history.model.atomic.HistoryEventType; import fr.openwide.core.basicapp.core.business.user.model.BasicUser; import fr.openwide.core.basicapp.core.business.user.model.TechnicalUser; import fr.openwide.core.basicapp.core.business.user.model.User; import fr.openwide.core.basicapp.core.business.user.model.UserGroup; import fr.openwide.core.basicapp.web.application.administration.page.AdministrationBasicUserDescriptionPage; import fr.openwide.core.basicapp.web.application.administration.page.AdministrationBasicUserPortfolioPage; import fr.openwide.core.basicapp.web.application.administration.page.AdministrationTechnicalUserDescriptionPage; import fr.openwide.core.basicapp.web.application.administration.page.AdministrationTechnicalUserPortfolioPage; import fr.openwide.core.basicapp.web.application.administration.page.AdministrationUserGroupDescriptionPage; import fr.openwide.core.basicapp.web.application.administration.page.AdministrationUserGroupPortfolioPage; import fr.openwide.core.basicapp.web.application.common.converter.PostalCodeConverter; import fr.openwide.core.basicapp.web.application.common.renderer.AuthorityRenderer; import fr.openwide.core.basicapp.web.application.common.renderer.UserGroupRenderer; import fr.openwide.core.basicapp.web.application.common.renderer.UserRenderer; import fr.openwide.core.basicapp.web.application.common.template.MainTemplate; import fr.openwide.core.basicapp.web.application.common.template.styles.StylesLessCssResourceReference; import fr.openwide.core.basicapp.web.application.common.template.styles.application_access.ApplicationAccessLessCssResourceReference; import fr.openwide.core.basicapp.web.application.common.template.styles.notification.NotificationLessCssResourceReference; import fr.openwide.core.basicapp.web.application.console.notification.demo.page.ConsoleNotificationDemoIndexPage; import fr.openwide.core.basicapp.web.application.history.renderer.HistoryValueRenderer; import fr.openwide.core.basicapp.web.application.navigation.page.HomePage; import fr.openwide.core.basicapp.web.application.navigation.page.MaintenancePage; import fr.openwide.core.basicapp.web.application.profile.page.ProfilePage; import fr.openwide.core.basicapp.web.application.referencedata.page.ReferenceDataPage; import fr.openwide.core.basicapp.web.application.resources.application.BasicApplicationApplicationResources; import fr.openwide.core.basicapp.web.application.resources.business.BasicApplicationBusinessResources; import fr.openwide.core.basicapp.web.application.resources.common.BasicApplicationCommonResources; import fr.openwide.core.basicapp.web.application.resources.console.BasicApplicationConsoleResources; import fr.openwide.core.basicapp.web.application.resources.enums.BasicApplicationEnumResources; import fr.openwide.core.basicapp.web.application.resources.navigation.BasicApplicationNavigationResources; import fr.openwide.core.basicapp.web.application.resources.notifications.BasicApplicationNotificationResources; import fr.openwide.core.basicapp.web.application.security.login.page.SignInPage; import fr.openwide.core.basicapp.web.application.security.password.page.SecurityPasswordCreationPage; import fr.openwide.core.basicapp.web.application.security.password.page.SecurityPasswordExpirationPage; import fr.openwide.core.basicapp.web.application.security.password.page.SecurityPasswordRecoveryPage; import fr.openwide.core.basicapp.web.application.security.password.page.SecurityPasswordResetPage; import fr.openwide.core.jpa.more.business.history.model.embeddable.HistoryValue; import fr.openwide.core.jpa.security.business.authority.model.Authority; import fr.openwide.core.spring.property.service.IPropertyService; import fr.openwide.core.wicket.more.application.CoreWicketAuthenticatedApplication; import fr.openwide.core.wicket.more.console.common.model.ConsoleMenuSection; import fr.openwide.core.wicket.more.console.navigation.page.ConsoleAccessDeniedPage; import fr.openwide.core.wicket.more.console.navigation.page.ConsoleLoginFailurePage; import fr.openwide.core.wicket.more.console.navigation.page.ConsoleLoginSuccessPage; import fr.openwide.core.wicket.more.console.navigation.page.ConsoleSignInPage; import fr.openwide.core.wicket.more.console.template.ConsoleConfiguration; import fr.openwide.core.wicket.more.console.template.style.ConsoleLessCssResourceReference; import fr.openwide.core.wicket.more.link.descriptor.parameter.CommonParameters; import fr.openwide.core.wicket.more.markup.html.pages.monitoring.DatabaseMonitoringPage; import fr.openwide.core.wicket.more.rendering.BooleanRenderer; import fr.openwide.core.wicket.more.rendering.EnumRenderer; import fr.openwide.core.wicket.more.rendering.LocaleRenderer; import fr.openwide.core.wicket.more.security.page.LoginFailurePage; import fr.openwide.core.wicket.more.security.page.LoginSuccessPage; import fr.openwide.core.wicket.more.util.convert.HibernateProxyAwareConverterLocator; public class BasicApplicationApplication extends CoreWicketAuthenticatedApplication { public static final String NAME = "BasicApplicationApplication"; @Autowired private IPropertyService propertyService; public static BasicApplicationApplication get() { final Application application = Application.get(); if (application instanceof BasicApplicationApplication) { return (BasicApplicationApplication) application; } throw new WicketRuntimeException("There is no BasicApplicationApplication attached to current thread " + Thread.currentThread().getName()); } @Override public void init() { super.init(); // si on n'est pas en développement, on précharge les feuilles de styles pour éviter la ruée et permettre le remplissage du cache if (!propertyService.isConfigurationTypeDevelopment()) { preloadStyleSheets( ConsoleLessCssResourceReference.get(), NotificationLessCssResourceReference.get(), ApplicationAccessLessCssResourceReference.get(), StylesLessCssResourceReference.get() ); } getResourceSettings().getStringResourceLoaders().addAll( 0, // Override the keys in existing resource loaders with the following ImmutableList.of( new ClassStringResourceLoader(BasicApplicationApplicationResources.class), new ClassStringResourceLoader(BasicApplicationBusinessResources.class), new ClassStringResourceLoader(BasicApplicationCommonResources.class), new ClassStringResourceLoader(BasicApplicationConsoleResources.class), new ClassStringResourceLoader(BasicApplicationEnumResources.class), new ClassStringResourceLoader(BasicApplicationNavigationResources.class), new ClassStringResourceLoader(BasicApplicationNotificationResources.class) ) ); } @Override protected IConverterLocator newConverterLocator() { ConverterLocator converterLocator = new ConverterLocator(); converterLocator.set(Authority.class, AuthorityRenderer.get()); converterLocator.set(User.class, UserRenderer.get()); converterLocator.set(TechnicalUser.class, UserRenderer.get()); converterLocator.set(BasicUser.class, UserRenderer.get()); converterLocator.set(UserGroup.class, UserGroupRenderer.get()); converterLocator.set(Locale.class, LocaleRenderer.get()); converterLocator.set(Boolean.class, BooleanRenderer.withPrefix("common.boolean.yesNo")); converterLocator.set(HistoryValue.class, HistoryValueRenderer.get()); converterLocator.set(HistoryEventType.class, EnumRenderer.get()); converterLocator.set(PostalCode.class, PostalCodeConverter.get()); return new HibernateProxyAwareConverterLocator(converterLocator); } @Override protected void mountApplicationPages() { // Sign in mountPage("/login/", getSignInPageClass()); mountPage("/login/failure/", LoginFailurePage.class); mountPage("/login/success/", LoginSuccessPage.class); mountPage("/security/password/recovery/", SecurityPasswordRecoveryPage.class); mountPage("/security/password/expiration/", SecurityPasswordExpirationPage.class); mountParameterizedPage("/security/password/reset/", SecurityPasswordResetPage.class); mountParameterizedPage("/security/password/creation/", SecurityPasswordCreationPage.class); // Console sign in mountPage("/console/login/", ConsoleSignInPage.class); mountPage("/console/login/failure/", ConsoleLoginFailurePage.class); mountPage("/console/login/success/", ConsoleLoginSuccessPage.class); mountPage("/console/access-denied/", ConsoleAccessDeniedPage.class); // Profile mountPage("/profile/", ProfilePage.class); // Maintenance mountPage("/maintenance/", MaintenancePage.class); // Administration mountPage("/administration/basic-user/", AdministrationBasicUserPortfolioPage.class); mountParameterizedPage("/administration/basic-user/${" + CommonParameters.ID + "}/", AdministrationBasicUserDescriptionPage.class); mountPage("/administration/technical-user/", AdministrationTechnicalUserPortfolioPage.class); mountParameterizedPage("/administration/technical-user/${" + CommonParameters.ID + "}/", AdministrationTechnicalUserDescriptionPage.class); mountPage("/administration/user-group/", AdministrationUserGroupPortfolioPage.class); mountParameterizedPage("/administration/user-group/${" + CommonParameters.ID + "}/", AdministrationUserGroupDescriptionPage.class); // Reference data mountPage("/reference-data/", ReferenceDataPage.class); // Console ConsoleConfiguration consoleConfiguration = ConsoleConfiguration.build("console"); consoleConfiguration.mountPages(this); ConsoleMenuSection notificationMenuSection = new ConsoleMenuSection("notificationsMenuSection", "console.notifications", "notifications", ConsoleNotificationDemoIndexPage.class); consoleConfiguration.addMenuSection(notificationMenuSection); mountPage("/console/notifications/", ConsoleNotificationDemoIndexPage.class); // Monitoring mountPage("/monitoring/db-access/", DatabaseMonitoringPage.class); } @Override protected void mountApplicationResources() { mountStaticResourceDirectory("/application", MainTemplate.class); } @Override protected Class<? extends AuthenticatedWebSession> getWebSessionClass() { return BasicApplicationSession.class; } @Override public Class<? extends Page> getHomePage() { return HomePage.class; } @Override public Class<? extends WebPage> getSignInPageClass() { return SignInPage.class; } }