From 54596c006c9f1db1f93eb26efcf447e5f9ca3eca Mon Sep 17 00:00:00 2001 From: Marco Ziccardi Date: Thu, 5 May 2016 16:48:27 +0200 Subject: [PATCH] Add SubscriptionId class and tests. Use SubscriptionId in listSubscriptions(topic) --- .../java/com/google/cloud/pubsub/PubSub.java | 4 +- .../com/google/cloud/pubsub/PubSubImpl.java | 4 +- .../google/cloud/pubsub/SubscriptionId.java | 89 +++++++++++++++++++ .../java/com/google/cloud/pubsub/Topic.java | 4 +- .../cloud/pubsub/SubscriptionIdTest.java | 50 +++++++++++ 5 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/SubscriptionId.java create mode 100644 gcloud-java-pubsub/src/test/java/com/google/cloud/pubsub/SubscriptionIdTest.java diff --git a/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSub.java b/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSub.java index 2695cd0064e8..3410d3f54a3e 100644 --- a/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSub.java +++ b/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSub.java @@ -194,9 +194,9 @@ public static PullOption maxConcurrentCallbacks(int maxConcurrency) { Future> listSubscriptionsAsync(ListOption... options); - Page listSubscriptions(String topic, ListOption... options); + Page listSubscriptions(String topic, ListOption... options); - Future> listSubscriptionsAsync(String topic, ListOption... options); + Future> listSubscriptionsAsync(String topic, ListOption... options); Iterator pull(String subscription, PullOption... options); diff --git a/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSubImpl.java b/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSubImpl.java index df6aa283c1a3..17a99842259f 100644 --- a/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSubImpl.java +++ b/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/PubSubImpl.java @@ -185,12 +185,12 @@ public Future> listSubscriptionsAsync(ListOption... opti } @Override - public Page listSubscriptions(String topic, ListOption... options) { + public Page listSubscriptions(String topic, ListOption... options) { return null; } @Override - public Future> listSubscriptionsAsync(String topic, + public Future> listSubscriptionsAsync(String topic, ListOption... options) { return null; } diff --git a/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/SubscriptionId.java b/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/SubscriptionId.java new file mode 100644 index 000000000000..90cdc32e72ee --- /dev/null +++ b/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/SubscriptionId.java @@ -0,0 +1,89 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.pubsub; + +import static com.google.cloud.pubsub.spi.v1.SubscriberApi.parseProjectFromSubscriptionName; +import static com.google.cloud.pubsub.spi.v1.SubscriberApi.parseSubscriptionFromSubscriptionName; +import static com.google.common.base.Preconditions.checkNotNull; + +import com.google.common.base.MoreObjects; + +import java.io.Serializable; +import java.util.Objects; + +/** + * Identity for a Google PubSub subscription. {@code SubscriptionId} objects are returned by the + * {@link PubSub#listSubscriptions(String, PubSub.ListOption...)} and + * {@link PubSub#listSubscriptionsAsync(String, PubSub.ListOption...)} methods as the same topic + * can be used by subscriptions in different projects. + */ +public class SubscriptionId implements Serializable { + + private static final long serialVersionUID = 6507142968866856283L; + + private final String project; + private final String subscription; + + SubscriptionId(String project, String subscription) { + this.project = checkNotNull(project); + this.subscription = checkNotNull(subscription); + } + + /** + * Returns the name of the project where the subscription resides. + */ + public String project() { + return project; + } + + /** + * Returns the name of the subscription. + */ + public String subscription() { + return subscription; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("project", project) + .add("subscription", subscription).toString(); + } + + @Override + public final int hashCode() { + return Objects.hash(project, subscription); + } + + @Override + public final boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof SubscriptionId)) { + return false; + } + SubscriptionId other = (SubscriptionId) obj; + return Objects.equals(project, other.project) + && Objects.equals(subscription, other.subscription); + } + + static SubscriptionId fromPb(String pb) { + return new SubscriptionId(parseProjectFromSubscriptionName(pb), + parseSubscriptionFromSubscriptionName(pb)); + } +} diff --git a/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/Topic.java b/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/Topic.java index f2203d3a30d9..4c08e485bb9d 100644 --- a/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/Topic.java +++ b/gcloud-java-pubsub/src/main/java/com/google/cloud/pubsub/Topic.java @@ -133,11 +133,11 @@ public Future> publishAsync(Iterable messages) { return pubsub.publishAsync(name(), messages); } - public Page listSubscriptions(ListOption... options) { + public Page listSubscriptions(ListOption... options) { return pubsub.listSubscriptions(name(), options); } - public Future> listSubscriptionsAsync(ListOption... options) { + public Future> listSubscriptionsAsync(ListOption... options) { return pubsub.listSubscriptionsAsync(name(), options); } diff --git a/gcloud-java-pubsub/src/test/java/com/google/cloud/pubsub/SubscriptionIdTest.java b/gcloud-java-pubsub/src/test/java/com/google/cloud/pubsub/SubscriptionIdTest.java new file mode 100644 index 000000000000..533e154ff611 --- /dev/null +++ b/gcloud-java-pubsub/src/test/java/com/google/cloud/pubsub/SubscriptionIdTest.java @@ -0,0 +1,50 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.pubsub; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class SubscriptionIdTest { + + private static final String PROJECT = "project"; + private static final String NAME = "subscription"; + private static final String TOPIC_PB = "projects/project/subscriptions/subscription"; + private static final SubscriptionId SUBSCRIPTION_ID = new SubscriptionId(PROJECT, NAME); + + @Test + public void testConstructor() { + assertEquals(PROJECT, SUBSCRIPTION_ID.project()); + assertEquals(NAME, SUBSCRIPTION_ID.subscription()); + } + + @Test + public void testToAndFromPb() { + SubscriptionId subscriptionId = SubscriptionId.fromPb(TOPIC_PB); + compareSubscriptionId(SUBSCRIPTION_ID, subscriptionId); + assertEquals(PROJECT, subscriptionId.project()); + assertEquals(NAME, subscriptionId.subscription()); + } + + private void compareSubscriptionId(SubscriptionId expected, SubscriptionId value) { + assertEquals(expected, value); + assertEquals(expected.project(), expected.project()); + assertEquals(expected.subscription(), expected.subscription()); + assertEquals(expected.hashCode(), expected.hashCode()); + } +}