/** * Copyright 2009 Roland Foerther, Carl-Eric-Menzel, Olaf Siefart * * 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.senacor.wbs.web; import java.math.BigDecimal; import javax.servlet.http.HttpServletRequest; import org.apache.wicket.Application; import org.apache.wicket.IConverterLocator; import org.apache.wicket.Request; import org.apache.wicket.Response; import org.apache.wicket.Session; import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadWebRequest; import org.apache.wicket.protocol.http.SecondLevelCacheSessionStore; import org.apache.wicket.protocol.http.WebRequest; import org.apache.wicket.protocol.http.WebRequestCycleProcessor; import org.apache.wicket.protocol.http.pagestore.DiskPageStore; import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy; import org.apache.wicket.request.IRequestCodingStrategy; import org.apache.wicket.request.IRequestCycleProcessor; import org.apache.wicket.security.hive.HiveMind; import org.apache.wicket.security.hive.authorization.permissions.ComponentPermission; import org.apache.wicket.security.hive.config.PolicyFileHiveFactory; import org.apache.wicket.security.swarm.SwarmWebApplication; import org.apache.wicket.security.swarm.actions.SwarmActionFactory; import org.apache.wicket.session.ISessionStore; import org.apache.wicket.session.pagemap.LeastRecentlyAccessedEvictionStrategy; import org.apache.wicket.spring.injection.annot.SpringComponentInjector; import org.apache.wicket.util.convert.ConverterLocator; import org.apache.wicket.util.lang.Bytes; import com.senacor.domain.project.ProjectState; import com.senacor.wbs.web.core.EnumConverter; import com.senacor.wbs.web.core.security.WBSSession; import com.senacor.wbs.web.gmap.GMapsPage; import com.senacor.wbs.web.jmx.JmxPage; import com.senacor.wbs.web.project.CurrencyConverter; import com.senacor.wbs.web.project.ProjectDetailsPage; import com.senacor.wbs.web.project.ProjectOverviewPage; import com.senacor.wbs.web.project.ProjectStatisticsPage; import com.senacor.wbs.web.user.AppSettingsPage; import com.senacor.wbs.web.user.CreateUserPage; import com.senacor.wbs.web.user.CreateUserPanelizedPage; import com.senacor.wbs.web.user.CreateUserSimplePage; import com.senacor.wbs.web.user.EditPasswordPage; import com.senacor.wbs.web.user.EditUserPage; import com.senacor.wbs.web.user.ListRolesPage; import com.senacor.wbs.web.user.UserAdminPage; public class WorkBreakdownStructureApplication extends SwarmWebApplication { private final boolean spring; private boolean statsPublic = true; public boolean isStatsPublic() { return statsPublic; } public void setStatsPublic(final boolean publicStats) { this.statsPublic = publicStats; } public WorkBreakdownStructureApplication() { this(true); } public WorkBreakdownStructureApplication(final boolean spring) { this.spring = spring; } @Override protected void init() { super.init(); if (spring) { // THIS LINE IS IMPORTANT - IT INSTALLS THE COMPONENT // INJECTOR THAT WILL // INJECT NEWLY CREATED COMPONENTS WITH THEIR SPRING // DEPENDENCIES addComponentInstantiationListener(new SpringComponentInjector(this)); } // Autolink-Verhalten grundsätzlich einschalten // getMarkupSettings().setAutomaticLinking(true); getApplicationSettings().setDefaultMaximumUploadSize(Bytes.megabytes(50)); // Standard-Encoding für Markup-Files getMarkupSettings().setDefaultMarkupEncoding("utf-8"); // Setzt im Response-Header Character encoding // d h.: Content-Type text/html;charset=<encoding> getRequestCycleSettings().setResponseRequestEncoding("utf-8"); // getMarkupSettings().setStripWicketTags(true); // maximal 3 PageMaps verwalten (default 5) // eine PageMap pro Browserfenster getSessionSettings().setMaxPageMaps(3); getSessionSettings().setPageMapEvictionStrategy(new LeastRecentlyAccessedEvictionStrategy(3)); getDebugSettings().setOutputMarkupContainerClassName(true); getDebugSettings().setLinePreciseReportingOnAddComponentEnabled(true); getDebugSettings().setLinePreciseReportingOnNewComponentEnabled(true); mountBookmarkablePage("/start", StartPage.class); mountBookmarkablePage("/gmap", GMapsPage.class); // Damit werden Komponentenresourcen wie Templates, // css, images, etc // zusätzlich unter <web-content-root>/html gesucht getResourceSettings().addResourceFolder("/html"); } /** * @see org.apache.wicket.Application#newSessionStore() */ /* * protected ISessionStore newSessionStore() { return new * HttpSessionStore(this) { public IPageVersionManager * newVersionManager(Page page) { // maximal 5 Versionen einer Seite * verwalten (default // 20) return new UndoPageVersionManager(page, 2); } * }; } */ @Override protected ISessionStore newSessionStore() { return new SecondLevelCacheSessionStore(this, new DiskPageStore((int) Bytes.megabytes(20).bytes(), (int) Bytes.megabytes(500).bytes(), 50)); } @Override protected IRequestCycleProcessor newRequestCycleProcessor() { return new WebRequestCycleProcessor() { @Override protected IRequestCodingStrategy newRequestCodingStrategy() { return new WebRequestCodingStrategy(); // return new CryptedUrlWebRequestCodingStrategy(new // WebRequestCodingStrategy()); } }; } @Override protected IConverterLocator newConverterLocator() { ConverterLocator converterLocator = new ConverterLocator(); converterLocator.set(ProjectState.class, new EnumConverter(ProjectState.class)); // BigDecimal's werden in erster Linie für // Währungsbeträge verwendet. converterLocator.set(BigDecimal.class, new CurrencyConverter()); return converterLocator; } @Override public Class getHomePage() { return StartPage.class; } @Override public Session newSession(final Request request, final Response response) { return new WBSSession(this, request); } /** * @see org.apache.wicket.Application#newSessionStore() */ /* * protected ISessionStore newSessionStore() { return new * SecondLevelCacheSessionStore(this, new SimpleSynchronousFilePageStore()); * } */ @Override protected Object getHiveKey() { return getServletContext().getContextPath(); } @Override protected void setUpHive() { // create factory PolicyFileHiveFactory factory = new PolicyFileHiveFactory(new SwarmActionFactory(getHiveKey())); // this example uses 1 policy file but you can add // as many as you // like factory.addPolicyFile(getClass().getResource("/permissions.hive")); // Pages factory.setAlias("ComponentPermission", ComponentPermission.class.getName()); factory.setAlias("home", StartPage.class.getName()); factory.setAlias("project", ProjectOverviewPage.class.getName()); factory.setAlias("stats", ProjectStatisticsPage.class.getName()); factory.setAlias("tasks", ProjectDetailsPage.class.getName()); factory.setAlias("user", UserAdminPage.class.getName()); factory.setAlias("useredit", EditUserPage.class.getName()); factory.setAlias("createUser", CreateUserPage.class.getName()); factory.setAlias("createUser1", CreateUserSimplePage.class.getName()); factory.setAlias("createUser2", CreateUserPanelizedPage.class.getName()); factory.setAlias("createUser3", EditPasswordPage.class.getName()); factory.setAlias("listRoles", ListRolesPage.class.getName()); factory.setAlias("map", GMapsPage.class.getName()); factory.setAlias("jmx", JmxPage.class.getName()); factory.setAlias("settings", AppSettingsPage.class.getName()); // register factory HiveMind.registerHive(getHiveKey(), factory); } public Class getLoginPage() { return StartPage.class; } /** * für UploadProgressBar muss UploadWebRequest verwendet werden */ @Override protected WebRequest newWebRequest(final HttpServletRequest servletRequest) { return new UploadWebRequest(servletRequest); } public static WorkBreakdownStructureApplication get() { return (WorkBreakdownStructureApplication) Application.get(); } }