docs: def move_asset_ahead(self, asset_id, composition_id, reference_id):
          """Reorders assets in a composition by moving the specified asset in front of a reference asset.
  
          arg:    asset_id (osid.id.Id): ``Id`` of the ``Asset``
          arg:    composition_id (osid.id.Id): ``Id`` of the
                  ``Composition``
          arg:    reference_id (osid.id.Id): ``Id`` of the reference
                  ``Asset``
          raise:  NotFound - ``asset_id`` or ``reference_id``  ``not found
                  in composition_id``
          raise:  NullArgument - ``asset_id, reference_id`` or
                  ``composition_id`` is ``null``
          raise:  OperationFailed - unable to complete request
          raise:  PermissionDenied - authorization fauilure
          *compliance: mandatory -- This method must be implemented.*
  
          """
          if (not isinstance(composition_id, ABCId) and
                  composition_id.get_identifier_namespace() != 'repository.Composition'):
              raise errors.InvalidArgument('the argument is not a valid OSID Id')
          composition_map, collection = self._get_composition_collection(composition_id)
          composition_map['assetIds'] = move_id_ahead(asset_id, reference_id, composition_map['assetIds'])
          collection.save(composition_map)