@Override
  public void deleteWorkflowRequest(String requestId) throws WorkflowException {
    String loggedUser = CarbonContext.getThreadLocalCarbonContext().getUsername();
    String createdUser = workflowRequestDAO.retrieveCreatedUserOfRequest(requestId);
    if (!loggedUser.equals(createdUser)) {
      throw new WorkflowException("User not authorized to delete this request");
    }
    List<WorkflowRequestDeleteListener> workflowRequestDeleteListenerList =
        WorkflowServiceDataHolder.getInstance().getWorkflowRequestDeleteListenerList();

    WorkflowRequest workflowRequest = new WorkflowRequest();
    workflowRequest.setRequestId(requestId);
    workflowRequest.setCreatedBy(createdUser);

    for (WorkflowRequestDeleteListener workflowRequestDeleteListener :
        workflowRequestDeleteListenerList) {
      try {
        workflowRequestDeleteListener.doPreDeleteWorkflowRequest(workflowRequest);
      } catch (WorkflowException e) {
        throw new WorkflowException(
            "Error occurred while calling doPreDeleteWorkflowRequest in WorkflowRequestDeleteListener ,"
                + workflowRequestDeleteListener.getClass().getName(),
            e);
      }
    }

    workflowRequestDAO.updateStatusOfRequest(requestId, WorkflowRequestStatus.DELETED.toString());
    workflowRequestAssociationDAO.updateStatusOfRelationshipsOfPendingRequest(
        requestId, WFConstant.HT_STATE_SKIPPED);
    requestEntityRelationshipDAO.deleteRelationshipsOfRequest(requestId);

    for (WorkflowRequestDeleteListener workflowRequestDeleteListener :
        workflowRequestDeleteListenerList) {
      try {
        workflowRequestDeleteListener.doPostDeleteWorkflowRequest(workflowRequest);
      } catch (WorkflowException e) {
        throw new WorkflowException(
            "Error occurred while calling doPostDeleteWorkflowRequest in WorkflowRequestDeleteListener ,"
                + workflowRequestDeleteListener.getClass().getName(),
            e);
      }
    }
  }