Skip to content
Snippets Groups Projects
Commit 6cac66bd authored by Rob Adams's avatar Rob Adams
Browse files

Initial work at bootstrapping and configuration

parent c2ad8179
No related branches found
No related tags found
No related merge requests found
......@@ -25,96 +25,97 @@ import java.util.Map;
* @author alexreimers
*/
public class FloodlightModuleContext implements IFloodlightModuleContext {
protected Map<Class<? extends IFloodlightService>, IFloodlightService> serviceMap;
protected Map<Class<? extends IFloodlightModule>, Map<String, String>> configParams;
protected Collection<IFloodlightModule> moduleSet;
/**
* Creates the ModuleContext for use with this IFloodlightProvider.
* This will be used as a module registry for all IFloodlightModule(s).
*/
public FloodlightModuleContext() {
serviceMap =
new HashMap<Class<? extends IFloodlightService>,
IFloodlightService>();
configParams =
new HashMap<Class<? extends IFloodlightModule>,
Map<String, String>>();
}
/**
* Adds a IFloodlightModule for this Context.
* @param clazz the service class
* @param service The IFloodlightService to add to the registry
*/
public void addService(Class<? extends IFloodlightService> clazz,
IFloodlightService service) {
serviceMap.put(clazz, service);
}
@SuppressWarnings("unchecked")
protected Map<Class<? extends IFloodlightService>, IFloodlightService> serviceMap;
protected Map<Class<? extends IFloodlightModule>, Map<String, String>> configParams;
protected Collection<IFloodlightModule> moduleSet;
/**
* Creates the ModuleContext for use with this IFloodlightProvider.
* This will be used as a module registry for all IFloodlightModule(s).
*/
public FloodlightModuleContext() {
serviceMap =
new HashMap<Class<? extends IFloodlightService>,
IFloodlightService>();
configParams =
new HashMap<Class<? extends IFloodlightModule>,
Map<String, String>>();
}
/**
* Adds a IFloodlightModule for this Context.
* @param clazz the service class
* @param service The IFloodlightService to add to the registry
*/
public void addService(Class<? extends IFloodlightService> clazz,
IFloodlightService service) {
serviceMap.put(clazz, service);
}
@SuppressWarnings("unchecked")
@Override
public <T extends IFloodlightService> T getServiceImpl(Class<T> service) {
IFloodlightService s = serviceMap.get(service);
return (T)s;
}
@Override
public Collection<Class<? extends IFloodlightService>> getAllServices() {
return serviceMap.keySet();
}
@Override
public Collection<IFloodlightModule> getAllModules() {
return moduleSet;
}
public void setModuleSet(Collection<IFloodlightModule> modSet) {
this.moduleSet = modSet;
}
/**
* Gets the configuration parameter map for a module
* @param module The module to get the configuration map for, usually yourself
* @return A map containing all the configuration parameters for the module, may be empty
*/
@Override
public Map<String, String> getConfigParams(IFloodlightModule module) {
Map<String, String> retMap = configParams.get(module.getClass());
if (retMap == null) {
// Return an empty map if none exists so the module does not
// need to null check the map
retMap = new HashMap<String, String>();
configParams.put(module.getClass(), retMap);
}
public <T extends IFloodlightService> T getServiceImpl(Class<T> service) {
IFloodlightService s = serviceMap.get(service);
return (T)s;
}
@Override
public Collection<Class<? extends IFloodlightService>> getAllServices() {
return serviceMap.keySet();
}
@Override
public Collection<IFloodlightModule> getAllModules() {
return moduleSet;
}
public void setModuleSet(Collection<IFloodlightModule> modSet) {
this.moduleSet = modSet;
}
@Override
public Map<String, String> getConfigParams(IFloodlightModule module) {
Class<? extends IFloodlightModule> clazz = module.getClass();
return getConfigParams(clazz);
}
@Override
public Map<String, String> getConfigParams(Class<? extends IFloodlightModule> clazz) {
Map<String, String> retMap = configParams.get(clazz);
if (retMap == null) {
// Return an empty map if none exists so the module does not
// need to null check the map
retMap = new HashMap<String, String>();
configParams.put(clazz, retMap);
}
// also add any configuration parameters for superclasses, but
// only if more specific configuration does not override it
for (Class<? extends IFloodlightModule> c : configParams.keySet()) {
if (c.isInstance(module)) {
for (Map.Entry<String, String> ent : configParams.get(c).entrySet()) {
if (!retMap.containsKey(ent.getKey())) {
retMap.put(ent.getKey(), ent.getValue());
}
}
}
}
// also add any configuration parameters for superclasses, but
// only if more specific configuration does not override it
for (Class<? extends IFloodlightModule> c : configParams.keySet()) {
if (c.isAssignableFrom(clazz)) {
for (Map.Entry<String, String> ent : configParams.get(c).entrySet()) {
if (!retMap.containsKey(ent.getKey())) {
retMap.put(ent.getKey(), ent.getValue());
}
}
}
}
return retMap;
}
/**
* Adds a configuration parameter for a module
* @param mod The fully qualified module name to add the parameter to
* @param key The configuration parameter key
* @param value The configuration parameter value
*/
public void addConfigParam(IFloodlightModule mod, String key, String value) {
Map<String, String> moduleParams = configParams.get(mod.getClass());
if (moduleParams == null) {
moduleParams = new HashMap<String, String>();
configParams.put(mod.getClass(), moduleParams);
}
moduleParams.put(key, value);
}
return retMap;
}
/**
* Adds a configuration parameter for a module
* @param mod The fully qualified module name to add the parameter to
* @param key The configuration parameter key
* @param value The configuration parameter value
*/
public void addConfigParam(IFloodlightModule mod, String key, String value) {
Map<String, String> moduleParams = configParams.get(mod.getClass());
if (moduleParams == null) {
moduleParams = new HashMap<String, String>();
configParams.put(mod.getClass(), moduleParams);
}
moduleParams.put(key, value);
}
}
......@@ -48,4 +48,12 @@ public interface IFloodlightModuleContext {
* @return A key, value map of the configuration options
*/
public Map<String, String> getConfigParams(IFloodlightModule module);
/**
* Gets module specific configuration parameters.
* @param clazz The class of the module to get configuration parameters for
* @return A key, value map of the configuration options
*/
public Map<String, String> getConfigParams(Class<? extends
IFloodlightModule> clazz);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment