def __init__(self):
     self._manager = {}
     self._factory = FactoryBase()  
     self._manager["col_checker"] = {}
     self._manager["preprocesser"] = {}
     self._manager["join_checker"] = {}
class ProcesserManager(object):
    """ process manager """
    def __init__(self):
        self._manager = {}
        self._factory = FactoryBase()  
        self._manager["col_checker"] = {}
        self._manager["preprocesser"] = {}
        self._manager["join_checker"] = {}

    def init_class(self, section, class_name):
        """
        init class by class_name 
        
        Args:
            section:col_checker, preprocesser, join_checker 
            class_name: AA.BB

        Return:
            class_obj 
        
        Exception:
            ProcesserManagerInitError
        """
        if section not in self._manager:
            raise ProcesserManagerInitError(section, \
                                            class_name, \
                                            "No section %s" % (section))
        
        if class_name in self._manager[section]:
            return self._manager[section][class_name]

        # split class_name
        try:
            module_name, module_class = class_name.split(".")
        except ValueError as e:
            raise ProcesserManagerInitError(section, \
                                            class_name, \
                                            "%s" % (e))

        try:
            class_obj = self._factory.create_obj(module_name, module_class)
        except CreateObjError as e:
            raise ProcesserManagerInitError(section, \
                                            class_name, \
                                            "%s" % (e))
        
        self._manager[section][class_name] = class_obj
        return class_obj

    def locate(self, section, class_name):
        """
        locate class by section and class_name

        Args:
            section:
            class_name:

        Return:
            class_obj

        Exception:
            ProcesserManagerLocateError
        """
        try:
            return self._manager[section][class_name]
        except (KeyError, TypeError) as e:
            raise ProcesserManagerLocateError(section, \
                                              class_name, \
                                              "%s" % (e))