ApplicationDeploymentExtensions.java

package com.cloudforge.core.deploy;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
import java.util.ServiceLoader;

/** Classpath-wide registry for optional application deployment extensions. */
public final class ApplicationDeploymentExtensions {

    private ApplicationDeploymentExtensions() {
    }

    public static Optional<ApplicationDeploymentExtension> find(String applicationId) {
        if (applicationId == null || applicationId.isBlank()) {
            return Optional.empty();
        }
        return Optional.ofNullable(all().get(applicationId));
    }

    public static Map<String, ApplicationDeploymentExtension> all() {
        Map<String, ApplicationDeploymentExtension> extensions = new LinkedHashMap<>();
        ServiceLoader.load(ApplicationDeploymentExtension.class).forEach(extension ->
            extensions.putIfAbsent(extension.applicationId(), extension));
        return Map.copyOf(extensions);
    }
}