All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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