/*
* JBoss, Home of Professional Open Source.
* Copyright 2014 Red Hat, Inc., and individual contributors
* as indicated by the @author tags.
*
* 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.undertow.servlet;
import javax.servlet.
Filter;
import javax.servlet.
MultipartConfigElement;
import javax.servlet.
Servlet;
import io.undertow.servlet.api.
DeploymentInfo;
import io.undertow.servlet.api.
ErrorPage;
import io.undertow.servlet.api.
FilterInfo;
import io.undertow.servlet.api.
InstanceFactory;
import io.undertow.servlet.api.
ListenerInfo;
import io.undertow.servlet.api.
LoginConfig;
import io.undertow.servlet.api.
SecurityConstraint;
import io.undertow.servlet.api.
ServletContainer;
import io.undertow.servlet.api.
ServletInfo;
import io.undertow.servlet.api.
WebResourceCollection;
import io.undertow.servlet.core.
ServletContainerImpl;
import java.util.
EventListener;
/**
* Utility class for building servlet deployments.
*
* @author Stuart Douglas
*/
public class
Servlets {
private static volatile
ServletContainer container;
/**
* Returns the default servlet container. For most embedded use
* cases this will be sufficient.
*
* @return The default servlet container
*/
public static
ServletContainer defaultContainer() {
if (
container != null) {
return
container;
}
synchronized (
Servlets.class) {
if (
container != null) {
return
container;
}
return
container =
ServletContainer.
Factory.
newInstance();
}
}
/**
* Creates a new servlet container.
*
* @return A new servlet container
*/
public static
ServletContainer newContainer() {
return new
ServletContainerImpl();
}
/**
* Creates a new servlet deployment info structure
*
* @return A new deployment info structure
*/
public static
DeploymentInfo deployment() {
return new
DeploymentInfo();
}
/**
* Creates a new servlet description with the given class. The servlet name is inferred from the simple name of the class.
*
* @param servletClass The servlet class
* @return A new servlet description
*/
public static
ServletInfo servlet(final
Class<? extends
Servlet>
servletClass) {
return
servlet(
servletClass.
getSimpleName(),
servletClass);
}
/**
* Creates a new servlet description with the given name and class
*
* @param name The servlet name
* @param servletClass The servlet class
* @return A new servlet description
*/
public static
ServletInfo servlet(final
String name, final
Class<? extends
Servlet>
servletClass) {
return new
ServletInfo(
name,
servletClass);
}
/**
* Creates a new servlet description with the given name and class
*
* @param name The servlet name
* @param servletClass The servlet class
* @return A new servlet description
*/
public static
ServletInfo servlet(final
String name, final
Class<? extends
Servlet>
servletClass, final
InstanceFactory<? extends
Servlet>
servlet) {
return new
ServletInfo(
name,
servletClass,
servlet);
}
/**
* Creates a new filter description with the given class. The filter name is inferred from the simple name of the class.
*
* @param filterClass The filter class
* @return A new filter description
*/
public static
FilterInfo filter(final
Class<? extends
Filter>
filterClass) {
return
filter(
filterClass.
getSimpleName(),
filterClass);
}
/**
* Creates a new filter description with the given name and class
*
* @param name The filter name
* @param filterClass The filter class
* @return A new filter description
*/
public static
FilterInfo filter(final
String name, final
Class<? extends
Filter>
filterClass) {
return new
FilterInfo(
name,
filterClass);
}
/**
* Creates a new filter description with the given name and class
*
* @param name The filter name
* @param filterClass The filter class
* @return A new filter description
*/
public static
FilterInfo filter(final
String name, final
Class<? extends
Filter>
filterClass, final
InstanceFactory<? extends
Filter>
filter) {
return new
FilterInfo(
name,
filterClass,
filter);
}
/**
* Creates a new multipart config element
*
* @param location the directory location where files will be stored
* @param maxFileSize the maximum size allowed for uploaded files
* @param maxRequestSize the maximum size allowed for
* multipart/form-data requests
* @param fileSizeThreshold the size threshold after which files will
* be written to disk
*/
public static
MultipartConfigElement multipartConfig(
String location, long
maxFileSize, long
maxRequestSize, int
fileSizeThreshold) {
return new
MultipartConfigElement(
location,
maxFileSize,
maxRequestSize,
fileSizeThreshold);
}
public static
ListenerInfo listener(final
Class<? extends
EventListener>
listenerClass, final
InstanceFactory<? extends
EventListener>
instanceFactory) {
return new
ListenerInfo(
listenerClass,
instanceFactory);
}
public static
ListenerInfo listener(final
Class<? extends
EventListener>
listenerClass) {
return new
ListenerInfo(
listenerClass);
}
public static
SecurityConstraint securityConstraint() {
return new
SecurityConstraint();
}
public static
WebResourceCollection webResourceCollection() {
return new
WebResourceCollection();
}
private
Servlets() {
}
public static
LoginConfig loginConfig(
String realmName,
String loginPage,
String errorPage) {
return new
LoginConfig(
realmName,
loginPage,
errorPage);
}
public static
LoginConfig loginConfig(final
String realmName) {
return new
LoginConfig(
realmName);
}
public static
LoginConfig loginConfig(
String mechanismName,
String realmName,
String loginPage,
String errorPage) {
return new
LoginConfig(
mechanismName,
realmName,
loginPage,
errorPage);
}
public static
LoginConfig loginConfig(
String mechanismName, final
String realmName) {
return new
LoginConfig(
mechanismName,
realmName);
}
/**
* Create an ErrorPage instance for a given exception type
* @param location The location to redirect to
* @param exceptionType The exception type
* @return The error page definition
*/
public static
ErrorPage errorPage(
String location,
Class<? extends
Throwable>
exceptionType) {
return new
ErrorPage(
location,
exceptionType);
}
/**
* Create an ErrorPage instance for a given response code
* @param location The location to redirect to
* @param statusCode The status code
* @return The error page definition
*/
public static
ErrorPage errorPage(
String location, int
statusCode) {
return new
ErrorPage(
location,
statusCode);
}
/**
* Create an ErrorPage that corresponds to the default error page
*
* @param location The error page location
* @return The error page instance
*/
public static
ErrorPage errorPage(
String location) {
return new
ErrorPage(
location);
}
}