Skip to content

Commit e5e7d7d

Browse files
fix: Embed builder in path classes and make components directly accessible (#231)
* fix: Embed builder in path classes and make components directly accessible. * fix: Remove semicolon
1 parent 89f6582 commit e5e7d7d

36 files changed

+197
-329
lines changed

google-cloud-pubsublite/clirr-ignored-differences.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
<className>com/google/cloud/pubsublite/*Path*</className>
2424
<method>*</method>
2525
</difference>
26+
<difference>
27+
<differenceType>8001</differenceType>
28+
<className>com/google/cloud/pubsublite/*Paths*</className>
29+
<method>*</method>
30+
</difference>
2631
<!-- Blanket ignored files -->
2732
<difference>
2833
<differenceType>6000</differenceType>

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/LocationPath.java

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,31 @@
2626
/** A string wrapper representing a project and location. */
2727
@AutoValue
2828
public abstract class LocationPath implements Serializable {
29-
public abstract ProjectPath project();
29+
public abstract ProjectIdOrNumber project();
3030

3131
public abstract CloudZone location();
3232

33+
public ProjectPath projectPath() {
34+
return ProjectPath.newBuilder().setProject(project()).build();
35+
}
36+
3337
@Override
3438
public String toString() {
35-
return project() + "/locations/" + location();
39+
return projectPath() + "/locations/" + location();
40+
}
41+
42+
/** Create a new LocationPath builder. */
43+
public static Builder newBuilder() {
44+
return new AutoValue_LocationPath.Builder();
3645
}
3746

38-
public static LocationPath of(ProjectPath project, CloudZone zone) {
39-
return new AutoValue_LocationPath(project, zone);
47+
public abstract Builder toBuilder();
48+
49+
@AutoValue.Builder
50+
public abstract static class Builder extends ProjectBuilderHelper<Builder> {
51+
public abstract Builder setLocation(CloudZone zone);
52+
53+
public abstract LocationPath build();
4054
}
4155

4256
/**
@@ -49,6 +63,9 @@ public static LocationPath parse(String path) throws StatusException {
4963
checkArgument(splits.length == 4);
5064
checkArgument(splits[2].equals("locations"));
5165
ProjectPath project = ProjectPath.parse(String.join("/", Arrays.copyOf(splits, 2)));
52-
return LocationPath.of(project, CloudZone.parse(splits[3]));
66+
return LocationPath.newBuilder()
67+
.setProject(project.project())
68+
.setLocation(CloudZone.parse(splits[3]))
69+
.build();
5370
}
5471
}

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/LocationPaths.java

Lines changed: 0 additions & 44 deletions
This file was deleted.

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/PartitionLookupUtils.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@ private PartitionLookupUtils() {}
3232
public static int numPartitions(TopicPath topic) throws StatusException {
3333
try (AdminClient client =
3434
AdminClient.create(
35-
AdminClientSettings.newBuilder()
36-
.setRegion(topic.location().location().region())
37-
.build())) {;
35+
AdminClientSettings.newBuilder().setRegion(topic.location().region()).build())) {
3836
return numPartitions(topic, client);
3937
} catch (Exception e) {
4038
throw ExtractStatus.toCanonical(e);
@@ -66,9 +64,7 @@ public static int numPartitions(TopicPath topic, AdminClient client) throws Stat
6664
public static int numPartitions(SubscriptionPath subscription) throws StatusException {
6765
try (AdminClient client =
6866
AdminClient.create(
69-
AdminClientSettings.newBuilder()
70-
.setRegion(subscription.location().location().region())
71-
.build())) {
67+
AdminClientSettings.newBuilder().setRegion(subscription.location().region()).build())) {
7268
return numPartitions(subscription, client);
7369
} catch (Exception e) {
7470
throw ExtractStatus.toCanonical(e);

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/ProjectLookupUtils.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,24 @@ private static ProjectNumber getProjectNumber(ProjectId id) throws StatusExcepti
3636
}
3737
}
3838

39-
public static ProjectPath toCannonical(ProjectPath project) throws StatusException {
40-
if (project.project().getKind() == Kind.NUMBER) return project;
41-
return ProjectPath.of(ProjectIdOrNumber.of(getProjectNumber(project.project().name())));
39+
static ProjectNumber toCannonical(ProjectIdOrNumber project) throws StatusException {
40+
if (project.getKind() == Kind.NUMBER) return project.number();
41+
return getProjectNumber(project.name());
4242
}
4343

44-
public static LocationPath toCannonical(LocationPath location) throws StatusException {
45-
ProjectPath canonicalProject = toCannonical(location.project());
46-
return LocationPath.of(canonicalProject, location.location());
44+
public static ProjectPath toCannonical(ProjectPath path) throws StatusException {
45+
return path.toBuilder().setProject(toCannonical(path.project())).build();
4746
}
4847

49-
public static SubscriptionPath toCannonical(SubscriptionPath subscription)
50-
throws StatusException {
51-
LocationPath canonicalLocation = toCannonical(subscription.location());
52-
return SubscriptionPath.of(canonicalLocation, subscription.name());
48+
public static LocationPath toCannonical(LocationPath path) throws StatusException {
49+
return path.toBuilder().setProject(toCannonical(path.project())).build();
5350
}
5451

55-
public static TopicPath toCannonical(TopicPath topic) throws StatusException {
56-
LocationPath canonicalLocation = toCannonical(topic.location());
57-
return TopicPath.of(canonicalLocation, topic.name());
52+
public static SubscriptionPath toCannonical(SubscriptionPath path) throws StatusException {
53+
return path.toBuilder().setProject(toCannonical(path.project())).build();
54+
}
55+
56+
public static TopicPath toCannonical(TopicPath path) throws StatusException {
57+
return path.toBuilder().setProject(toCannonical(path.project())).build();
5858
}
5959
}

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/ProjectPath.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,16 @@ public String toString() {
3232
return "projects/" + project();
3333
}
3434

35-
public static ProjectPath of(ProjectIdOrNumber value) {
36-
return new AutoValue_ProjectPath(value);
35+
/** Create a new ProjectPath builder. */
36+
public static Builder newBuilder() {
37+
return new AutoValue_ProjectPath.Builder();
38+
}
39+
40+
public abstract Builder toBuilder();
41+
42+
@AutoValue.Builder
43+
public abstract static class Builder extends ProjectBuilderHelper<Builder> {
44+
public abstract ProjectPath build();
3745
}
3846

3947
/**
@@ -47,11 +55,12 @@ public static ProjectPath parse(String path) throws StatusException {
4755
checkArgument(splits[0].equals("projects"));
4856
checkArgument(!splits[1].isEmpty());
4957
try {
50-
return ProjectPath.of(ProjectIdOrNumber.of(ProjectNumber.of(Long.parseLong(splits[1]))));
58+
long val = Long.parseLong(splits[1]);
59+
return ProjectPath.newBuilder().setProject(ProjectNumber.of(val)).build();
5160
} catch (NumberFormatException e) {
5261
// Pass, treat as a name. Project ids must start with a letter.
5362
// https://cloud.google.com/resource-manager/docs/creating-managing-projects#before_you_begin
5463
}
55-
return ProjectPath.of(ProjectIdOrNumber.of(ProjectId.of(splits[1])));
64+
return ProjectPath.newBuilder().setProject(ProjectId.of(splits[1])).build();
5665
}
5766
}

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/ProjectPaths.java

Lines changed: 0 additions & 40 deletions
This file was deleted.

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/SubscriptionPath.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,47 @@
3030
*/
3131
@AutoValue
3232
public abstract class SubscriptionPath implements Serializable {
33-
public abstract LocationPath location();
33+
public abstract ProjectIdOrNumber project();
34+
35+
public abstract CloudZone location();
3436

3537
public abstract SubscriptionName name();
3638

39+
public LocationPath locationPath() {
40+
return LocationPath.newBuilder().setProject(project()).setLocation(location()).build();
41+
}
42+
3743
@Override
3844
public String toString() {
39-
return location() + "/subscriptions/" + name();
45+
return locationPath() + "/subscriptions/" + name();
46+
}
47+
48+
/** Create a new SubscriptionPath builder. */
49+
public static Builder newBuilder() {
50+
return new AutoValue_SubscriptionPath.Builder();
4051
}
4152

42-
public static SubscriptionPath of(LocationPath location, SubscriptionName name) {
43-
return new AutoValue_SubscriptionPath(location, name);
53+
public abstract Builder toBuilder();
54+
55+
@AutoValue.Builder
56+
public abstract static class Builder extends ProjectBuilderHelper<Builder> {
57+
public abstract Builder setLocation(CloudZone zone);
58+
59+
public abstract Builder setName(SubscriptionName name);
60+
61+
/** Build a new SubscriptionPath. */
62+
public abstract SubscriptionPath build();
4463
}
4564

4665
public static SubscriptionPath parse(String path) throws StatusException {
4766
String[] splits = path.split("/");
4867
checkArgument(splits.length == 6);
4968
checkArgument(splits[4].equals("subscriptions"));
5069
LocationPath location = LocationPath.parse(String.join("/", Arrays.copyOf(splits, 4)));
51-
return SubscriptionPath.of(location, SubscriptionName.of(splits[5]));
70+
return SubscriptionPath.newBuilder()
71+
.setProject(location.project())
72+
.setLocation(location.location())
73+
.setName(SubscriptionName.of(splits[5]))
74+
.build();
5275
}
5376
}

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/SubscriptionPaths.java

Lines changed: 0 additions & 51 deletions
This file was deleted.

google-cloud-pubsublite/src/main/java/com/google/cloud/pubsublite/TopicPath.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,47 @@
3030
*/
3131
@AutoValue
3232
public abstract class TopicPath implements Serializable {
33-
public abstract LocationPath location();
33+
public abstract ProjectIdOrNumber project();
34+
35+
public abstract CloudZone location();
3436

3537
public abstract TopicName name();
3638

39+
public LocationPath locationPath() {
40+
return LocationPath.newBuilder().setProject(project()).setLocation(location()).build();
41+
}
42+
3743
@Override
3844
public String toString() {
39-
return location() + "/topics/" + name();
45+
return locationPath() + "/topics/" + name();
46+
}
47+
48+
/** Create a new TopicPath builder. */
49+
public static Builder newBuilder() {
50+
return new AutoValue_TopicPath.Builder();
4051
}
4152

42-
public static TopicPath of(LocationPath location, TopicName name) {
43-
return new AutoValue_TopicPath(location, name);
53+
public abstract Builder toBuilder();
54+
55+
@AutoValue.Builder
56+
public abstract static class Builder extends ProjectBuilderHelper<Builder> {
57+
public abstract Builder setLocation(CloudZone zone);
58+
59+
public abstract Builder setName(TopicName name);
60+
61+
/** Build a new TopicPath. */
62+
public abstract TopicPath build();
4463
}
4564

4665
public static TopicPath parse(String path) throws StatusException {
4766
String[] splits = path.split("/");
4867
checkArgument(splits.length == 6);
4968
checkArgument(splits[4].equals("topics"));
5069
LocationPath location = LocationPath.parse(String.join("/", Arrays.copyOf(splits, 4)));
51-
return TopicPath.of(location, TopicName.of(splits[5]));
70+
return TopicPath.newBuilder()
71+
.setProject(location.project())
72+
.setLocation(location.location())
73+
.setName(TopicName.of(splits[5]))
74+
.build();
5275
}
5376
}

0 commit comments

Comments
 (0)