/** * Copyright (C) 2015 Orange * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.francetelecom.clara.cloud.presentation; import java.util.Locale; import org.apache.wicket.Page; import org.apache.wicket.RuntimeConfigurationType; import org.apache.wicket.Session; import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession; import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication; import org.apache.wicket.bean.validation.BeanValidationConfiguration; import org.apache.wicket.core.request.mapper.CryptoMapper; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.request.IRequestMapper; import org.apache.wicket.request.Request; import org.apache.wicket.request.Response; import org.apache.wicket.settings.IApplicationSettings; import org.apache.wicket.settings.IRequestCycleSettings; import org.apache.wicket.spring.injection.annot.SpringBean; import org.apache.wicket.spring.injection.annot.SpringComponentInjector; import org.slf4j.LoggerFactory; import org.wicketstuff.annotation.scan.AnnotatedMountScanner; import com.francetelecom.clara.cloud.presentation.tools.ServerPageMetaFilter; import com.francetelecom.clara.cloud.presentation.tools.WicketSession; import com.francetelecom.clara.cloud.scalability.ManageStatistics; import de.agilecoders.wicket.webjars.WicketWebjars; /** * ACP wicket application configure general application settings and define * application session */ public class WicketApplication extends AuthenticatedWebApplication { // implements IWiQuerySettings { /** * logger */ private static final transient org.slf4j.Logger logger = LoggerFactory.getLogger(WicketApplication.class); public WicketApplication() { } @SpringBean ManageStatistics manageStatistics; // @SpringBean(name = "wicketUrlEncryptor") // StandardPBEByteEncryptor urlEncryptor; public ManageStatistics getManageStatistics() { return manageStatistics; } @SuppressWarnings({"UnusedDeclaration"}) // used by spring public void setManageStatistics(ManageStatistics ms) { this.manageStatistics = ms; } /** * The application web session * * @see com.francetelecom.clara.cloud.presentation.tools.WicketSession */ @Override protected Class<? extends AbstractAuthenticatedWebSession> getWebSessionClass() { return WicketSession.class; } /** * The application login page * * Redirect to HomePage and with Spring Security redirect to login.html */ @Override protected Class<? extends WebPage> getSignInPageClass() { return HomePage.class; } /** * The application home page * * @see com.francetelecom.clara.cloud.presentation.HomePage */ @Override public Class<? extends Page> getHomePage() { // return // com.francetelecom.clara.cloud.presentation.page.HomePage.class; return HomePage.class; } /** * Action at the session start : * * Add the User provided by GASSI in the application session * * Add the corresponding PaaS user into session * * Add demo data */ @Override public Session newSession(Request request, Response response) { if (logger.isDebugEnabled()) { logger.debug("Created a new AcpSession"); } WicketSession session = new WicketSession(request); // english is default language session.setLocale(Locale.US); return session; } /** * Define application settings */ @Override protected void init() { if (logger.isDebugEnabled()) { logger.debug("Wicket application init (configurationType:[{}])", getConfigurationType()); } defineSpringInjector(); if (!RuntimeConfigurationType.DEVELOPMENT.equals(getConfigurationType())) { // change default error/timeout pages in production mode //defineErrorPage(); // remove "wicket:id" from html generated code in production mode getMarkupSettings().setStripWicketTags(true); } else { setupDevelopmentSettings(); } //TODO Remove // getDebugSettings().setAjaxDebugModeEnabled(true); IApplicationSettings settings = getApplicationSettings(); // https://cwiki.apache.org/WICKET/error-pages-and-feedback-messages.html settings.setInternalErrorPage(UnknownExceptionPage.class); // settings.setAccessDeniedPage(); // settings.setPageExpiredErrorPage(); getRequestCycleListeners().add(new ExecutionHandlerRequestCycle(this, new WebPageBaseFactory())); //TODO : Not available in Wicket 1.5 because it's enabled by default. Why was it disabled? // getPageSettings().setAutomaticMultiWindowSupport(false); //will encrypt/decrypt the URLs generated by the inner one IRequestMapper cryptoMapper = new CryptoMapper(getRootRequestMapper(), this); setRootRequestMapper(cryptoMapper); // ICryptFactory jasyptCryptFactory = new JasyptCryptFactory(urlEncryptor); // getSecuritySettings().setCryptFactory(jasyptCryptFactory); mountBookmarks(); // https://cwiki.apache.org/WICKET/request-mapping.html // https://issues.apache.org/jira/browse/WICKET-4488 // URL with a previous page version ignores requested page based on mount path // http://apache-wicket.1842946.n4.nabble.com/I-don-t-want-url-page-count-parameter-localhost-8080-context-0-td4481510i40.html super.init(); WicketWebjars.install(this); new BeanValidationConfiguration().configure(this); // For VMWare SDK logging (vCloud API) // call only once during initialization time of your application // Do not work (NPE on undeploy) // SLF4JBridgeHandler.install(); } /** * init the dev mode * @see org.apache.wicket.response.filter.IResponseFilter */ protected void setupDevelopmentSettings() { IRequestCycleSettings reqSettings = getRequestCycleSettings(); reqSettings.setBufferResponse(true); // reqSettings.addResponseFilter(new ServerTimeFilter()); reqSettings.addResponseFilter(new ServerPageMetaFilter()); } /** * init the permalinks * cf. mingle#1120 */ protected void mountBookmarks() { new AnnotatedMountScanner().scanPackage("com.francetelecom.clara.cloud.presentation").mount(this); } protected void defineSpringInjector() { // SpringComponentInjector uses Spring's WebApplicationContextUtils // class to retrieve // Spring context (loaded from web.xml file). getComponentInstantiationListeners().add(new SpringComponentInjector(this)); } }