def move_objective_ahead(self, parent_objective_id=None, reference_objective_id=None, objective_id=None):
<EOL>if (parent_objective_id is None or<EOL>reference_objective_id is None or<EOL>objective_id is None):<EOL><INDENT>raise NullArgument()<EOL><DEDENT>ohs = ObjectiveHierarchySession(self._objective_bank_id, runtime=self._runtime)<EOL>if (not ohs.is_child_of_objective(objective_id, parent_objective_id) or<EOL>not ohs.is_child_of_objective(reference_objective_id, parent_objective_id)):<EOL><INDENT>raise NotFound('<STR_LIT>')<EOL><DEDENT>ids_arg = {'<STR_LIT>': []}<EOL>for ident in ohs.get_child_objective_ids(parent_objective_id):<EOL><INDENT>ids_arg['<STR_LIT>'].append(str(ident))<EOL><DEDENT>if objective_id != reference_objective_id:<EOL><INDENT>ids_arg['<STR_LIT>'].remove(str(objective_id))<EOL>index = ids_arg['<STR_LIT>'].index(str(reference_objective_id))<EOL>ids_arg['<STR_LIT>'].insert(index, str(objective_id))<EOL><DEDENT>url_path = construct_url('<STR_LIT>',<EOL>bank_id=self._catalog_idstr,<EOL>obj_id=parent_objective_id)<EOL>try:<EOL><INDENT>result = self._put_request(url_path, ids_arg)<EOL><DEDENT>except Exception:<EOL><INDENT>raise<EOL><DEDENT>id_list = list()<EOL>for identifier in result['<STR_LIT>']:<EOL><INDENT>id_list.append(Id(idstr=identifier))<EOL><DEDENT>return id_objects.IdList(id_list)<EOL>
Moves an objective ahead of a refrence objective under the given
        parent.

        arg:    parent_objective_id (osid.id.Id): the Id of the parent
                objective
        arg:    reference_objective_id (osid.id.Id): the Id of the
                objective
        arg:    objective_id (osid.id.Id): the Id of the objective to
                move ahead of reference_objective_id
        raise:  NotFound - parent_objective_id, reference_objective_id,
                or objective_id not found, or reference_objective_id or
                objective_id is not a child of parent_objective_id
        raise:  NullArgument - parent_objective_id,
                reference_objective_id, or id is null
        raise:  OperationFailed - unable to complete request
        raise:  PermissionDenied - authorization failure
        compliance: mandatory - This method must be implemented.