package com.aol.micro.server;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.Function;
import javax.servlet.Filter;
import javax.servlet.Servlet;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletRequestListener;
import javax.ws.rs.core.FeatureContext;
import com.aol.micro.server.rest.RestConfiguration;
import com.aol.micro.server.servers.ServerApplicationFactory;
import com.aol.micro.server.servers.model.ServerData;
import com.aol.micro.server.spring.SpringBuilder;
import com.aol.micro.server.spring.SpringDBConfig;
import com.fasterxml.jackson.databind.Module;
import cyclops.collections.immutable.PMapX;
import cyclops.collections.immutable.PSetX;
import cyclops.collections.immutable.PStackX;
/**
* To implement a plugin for Microserver, implement this interface in your library and add the fully resolved class name to
* META-INF/services/com.aol.micro.server.Plugin
*
* in your library
*
* @author johnmcclean
*
*/
public interface Plugin {
/**
* @return Engine for building Spring Context
*/
default SpringBuilder springBuilder(){
return null;
}
/**
* @return Configuration for the jax-rs servlet
*/
default Optional<RestConfiguration> restServletConfiguration(){
return Optional.empty();
}
/**
* @return Jackson feature properties
*/
default Function<FeatureContext, Map<String, Object>> jacksonFeatureProperties(){
return context->PMapX.empty();
}
/**
* @return jax-rs Application name
*/
default Optional<String> jaxWsRsApplication(){
return Optional.empty();
}
/**
* @return Factory for creating web server instances
*/
default Optional<ServerApplicationFactory> serverApplicationFactory(){
return Optional.empty();
}
/**
* @return Jackson modules for this plugin
*/
default Set<Module> jacksonModules(){
return PSetX.empty();
}
/**
* @return jax-rs Resources (Objects) for this plugin
*/
default Set<Object> jaxRsResourceObjects(){
return PSetX.empty();
}
/**
* @return jax-rs Resources (Classes) for this plugin
*/
default Set<Class<?>> jaxRsResources(){
return PSetX.empty();
}
/**
* @return jax-rs Packages for this plugin
*/
default Set<String> jaxRsPackages(){
return PSetX.empty();
}
/**
* @return Used for configuring Data Beans (or other Beans) directly into the ApplicationContext
*/
default Optional<SpringDBConfig> springDbConfigurer(){
return Optional.empty();
}
/**
* @return Spring configuration classes for this plugin
*/
default Set<Class> springClasses(){
return PSetX.empty();
}
/**
* @return Servlet Context Listeners for this plugin
*/
default Set<Function<ServerData,ServletContextListener>> servletContextListeners(){
return PSetX.empty();
}
/**
* @return Servlet Request Listeners for this plugin
*/
default Set<Function<ServerData,ServletRequestListener>> servletRequestListeners(){
return PSetX.empty();
}
/**
* @return Filters for this plugin
*/
default Function<ServerData,Map<String,Filter>> filters(){
return serverData -> PMapX.empty();
}
/**
* @return Servlets for this plugin
*/
default Function<ServerData,Map<String,Servlet>> servlets(){
return serverData -> PMapX.empty();
}
/**
* @return jax-rs Providers for this plugin
*/
default List<String> providers(){
return PStackX.empty();
}
/**
* @return Jersey server properties for this plugin
*/
default Map<String, Object> getServerProperties() {
return PMapX.empty();
}
}