Skip to content

Commit 54596c0

Browse files
committed
Add SubscriptionId class and tests. Use SubscriptionId in listSubscriptions(topic)
1 parent f73e657 commit 54596c0

5 files changed

Lines changed: 145 additions & 6 deletions

File tree

gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSub.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,9 +194,9 @@ public static PullOption maxConcurrentCallbacks(int maxConcurrency) {
194194

195195
Future<AsyncPage<Subscription>> listSubscriptionsAsync(ListOption... options);
196196

197-
Page<Subscription> listSubscriptions(String topic, ListOption... options);
197+
Page<SubscriptionId> listSubscriptions(String topic, ListOption... options);
198198

199-
Future<AsyncPage<Subscription>> listSubscriptionsAsync(String topic, ListOption... options);
199+
Future<AsyncPage<SubscriptionId>> listSubscriptionsAsync(String topic, ListOption... options);
200200

201201
Iterator<ReceivedMessage> pull(String subscription, PullOption... options);
202202

gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSubImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,12 @@ public Future<AsyncPage<Subscription>> listSubscriptionsAsync(ListOption... opti
185185
}
186186

187187
@Override
188-
public Page<Subscription> listSubscriptions(String topic, ListOption... options) {
188+
public Page<SubscriptionId> listSubscriptions(String topic, ListOption... options) {
189189
return null;
190190
}
191191

192192
@Override
193-
public Future<AsyncPage<Subscription>> listSubscriptionsAsync(String topic,
193+
public Future<AsyncPage<SubscriptionId>> listSubscriptionsAsync(String topic,
194194
ListOption... options) {
195195
return null;
196196
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/*
2+
* Copyright 2016 Google Inc. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.cloud.pubsub;
18+
19+
import static com.google.cloud.pubsub.spi.v1.SubscriberApi.parseProjectFromSubscriptionName;
20+
import static com.google.cloud.pubsub.spi.v1.SubscriberApi.parseSubscriptionFromSubscriptionName;
21+
import static com.google.common.base.Preconditions.checkNotNull;
22+
23+
import com.google.common.base.MoreObjects;
24+
25+
import java.io.Serializable;
26+
import java.util.Objects;
27+
28+
/**
29+
* Identity for a Google PubSub subscription. {@code SubscriptionId} objects are returned by the
30+
* {@link PubSub#listSubscriptions(String, PubSub.ListOption...)} and
31+
* {@link PubSub#listSubscriptionsAsync(String, PubSub.ListOption...)} methods as the same topic
32+
* can be used by subscriptions in different projects.
33+
*/
34+
public class SubscriptionId implements Serializable {
35+
36+
private static final long serialVersionUID = 6507142968866856283L;
37+
38+
private final String project;
39+
private final String subscription;
40+
41+
SubscriptionId(String project, String subscription) {
42+
this.project = checkNotNull(project);
43+
this.subscription = checkNotNull(subscription);
44+
}
45+
46+
/**
47+
* Returns the name of the project where the subscription resides.
48+
*/
49+
public String project() {
50+
return project;
51+
}
52+
53+
/**
54+
* Returns the name of the subscription.
55+
*/
56+
public String subscription() {
57+
return subscription;
58+
}
59+
60+
@Override
61+
public String toString() {
62+
return MoreObjects.toStringHelper(this)
63+
.add("project", project)
64+
.add("subscription", subscription).toString();
65+
}
66+
67+
@Override
68+
public final int hashCode() {
69+
return Objects.hash(project, subscription);
70+
}
71+
72+
@Override
73+
public final boolean equals(Object obj) {
74+
if (obj == this) {
75+
return true;
76+
}
77+
if (!(obj instanceof SubscriptionId)) {
78+
return false;
79+
}
80+
SubscriptionId other = (SubscriptionId) obj;
81+
return Objects.equals(project, other.project)
82+
&& Objects.equals(subscription, other.subscription);
83+
}
84+
85+
static SubscriptionId fromPb(String pb) {
86+
return new SubscriptionId(parseProjectFromSubscriptionName(pb),
87+
parseSubscriptionFromSubscriptionName(pb));
88+
}
89+
}

gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/Topic.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,11 @@ public Future<List<String>> publishAsync(Iterable<Message> messages) {
133133
return pubsub.publishAsync(name(), messages);
134134
}
135135

136-
public Page<Subscription> listSubscriptions(ListOption... options) {
136+
public Page<SubscriptionId> listSubscriptions(ListOption... options) {
137137
return pubsub.listSubscriptions(name(), options);
138138
}
139139

140-
public Future<AsyncPage<Subscription>> listSubscriptionsAsync(ListOption... options) {
140+
public Future<AsyncPage<SubscriptionId>> listSubscriptionsAsync(ListOption... options) {
141141
return pubsub.listSubscriptionsAsync(name(), options);
142142
}
143143

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright 2016 Google Inc. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.google.cloud.pubsub;
18+
19+
import static org.junit.Assert.assertEquals;
20+
21+
import org.junit.Test;
22+
23+
public class SubscriptionIdTest {
24+
25+
private static final String PROJECT = "project";
26+
private static final String NAME = "subscription";
27+
private static final String TOPIC_PB = "projects/project/subscriptions/subscription";
28+
private static final SubscriptionId SUBSCRIPTION_ID = new SubscriptionId(PROJECT, NAME);
29+
30+
@Test
31+
public void testConstructor() {
32+
assertEquals(PROJECT, SUBSCRIPTION_ID.project());
33+
assertEquals(NAME, SUBSCRIPTION_ID.subscription());
34+
}
35+
36+
@Test
37+
public void testToAndFromPb() {
38+
SubscriptionId subscriptionId = SubscriptionId.fromPb(TOPIC_PB);
39+
compareSubscriptionId(SUBSCRIPTION_ID, subscriptionId);
40+
assertEquals(PROJECT, subscriptionId.project());
41+
assertEquals(NAME, subscriptionId.subscription());
42+
}
43+
44+
private void compareSubscriptionId(SubscriptionId expected, SubscriptionId value) {
45+
assertEquals(expected, value);
46+
assertEquals(expected.project(), expected.project());
47+
assertEquals(expected.subscription(), expected.subscription());
48+
assertEquals(expected.hashCode(), expected.hashCode());
49+
}
50+
}

0 commit comments

Comments
 (0)