static List<Step> sort(Set<Node> nodes) { List<Step> steps = new ArrayList<>(); List<Node> remaining = new ArrayList<>(nodes); int previousSize = remaining.size(); while (!remaining.isEmpty()) { Step step = new Step(); for (int i = 0; i < remaining.size(); i++) { Node node = remaining.get(i); if (!node.hasParent() || nodesInStep(steps, node.getParents())) { step.add(node); remaining.remove(i); --i; } } if (previousSize == remaining.size()) { throw new IllegalArgumentException("Could not resolve autoStart order. " + nodes); } previousSize = remaining.size(); steps.add(step); } return steps; }
public static List<String[]> getAutoStartOrder(CubeDockerConfiguration config) { List<String[]> sorted = new ArrayList<>(); List<Step> steps = sort(from(config)); for (Step step : steps) { sorted.add(step.getIDs()); } return sorted; }
static List<Step> sort(Set<Node> nodes) { List<Step> steps = new ArrayList<>(); List<Node> remaining = new ArrayList<>(nodes); int previousSize = remaining.size(); while (!remaining.isEmpty()) { Step step = new Step(); for (int i = 0; i < remaining.size(); i++) { Node node = remaining.get(i); if (!node.hasParent() || nodesInStep(steps, node.getParents())) { step.add(node); remaining.remove(i); --i; } } if (previousSize == remaining.size()) { throw new IllegalArgumentException("Could not resolve autoStart order. " + nodes); } previousSize = remaining.size(); steps.add(step); } return steps; }
private static boolean nodeInStep(List<Step> steps, Node node) { for (Step step : steps) { if (step.contains(node)) { return true; } } return false; }
private static boolean nodeInStep(List<Step> steps, Node node) { for (Step step : steps) { if (step.contains(node)) { return true; } } return false; }
public static List<String[]> getAutoStartOrder(CubeDockerConfiguration config) { List<String[]> sorted = new ArrayList<>(); List<Step> steps = sort(from(config)); for (Step step : steps) { sorted.add(step.getIDs()); } return sorted; }