package com.mossle.humantask.listener; import java.util.Calendar; import java.util.Date; import java.util.List; import javax.annotation.Resource; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.Duration; import com.mossle.humantask.persistence.domain.TaskDeadline; import com.mossle.humantask.persistence.domain.TaskInfo; import com.mossle.humantask.persistence.manager.TaskDeadlineManager; import com.mossle.spi.humantask.DeadlineDTO; import com.mossle.spi.humantask.TaskDefinitionConnector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DeadlineHumanTaskListener implements HumanTaskListener { private static Logger logger = LoggerFactory .getLogger(DeadlineHumanTaskListener.class); private TaskDefinitionConnector taskDefinitionConnector; private TaskDeadlineManager taskDeadlineManager; @Override public void onCreate(TaskInfo taskInfo) { String taskDefinitionKey = taskInfo.getCode(); String processDefinitionId = taskInfo.getProcessDefinitionId(); List<DeadlineDTO> deadlines = taskDefinitionConnector.findDeadlines( taskDefinitionKey, processDefinitionId); for (DeadlineDTO deadline : deadlines) { try { String durationText = deadline.getDuration(); Date now = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(now); DatatypeFactory datatypeFactory = DatatypeFactory.newInstance(); Duration duration = datatypeFactory.newDuration(durationText); duration.addTo(calendar); Date deadlineTime = calendar.getTime(); TaskDeadline taskDeadline = new TaskDeadline(); taskDeadline.setTaskInfo(taskInfo); taskDeadline.setType(deadline.getType()); taskDeadline.setDeadlineTime(deadlineTime); taskDeadline .setNotificationType(deadline.getNotificationType()); taskDeadline.setNotificationTemplateCode(deadline .getNotificationTemplateCode()); taskDeadline.setNotificationReceiver(deadline .getNotificationReceiver()); taskDeadlineManager.save(taskDeadline); } catch (Exception ex) { logger.error(ex.getMessage(), ex); } } } @Override public void onComplete(TaskInfo taskInfo) throws Exception { } @Resource public void setTaskDefinitionConnector( TaskDefinitionConnector taskDefinitionConnector) { this.taskDefinitionConnector = taskDefinitionConnector; } @Resource public void setTaskDeadlineManager(TaskDeadlineManager taskDeadlineManager) { this.taskDeadlineManager = taskDeadlineManager; } }