summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2022-03-14 23:28:54 +0100
committerValerij Fredriksen <valerijf@yahooinc.com>2022-03-14 23:30:06 +0100
commit7c4fe97357fb5b4782bc56d631b6d11d8ce78664 (patch)
treef29a0705c0f2b9e6892670f11dafb65d6cf0f516
parent9ad7ce1756ee6f5b3045b7f1aa0361d43ac6b80d (diff)
Extend contact
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java52
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java11
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java7
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java4
4 files changed, 28 insertions, 46 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java
index 25e91fe0700..8573beefbab 100644
--- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java
+++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/tenant/TenantContacts.java
@@ -14,9 +14,9 @@ import java.util.Optional;
* @author ogronnesby
*/
public class TenantContacts {
- private final List<Contact<?>> contacts;
+ private final List<? extends Contact> contacts;
- public TenantContacts(List<Contact<?>> contacts) {
+ public TenantContacts(List<? extends Contact> contacts) {
this.contacts = List.copyOf(contacts);
}
@@ -24,7 +24,7 @@ public class TenantContacts {
return new TenantContacts(List.of());
}
- public List<Contact<?>> all() {
+ public List<? extends Contact> all() {
return contacts;
}
@@ -52,55 +52,39 @@ public class TenantContacts {
'}';
}
- public static class Contact<T> {
- private final Type type;
+ public abstract static class Contact {
private final List<Audience> audiences;
- protected final T data;
- public Contact(Type type, List<Audience> audiences, T data) {
- this.type = type;
- this.audiences = audiences;
- this.data = data;
+ public Contact(List<Audience> audiences) {
+ this.audiences = List.copyOf(audiences);
if (audiences.isEmpty()) throw new IllegalArgumentException("audience cannot be empty");
}
- public Type type() { return type; }
public List<Audience> audiences() { return audiences; }
- public T data() { return data; }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Contact<?> contact = (Contact<?>) o;
- return type == contact.type && audiences.equals(contact.audiences) && data.equals(contact.data);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(type, audiences, data);
- }
+ public abstract Type type();
- @Override
- public String toString() {
- return "Contact{" +
- "type=" + type +
- ", audience=" + audiences +
- ", data=" + data +
- '}';
- }
+ public abstract boolean equals(Object o);
+ public abstract int hashCode();
+ public abstract String toString();
}
- public static class EmailContact {
+ public static class EmailContact extends Contact {
private final String email;
- public EmailContact(String email) {
+ public EmailContact(List<Audience> audiences, String email) {
+ super(audiences);
this.email = email;
}
public String email() { return email; }
@Override
+ public Type type() {
+ return Type.EMAIL;
+ }
+
+ @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java
index cf68ca034a7..00e38abcba7 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializer.java
@@ -299,7 +299,7 @@ public class TenantSerializer {
}
private TenantContacts tenantContactsFrom(Inspector object) {
- List<TenantContacts.Contact<?>> contacts = SlimeUtils.entriesStream(object)
+ List<TenantContacts.Contact> contacts = SlimeUtils.entriesStream(object)
.map(this::readContact)
.collect(Collectors.toUnmodifiableList());
return new TenantContacts(contacts);
@@ -348,14 +348,14 @@ public class TenantSerializer {
return personLists;
}
- private void writeContact(TenantContacts.Contact<?> contact, Cursor cursor) {
+ private void writeContact(TenantContacts.Contact contact, Cursor cursor) {
cursor.setString("type", contact.type().value());
Cursor audiencesArray = cursor.setArray("audiences");
contact.audiences().forEach(audience -> audiencesArray.addString(toAudience(audience)));
var data = cursor.setObject("data");
switch (contact.type()) {
case EMAIL:
- var email = (TenantContacts.EmailContact) contact.data();
+ var email = (TenantContacts.EmailContact) contact;
data.setString("email", email.email());
return;
default:
@@ -363,7 +363,7 @@ public class TenantSerializer {
}
}
- private TenantContacts.Contact<?> readContact(Inspector inspector) {
+ private TenantContacts.Contact readContact(Inspector inspector) {
var type = TenantContacts.Type.from(inspector.field("type").asString())
.orElseThrow(() -> new RuntimeException("Unknown type: " + inspector.field("type").asString()));
var audiences = SlimeUtils.entriesStream(inspector.field("audiences"))
@@ -371,8 +371,7 @@ public class TenantSerializer {
.collect(Collectors.toUnmodifiableList());
switch (type) {
case EMAIL:
- var email = new TenantContacts.EmailContact(inspector.field("data").field("email").asString());
- return new TenantContacts.Contact<>(type, audiences, email);
+ return new TenantContacts.EmailContact(audiences, inspector.field("data").field("email").asString());
default:
throw new IllegalArgumentException("Serialization for contact type not implemented: " + type);
}
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
index c55be24fcb4..f449a8d6bd2 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java
@@ -544,7 +544,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
contact.audiences().forEach(audience -> audiencesArray.addString(toAudience(audience)));
switch (contact.type()) {
case EMAIL:
- var email = (TenantContacts.EmailContact) contact.data();
+ var email = (TenantContacts.EmailContact) contact;
contactCursor.setString("email", email.email());
return;
default:
@@ -678,12 +678,11 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler {
private TenantContacts updateTenantInfoContacts(Inspector insp, TenantContacts oldContacts) {
if (!insp.valid()) return oldContacts;
- List<TenantContacts.Contact<?>> contacts = SlimeUtils.entriesStream(insp).map(inspector -> {
- TenantContacts.EmailContact email = new TenantContacts.EmailContact(inspector.field("email").asString());
+ List<TenantContacts.Contact> contacts = SlimeUtils.entriesStream(insp).map(inspector -> {
List<TenantContacts.Audience> audiences = SlimeUtils.entriesStream(inspector.field("audiences"))
.map(audience -> fromAudience(audience.asString()))
.collect(Collectors.toUnmodifiableList());
- return new TenantContacts.Contact<>(TenantContacts.Type.EMAIL, audiences, email);
+ return new TenantContacts.EmailContact(audiences, inspector.field("email").asString());
}).collect(toUnmodifiableList());
return new TenantContacts(contacts);
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java
index d7a3be82968..e0d14f19f21 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/TenantSerializerTest.java
@@ -175,8 +175,8 @@ public class TenantSerializerTest {
public void cloud_tenant_with_tenant_info_contacts() {
TenantInfo tenantInfo = TenantInfo.empty()
.withContacts(new TenantContacts(List.of(
- new TenantContacts.Contact<>(TenantContacts.Type.EMAIL, List.of(TenantContacts.Audience.TENANT), new TenantContacts.EmailContact("email1@email.com")),
- new TenantContacts.Contact<>(TenantContacts.Type.EMAIL, List.of(TenantContacts.Audience.TENANT, TenantContacts.Audience.NOTIFICATIONS), new TenantContacts.EmailContact("email2@email.com")))));
+ new TenantContacts.EmailContact(List.of(TenantContacts.Audience.TENANT), "email1@email.com"),
+ new TenantContacts.EmailContact(List.of(TenantContacts.Audience.TENANT, TenantContacts.Audience.NOTIFICATIONS), "email2@email.com"))));
Slime slime = new Slime();
Cursor parentCursor = slime.setObject();
serializer.toSlime(tenantInfo, parentCursor);