org.Cherry.Modules.Web.Engine.WebEngine.java Source code

Java tutorial

Introduction

Here is the source code for org.Cherry.Modules.Web.Engine.WebEngine.java

Source

/*******************************************************************************
 * Copyright (c) 2013-2014 Cherry Platform
 *
 * The contents of this file are subject to the terms of one of the following
 * open source licenses: Apache 2.0 or LGPL 3.0 or LGPL 2.1 or CDDL 1.0 or EPL
 * 1.0 (the "Licenses"). You can select the license that you prefer but you may
 * not use this file except in compliance with one of these Licenses.
 *
 * You can obtain a copy of the Apache 2.0 license at
 * http://www.opensource.org/licenses/apache-2.0
 *
 * You can obtain a copy of the LGPL 3.0 license at
 * http://www.opensource.org/licenses/lgpl-3.0
 *
 * You can obtain a copy of the LGPL 2.1 license at
 * http://www.opensource.org/licenses/lgpl-2.1
 *
 * You can obtain a copy of the CDDL 1.0 license at
 * http://www.opensource.org/licenses/cddl1
 *
 * You can obtain a copy of the EPL 1.0 license at
 * http://www.opensource.org/licenses/eclipse-1.0
 *
 * See the Licenses for the specific language governing permissions and
 * limitations under the Licenses.
 *
 *
 * Cherry Platform is a registered trademark of Sabadios
 *
 * Contributors:
 * Cristian Malinescu - initial design, API and implementation
 *******************************************************************************/
package org.Cherry.Modules.Web.Engine;

import java.io.IOException;
import java.net.ServerSocket;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.inject.Inject;
import javax.inject.Singleton;

import org.Cherry.Configuration.ConfigurationService;
import org.Cherry.Core.ServiceTemplate;
import org.apache.http.HttpConnectionFactory;
import org.apache.http.impl.DefaultBHttpServerConnection;
import org.apache.http.impl.DefaultBHttpServerConnectionFactory;
import org.apache.http.protocol.HttpProcessor;
import org.apache.http.protocol.HttpProcessorBuilder;
import org.apache.http.protocol.HttpService;
import org.apache.http.protocol.ResponseConnControl;
import org.apache.http.protocol.ResponseContent;
import org.apache.http.protocol.ResponseDate;
import org.apache.http.protocol.ResponseServer;
import org.apache.http.protocol.UriHttpRequestHandlerMapper;

@Singleton
class WebEngine extends ServiceTemplate {
    protected Integer getPort() {
        return getWebEngineConfig().getHttpPort();
    }

    private HttpProcessor getHttpProcessor() {
        if (null == _httpProcessor) {
            final HttpProcessorBuilder httpProcessorBuilder = HttpProcessorBuilder.create();

            httpProcessorBuilder.add(new ResponseDate());
            httpProcessorBuilder.add(new ResponseServer(getOriginServer()));
            httpProcessorBuilder.add(new ResponseContent());
            httpProcessorBuilder.add(new ResponseConnControl());
            httpProcessorBuilder.add(getRequestInterceptorService());
            httpProcessorBuilder.add(getResponseInterceptorService());

            _httpProcessor = httpProcessorBuilder.build();
        }

        return _httpProcessor;
    }

    private String getOriginServer() {
        return "Cherry Web Engine 1.0.0";
    }

    private UriHttpRequestHandlerMapper getRequestHandlerRegistry() {
        if (null == _registry) {
            _registry = new UriHttpRequestHandlerMapper();
            _registry.register("*", _requestDispatcher);
        }

        return _registry;
    }

    public HttpService getHttpService() {
        if (null == _httpService)
            _httpService = new HttpService(getHttpProcessor(), getRequestHandlerRegistry());

        return _httpService;
    }

    public HttpConnectionFactory<DefaultBHttpServerConnection> getHttpConnectionFactory() {
        if (null == _connectionFactory)
            _connectionFactory = DefaultBHttpServerConnectionFactory.INSTANCE;

        return _connectionFactory;
    }

    public ServerSocket getServerSocket() {
        if (null == _serverSocket) {
            try {
                _serverSocket = new ServerSocket(getPort());
            } catch (final IOException e) {
                throw new IllegalStateException(e);
            }

            info("Listening on port [{}]", _serverSocket.getLocalPort());
        }

        return _serverSocket;
    }

    private RequestInterceptor getRequestInterceptorService() {
        assert null != _requestInterceptor;
        return _requestInterceptor;
    }

    private ResponseInterceptor getResponseInterceptorService() {
        assert null != _responseInterceptor;
        return _responseInterceptor;
    }

    private ConfigurationService getWebEngineConfig() {
        assert null != _configurationService;
        return _configurationService;
    }

    @Inject
    @Singleton
    private ConfigurationService _configurationService;

    @Inject
    @Singleton
    private RequestDispatcher _requestDispatcher;

    @Inject
    @Singleton
    private RequestInterceptor _requestInterceptor;

    @Inject
    @Singleton
    private ResponseInterceptor _responseInterceptor;

    private HttpProcessor _httpProcessor;
    private HttpService _httpService;
    private UriHttpRequestHandlerMapper _registry;
    private HttpConnectionFactory<DefaultBHttpServerConnection> _connectionFactory;
    protected ServerSocket _serverSocket;

    @PostConstruct
    public void postConstruct() {
    }

    @PreDestroy
    public void preDestroy() {
    }

    protected WebEngine() {
    }

    /**
     *
     */
    private static final long serialVersionUID = 1L;
}