
com.talanlabs.taskmanager.engine.manager.TaskObjectManagerBuilder Maven / Gradle / Ivy
The newest version!
package com.talanlabs.taskmanager.engine.manager;
import com.talanlabs.taskmanager.engine.graph.IStatusGraph;
import com.talanlabs.taskmanager.engine.task.IStatusTask;
import com.talanlabs.taskmanager.model.ITaskObject;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.tuple.Pair;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class TaskObjectManagerBuilder {
private MyTaskObjectManager taskObjectManager;
private TaskObjectManagerBuilder(Class taskObjectClass) {
super();
this.taskObjectManager = new MyTaskObjectManager<>(taskObjectClass);
}
public static TaskObjectManagerBuilder newBuilder(Class taskObjectClass) {
return new TaskObjectManagerBuilder<>(taskObjectClass);
}
public TaskObjectManagerBuilder initialStatus(E defaultInitialStatus) {
taskObjectManager.defaultInitialStatus = defaultInitialStatus;
return this;
}
public TaskObjectManagerBuilder initialStatus(IGetStatus getStatus) {
taskObjectManager.getStatus = getStatus;
return this;
}
public TaskObjectManagerBuilder statusGraphs(List> statusGraphs) {
taskObjectManager.statusGraphs = statusGraphs;
return this;
}
public TaskObjectManagerBuilder addTaskChainCriteria(E currentStatus, E nextStatus, String taskChainCriteria) {
taskObjectManager.taskChainCriteriaMap.put(Pair.of(currentStatus, nextStatus), taskChainCriteria);
return this;
}
public ITaskObjectManager build() {
return taskObjectManager;
}
public interface IGetStatus {
E getStatus(F taskObject);
}
private static class MyTaskObjectManager extends AbstractTaskObjectManager {
private final Map, String> taskChainCriteriaMap;
private List> statusGraphs;
private E defaultInitialStatus;
private IGetStatus getStatus;
public MyTaskObjectManager(Class taskObjectClass) {
super(taskObjectClass);
this.taskChainCriteriaMap = new HashMap<>();
}
@Override
public E getInitialStatus(F taskObject) {
if (getStatus != null) {
return getStatus.getStatus(taskObject);
}
return defaultInitialStatus;
}
@Override
public List> getNextStatusGraphsByTaskObjectType(IStatusTask statusTask, E currentStatus) {
List> res = new ArrayList<>();
if (statusGraphs != null && !statusGraphs.isEmpty()) {
res.addAll(statusGraphs.stream()
.filter(statusGraph -> (currentStatus == null && statusGraph.getPreviousStatus() == null) || (currentStatus != null && currentStatus.equals(statusGraph.getPreviousStatus())))
.collect(Collectors.toList()));
}
return res;
}
@Override
public String getTaskChainCriteria(IStatusTask statusTask, E currentStatus, E nextStatus) {
return taskChainCriteriaMap.get(Pair.of(currentStatus, nextStatus));
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy