package com.alibaba.doris.dataserver.core;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import com.alibaba.doris.dataserver.ApplicationContext;
import com.alibaba.doris.dataserver.Module;
import com.alibaba.doris.dataserver.ModuleContext;
import com.alibaba.doris.dataserver.config.DataServerConfigure;
import com.alibaba.doris.dataserver.event.EventListenerManager;
/**
* @author ajun Email:jack.yuj@alibaba-inc.com
*/
public class DefaultApplicationContext implements ApplicationContext {
public DefaultApplicationContext(List<Module> moduleList) {
this.moduleList = moduleList;
}
public Module getModule(Class<?> moduleClass) {
return getModule(moduleClass.getName());
}
public Module getModule(String moduleClassName) {
for (Module module : moduleList) {
if (module.getClass().getName().equals(moduleClassName)) {
return module;
}
}
return null;
}
public Module getModuleByName(String moduleName) {
for (Module module : moduleList) {
if (module.getName().equals(moduleName)) {
return module;
}
}
return null;
}
public ModuleContext getModuleContext(Module module) {
if (null != module) {
String moduleName = module.getName();
if (StringUtils.isNotBlank(moduleName)) {
return moduleContextMap.get(moduleName);
} else {
return moduleContextMap.get(module.getClass().getName());
}
}
return null;
}
public void addModuleContext(Module module, ModuleContext moduleContext) {
String moduleName = module.getName();
if (StringUtils.isNotBlank(moduleName)) {
moduleContextMap.put(module.getName(), moduleContext);
} else {
moduleContextMap.put(module.getClass().getName(), moduleContext);
}
}
public Object getAttribute(String name) {
return context.get(name);
}
public Enumeration<String> getAttributeNames() {
Set<String> keySet = context.keySet();
final Iterator<String> itr = keySet.iterator();
return new Enumeration<String>() {
public boolean hasMoreElements() {
return itr.hasNext();
}
public String nextElement() {
return itr.next();
}
};
}
public EventListenerManager getEventListenerManager() {
return (EventListenerManager) getAttribute("EVENT_LISTENER_MANAGER");
}
public void setEventListenerManager(EventListenerManager eventListenerManager) {
setAttribute("EVENT_LISTENER_MANAGER", eventListenerManager);
}
public void removeAttribute(String name) {
context.remove(name);
}
public void setAttribute(String name, Object value) {
context.put(name, value);
}
public DataServerConfigure getDataServerConfigure() {
return (DataServerConfigure) getAttribute("DATA_SERVER_CONFIGURE");
}
public void setDataServerConfigure(DataServerConfigure configure) {
setAttribute("DATA_SERVER_CONFIGURE", configure);
}
public List<Module> getModules() {
return moduleList;
}
private Map<String, Object> context = new HashMap<String, Object>();
private Map<String, ModuleContext> moduleContextMap = new HashMap<String, ModuleContext>();
private List<Module> moduleList;
}