public record SystemInfo()

in sources/src/main/java/com/google/solutions/jitaccess/web/rest/SystemsResource.java [88:132]


  public record SystemInfo(
    @NotNull Link self,
    @NotNull String name,
    @NotNull String displayName,
    @NotNull String description,
    @Nullable EnvironmentsResource.EnvironmentInfo environment,
    @Nullable List<GroupsResource.GroupInfo> groups
  ) implements MediaInfo {

    /**
     * Create SystemInfo with summary information only.
     */
    static SystemInfo createSummary(
      @NotNull SystemPolicy policy
    ) {
      return new SystemInfo(
        new Link("environments/%s/systems/%s", policy.environment().name(), policy.name()),
        policy.name(),
        policy.displayName(),
        policy.description(),
        null,
        null);
    }

    /**
     * Create SystemInfo with full details.
     */
    static SystemInfo create(@NotNull SystemContext system) {
      var policy = system.policy();

      return new SystemInfo(
        new Link("environments/%s/systems/%s", policy.environment().name(), policy.name()),
        policy.name(),
        policy.displayName(),
        policy.description(),
        EnvironmentsResource.EnvironmentInfo.createSummary(policy.environment()),
        system.groups()
          .stream()
          .sorted(Comparator.comparing(grp -> grp.policy().displayName()))
          .map(grp -> GroupsResource.GroupInfo.create(
            grp,
            GroupsResource.JoinInfo.forJoinAnalysis(grp)))
          .toList());
    }
  }