Beispiel #1
0
    def __init__(self):

        self.manager_k = KindManager()
        self.manager_m = MixinManager()
        self.manager_a = ActionManager()
        self.d_baker = CategoryDataBaker()
        self.PostMan = PostMan()
    def __init__(self):

        self.manager_k = KindManager()
        self.manager_m = MixinManager()
        self.manager_a = ActionManager()
        self.d_baker = CategoryDataBaker()
        self.PostMan = PostMan()
class CategoryJungler:
    """

        Extracts category (a.k.a Kinds, Mixins and Actions) data from the database

    """

    def __init__(self):
        self.manager_k = KindManager()
        self.manager_m = MixinManager()
        self.manager_a = ActionManager()
        self.d_baker = CategoryDataBaker()
        self.PostMan = PostMan()


    def channel_register_categories(self, jreq):
        """
        Channel the post request to the right methods
        Args:
            @param jreq: Body content of the post request

        """

        #Step[1]: Get the data from the database to avoid replicates:

        db_occi_ids, db_occi_locs = self.d_baker.bake_to_register_categories()

        #Step[2]: Verify the uniqueness of the new categories:
        if (db_occi_ids is None) or (db_occi_locs is None):
            return "An error has occurred, please check log for more details", return_code['Bad Request']
        else:
            if jreq.has_key('actions'):
                logger.debug("===== channel_register_categories ==== : Actions channeled")
                new_actions, resp_code_a = self.manager_a.register_actions(jreq['actions'], db_occi_ids)

            else:
                logger.debug("===== channel_register_categories ==== : no actions found")
                new_actions = list()
                resp_code_a = return_code['OK']

            if jreq.has_key('kinds'):
                logger.debug("===== channel_register_categories ==== : Kinds channeled")
                new_kinds, resp_code_k = self.manager_k.register_kinds(jreq['kinds'], db_occi_ids, db_occi_locs)

            else:
                logger.debug("===== channel_register_categories ==== : no kinds found")
                new_kinds = list()
                resp_code_k = return_code['OK']

            if jreq.has_key('mixins'):
                logger.debug("===== channel_register_categories ==== : Mixins channeled")
                new_mixins, resp_code_m = self.manager_m.register_mixins(jreq['mixins'], db_occi_ids, db_occi_locs)
            else:
                logger.debug("===== channel_register_categories ==== : No mixins found")
                new_mixins = list()
                resp_code_m = return_code['OK']

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK'] or resp_code_m is not \
               return_code['OK']:
                return "An error has occurred, please check log for more details", return_code['Bad Request']

            else:
                #Step[3]: Save the new categories in the database
                categories = new_kinds + new_mixins + new_actions
                self.PostMan.save_registered_docs_in_db(categories)
                logger.debug("===== channel_register_categories ==== : Done with success")
                return "", return_code['OK']

    def channel_get_all_categories(self):
        """
        Retrieve all categories to show the server's capacity

        """
        #Step[1]: Call the dataBakers to get the Data

        res = self.d_baker.bake_to_get_all_categories()

        #Step[2]: Return all the results back to the dispatcher
        if res is None:
            return res, return_code['Internal Server Error']

        else:
            logger.debug("===== channel_get_all_categories ==== : Done with success")
            return res, return_code['OK']


    def channel_get_filtered_categories(self, jreq):
        """
        Channel the post request to the right methods
        Args:
            @param jreq: Body content of the post request

        """
        res = self.d_baker.bake_to_get_all_categories()

        #Step[2]: filter the results
        if res is None:
            return return_code['Internal Server Error'], res
        else:
            if jreq.has_key('kinds'):
                logger.debug("===== Channel_get_filtered_categories: Kinds filter is found and channeled =====")
                filtered_kinds, resp_code_k = self.manager_k.get_filtered_kinds(jreq['kinds'], res['kinds'])
            else:
                logger.debug("===== Channel_get_filtered_categories: No kind filter was found =====")
                filtered_kinds = ""
                resp_code_k = return_code['OK']

            if jreq.has_key('mixins'):
                logger.debug("===== Channel_get_filtered_categories: Mixins filter is found and channeled =====")
                filtered_mixins, resp_code_m = self.manager_m.get_filtered_mixins(jreq['mixins'], res['mixins'])
            else:
                logger.debug("Channel_get_filtered_categories: No mixin filter was found")
                filtered_mixins = ""
                resp_code_m = return_code['OK']

            if jreq.has_key('actions'):
                logger.debug("===== Channel_get_filtered_categories: Actions filter is found and channeled =====")
                filtered_actions, resp_code_a = self.manager_a.get_filtered_actions(jreq['actions'], res['actions'])
            else:
                logger.debug("ch get filter : No actions found")
                filtered_actions = ""
                resp_code_a = return_code['OK']

            #Step[3]: send them back to the dispatcher

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK'] or resp_code_m is not \
               return_code['OK']:
                return "An error has occurred, please check logs for more details", return_code['Bad Request']
            else:
                result = {'kinds': filtered_kinds, 'mixins': filtered_mixins, 'actions': filtered_actions}
                logger.debug("===== channel_get_filtered_categories ==== : Done with success")
                return result, return_code['OK']

    def channel_delete_categories(self, jreq):
        """
        Channel the delete request to the right methods
        Args:
            @param user_id: ID of the issuer of the post request
            @param jreq: Body content of the post request

        """
        #Step[1]: Get the data from the database to avoid replicates:

        db_occi_id = self.d_baker.bake_to_delete_categories()

        if db_occi_id is None:
            return "An error has occurred, please check log for more details", return_code['Bad Request']

        else:
            if jreq.has_key('kinds'):
                logger.debug("===== Channel_delete_categories : Kind filter is found and channeled =====")
                delete_kinds, resp_code_k = self.manager_k.delete_kind_documents(jreq['kinds'], db_occi_id)
            else:
                logger.debug("===== Channel_delete_categories : No Kind filter was found =====")
                delete_kinds = list()
                resp_code_k = return_code['OK']

            if jreq.has_key('mixins'):
                db_mixin_entities = self.d_baker.bake_to_delete_categories_mixins(jreq['mixins'])
                logger.debug("===== Channel_delete_categories : Mixin filter is found and channeled =====")
                delete_mixins, to_update, resp_code_m = self.manager_m.delete_mixin_documents(jreq['mixins'],
                    db_occi_id, db_mixin_entities)
            else:
                logger.debug("===== Channel_delete_categories : No Mixin filter was found =====")
                delete_mixins = list()
                to_update = list()
                resp_code_m = return_code['OK']

            if jreq.has_key('actions'):
                logger.debug("===== Channel_delete_categories : Action filter is found and channeled =====")
                delete_actions, resp_code_a = self.manager_a.delete_action_documents(jreq['actions'], db_occi_id)
            else:
                logger.debug("===== Channel_delete_categories : Action filter is found and channeled =====")
                delete_actions = list()
                resp_code_a = return_code['OK']

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK']\
            or resp_code_m is not return_code['OK']:
                return "An error has occurred, please check log for more details", return_code['Bad Request']

            categories = delete_kinds + delete_mixins + delete_actions

            self.PostMan.save_deleted_categories_in_db(categories, to_update)

            logger.debug("===== channel_delete_categories ==== : Done with success")

            return "", return_code['OK']


    def channel_update_categories(self, j_newData):
        """
        Channel the PUT requests to their right methods
        Args:
            @param j_newData: Body content of the post request
        """
        #Step[1]: Get the data from the database to avoid replicates:

        db_occi_id_doc = self.d_baker.bake_to_update_categories()

        if db_occi_id_doc is None:
            return "An error has occurred, please check log for more details", return_code['Bad Request']
        else:
            if j_newData.has_key('actions'):
                logger.debug("===== Update categories : Action filter is found and channeled =====")
                updated_actions, resp_code_a = self.manager_a.update_OCCI_action_descriptions(j_newData['actions'],
                    db_occi_id_doc)
            else:
                logger.debug("===== Update categories : No Action filter was found =====")
                updated_actions = list()
                resp_code_a = return_code['OK']

            if j_newData.has_key('kinds'):
                logger.debug("===== Update categories : Kind filter is found and channeled =====")
                updated_kinds, resp_code_k = self.manager_k.update_OCCI_kind_descriptions(j_newData['kinds'],
                    db_occi_id_doc)
            else:
                logger.debug("===== Update categories : No Kind filter was found =====")
                updated_kinds = list()
                resp_code_k = return_code['OK']

            if j_newData.has_key('providers'):
                logger.debug("===== Update categories : Provider filter is found and channeled =====")
                updated_providers, resp_code_p = self.manager_k.update_kind_providers(j_newData['providers'],
                    db_occi_id_doc)
            else:
                logger.debug("===== Update categories : No Provider filter was found =====")
                updated_providers = list()
                resp_code_p = return_code['OK']

            if j_newData.has_key('mixins'):
                logger.debug("===== Update categories : Mixin filter is found and channeled =====")
                updated_mixins, resp_code_m = self.manager_m.update_OCCI_mixin_descriptions(j_newData['mixins'],
                    db_occi_id_doc)
            else:
                logger.debug("===== Update categories : No Mixin filter was found =====")
                updated_mixins = list()
                resp_code_m = return_code['OK']

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK']\
               or resp_code_m is not return_code['OK'] or resp_code_p is not return_code['OK']:
                return "An error has occurred, please check log for more details", return_code['Bad Request']

            categories = updated_kinds + updated_providers + updated_mixins + updated_actions
            self.PostMan.save_updated_docs_in_db(categories)
            logger.debug("===== channel_update_categories ==== : Done with success")

            return "", return_code['OK']
class CategoryJungler:
    """

        Handles category (a.k.a Kinds, Mixins and Actions) requests

    """

    def __init__(self):

        self.manager_k = KindManager()
        self.manager_m = MixinManager()
        self.manager_a = ActionManager()
        self.d_baker = CategoryDataBaker()
        self.PostMan = PostMan()


    def channel_register_categories(self, jreq):
        """
        Create new categories (Kind and/or mixin and/or actions)

        Args:
            @param jreq: OCCI category descriptions

        """

        #Step[1]: Get the data from the database:

        db_occi_ids, db_occi_locs = self.d_baker.bake_to_register_categories()

        #Step[2]: Ask the managers to create the new categories:

        if (db_occi_ids is None) or (db_occi_locs is None):
            return "An error has occurred, please check log for more details", return_code['Bad Request']
        else:
            if jreq.has_key('actions'):
                logger.debug("===== channel_register_categories ==== : Actions channeled")
                new_actions, resp_code_a = self.manager_a.register_actions(jreq['actions'], db_occi_ids)

            else:
                logger.debug("===== channel_register_categories ==== : no actions found")
                new_actions = list()
                resp_code_a = return_code['OK']

            if jreq.has_key('kinds'):
                logger.debug("===== channel_register_categories ==== : Kinds channeled")
                new_kinds, resp_code_k = self.manager_k.register_kinds(jreq['kinds'], db_occi_ids, db_occi_locs)

            else:
                logger.debug("===== channel_register_categories ==== : no kinds found")
                new_kinds = list()
                resp_code_k = return_code['OK']

            if jreq.has_key('mixins'):
                logger.debug("===== channel_register_categories ==== : Mixins channeled")
                new_mixins, resp_code_m = self.manager_m.register_mixins(jreq['mixins'], db_occi_ids, db_occi_locs)
            else:
                logger.debug("===== channel_register_categories ==== : No mixins found")
                new_mixins = list()
                resp_code_m = return_code['OK']

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK'] or resp_code_m is not \
               return_code['OK']:
                return "An error has occurred, please check log for more details", return_code['Bad Request']

            else:

                categories = new_kinds + new_mixins + new_actions

                #Step[3]: Save the new categories in the database using the PostMan
                self.PostMan.save_registered_docs_in_db(categories)
                logger.debug("===== channel_register_categories ==== : Done with success")
                return "", return_code['OK']

    def channel_get_all_categories(self):
        """
        Retrieve all categories (Kinds, Mixins and Actions)

        """
        #Step[1]: Call the dataBaker to get the Data from DB

        res = self.d_baker.bake_to_get_all_categories()

        #Step[2]: Return all the results back to the dispatcher

        if res is None:

            return res, return_code['Internal Server Error']

        else:
            logger.debug("===== channel_get_all_categories ==== : Done with success")
            return res, return_code['OK']


    def channel_get_filtered_categories(self, jreq):
        """
        Retrieve the categories (Kinds, Mixins and Actions) matching the filter

        Args:
            @param jreq: Category filter

        """

        #Step[1]: Call the dataBaker to get the Data from DB

        res = self.d_baker.bake_to_get_all_categories()

        #Step[2]: Ask the managers to filter the results

        if res is None:
            return return_code['Internal Server Error'], res
        else:
            if jreq.has_key('kinds'):
                logger.debug("===== Channel_get_filtered_categories: Kinds filter is found and channeled =====")
                filtered_kinds, resp_code_k = self.manager_k.get_filtered_kinds(jreq['kinds'], res['kinds'])
            else:
                logger.debug("===== Channel_get_filtered_categories: No kind filter was found =====")
                filtered_kinds = ""
                resp_code_k = return_code['OK']

            if jreq.has_key('mixins'):
                logger.debug("===== Channel_get_filtered_categories: Mixins filter is found and channeled =====")
                filtered_mixins, resp_code_m = self.manager_m.get_filtered_mixins(jreq['mixins'], res['mixins'])
            else:
                logger.debug("Channel_get_filtered_categories: No mixin filter was found")
                filtered_mixins = ""
                resp_code_m = return_code['OK']

            if jreq.has_key('actions'):
                logger.debug("===== Channel_get_filtered_categories: Actions filter is found and channeled =====")
                filtered_actions, resp_code_a = self.manager_a.get_filtered_actions(jreq['actions'], res['actions'])
            else:
                logger.debug("ch get filter : No actions found")
                filtered_actions = ""
                resp_code_a = return_code['OK']

            #Step[3]: send them back to the dispatcher

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK'] or resp_code_m is not \
               return_code['OK']:
                return "An error has occurred, please check logs for more details", return_code['Bad Request']
            else:
                result = {'kinds': filtered_kinds, 'mixins': filtered_mixins, 'actions': filtered_actions}
                logger.debug("===== channel_get_filtered_categories ==== : Done with success")
                return result, return_code['OK']

    def channel_delete_categories(self, jreq):
        """
        Delete categories

        Args:
            @param jreq: OCCI_ID of the categories to delete

        """
        #Step[1]: Get the data from the database:

        db_occi_id = self.d_baker.bake_to_delete_categories()

        if db_occi_id is None:
            return "An error has occurred, please check log for more details", return_code['Bad Request']

        else:
            #Step[2]: Ask the managers to delete these documents

            if jreq.has_key('kinds'):
                logger.debug("===== Channel_delete_categories : Kind filter is found and channeled =====")
                delete_kinds, resp_code_k = self.manager_k.delete_kind_documents(jreq['kinds'], db_occi_id)
            else:
                logger.debug("===== Channel_delete_categories : No Kind filter was found =====")
                delete_kinds = list()
                resp_code_k = return_code['OK']

            if jreq.has_key('mixins'):
                #Note: Resources must be dissociated from mixins before deleting mixin
                db_mixin_entities = self.d_baker.bake_to_delete_categories_mixins(jreq['mixins'])
                logger.debug("===== Channel_delete_categories : Mixin filter is found and channeled =====")
                delete_mixins, to_update, resp_code_m = self.manager_m.delete_mixin_documents(jreq['mixins'],
                    db_occi_id, db_mixin_entities)
            else:
                logger.debug("===== Channel_delete_categories : No Mixin filter was found =====")
                delete_mixins = list()
                to_update = list()
                resp_code_m = return_code['OK']

            if jreq.has_key('actions'):
                logger.debug("===== Channel_delete_categories : Action filter is found and channeled =====")
                delete_actions, resp_code_a = self.manager_a.delete_action_documents(jreq['actions'], db_occi_id)
            else:
                logger.debug("===== Channel_delete_categories : Action filter is found and channeled =====")
                delete_actions = list()
                resp_code_a = return_code['OK']

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK']\
            or resp_code_m is not return_code['OK']:
                return "An error has occurred, please check log for more details", return_code['Bad Request']

            categories = delete_kinds + delete_mixins + delete_actions

            #Step[3]: Ask to post man to delete the categories from DB
            self.PostMan.save_deleted_categories_in_db(categories, to_update)

            logger.debug("===== channel_delete_categories ==== : Done with success")

            return "", return_code['OK']


    def channel_update_categories(self, j_newData):
        """
        Update the categories

        Args:
            @param j_newData: new OCCI category description
        """

        #Step[1]: Get the data from the database:

        db_occi_id_doc = self.d_baker.bake_to_update_categories()

        if db_occi_id_doc is None:
            return "An error has occurred, please check log for more details", return_code['Bad Request']

        else:
            #Step[2]: Ask the managers to update the categories

            if j_newData.has_key('actions'):
                logger.debug("===== Update categories : Action filter is found and channeled =====")
                updated_actions, resp_code_a = self.manager_a.update_OCCI_action_descriptions(j_newData['actions'],
                    db_occi_id_doc)
            else:
                logger.debug("===== Update categories : No Action filter was found =====")
                updated_actions = list()
                resp_code_a = return_code['OK']

            if j_newData.has_key('kinds'):
                logger.debug("===== Update categories : Kind filter is found and channeled =====")
                updated_kinds, resp_code_k = self.manager_k.update_OCCI_kind_descriptions(j_newData['kinds'],
                    db_occi_id_doc)
            else:
                logger.debug("===== Update categories : No Kind filter was found =====")
                updated_kinds = list()
                resp_code_k = return_code['OK']

            #Note: Update the kind providers

            if j_newData.has_key('providers'):
                logger.debug("===== Update categories : Provider filter is found and channeled =====")
                updated_providers, resp_code_p = self.manager_k.update_kind_providers(j_newData['providers'],
                    db_occi_id_doc)
            else:
                logger.debug("===== Update categories : No Provider filter was found =====")
                updated_providers = list()
                resp_code_p = return_code['OK']

            if j_newData.has_key('mixins'):
                logger.debug("===== Update categories : Mixin filter is found and channeled =====")
                updated_mixins, resp_code_m = self.manager_m.update_OCCI_mixin_descriptions(j_newData['mixins'],
                    db_occi_id_doc)
            else:
                logger.debug("===== Update categories : No Mixin filter was found =====")
                updated_mixins = list()
                resp_code_m = return_code['OK']

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK']\
               or resp_code_m is not return_code['OK'] or resp_code_p is not return_code['OK']:
                return "An error has occurred, please check log for more details", return_code['Bad Request']

            categories = updated_kinds + updated_providers + updated_mixins + updated_actions

            #Step[3]: Ask the post man to update the categories in DB

            self.PostMan.save_updated_docs_in_db(categories)
            logger.debug("===== channel_update_categories ==== : Done with success")

            return "", return_code['OK']
Beispiel #5
0
class CategoryJungler:
    """

        Handles category (a.k.a Kinds, Mixins and Actions) requests

    """
    def __init__(self):

        self.manager_k = KindManager()
        self.manager_m = MixinManager()
        self.manager_a = ActionManager()
        self.d_baker = CategoryDataBaker()
        self.PostMan = PostMan()

    def channel_register_categories(self, jreq):
        """
        Create new categories (Kind and/or mixin and/or actions)

        Args:
            @param jreq: OCCI category descriptions

        """

        #Step[1]: Get the data from the database:

        db_occi_ids, db_occi_locs = self.d_baker.bake_to_register_categories()

        #Step[2]: Ask the managers to create the new categories:

        if (db_occi_ids is None) or (db_occi_locs is None):
            return "An error has occurred, please check log for more details", return_code[
                'Bad Request']
        else:
            if jreq.has_key('actions'):
                logger.debug(
                    "===== channel_register_categories ==== : Actions channeled"
                )
                new_actions, resp_code_a = self.manager_a.register_actions(
                    jreq['actions'], db_occi_ids)

            else:
                logger.debug(
                    "===== channel_register_categories ==== : no actions found"
                )
                new_actions = list()
                resp_code_a = return_code['OK']

            if jreq.has_key('kinds'):
                logger.debug(
                    "===== channel_register_categories ==== : Kinds channeled")
                new_kinds, resp_code_k = self.manager_k.register_kinds(
                    jreq['kinds'], db_occi_ids, db_occi_locs)

            else:
                logger.debug(
                    "===== channel_register_categories ==== : no kinds found")
                new_kinds = list()
                resp_code_k = return_code['OK']

            if jreq.has_key('mixins'):
                logger.debug(
                    "===== channel_register_categories ==== : Mixins channeled"
                )
                new_mixins, resp_code_m = self.manager_m.register_mixins(
                    jreq['mixins'], db_occi_ids, db_occi_locs)
            else:
                logger.debug(
                    "===== channel_register_categories ==== : No mixins found")
                new_mixins = list()
                resp_code_m = return_code['OK']

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK'] or resp_code_m is not \
               return_code['OK']:
                return "An error has occurred, please check log for more details", return_code[
                    'Bad Request']

            else:

                categories = new_kinds + new_mixins + new_actions

                #Step[3]: Save the new categories in the database using the PostMan
                self.PostMan.save_registered_docs_in_db(categories)
                logger.debug(
                    "===== channel_register_categories ==== : Done with success"
                )
                return "", return_code['OK']

    def channel_get_all_categories(self):
        """
        Retrieve all categories (Kinds, Mixins and Actions)

        """
        #Step[1]: Call the dataBaker to get the Data from DB

        res = self.d_baker.bake_to_get_all_categories()

        #Step[2]: Return all the results back to the dispatcher

        if res is None:

            return res, return_code['Internal Server Error']

        else:
            logger.debug(
                "===== channel_get_all_categories ==== : Done with success")
            return res, return_code['OK']

    def channel_get_filtered_categories(self, jreq):
        """
        Retrieve the categories (Kinds, Mixins and Actions) matching the filter

        Args:
            @param jreq: Category filter

        """

        #Step[1]: Call the dataBaker to get the Data from DB

        res = self.d_baker.bake_to_get_all_categories()

        #Step[2]: Ask the managers to filter the results

        if res is None:
            return return_code['Internal Server Error'], res
        else:
            if jreq.has_key('kinds'):
                logger.debug(
                    "===== Channel_get_filtered_categories: Kinds filter is found and channeled ====="
                )
                filtered_kinds, resp_code_k = self.manager_k.get_filtered_kinds(
                    jreq['kinds'], res['kinds'])
            else:
                logger.debug(
                    "===== Channel_get_filtered_categories: No kind filter was found ====="
                )
                filtered_kinds = ""
                resp_code_k = return_code['OK']

            if jreq.has_key('mixins'):
                logger.debug(
                    "===== Channel_get_filtered_categories: Mixins filter is found and channeled ====="
                )
                filtered_mixins, resp_code_m = self.manager_m.get_filtered_mixins(
                    jreq['mixins'], res['mixins'])
            else:
                logger.debug(
                    "Channel_get_filtered_categories: No mixin filter was found"
                )
                filtered_mixins = ""
                resp_code_m = return_code['OK']

            if jreq.has_key('actions'):
                logger.debug(
                    "===== Channel_get_filtered_categories: Actions filter is found and channeled ====="
                )
                filtered_actions, resp_code_a = self.manager_a.get_filtered_actions(
                    jreq['actions'], res['actions'])
            else:
                logger.debug("ch get filter : No actions found")
                filtered_actions = ""
                resp_code_a = return_code['OK']

            #Step[3]: send them back to the dispatcher

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK'] or resp_code_m is not \
               return_code['OK']:
                return "An error has occurred, please check logs for more details", return_code[
                    'Bad Request']
            else:
                result = {
                    'kinds': filtered_kinds,
                    'mixins': filtered_mixins,
                    'actions': filtered_actions
                }
                logger.debug(
                    "===== channel_get_filtered_categories ==== : Done with success"
                )
                return result, return_code['OK']

    def channel_delete_categories(self, jreq):
        """
        Delete categories

        Args:
            @param jreq: OCCI_ID of the categories to delete

        """
        #Step[1]: Get the data from the database:

        db_occi_id = self.d_baker.bake_to_delete_categories()

        if db_occi_id is None:
            return "An error has occurred, please check log for more details", return_code[
                'Bad Request']

        else:
            #Step[2]: Ask the managers to delete these documents

            if jreq.has_key('kinds'):
                logger.debug(
                    "===== Channel_delete_categories : Kind filter is found and channeled ====="
                )
                delete_kinds, resp_code_k = self.manager_k.delete_kind_documents(
                    jreq['kinds'], db_occi_id)
            else:
                logger.debug(
                    "===== Channel_delete_categories : No Kind filter was found ====="
                )
                delete_kinds = list()
                resp_code_k = return_code['OK']

            if jreq.has_key('mixins'):
                #Note: Resources must be dissociated from mixins before deleting mixin
                db_mixin_entities = self.d_baker.bake_to_delete_categories_mixins(
                    jreq['mixins'])
                logger.debug(
                    "===== Channel_delete_categories : Mixin filter is found and channeled ====="
                )
                delete_mixins, to_update, resp_code_m = self.manager_m.delete_mixin_documents(
                    jreq['mixins'], db_occi_id, db_mixin_entities)
            else:
                logger.debug(
                    "===== Channel_delete_categories : No Mixin filter was found ====="
                )
                delete_mixins = list()
                to_update = list()
                resp_code_m = return_code['OK']

            if jreq.has_key('actions'):
                logger.debug(
                    "===== Channel_delete_categories : Action filter is found and channeled ====="
                )
                delete_actions, resp_code_a = self.manager_a.delete_action_documents(
                    jreq['actions'], db_occi_id)
            else:
                logger.debug(
                    "===== Channel_delete_categories : Action filter is found and channeled ====="
                )
                delete_actions = list()
                resp_code_a = return_code['OK']

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK']\
            or resp_code_m is not return_code['OK']:
                return "An error has occurred, please check log for more details", return_code[
                    'Bad Request']

            categories = delete_kinds + delete_mixins + delete_actions

            #Step[3]: Ask to post man to delete the categories from DB
            self.PostMan.save_deleted_categories_in_db(categories, to_update)

            logger.debug(
                "===== channel_delete_categories ==== : Done with success")

            return "", return_code['OK']

    def channel_update_categories(self, j_newData):
        """
        Update the categories

        Args:
            @param j_newData: new OCCI category description
        """

        #Step[1]: Get the data from the database:

        db_occi_id_doc = self.d_baker.bake_to_update_categories()

        if db_occi_id_doc is None:
            return "An error has occurred, please check log for more details", return_code[
                'Bad Request']

        else:
            #Step[2]: Ask the managers to update the categories

            if j_newData.has_key('actions'):
                logger.debug(
                    "===== Update categories : Action filter is found and channeled ====="
                )
                updated_actions, resp_code_a = self.manager_a.update_OCCI_action_descriptions(
                    j_newData['actions'], db_occi_id_doc)
            else:
                logger.debug(
                    "===== Update categories : No Action filter was found ====="
                )
                updated_actions = list()
                resp_code_a = return_code['OK']

            if j_newData.has_key('kinds'):
                logger.debug(
                    "===== Update categories : Kind filter is found and channeled ====="
                )
                updated_kinds, resp_code_k = self.manager_k.update_OCCI_kind_descriptions(
                    j_newData['kinds'], db_occi_id_doc)
            else:
                logger.debug(
                    "===== Update categories : No Kind filter was found =====")
                updated_kinds = list()
                resp_code_k = return_code['OK']

            #Note: Update the kind providers

            if j_newData.has_key('providers'):
                logger.debug(
                    "===== Update categories : Provider filter is found and channeled ====="
                )
                updated_providers, resp_code_p = self.manager_k.update_kind_providers(
                    j_newData['providers'], db_occi_id_doc)
            else:
                logger.debug(
                    "===== Update categories : No Provider filter was found ====="
                )
                updated_providers = list()
                resp_code_p = return_code['OK']

            if j_newData.has_key('mixins'):
                logger.debug(
                    "===== Update categories : Mixin filter is found and channeled ====="
                )
                updated_mixins, resp_code_m = self.manager_m.update_OCCI_mixin_descriptions(
                    j_newData['mixins'], db_occi_id_doc)
            else:
                logger.debug(
                    "===== Update categories : No Mixin filter was found ====="
                )
                updated_mixins = list()
                resp_code_m = return_code['OK']

            if resp_code_a is not return_code['OK'] or resp_code_k is not return_code['OK']\
               or resp_code_m is not return_code['OK'] or resp_code_p is not return_code['OK']:
                return "An error has occurred, please check log for more details", return_code[
                    'Bad Request']

            categories = updated_kinds + updated_providers + updated_mixins + updated_actions

            #Step[3]: Ask the post man to update the categories in DB

            self.PostMan.save_updated_docs_in_db(categories)
            logger.debug(
                "===== channel_update_categories ==== : Done with success")

            return "", return_code['OK']