PlannedEntry.java
package network.ike.plugin.scaffold;
import java.util.List;
import java.util.Objects;
/**
* One entry in a {@link ScaffoldPlan}: the manifest entry, the
* {@link TierAction} that publish should take, and — for
* {@link ScaffoldTier#MODEL_MANAGED} entries — the per-element
* provenance to record in the lockfile.
*
* <p>File-based tiers use an empty {@code managedElements} list;
* model-managed entries populate it.
*
* @param manifest the manifest entry
* @param action the planned action
* @param managedElements per-element provenance for model-managed
* entries; never {@code null}. Stored list is
* unmodifiable.
*/
public record PlannedEntry(
ManifestEntry manifest,
TierAction action,
List<ManagedElement> managedElements) {
/** Canonical constructor with validation and defensive copying. */
public PlannedEntry {
Objects.requireNonNull(manifest, "manifest");
Objects.requireNonNull(action, "action");
managedElements = managedElements == null
? List.of()
: List.copyOf(managedElements);
if (manifest.tier() != ScaffoldTier.MODEL_MANAGED
&& !managedElements.isEmpty()) {
throw new IllegalArgumentException(
"managedElements only valid for model-managed; "
+ "got " + manifest.tier().manifestValue());
}
}
}