Ec2ContextImpl.java

package com.cloudforgeci.api.core;

import com.cloudforge.core.interfaces.Ec2Context;

import java.util.Optional;

/**
 * Implementation of Ec2Context providing runtime information for UserData configuration.
 */
public class Ec2ContextImpl implements Ec2Context {
    private final String stackName;
    private final String runtimeType;
    private final String securityProfile;
    private final boolean hasEfs;
    private final String efsId;
    private final String accessPointId;
    private final String authMode;
    private final String fqdn;
    private final boolean sslEnabled;

    public Ec2ContextImpl(String stackName, String runtimeType, String securityProfile,
                          boolean hasEfs, String efsId, String accessPointId) {
        this(stackName, runtimeType, securityProfile, hasEfs, efsId, accessPointId,
            "none", null, false);
    }

    public Ec2ContextImpl(String stackName, String runtimeType, String securityProfile,
                          boolean hasEfs, String efsId, String accessPointId,
                          String authMode, String fqdn, boolean sslEnabled) {
        this.stackName = stackName;
        this.runtimeType = runtimeType;
        this.securityProfile = securityProfile;
        this.hasEfs = hasEfs;
        this.efsId = efsId;
        this.accessPointId = accessPointId;
        this.authMode = authMode == null || authMode.isBlank() ? "none" : authMode;
        this.fqdn = fqdn;
        this.sslEnabled = sslEnabled;
    }

    @Override
    public String stackName() {
        return stackName;
    }

    @Override
    public String runtimeType() {
        return runtimeType;
    }

    @Override
    public String securityProfile() {
        return securityProfile;
    }

    @Override
    public boolean hasEfs() {
        return hasEfs;
    }

    @Override
    public Optional<String> efsId() {
        return Optional.ofNullable(efsId);
    }

    @Override
    public Optional<String> accessPointId() {
        return Optional.ofNullable(accessPointId);
    }

    @Override
    public String authMode() {
        return authMode;
    }

    @Override
    public String fqdn() {
        return fqdn;
    }

    @Override
    public boolean sslEnabled() {
        return sslEnabled;
    }
}