All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.continual.restHttp.HttpServlet Maven / Gradle / Ivy

There is a newer version: 0.2.54
Show newest version
/*
 *	Copyright 2019, Continual.io
 *
 *	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 io.continual.restHttp;

import java.io.IOException;
import java.util.LinkedList;

import javax.servlet.ServletException;

import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import io.continual.builder.Builder;
import io.continual.builder.Builder.BuildFailure;
import io.continual.http.service.framework.CHttpMetricNamer;
import io.continual.http.service.framework.CHttpServlet;
import io.continual.http.service.framework.context.CHttpRequestContext;
import io.continual.http.service.framework.inspection.CHttpObserverMgr;
import io.continual.http.service.framework.routing.CHttpRequestRouter;
import io.continual.iam.IamService;
import io.continual.metrics.MetricsCatalog;
import io.continual.services.ServiceContainer;
import io.continual.util.nv.NvReadable;
import io.continual.util.nv.impl.nvJsonObject;

public class HttpServlet extends CHttpServlet
{
	public HttpServlet ( ServiceContainer sc, IamService accounts, SessionLifeCycle lc, JSONObject settings, MetricsCatalog metrics ) throws BuildFailure
	{
		this ( sc, accounts, lc, settings, metrics, null );
	}

	public HttpServlet ( ServiceContainer sc, IamService accounts, SessionLifeCycle lc, JSONObject settings, MetricsCatalog metrics, CHttpObserverMgr inspector ) throws BuildFailure
	{
		super ( new nvJsonObject ( settings ), null, lc, metrics, inspector );

		fAccounts = accounts;
		fContainer = sc;
		fRouters = new LinkedList ();

		final JSONObject namer = settings.optJSONObject ( "metricsNamer" );
		if ( namer != null )
		{
			fMetricNamer = Builder.withBaseClass ( CHttpMetricNamer.class )
				.withClassNameInData ()
				.usingData ( namer )
				.build ()
			;
		}
		else
		{
			fMetricNamer = null;
		}
	}

	public void addRouter ( HttpRouter value )
	{
		fRouters.add ( value );
	}

	public ServiceContainer getServices ()
	{
		return fContainer;
	}

	public static HttpServlet getServlet ( CHttpRequestContext rc )
	{
		final CHttpServlet ds = rc.getServlet ();
		if ( !( ds instanceof HttpServlet ))
		{
			throw new IllegalStateException ( "This servlet is not an HttpServlet" );
		}
		return ((HttpServlet)ds);
	}
	
	public static ServiceContainer getServices ( CHttpRequestContext rc )
	{
		final CHttpServlet ds = rc.getServlet ();
		if ( !( ds instanceof HttpServlet ))
		{
			throw new IllegalStateException ( "This servlet is not an HttpServlet" );
		}
		return ((HttpServlet)ds).getServices ();
	}

	@Override
	public HttpUserSession createSession () throws NvReadable.MissingReqdSettingException
	{
		return new HttpUserSession ( fAccounts );
	}

	@Override
	protected void servletSetup () throws NvReadable.MissingReqdSettingException, ServletException
	{
		try
		{
			final NvReadable p = super.getSettings ();

			// setup request routing
			final CHttpRequestRouter rr = super.getRequestRouter ();
			for ( HttpRouter router : fRouters )
			{
				router.setupRouter ( this, rr, p );
			}

			log.info ( "The server is ready." );
		}
		catch ( IOException | BuildFailure e )
		{
			throw new ServletException ( e );
		}
	}

	@Override
	protected CHttpMetricNamer getMetricNamer ()
	{
		return fMetricNamer == null ? super.getMetricNamer () : fMetricNamer;
	}

	private final ServiceContainer fContainer;
	private final IamService fAccounts;
	private final LinkedList fRouters;
	private final CHttpMetricNamer fMetricNamer;

	private static final Logger log = LoggerFactory.getLogger ( HttpServlet.class );
	private static final long serialVersionUID = 1L;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy