![JAR search and dependency download from the Maven repository](/logo.png)
io.airlift.http.server.WebServerBuilder Maven / Gradle / Ivy
package io.airlift.http.server;
import static com.google.inject.matcher.Matchers.annotatedWith;
import java.io.File;
import java.lang.annotation.Annotation;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.Filter;
import javax.servlet.http.HttpServlet;
import javax.ws.rs.Path;
import javax.ws.rs.ext.Provider;
import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import io.airlift.http.server.model.WebServerDefinitionBuilder;
public class WebServerBuilder {
private WebServerDefinitionBuilder webServerDefinitionBuilder;
public WebServerBuilder() {
webServerDefinitionBuilder = new WebServerDefinitionBuilder();
}
public WebServerBuilder port(int port) {
webServerDefinitionBuilder.port(port);
return this;
}
public WebServerBuilder filter(String pattern) {
webServerDefinitionBuilder.filter(pattern);
return this;
}
public WebServerBuilder through(Class extends Filter> filterClass) {
webServerDefinitionBuilder.through(filterClass);
return this;
}
public WebServerBuilder serve(String pattern) {
return serve(pattern, Lists.newArrayList());
}
public WebServerBuilder serve(String pattern, List welcomeFiles) {
webServerDefinitionBuilder.serve(pattern, welcomeFiles);
return this;
}
public WebServerBuilder with(Class extends HttpServlet> servletClass) {
return with(servletClass, Maps.newHashMap());
}
public WebServerBuilder with(Class extends HttpServlet> servletClass, Map parameters) {
webServerDefinitionBuilder.with(servletClass, parameters);
return this;
}
public WebServerBuilder with(HttpServlet servlet) {
webServerDefinitionBuilder.with(servlet);
return this;
}
public WebServerBuilder with(File war) {
webServerDefinitionBuilder.with(war);
return this;
}
public WebServerBuilder at(String path) {
webServerDefinitionBuilder.at(path);
return this;
}
public WebServerBuilder resource(String resource) {
return resource(resource, Lists.newArrayList(), false);
}
public WebServerBuilder resourceWithListing(String resource) {
return resource(resource, Lists.newArrayList(), true);
}
public WebServerBuilder resource(String resource, List welcomeFiles) {
return resource(resource, welcomeFiles, false);
}
public WebServerBuilder resource(String resource, List welcomeFiles, boolean listing) {
webServerDefinitionBuilder.resource(resource, welcomeFiles, listing);
return this;
}
public WebServer build() {
return new JettyWebServer(webServerDefinitionBuilder.build());
}
public WebServerBuilder withJaxRs() {
String callingClassName = Thread.currentThread().getStackTrace()[2].getClassName();
try {
Class> callingClass = Thread.currentThread().getContextClassLoader().loadClass(callingClassName);
String providers = getClassNames(callingClass, Provider.class, GsonMessageBodyHandler.class);
String resources = getClassNames(callingClass, Path.class);
with(HttpServletDispatcher.class,
ImmutableMap.of( //
"resteasy.providers", providers,
"resteasy.resources", resources, //
"resteasy.servlet.mapping.prefix", "/api"));
} catch (ClassNotFoundException e) {
throw new RuntimeException("Cannot determine package for JAXRS resource scanning.", e);
}
return this;
}
private String getClassNames(Class> callingClass, Class extends Annotation> annotationClass, Class> ...additional) {
Set> resourceClasses = Classes.matching(annotatedWith(annotationClass)).in(callingClass.getPackage());
Set resourceClassNames = Sets.newHashSet();
for (Class> clazz : resourceClasses) {
resourceClassNames.add(clazz.getName());
}
if(additional != null) {
for (Class> clazz : additional) {
resourceClassNames.add(clazz.getName());
}
}
return Joiner.on(",").join(resourceClassNames);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy