public Void execute(Context cntxt) {
    TaskContext context = (TaskContext) cntxt;
    doCallbackUserOperation(userId, context);
    groupIds = doUserGroupCallbackOperation(userId, null, context);
    context.set("local:groups", groupIds);

    Task task = context.getTaskQueryService().getTaskInstanceById(taskId);
    context
        .getTaskRuleService()
        .executeRules(task, userId, data, TaskRuleService.COMPLETE_TASK_SCOPE);

    TaskInstanceService instanceService = context.getTaskInstanceService();
    instanceService.complete(taskId, userId, data);
    return null;
  }
 public void setPriority(long taskId, int priority) {
   taskInstanceService.setPriority(taskId, priority);
 }
 public void activate(long taskId, String userId) {
   taskInstanceService.activate(taskId, userId);
 }
 public SubTasksStrategy getSubTaskStrategy(long taskId) {
   return taskInstanceService.getSubTaskStrategy(taskId);
 }
 public List<I18NText> getDescriptions(long taskId) {
   return taskInstanceService.getDescriptions(taskId);
 }
 public int getPriority(long taskId) {
   return taskInstanceService.getPriority(taskId);
 }
 public void setSkipable(long taskId, boolean skipable) {
   taskInstanceService.setSkipable(taskId, skipable);
 }
 public void setExpirationDate(long taskId, Date date) {
   taskInstanceService.setExpirationDate(taskId, date);
 }
 public void deleteOutput(long taskId, String userId) {
   taskInstanceService.deleteOutput(taskId, userId);
 }
 public void delegate(long taskId, String userId, String targetUserId) {
   taskInstanceService.delegate(taskId, userId, targetUserId);
 }
 public void complete(long taskId, String userId, Map<String, Object> data) {
   taskInstanceService.complete(taskId, userId, data);
 }
 public void claimNextAvailable(String userId, List<String> groupIds, String language) {
   taskInstanceService.claimNextAvailable(userId, groupIds, language);
 }
 public void claimNextAvailable(String userId, String language) {
   taskInstanceService.claimNextAvailable(userId, language);
 }
 public void claim(long taskId, String userId, List<String> groupIds) {
   taskInstanceService.claim(taskId, userId, groupIds);
 }
 public void claim(long taskId, String userId) {
   taskInstanceService.claim(taskId, userId);
 }
 public void stop(long taskId, String userId) {
   taskInstanceService.stop(taskId, userId);
 }
 public void suspend(long taskId, String userId) {
   taskInstanceService.suspend(taskId, userId);
 }
 public void exit(long taskId, String userId) {
   taskInstanceService.exit(taskId, userId);
 }
 public void setDescriptions(long taskId, List<I18NText> descriptions) {
   taskInstanceService.setDescriptions(taskId, descriptions);
 }
 public void fail(long taskId, String userId, Map<String, Object> faultData) {
   taskInstanceService.fail(taskId, userId, faultData);
 }
 public void setSubTaskStrategy(long taskId, SubTasksStrategy strategy) {
   taskInstanceService.setSubTaskStrategy(taskId, strategy);
 }
 public void forward(long taskId, String userId, String targetEntityId) {
   taskInstanceService.forward(taskId, userId, targetEntityId);
 }
 public Date getExpirationDate(long taskId) {
   return taskInstanceService.getExpirationDate(taskId);
 }
 public void resume(long taskId, String userId) {
   taskInstanceService.resume(taskId, userId);
 }
 public boolean isSkipable(long taskId) {
   return taskInstanceService.isSkipable(taskId);
 }
 public void setFault(long taskId, String userId, FaultData fault) {
   taskInstanceService.setFault(taskId, userId, fault);
 }
 public void setTaskNames(long taskId, List<I18NText> taskName) {
   taskInstanceService.setTaskNames(taskId, taskName);
 }
 public void setOutput(long taskId, String userId, Object outputContentData) {
   taskInstanceService.setOutput(taskId, userId, outputContentData);
 }