com.senacor.wbs.web.WorkBreakdownStructureApplication.java Source code

Java tutorial

Introduction

Here is the source code for com.senacor.wbs.web.WorkBreakdownStructureApplication.java

Source

/**
 * 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 grundstzlich einschalten
        // getMarkupSettings().setAutomaticLinking(true);
        getApplicationSettings().setDefaultMaximumUploadSize(Bytes.megabytes(50));
        // Standard-Encoding fr 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
        // zustzlich 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 fr
        // Whrungsbetrge 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;
    }

    /**
     * fr UploadProgressBar muss UploadWebRequest verwendet werden
     */
    @Override
    protected WebRequest newWebRequest(final HttpServletRequest servletRequest) {
        return new UploadWebRequest(servletRequest);
    }

    public static WorkBreakdownStructureApplication get() {
        return (WorkBreakdownStructureApplication) Application.get();
    }
}