package com.baeldung.service; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.task.api.Task; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baeldung.domain.Approval; import com.baeldung.domain.Article; @Service public class ArticleWorkflowService { @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Transactional public void startProcess(Article article) { Map variables = new HashMap(); variables.put("author", article.getAuthor()); variables.put("url", article.getUrl()); runtimeService.startProcessInstanceByKey("articleReview", variables); } @Transactional public List
getTasks(String assignee) { List tasks = taskService.createTaskQuery() .taskCandidateGroup(assignee) .list(); List
articles = tasks.stream() .map(task -> { Map variables = taskService.getVariables(task.getId()); return new Article( task.getId(), (String) variables.get("author"), (String) variables.get("url")); }) .collect(Collectors.toList()); return articles; } @Transactional public void submitReview(Approval approval) { Map variables = new HashMap(); variables.put("approved", approval.isStatus()); taskService.complete(approval.getId(), variables); } }