CascadeExportFormat.java

package network.ike.plugin;

import network.ike.workspace.cascade.CascadeExporter;
import network.ike.workspace.cascade.ReleaseCascade;

/**
 * Output format for {@code ike:cascade-export}
 * (IKE-Network/ike-issues#403). A typed enum rather than a bare
 * string so the format choice is compiler-visible.
 */
public enum CascadeExportFormat {

    /** Full JSON graph — for programmatic CI project-model generation. */
    JSON {
        @Override
        public String render(ReleaseCascade cascade) {
            return CascadeExporter.toJson(cascade);
        }
    },

    /** Flattened {@code .properties} — order + per-repo coordinates and edges. */
    PROPERTIES {
        @Override
        public String render(ReleaseCascade cascade) {
            return CascadeExporter.toProperties(cascade);
        }
    };

    /**
     * Renders the cascade in this format.
     *
     * @param cascade the parsed cascade
     * @return the rendered document
     */
    public abstract String render(ReleaseCascade cascade);

    /**
     * Parses a format name case-insensitively.
     *
     * @param name the format name ({@code json} or {@code properties})
     * @return the matching format
     * @throws IllegalArgumentException if {@code name} is not a known
     *                                  format
     */
    public static CascadeExportFormat fromString(String name) {
        for (CascadeExportFormat format : values()) {
            if (format.name().equalsIgnoreCase(name)) {
                return format;
            }
        }
        throw new IllegalArgumentException(
                "Unknown cascade-export format: '" + name
                        + "' (expected 'json' or 'properties')");
    }
}