package net.floodlightcontroller.core.module;

import java.util.Collection;
import java.util.Map;


public interface IFloodlightModuleContext {
    /**
     * Retrieves a casted version of a module from the registry.
     *
     * @param name The IFloodlightService object type
     * @return The IFloodlightService
     * @throws FloodlightModuleException If the module was not found
     *                                   or a ClassCastException was encountered.
     */
    public <T extends IFloodlightService> T getServiceImpl(Class<T> service);

    /**
     * Returns all loaded services
     *
     * @return A collection of service classes that have been loaded
     */
    public Collection<Class<? extends IFloodlightService>> getAllServices();

    /**
     * Returns all loaded modules
     *
     * @return All Floodlight modules that are going to be loaded
     */
    public Collection<IFloodlightModule> getAllModules();

    /**
     * Gets module specific configuration parameters.
     *
     * @param module The module to get the configuration parameters for
     * @return A key, value map of the configuration options
     */
    public Map<String, String> getConfigParams(IFloodlightModule module);
}
