@utilities.arguments_not_none<EOL><INDENT>def get_catalog(self, catalog_id):<DEDENT>
<EOL>if self._catalog_session is not None:<EOL><INDENT>return self._catalog_session.get_catalog(catalog_id=catalog_id)<EOL><DEDENT>collection = JSONClientValidated('<STR_LIT>',<EOL>collection='<STR_LIT>',<EOL>runtime=self._runtime)<EOL>if catalog_id.get_identifier() == PHANTOM_ROOT_IDENTIFIER:<EOL><INDENT>return self._get_phantom_root_catalog(cat_class=objects.Catalog, cat_name='<STR_LIT>')<EOL><DEDENT>try:<EOL><INDENT>result = collection.find_one({'<STR_LIT>': ObjectId(self._get_id(catalog_id, '<STR_LIT>').get_identifier())})<EOL><DEDENT>except errors.NotFound:<EOL><INDENT>result = self._create_orchestrated_cat(catalog_id, '<STR_LIT>', '<STR_LIT>')<EOL><DEDENT>return objects.Catalog(osid_object_map=result, runtime=self._runtime, proxy=self._proxy)<EOL>
Gets the ``Catalog`` specified by its ``Id``.

        In plenary mode, the exact ``Id`` is found or a ``NotFound``
        results. Otherwise, the returned ``Catalog`` may have a
        different ``Id`` than requested, such as the case where a
        duplicate ``Id`` was assigned to a ``Catalog`` and retained for
        compatibility.

        arg:    catalog_id (osid.id.Id): ``Id`` of the ``Catalog``
        return: (osid.cataloging.Catalog) - the catalog
        raise:  NotFound - ``catalog_id`` not found
        raise:  NullArgument - ``catalog_id`` is ``null``
        raise:  OperationFailed - unable to complete request
        raise:  PermissionDenied - authorization failure
        *compliance: mandatory -- This method is must be implemented.*