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

io.rouz.task.TaskInfo Maven / Gradle / Ivy

package io.rouz.task;

import com.google.auto.value.AutoValue;

import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static java.util.stream.Collectors.toList;

/**
 * A materialized, recursive value representation of a {@link Task}.
 *
 * This is a behaviour-less representation of a materialized task graph.
 */
@AutoValue
public abstract class TaskInfo {

  public abstract TaskId id();

  public abstract boolean isReference();

  public abstract List inputs();

  public static TaskInfo ref(TaskId id) {
    return new AutoValue_TaskInfo(id, true, Collections.emptyList());
  }

  public static TaskInfo create(TaskId id, List upstreams) {
    return new AutoValue_TaskInfo(id, false, upstreams);
  }

  public static TaskInfo ofTask(Task task) {
    return ofTask(task, new HashSet<>());
  }

  public static TaskInfo ofTask(Task task, Set visits) {
    TaskId id = task.id();

    if (visits.contains(id)) {
      return TaskInfo.ref(id);
    } else {
      visits.add(id);
    }

    List upstreams = task.inputs().stream()
        .map(t -> ofTask(t, visits))
        .collect(toList());

    return TaskInfo.create(id, upstreams);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy