package com.aol.micro.server.servers;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import com.aol.micro.server.Plugin;
import com.aol.micro.server.PluginLoader;
import com.aol.micro.server.module.IncorrectJaxRsPluginsException;
import com.aol.micro.server.rest.RestConfiguration;
import com.aol.micro.server.servers.model.ServerData;
import cyclops.Streams;
import cyclops.stream.ReactiveSeq;
public class JaxRsServletConfigurer {
public void addServlet(ServerData serverData, ServletContext webappContext) {
List<RestConfiguration> restConfigList = ReactiveSeq.fromStream(PluginLoader.INSTANCE.plugins.get()
.stream())
.filter(module -> module.restServletConfiguration() != null)
.map(Plugin::restServletConfiguration)
.flatMap(Streams::optionalToStream)
.toList();
if (restConfigList.size() > 1) {
throw new IncorrectJaxRsPluginsException(
"ERROR! Multiple jax-rs application plugins found "
+ restConfigList);
} else if (restConfigList.size() == 0) {
throw new IncorrectJaxRsPluginsException(
"ERROR! No jax-rs application plugins found ");
}
RestConfiguration config = restConfigList.get(0);
javax.servlet.ServletRegistration.Dynamic servletRegistration = webappContext.addServlet(config.getName() + "-"
+ serverData.getModule()
.getContext(), config.getServlet());
Map<String, String> initParams = config.getInitParams();
for (String key : initParams.keySet()) {
servletRegistration.setInitParameter(key, initParams.get(key));
}
servletRegistration.setAsyncSupported(true);
servletRegistration.setInitParameter("javax.ws.rs.Application", serverData.getModule()
.getJaxWsRsApplication());
servletRegistration.setInitParameter(config.getProvidersName(), serverData.getModule()
.getProviders());
servletRegistration.setInitParameter("context", serverData.getModule()
.getContext());
servletRegistration.setLoadOnStartup(1);
servletRegistration.addMapping(serverData.getBaseUrlPattern());
}
}