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

com.talanlabs.taskmanager.engine.graph.StatusGraphsBuilder Maven / Gradle / Ivy

The newest version!
package com.talanlabs.taskmanager.engine.graph;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.tuple.Pair;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class StatusGraphsBuilder {

    private final F previousStatus;

    private List> pairs;

    private List> statusGraphs;

    protected StatusGraphsBuilder(F previousStatus) {
        super();

        this.previousStatus = previousStatus;

        this.pairs = new ArrayList<>();
        this.statusGraphs = new ArrayList<>();
    }

    public static  StatusGraphsBuilder newBuilder() {
        return newBuilder(null);
    }

    public static  StatusGraphsBuilder newBuilder(F previousStatus) {
        return new StatusGraphsBuilder<>(previousStatus);
    }

    public StatusGraphsBuilder addNextStatusGraph(F nextStatus, String nextStatusTaskServiceCode) {
        return addNextStatusGraph(nextStatus, nextStatusTaskServiceCode, null);
    }

    public StatusGraphsBuilder addNextStatusGraph(F nextStatus, String nextStatusTaskServiceCode, StatusGraphsBuilder statusGraphsBuilder) {
        this.pairs.add(Pair.of(nextStatus, nextStatusTaskServiceCode));
        if (statusGraphsBuilder != null && statusGraphsBuilder.pairs != null && !statusGraphsBuilder.pairs.isEmpty()) {
            this.statusGraphs.addAll(statusGraphsBuilder.pairs.stream().map(pair -> new MyStatusGraph<>(nextStatus, pair.getLeft(), pair.getRight())).collect(Collectors.toList()));
            this.statusGraphs.addAll(statusGraphsBuilder.statusGraphs);
        }
        return this;
    }

    public List> build() {
        List> res = pairs.stream().map(pair -> new MyStatusGraph<>(previousStatus, pair.getLeft(), pair.getRight())).collect(Collectors.toList());
        res.addAll(statusGraphs);
        return res;
    }

    private static class MyStatusGraph implements IStatusGraph {

        private final F previousStatus;

        private final F currentStatus;

        private final String statusTaskServiceCode;

        public MyStatusGraph(F previousStatus, F currentStatus, String statusTaskServiceCode) {
            super();

            this.previousStatus = previousStatus;
            this.currentStatus = currentStatus;
            this.statusTaskServiceCode = statusTaskServiceCode;
        }

        @Override
        public F getPreviousStatus() {
            return previousStatus;
        }

        @Override
        public F getCurrentStatus() {
            return currentStatus;
        }

        @Override
        public String getStatusTaskServiceCode() {
            return this.statusTaskServiceCode;
        }

        @Override
        public String toString() {
            return ToStringBuilder.reflectionToString(this);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy