package org.voovan.http.server.context;
import org.voovan.tools.Chain;
import org.voovan.tools.log.Logger;
import org.voovan.tools.reflect.TReflect;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Vector;
/**
* WebServer 配置类
*
* @author helyho
*
* Voovan Framework.
* WebSite: https://github.com/helyho/Voovan
* Licence: Apache v2 License
*/
public class WebServerConfig {
private String host = "0.0.0.0";
private int port = 28080;
private int timeout = 30;
private String contextPath = "WEBAPP";
private boolean MatchRouteIgnoreCase = false;
private String characterSet = "UTF-8";
private String sessionContainer = "java.util.concurrent.ConcurrentHashMap";
private int sessionTimeout = 30;
private int keepAliveTimeout = 60;
private boolean accessLog = true;
private boolean gzip = true;
private HttpsConfig https;
private String indexFiles = "index.htm,index.html,default.htm,default.htm";
private Chain<HttpFilterConfig> filterConfigs = new Chain<HttpFilterConfig>();
private List<HttpRouterConfig> routerConfigs = new Vector<HttpRouterConfig>();
private List<HttpModuleConfig> moduleConfigs = new Vector<HttpModuleConfig>();
public void setHost(String host) {
this.host = host;
}
public void setPort(int port) {
this.port = port;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
public void setContextPath(String contextPath) {
this.contextPath = contextPath;
}
public boolean isMatchRouteIgnoreCase() {
return MatchRouteIgnoreCase;
}
public void setMatchRouteIgnoreCase(boolean matchRouteIgnoreCase) {
MatchRouteIgnoreCase = matchRouteIgnoreCase;
}
public void setCharacterSet(String characterSet) {
this.characterSet = characterSet;
}
public void setSessionContainer(String sessionContainer) {
this.sessionContainer = sessionContainer;
}
public void setSessionTimeout(int sessionTimeout) {
this.sessionTimeout = sessionTimeout;
}
public void setKeepAliveTimeout(int keepAliveTimeout) {
this.keepAliveTimeout = keepAliveTimeout;
}
public String getHost() {
return host;
}
public int getPort() {
return port;
}
public int getTimeout() {
return timeout;
}
public String getContextPath() {
return contextPath;
}
public String getCharacterSet() {
return characterSet;
}
public String getSessionContainer() {
return sessionContainer;
}
public int getSessionTimeout() {
return sessionTimeout;
}
public int getKeepAliveTimeout() {
return keepAliveTimeout;
}
public boolean isGzip() {
return gzip;
}
public void setGzip(boolean gzip) {
this.gzip = gzip;
}
public boolean isAccessLog() {
return accessLog;
}
public void setAccessLog(boolean accessLog) {
this.accessLog = accessLog;
}
public HttpsConfig getHttps() {
return https;
}
public boolean isHttps(){
return https!=null?true:false;
}
public void setHttps(HttpsConfig https) {
this.https = https;
}
public String[] getIndexFiles() {
return indexFiles.split(",");
}
public void setIndexFiles(String indexFiles) {
this.indexFiles = indexFiles;
}
public Chain<HttpFilterConfig> getFilterConfigs() {
return filterConfigs;
}
public List<HttpRouterConfig> getRouterConfigs() {
return routerConfigs;
}
public List<HttpModuleConfig> getModuleonfigs() {
return moduleConfigs;
}
/**
* 使用列表初始话过滤器链
*
* @param filterInfoList 过滤器信息列表
*/
public void addFilterByList(List<Map<String, Object>> filterInfoList) {
for (Map<String, Object> filterConfigMap : filterInfoList) {
HttpFilterConfig httpFilterConfig = new HttpFilterConfig(filterConfigMap);
filterConfigs.addLast(httpFilterConfig);
Logger.simple("Load HttpFilter ["+httpFilterConfig.getName()+
"] by ["+ httpFilterConfig.getClassName()+"]");
filterConfigs.rewind();
}
}
/**
* 使用列表初始话路由处理器
*
* @param routerInfoList 路由处理器信息列表
*/
public void addRouterByList(List<Map<String, Object>> routerInfoList) {
for (Map<String, Object> routerInfoMap : routerInfoList) {
HttpRouterConfig httpRouterConfig = new HttpRouterConfig(routerInfoMap);
routerConfigs.add(httpRouterConfig);
Logger.simple("Load HttpRouter ["+httpRouterConfig.getName()+"] by Method ["+httpRouterConfig.getMethod()+
"] on route ["+httpRouterConfig.getRoute()+"] by ["+ httpRouterConfig.getClassName()+"]");
}
}
/**
* 使用列表初始话路由处理器
*
* @param moduleInfoList 路由处理器信息列表
*/
public void addModuleByList(List<Map<String, Object>> moduleInfoList) {
for (Map<String, Object> moduleInfoMap : moduleInfoList) {
HttpModuleConfig httpModuleConfig = new HttpModuleConfig(moduleInfoMap);
moduleConfigs.add(httpModuleConfig);
Logger.simple("Load HttpModule ["+httpModuleConfig.getName()+"] on [" + httpModuleConfig.getPath() +
"] by ["+ httpModuleConfig.getClassName()+"]");
}
}
@Override
public String toString(){
try {
Map<Field, Object> fieldValues = TReflect.getFieldValues(this);
StringBuilder str = new StringBuilder();
for(Entry<Field,Object> entry : fieldValues.entrySet()){
str.append(entry.getKey().getName());
str.append(":\t\t");
str.append(entry.getValue());
str.append("\r\n");
}
return str.toString();
} catch (ReflectiveOperationException e) {
Logger.error(e);
}
return "ReflectiveOperationException error by TReflect.getFieldValues Method. ";
}
}