/** Returns a copy of this node which is retired */ public Node retire(Instant retiredAt) { if (flavor.isRetired() || status.wantToRetire()) return retire(Agent.system, retiredAt); else return retire(Agent.application, retiredAt); }
private static Collection<Flavor> toFlavors(FlavorsConfig config) { Map<String, Flavor> flavors = new HashMap<>(); // First pass, create all flavors, but do not include flavorReplacesConfig. for (FlavorsConfig.Flavor flavorConfig : config.flavor()) { flavors.put(flavorConfig.name(), new Flavor(flavorConfig)); } // Second pass, set flavorReplacesConfig to point to correct flavor. for (FlavorsConfig.Flavor flavorConfig : config.flavor()) { Flavor flavor = flavors.get(flavorConfig.name()); for (FlavorsConfig.Flavor.Replaces flavorReplacesConfig : flavorConfig.replaces()) { if (! flavors.containsKey(flavorReplacesConfig.name())) { throw new IllegalStateException("Replaces for " + flavor.name() + " pointing to a non existing flavor: " + flavorReplacesConfig.name()); } flavor.replaces().add(flavors.get(flavorReplacesConfig.name())); } flavor.freeze(); } // Third pass, ensure that retired flavors have a replacement for (Flavor flavor : flavors.values()) { if (flavor.isRetired() && !hasReplacement(flavors.values(), flavor)) { throw new IllegalStateException( String.format("Flavor '%s' is retired, but has no replacement", flavor.name()) ); } } return flavors.values(); }