in sources/src/main/java/com/google/solutions/jitaccess/apis/ProjectId.java [34:112]
public record ProjectId(
@NotNull String id
) implements Comparable<ProjectId>, ResourceId {
static final String PREFIX = "projects/";
public ProjectId {
Preconditions.checkNotNull(id, "id");
assert !id.startsWith("//");
assert !id.contains("/");
}
@Override
public String toString() {
return this.id;
}
/**
* Parse a project ID from one of the formats
* <p>
* * projects/project-123
* * project-123
*
* @return empty if the input string is malformed.
*/
public static @NotNull Optional<ProjectId> 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.
//
return Optional.of(new ProjectId(s.substring(PREFIX.length())));
}
else if (!s.isEmpty() && s.indexOf('/') == -1 &&
!Character.isDigit(s.charAt(0))) {
//
// String has no prefix.
//
return Optional.of(new ProjectId(s));
}
else {
return Optional.empty();
}
}
// -------------------------------------------------------------------------
// Comparable.
// -------------------------------------------------------------------------
@Override
public int compareTo(@NotNull ProjectId o) {
return this.id.compareTo(o.id);
}
// -------------------------------------------------------------------------
// ResourceId.
// -------------------------------------------------------------------------
@Override
public @NotNull String service() {
return ResourceManagerClient.SERVICE;
}
@Override
public @NotNull String type() {
return "project";
}
@Override
public @NotNull String path() {
return PREFIX + this.id;
}
}