org.xaloon.wicket.component.application.AbstractWebApplication.java Source code

Java tutorial

Introduction

Here is the source code for org.xaloon.wicket.component.application.AbstractWebApplication.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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 org.xaloon.wicket.component.application;

import javax.servlet.http.HttpServletResponse;

import org.apache.wicket.Page;
import org.apache.wicket.RequestCycle;
import org.apache.wicket.protocol.http.BufferedWebResponse;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.WebRequest;
import org.apache.wicket.protocol.http.WebResponse;
import org.apache.wicket.spring.injection.annot.SpringComponentInjector;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.xaloon.wicket.component.mounting.PageAnnotationScannerContainer;
import org.xaloon.wicket.component.plugin.MenuPluginObserver;
import org.xaloon.wicket.component.plugin.PluginManager;

/**
 * http://www.xaloon.org
 * 
 * @author vytautas racelis
 */
public abstract class AbstractWebApplication extends WebApplication {
    private static WebApplicationContext context;

    private static final String[] BOT_AGENTS = { "googlebot", "msnbot", "slurp", "jeeves", "appie", "architext",
            "jeeves", "bjaaland", "ferret", "gulliver", "harvest", "htdig", "linkwalker", "lycos_", "moget",
            "muscatferret", "myweb", "nomad", "scooter", "yahoo!\\sslurp\\schina", "slurp", "weblayers", "antibot",
            "bruinbot", "digout4u", "echo!", "ia_archiver", "jennybot", "mercator", "netcraft", "msnbot",
            "petersnews", "unlost_web_crawler", "voila", "webbase", "webcollage", "cfetch", "zyborg", "wisenutbot",
            "robot", "crawl", "spider" };

    @Autowired
    private PluginManager pluginManager;

    @Autowired
    private PageAnnotationScannerContainer annotationScannerContainer;

    @Override
    protected void init() {
        super.init();
        getResourceSettings().setThrowExceptionOnMissingResource(false);

        getMarkupSettings().setCompressWhitespace(true);
        getMarkupSettings().setStripComments(true);
        getMarkupSettings().setStripWicketTags(true);
        getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
        getRequestCycleSettings().setResponseRequestEncoding("UTF-8");
        addComponentInstantiationListener(new SpringComponentInjector(this));

        context = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
        pluginManager.init(context);

        annotationScannerContainer.addObserver(new MenuPluginObserver(pluginManager));
        annotationScannerContainer.scan(this, context);
    }

    public static WebApplicationContext getWebApplicationContext() {
        return context;
    }

    public static boolean isAgent(final String agent) {
        if (agent != null) {
            final String lowerAgent = agent.toLowerCase();
            for (final String bot : BOT_AGENTS) {
                if (lowerAgent.indexOf(bot) != -1) {
                    return true;
                }
            }
        }
        return false;
    }

    @Override
    protected WebResponse newWebResponse(HttpServletResponse servletResponse) {
        return new BufferedWebResponse(servletResponse) {
            @Override
            public CharSequence encodeURL(final CharSequence url) {
                final String agent = ((WebRequest) RequestCycle.get().getRequest()).getHttpServletRequest()
                        .getHeader("User-Agent");
                return isAgent(agent) ? url : super.encodeURL(url);
            }
        };
    }

    public static AbstractWebApplication get() {
        return (AbstractWebApplication) WebApplication.get();
    }

    public Class<? extends Page> getLayoutPageClass() {
        return null;
    }
}