public record FolderId()

in sources/src/main/java/com/google/solutions/jitaccess/apis/FolderId.java [34:109]


public record FolderId(
  @NotNull String id
) implements Comparable<FolderId>, ResourceId {
  static final String PREFIX = "folders/";

  public FolderId {
    Preconditions.checkNotNull(id, "id");
    assert !id.startsWith("//");
    assert !id.contains("/");
  }

  @Override
  public String toString() {
    return this.id;
  }

  /**
   * Parse a folder ID from one of the formats
   * <p>
   * * folders/123
   * * 123
   *
   * @return empty if the input string is malformed.
   */
  public static @NotNull Optional<FolderId> parse(@Nullable String s) {
    if (s == null) {
      return Optional.empty();
    }

    s = s.trim();

    if (s.startsWith(PREFIX) &&
      s.indexOf('/', PREFIX.length()) == -1 &&
      s.length() > PREFIX.length()) {
      //
      // String has folders/ prefix, strip.
      //
      s = s.substring(PREFIX.length());
    }

    if (!s.isEmpty() && s.indexOf('/') == -1 && s.chars().allMatch(Character::isDigit)) {
      return Optional.of(new FolderId(s));
    }
    else {
      return Optional.empty();
    }
  }

  // -------------------------------------------------------------------------
  // Comparable.
  // -------------------------------------------------------------------------

  @Override
  public int compareTo(@NotNull FolderId o) {
    return this.id.compareTo(o.id);
  }

  // -------------------------------------------------------------------------
  // ResourceId.
  // -------------------------------------------------------------------------

  @Override
  public @NotNull String service() {
    return ResourceManagerClient.SERVICE;
  }

  @Override
  public @NotNull String type() {
    return "folder";
  }

  @Override
  public @NotNull String path() {
    return PREFIX + this.id;
  }
}