RuntimeRules.java

package com.cloudforgeci.api.core.rules;

import com.cloudforgeci.api.core.SystemContext;
import com.cloudforgeci.api.interfaces.Rule;
import com.cloudforgeci.api.interfaces.RuntimeConfiguration;
import com.cloudforgeci.api.core.runtime.Ec2RuntimeConfiguration;
import com.cloudforgeci.api.core.runtime.FargateRuntimeConfiguration;
import software.constructs.Node;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;


public final class RuntimeRules {
    private static final Logger LOG = Logger.getLogger(RuntimeRules.class.getName());


  public static void install(SystemContext ctx) {

    try {

      final RuntimeConfiguration p = switch (ctx.runtime) {
        case EC2     -> new Ec2RuntimeConfiguration();
        case FARGATE -> new FargateRuntimeConfiguration();
      };


    Node.of(ctx).addValidation(() -> {
        List<String> errs = new ArrayList<>();
        for (Rule r : p.rules(ctx)) errs.addAll(r.check(ctx));
        if (!errs.isEmpty()) {
        }
        return errs;
      });

      // Call wire() using ctx.once() to ensure it runs after all factories are created
      ctx.once("ProfileWiring:Runtime:" + ctx.runtime, () -> {
        p.wire(ctx);
      });

    } catch (Exception e) {
      throw e;
    }
  }
}