@Override
 public void afterTaskAddedEvent(TaskEvent event) {
   String userId = "";
   Task ti = event.getTask();
   TaskPersistenceContext persistenceContext =
       ((TaskContext) event.getTaskContext()).getPersistenceContext();
   if (ti.getTaskData().getActualOwner() != null) {
     userId = ti.getTaskData().getActualOwner().getId();
     persistenceContext.persist(
         new UserAuditTaskImpl(
             userId,
             ti.getId(),
             ti.getTaskData().getStatus().name(),
             ti.getTaskData().getActivationTime(),
             ti.getNames().get(0).getText(),
             (!ti.getDescriptions().isEmpty()) ? ti.getDescriptions().get(0).getText() : "",
             ti.getPriority(),
             (ti.getTaskData().getCreatedBy() == null)
                 ? ""
                 : ti.getTaskData().getCreatedBy().getId(),
             ti.getTaskData().getCreatedOn(),
             ti.getTaskData().getExpirationTime(),
             ti.getTaskData().getProcessInstanceId(),
             ti.getTaskData().getProcessId(),
             ti.getTaskData().getProcessSessionId(),
             ti.getTaskData().getParentId()));
   } else if (!ti.getPeopleAssignments().getPotentialOwners().isEmpty()) {
     StringBuilder sb = new StringBuilder();
     for (OrganizationalEntity o : ti.getPeopleAssignments().getPotentialOwners()) {
       sb.append(o.getId()).append("|");
     }
     persistenceContext.persist(
         new GroupAuditTaskImpl(
             sb.toString(),
             ti.getId(),
             ti.getTaskData().getStatus().name(),
             ti.getTaskData().getActivationTime(),
             ti.getNames().get(0).getText(),
             (!ti.getDescriptions().isEmpty()) ? ti.getDescriptions().get(0).getText() : "",
             ti.getPriority(),
             (ti.getTaskData().getCreatedBy() == null)
                 ? ""
                 : ti.getTaskData().getCreatedBy().getId(),
             ti.getTaskData().getCreatedOn(),
             ti.getTaskData().getExpirationTime(),
             ti.getTaskData().getProcessInstanceId(),
             ti.getTaskData().getProcessId(),
             ti.getTaskData().getProcessSessionId(),
             ti.getTaskData().getParentId()));
   }
   persistenceContext.persist(
       new TaskEventImpl(
           ti.getId(),
           org.kie.internal.task.api.model.TaskEvent.TaskEventType.ADDED,
           userId,
           new Date()));
 }
 @Override
 public void afterTaskActivatedEvent(TaskEvent event) {
   String userId = "";
   Task ti = event.getTask();
   TaskPersistenceContext persistenceContext =
       ((TaskContext) event.getTaskContext()).getPersistenceContext();
   if (ti.getTaskData().getActualOwner() != null) {
     userId = ti.getTaskData().getActualOwner().getId();
   }
   persistenceContext.persist(
       new TaskEventImpl(
           ti.getId(),
           org.kie.internal.task.api.model.TaskEvent.TaskEventType.ACTIVATED,
           userId,
           new Date()));
   UserAuditTask task = persistenceContext.find(UserAuditTaskImpl.class, ti.getId());
   task.setStatus(ti.getTaskData().getStatus().name());
   persistenceContext.persist(task);
 }
 @Override
 public void afterTaskClaimedEvent(TaskEvent event) {
   String userId = "";
   Task ti = event.getTask();
   TaskPersistenceContext persistenceContext =
       ((TaskContext) event.getTaskContext()).getPersistenceContext();
   if (ti.getTaskData().getActualOwner() != null) {
     userId = ti.getTaskData().getActualOwner().getId();
   }
   persistenceContext.persist(
       new TaskEventImpl(
           ti.getId(),
           org.kie.internal.task.api.model.TaskEvent.TaskEventType.CLAIMED,
           userId,
           new Date()));
   GroupAuditTaskImpl task = persistenceContext.find(GroupAuditTaskImpl.class, ti.getId());
   if (task != null) {
     persistenceContext.remove(task);
   }
   persistenceContext.persist(
       new UserAuditTaskImpl(
           userId,
           ti.getId(),
           ti.getTaskData().getStatus().name(),
           ti.getTaskData().getActivationTime(),
           ti.getNames().get(0).getText(),
           (!ti.getDescriptions().isEmpty()) ? ti.getDescriptions().get(0).getText() : "",
           ti.getPriority(),
           (ti.getTaskData().getCreatedBy() == null)
               ? ""
               : ti.getTaskData().getCreatedBy().getId(),
           ti.getTaskData().getCreatedOn(),
           ti.getTaskData().getExpirationTime(),
           ti.getTaskData().getProcessInstanceId(),
           ti.getTaskData().getProcessId(),
           ti.getTaskData().getProcessSessionId(),
           ti.getTaskData().getParentId()));
 }
 @Override
 public void afterTaskCompletedEvent(TaskEvent event) {
   String userId = "";
   Task ti = event.getTask();
   TaskPersistenceContext persistenceContext =
       ((TaskContext) event.getTaskContext()).getPersistenceContext();
   if (ti.getTaskData().getActualOwner() != null) {
     userId = ti.getTaskData().getActualOwner().getId();
   }
   persistenceContext.persist(
       new TaskEventImpl(
           ti.getId(),
           org.kie.internal.task.api.model.TaskEvent.TaskEventType.COMPLETED,
           userId,
           new Date()));
   UserAuditTask task = persistenceContext.find(UserAuditTaskImpl.class, ti.getId());
   if (task != null) {
     persistenceContext.remove(task);
     HistoryAuditTaskImpl historyAuditTaskImpl =
         new HistoryAuditTaskImpl(
             task.getActualOwner(),
             task.getTaskId(),
             ti.getTaskData().getStatus().name(),
             task.getActivationTime(),
             task.getName(),
             task.getDescription(),
             task.getPriority(),
             task.getCreatedBy(),
             task.getCreatedOn(),
             task.getDueDate(),
             task.getProcessInstanceId(),
             task.getProcessId(),
             task.getProcessSessionId(),
             task.getParentId());
     persistenceContext.persist(historyAuditTaskImpl);
   }
 }