Package com.ponysdk.core.main

Source Code of com.ponysdk.core.main.Main

/*
* Copyright (c) 2011 PonySDK
*  Owners:
*  Luciano Broussal  <luciano.broussal AT gmail.com>
*  Mathieu Barbier   <mathieu.barbier AT gmail.com>
*  Nicolas Ciaravola <nicolas.ciaravola.pro AT gmail.com>
*  WebSite:
*  http://code.google.com/p/pony-sdk/
*
* 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.ponysdk.core.main;

import java.io.IOException;
import java.util.EnumSet;

import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.Servlet;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionListener;

import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.FilterHolder;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.servlets.GzipFilter;
import org.eclipse.jetty.webapp.WebAppClassLoader;
import org.eclipse.jetty.webapp.WebAppContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.ponysdk.core.servlet.BootstrapServlet;
import com.ponysdk.core.servlet.ServletContextFilter;
import com.ponysdk.core.servlet.StreamServiceServlet;
import com.ponysdk.core.servlet.WebSocketServlet;
import com.ponysdk.spring.service.SpringApplicationLoader;
import com.ponysdk.spring.servlet.SpringHttpServlet;

public class Main {

    public static final String MAPPING_TERMINAL = "/p";
    public static final String MAPPING_BOOTSTRAP = "/*";
    public static final String MAPPING_WS = "/ws/*";
    public static final String MAPPING_STREAM = "/stream";

    protected static final Logger log = LoggerFactory.getLogger(Main.class);

    private Server webServer;

    private Integer port;
    private int sessionTimeout = 60;
    private String war;
    private String applicationContextName;
    private String applicationID;
    private String applicationName;
    private String applicationDescription;

    private Servlet httpServlet;
    private Servlet bootstrapServlet;
    private ServletContextListener servletContextListener;
    private HttpSessionListener httpSessionListener;
    private Filter servletConextFilter;
    private Handler handler;

    public static void main(final String[] args) throws Exception {
        final Main main = new Main();

        for (final String arg : args) {
            final String[] parameter = arg.split("=");

            if (parameter[0].equals("contextName")) {
                main.setApplicationContextName(parameter[1]);
            } else if (parameter[0].equals("port")) {
                main.setPort(Integer.valueOf(parameter[1]));
            } else if (parameter[0].equals("war")) {
                main.setWar(parameter[1]);
            } else if (parameter[0].equals("applicationName")) {
                main.setApplicationName(parameter[1]);
            } else if (parameter[0].equals("applicationID")) {
                main.setApplicationID(parameter[1]);
            } else if (parameter[0].equals("applicationDescription")) {
                main.setApplicationDescription(parameter[1]);
            }
        }

        main.start();
    }

    public Main() throws IOException {}

    public void start() throws Exception {
        if (war == null || war.isEmpty()) {
            handler = newServletContext();
        } else {
            handler = loadWar();
        }

        if (port != null) {
            webServer = new Server(port);
        } else {
            webServer = new Server();
        }
        webServer.setHandler(handler);
        webServer.start();
    }

    protected ServletContextHandler newServletContext() {

        // set default value
        if (httpServlet == null) httpServlet = new SpringHttpServlet();
        if (bootstrapServlet == null) bootstrapServlet = new BootstrapServlet();
        if (httpSessionListener == null && servletContextListener == null) {
            final SpringApplicationLoader applicationLoader = new SpringApplicationLoader();
            applicationLoader.setApplicationID(applicationID);
            applicationLoader.setApplicationName(applicationName);
            applicationLoader.setApplicationDescription(applicationDescription);
            httpSessionListener = applicationLoader;
            servletContextListener = applicationLoader;
        }

        if (servletConextFilter == null) servletConextFilter = new ServletContextFilter();

        final ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/" + applicationContextName);
        context.addServlet(new ServletHolder(new StreamServiceServlet()), MAPPING_STREAM);
        context.addServlet(new ServletHolder(new WebSocketServlet()), MAPPING_WS);
        context.addServlet(new ServletHolder(bootstrapServlet), MAPPING_BOOTSTRAP);
        context.addServlet(new ServletHolder(httpServlet), MAPPING_TERMINAL);

        context.getSessionHandler().getSessionManager().setMaxInactiveInterval(60 * sessionTimeout);

        context.addFilter(new FilterHolder(servletConextFilter), MAPPING_BOOTSTRAP, EnumSet.of(DispatcherType.REQUEST));

        final FilterHolder filterHolder = new FilterHolder(GzipFilter.class);
        context.addFilter(filterHolder, "/*", EnumSet.allOf(DispatcherType.class));

        context.addEventListener(servletContextListener);
        context.getSessionHandler().addEventListener(httpSessionListener);

        return context;
    }

    protected Handler loadWar() throws IOException {

        final WebAppContext webapp = new WebAppContext();
        if (applicationContextName != null) {
            webapp.setContextPath("/" + applicationContextName);
            webapp.setDescriptor(applicationContextName);
        } else {
            webapp.setContextPath("/");
        }

        webapp.setWar(war);
        webapp.setExtractWAR(true);
        webapp.setParentLoaderPriority(true);
        webapp.setClassLoader(new WebAppClassLoader(Main.class.getClassLoader(), webapp));

        return webapp;
    }

    public void setPort(final Integer port) {
        this.port = port;
    }

    public void setApplicationContextName(final String applicationContextName) {
        this.applicationContextName = applicationContextName;
    }

    public void setApplicationID(final String applicationID) {
        this.applicationID = applicationID;
    }

    public void setApplicationName(final String applicationName) {
        this.applicationName = applicationName;
    }

    public void setWar(final String war) {
        this.war = war;
    }

    public void setHttpServlet(final Servlet httpServlet) {
        this.httpServlet = httpServlet;
    }

    public void setServletContextListener(final ServletContextListener servletContextListener) {
        this.servletContextListener = servletContextListener;
    }

    public void setHttpSessionListener(final HttpSessionListener httpSessionListener) {
        this.httpSessionListener = httpSessionListener;
    }

    public void setBootstrapServlet(final Servlet bootstrapServlet) {
        this.bootstrapServlet = bootstrapServlet;
    }

    public void setServletConextFilter(final Filter servletConextFilter) {
        this.servletConextFilter = servletConextFilter;
    }

    public Handler getHandler() {
        return handler;
    }

    public void setSessionTimeout(final int sessionTimeout) {
        this.sessionTimeout = sessionTimeout;
    }

    private void setApplicationDescription(final String applicationDescription) {
        this.applicationDescription = applicationDescription;
    }

}
TOP

Related Classes of com.ponysdk.core.main.Main

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.