From b9c7bc057a00a6a12a981ceef7fd2848facfefc1 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Portier Date: Mon, 2 Mar 2026 18:08:02 +0100 Subject: [PATCH 1/3] feat (Conversation/Messages): Use common class for 'MessageSource' --- MIGRATION-GUIDE.md | 2 + .../api/v1/adapters/MessagesServiceTest.java | 14 +++--- .../domains/conversation/MessagesSteps.java | 8 ++-- ...sByChannelIdentityListQueryParameters.java | 44 ++--------------- ...hannelIdentityListQueryParametersImpl.java | 12 ++--- .../v1/messages/request/MessageSource.java | 48 +++++++++++++++++++ .../MessagesDeleteQueryParameters.java | 4 +- .../MessagesDeleteQueryParametersImpl.java | 10 ++-- .../request/MessagesGetQueryParameters.java | 4 +- .../MessagesGetQueryParametersImpl.java | 10 ++-- .../request/MessagesListQueryParameters.java | 4 +- .../MessagesListQueryParametersImpl.java | 10 ++-- .../v1/messages/request/MessagesSource.java | 45 ----------------- .../MessagesUpdateQueryParameters.java | 4 +- .../MessagesUpdateQueryParametersImpl.java | 10 ++-- ...nelIdentityListQueryParametersDtoTest.java | 3 +- 16 files changed, 99 insertions(+), 133 deletions(-) create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessageSource.java delete mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesSource.java diff --git a/MIGRATION-GUIDE.md b/MIGRATION-GUIDE.md index a9cf836af..1ac8ecd25 100644 --- a/MIGRATION-GUIDE.md +++ b/MIGRATION-GUIDE.md @@ -45,6 +45,7 @@ This guide lists all removed classes and interfaces from V1 and how to migrate t | conversation.response.ConversationsListRecentResponse | [conversations.response.RecentConversationsListResponse](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/conversations/response/RecentConversationsListResponse.html) | | events.request.EventsListRequest | [events.request.EventsListQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/events/request/EventsListQueryParameters.html) | | messages.request.MessagesListRequest | [messages.request.MessagesListQueryParameters](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParameters.html) | +| api.v1.MessagesService.MessageSource | [messages.request.MessageSource](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessageSource.html) | #### Replacement Services | Old package | New package | @@ -78,6 +79,7 @@ This guide lists all removed classes and interfaces from V1 and how to migrate t | WebhooksService.list(...) | Returned class is changed from `Collection` to `WebhooksListResponse` | | TemplatesServiceV2.list(...) | Returned class is changed from `Collection` to `TemplatesV2ListResponse` | | TemplatesServiceV2.listTranslations(...) | Returned class is changed from `Collection` to `TranslationV2ListResponse` | + ### [`Numbers`](https://www.javadoc.io/doc/com.sinch.sdk/sinch-sdk-java/2.0.0/com/sinch/sdk/domains/numbers/package-summary.html) #### Replacement models diff --git a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceTest.java b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceTest.java index 97195ebdf..28ab8e4c6 100644 --- a/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceTest.java +++ b/client/src/test/java/com/sinch/sdk/domains/conversation/api/v1/adapters/MessagesServiceTest.java @@ -24,9 +24,9 @@ import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessageDtoTest; import com.sinch.sdk.domains.conversation.models.v1.messages.request.LastMessagesByChannelIdentityListQueryParameters; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageSource; import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesDeleteQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesGetQueryParameters; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesSource; import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesUpdateQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageDtoTest; import com.sinch.sdk.domains.conversation.models.v1.messages.request.UpdateMessageDtoTest; @@ -154,7 +154,7 @@ void getBySource() throws ApiException { HttpMethod.GET, Arrays.asList( new URLParameter( - "messages_source", MessagesSource.CONVERSATION_SOURCE, STYLE.FORM, true)), + "messages_source", MessageSource.CONVERSATION_SOURCE, STYLE.FORM, true)), (String) null, Collections.emptyMap(), Collections.singletonList(HttpContentType.APPLICATION_JSON), @@ -175,7 +175,7 @@ void getBySource() throws ApiException { MessagesGetQueryParameters queryParameters = MessagesGetQueryParameters.builder() - .setMessagesSource(MessagesSource.CONVERSATION_SOURCE) + .setMessagesSource(MessageSource.CONVERSATION_SOURCE) .build(); ConversationMessage response = service.get( @@ -526,7 +526,7 @@ void deleteBySource() throws ApiException { HttpMethod.DELETE, Arrays.asList( new URLParameter( - "messages_source", MessagesSource.DISPATCH_SOURCE, STYLE.FORM, true)), + "messages_source", MessageSource.DISPATCH_SOURCE, STYLE.FORM, true)), (String) null, Collections.emptyMap(), Collections.singletonList(HttpContentType.APPLICATION_JSON), @@ -547,7 +547,7 @@ void deleteBySource() throws ApiException { MessagesDeleteQueryParameters queryParameters = MessagesDeleteQueryParameters.builder() - .setMessagesSource(MessagesSource.DISPATCH_SOURCE) + .setMessagesSource(MessageSource.DISPATCH_SOURCE) .build(); service.delete( @@ -606,7 +606,7 @@ void updateBySource() throws ApiException { HttpMethod.PATCH, Arrays.asList( new URLParameter( - "messages_source", MessagesSource.DISPATCH_SOURCE, STYLE.FORM, true)), + "messages_source", MessageSource.DISPATCH_SOURCE, STYLE.FORM, true)), jsonMessageUpdateRequestDto, Collections.emptyMap(), Collections.singletonList(HttpContentType.APPLICATION_JSON), @@ -627,7 +627,7 @@ void updateBySource() throws ApiException { MessagesUpdateQueryParameters queryParameters = MessagesUpdateQueryParameters.builder() - .setMessagesSource(MessagesSource.DISPATCH_SOURCE) + .setMessagesSource(MessageSource.DISPATCH_SOURCE) .build(); ConversationMessage response = diff --git a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/MessagesSteps.java b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/MessagesSteps.java index db4bfd9fe..d5b0bea6e 100644 --- a/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/MessagesSteps.java +++ b/client/src/test/java/com/sinch/sdk/e2e/domains/conversation/MessagesSteps.java @@ -6,7 +6,7 @@ import com.sinch.sdk.domains.conversation.models.v1.messages.AppMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.ConversationMessage; import com.sinch.sdk.domains.conversation.models.v1.messages.request.LastMessagesByChannelIdentityListQueryParameters; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.LastMessagesByChannelIdentityListQueryParameters.MessagesSourceEnum; +import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageSource; import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessageUpdateRequest; import com.sinch.sdk.domains.conversation.models.v1.messages.request.MessagesListQueryParameters; import com.sinch.sdk.domains.conversation.models.v1.messages.request.SendMessageRequest; @@ -111,7 +111,7 @@ public void listLastMessagesByChannelIdentity() { LastMessagesByChannelIdentityListQueryParameters request = LastMessagesByChannelIdentityListQueryParameters.builder() .setChannelIdentities(Arrays.asList("12015555555", "12017777777", "7504610123456789")) - .setMessagesSource(MessagesSourceEnum.CONVERSATION_SOURCE) + .setMessagesSource(MessageSource.CONVERSATION_SOURCE) .setPageSize(2) .build(); listLastMessagesByChannelIdentityResponse = service.listLastMessagesByChannelIdentity(request); @@ -123,7 +123,7 @@ public void listAllLastMessagesByChannelIdentity() { LastMessagesByChannelIdentityListQueryParameters request = LastMessagesByChannelIdentityListQueryParameters.builder() .setChannelIdentities(Arrays.asList("12015555555", "12017777777", "7504610123456789")) - .setMessagesSource(MessagesSourceEnum.CONVERSATION_SOURCE) + .setMessagesSource(MessageSource.CONVERSATION_SOURCE) .setPageSize(2) .build(); listAllLastMessagesByChannelIdentityResponse = @@ -136,7 +136,7 @@ public void listLastMessagesByChannelIdentityPageIterator() { LastMessagesByChannelIdentityListQueryParameters request = LastMessagesByChannelIdentityListQueryParameters.builder() .setChannelIdentities(Arrays.asList("12015555555", "12017777777", "7504610123456789")) - .setMessagesSource(MessagesSourceEnum.CONVERSATION_SOURCE) + .setMessagesSource(MessageSource.CONVERSATION_SOURCE) .setPageSize(2) .build(); listPageIteratorLastMessagesByChannelIdentityResponse = diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParameters.java index 42b2f3261..5775f9526 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParameters.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParameters.java @@ -11,14 +11,10 @@ package com.sinch.sdk.domains.conversation.models.v1.messages.request; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.sinch.sdk.core.utils.EnumDynamic; -import com.sinch.sdk.core.utils.EnumSupportDynamic; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import com.sinch.sdk.domains.conversation.models.v1.ConversationDirection; import java.time.Instant; -import java.util.Arrays; import java.util.List; -import java.util.stream.Stream; /** * Request body for listing messages by channel identity. NOTE: You can use either contact_ids OR @@ -51,45 +47,11 @@ public interface LastMessagesByChannelIdentityListQueryParameters { String getAppId(); /** - * Optional. Specifies the message source for which the request will be processed. Default is - * DISPATCH_SOURCE. - */ - public class MessagesSourceEnum extends EnumDynamic { - public static final MessagesSourceEnum CONVERSATION_SOURCE = - new MessagesSourceEnum("CONVERSATION_SOURCE"); - public static final MessagesSourceEnum DISPATCH_SOURCE = - new MessagesSourceEnum("DISPATCH_SOURCE"); - - private static final EnumSupportDynamic ENUM_SUPPORT = - new EnumSupportDynamic<>( - MessagesSourceEnum.class, - MessagesSourceEnum::new, - Arrays.asList(CONVERSATION_SOURCE, DISPATCH_SOURCE)); - - private MessagesSourceEnum(String value) { - super(value); - } - - public static Stream values() { - return ENUM_SUPPORT.values(); - } - - public static MessagesSourceEnum from(String value) { - return ENUM_SUPPORT.from(value); - } - - public static String valueOf(MessagesSourceEnum e) { - return ENUM_SUPPORT.valueOf(e); - } - } - - /** - * Optional. Specifies the message source for which the request will be processed. Default is - * DISPATCH_SOURCE. + * Get messagesSource * * @return messagesSource */ - MessagesSourceEnum getMessagesSource(); + MessageSource getMessagesSource(); /** * Optional. Maximum number of messages to fetch. Defaults to 10 and the maximum is 1000. @@ -199,7 +161,7 @@ interface Builder { * @return Current builder * @see #getMessagesSource */ - Builder setMessagesSource(MessagesSourceEnum messagesSource); + Builder setMessagesSource(MessageSource messagesSource); /** * see getter diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParametersImpl.java index c27c0ca68..7829fa69e 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParametersImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParametersImpl.java @@ -46,7 +46,7 @@ public class LastMessagesByChannelIdentityListQueryParametersImpl public static final String JSON_PROPERTY_MESSAGES_SOURCE = "messages_source"; - private OptionalValue messagesSource; + private OptionalValue messagesSource; public static final String JSON_PROPERTY_PAGE_SIZE = "page_size"; @@ -82,7 +82,7 @@ protected LastMessagesByChannelIdentityListQueryParametersImpl( OptionalValue> channelIdentities, OptionalValue> contactIds, OptionalValue appId, - OptionalValue messagesSource, + OptionalValue messagesSource, OptionalValue pageSize, OptionalValue pageToken, OptionalValue view, @@ -137,13 +137,13 @@ public OptionalValue appId() { } @JsonIgnore - public MessagesSourceEnum getMessagesSource() { + public MessageSource getMessagesSource() { return messagesSource.orElse(null); } @JsonProperty(JSON_PROPERTY_MESSAGES_SOURCE) @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) - public OptionalValue messagesSource() { + public OptionalValue messagesSource() { return messagesSource; } @@ -299,7 +299,7 @@ static class Builder implements LastMessagesByChannelIdentityListQueryParameters OptionalValue> channelIdentities = OptionalValue.empty(); OptionalValue> contactIds = OptionalValue.empty(); OptionalValue appId = OptionalValue.empty(); - OptionalValue messagesSource = OptionalValue.empty(); + OptionalValue messagesSource = OptionalValue.empty(); OptionalValue pageSize = OptionalValue.empty(); OptionalValue pageToken = OptionalValue.empty(); OptionalValue view = OptionalValue.empty(); @@ -348,7 +348,7 @@ public Builder setAppId(String appId) { } @JsonProperty(JSON_PROPERTY_MESSAGES_SOURCE) - public Builder setMessagesSource(MessagesSourceEnum messagesSource) { + public Builder setMessagesSource(MessageSource messagesSource) { this.messagesSource = OptionalValue.of(messagesSource); return this; } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessageSource.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessageSource.java new file mode 100644 index 000000000..2ccbd2d45 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessageSource.java @@ -0,0 +1,48 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.request; + +import com.sinch.sdk.core.utils.EnumDynamic; +import com.sinch.sdk.core.utils.EnumSupportDynamic; +import java.util.Arrays; +import java.util.stream.Stream; + +/** + * Specifies the message source for which the request will be processed. Used for operations on + * messages in Dispatch Mode. For more information, see Processing Modes. + */ +public class MessageSource extends EnumDynamic { + + /** + * The default messages source. Retrieves messages sent in the CONVERSATION + * processing mode, which associates the messages with a specific conversation and contact. + */ + public static final MessageSource CONVERSATION_SOURCE = new MessageSource("CONVERSATION_SOURCE"); + + /** + * Retrieves messages sent in the DISPATCH processing mode. These types of messages + * are not associated with any conversation or contact. + */ + public static final MessageSource DISPATCH_SOURCE = new MessageSource("DISPATCH_SOURCE"); + + private static final EnumSupportDynamic ENUM_SUPPORT = + new EnumSupportDynamic<>( + MessageSource.class, + MessageSource::new, + Arrays.asList(CONVERSATION_SOURCE, DISPATCH_SOURCE)); + + private MessageSource(String value) { + super(value); + } + + public static Stream values() { + return ENUM_SUPPORT.values(); + } + + public static MessageSource from(String value) { + return ENUM_SUPPORT.from(value); + } + + public static String valueOf(MessageSource e) { + return ENUM_SUPPORT.valueOf(e); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParameters.java index 499f32e34..1ed79deef 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParameters.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParameters.java @@ -20,7 +20,7 @@ public interface MessagesDeleteQueryParameters { * * @return messagesSource */ - OptionalValue getMessagesSource(); + OptionalValue getMessagesSource(); /** * Getting builder @@ -50,7 +50,7 @@ interface Builder { * @return Current builder * @see #getMessagesSource */ - Builder setMessagesSource(MessagesSource messagesSource); + Builder setMessagesSource(MessageSource messagesSource); /** * Create instance diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParametersImpl.java index 2890ff591..233d5bdfe 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParametersImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesDeleteQueryParametersImpl.java @@ -5,13 +5,13 @@ public class MessagesDeleteQueryParametersImpl implements MessagesDeleteQueryParameters { - private final OptionalValue messagesSource; + private final OptionalValue messagesSource; - private MessagesDeleteQueryParametersImpl(OptionalValue messagesSource) { + private MessagesDeleteQueryParametersImpl(OptionalValue messagesSource) { this.messagesSource = messagesSource; } - public OptionalValue getMessagesSource() { + public OptionalValue getMessagesSource() { return messagesSource; } @@ -54,7 +54,7 @@ private String toIndentedString(Object o) { } static class Builder implements MessagesDeleteQueryParameters.Builder { - OptionalValue messagesSource = OptionalValue.empty(); + OptionalValue messagesSource = OptionalValue.empty(); protected Builder() {} @@ -67,7 +67,7 @@ protected Builder(MessagesDeleteQueryParameters _parameters) { this.messagesSource = parameters.getMessagesSource(); } - public Builder setMessagesSource(MessagesSource messagesSource) { + public Builder setMessagesSource(MessageSource messagesSource) { this.messagesSource = OptionalValue.of(messagesSource); return this; } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParameters.java index afd7edd25..fe0c0166c 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParameters.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParameters.java @@ -20,7 +20,7 @@ public interface MessagesGetQueryParameters { * * @return messagesSource */ - OptionalValue getMessagesSource(); + OptionalValue getMessagesSource(); /** * Getting builder @@ -50,7 +50,7 @@ interface Builder { * @return Current builder * @see #getMessagesSource */ - Builder setMessagesSource(MessagesSource messagesSource); + Builder setMessagesSource(MessageSource messagesSource); /** * Create instance diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParametersImpl.java index 648a05ed5..04da496d7 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParametersImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesGetQueryParametersImpl.java @@ -5,13 +5,13 @@ public class MessagesGetQueryParametersImpl implements MessagesGetQueryParameters { - private final OptionalValue messagesSource; + private final OptionalValue messagesSource; - private MessagesGetQueryParametersImpl(OptionalValue messagesSource) { + private MessagesGetQueryParametersImpl(OptionalValue messagesSource) { this.messagesSource = messagesSource; } - public OptionalValue getMessagesSource() { + public OptionalValue getMessagesSource() { return messagesSource; } @@ -54,7 +54,7 @@ private String toIndentedString(Object o) { } static class Builder implements MessagesGetQueryParameters.Builder { - OptionalValue messagesSource = OptionalValue.empty(); + OptionalValue messagesSource = OptionalValue.empty(); protected Builder() {} @@ -66,7 +66,7 @@ protected Builder(MessagesGetQueryParameters _parameters) { this.messagesSource = parameters.getMessagesSource(); } - public Builder setMessagesSource(MessagesSource messagesSource) { + public Builder setMessagesSource(MessageSource messagesSource) { this.messagesSource = OptionalValue.of(messagesSource); return this; } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParameters.java index 2e1eef01c..896275428 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParameters.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParameters.java @@ -86,7 +86,7 @@ public interface MessagesListQueryParameters { * * @return messagesSource */ - OptionalValue getMessagesSource(); + OptionalValue getMessagesSource(); /** * Get onlyRecipientOriginated @@ -218,7 +218,7 @@ interface Builder { * @return Current builder * @see #getMessagesSource */ - Builder setMessagesSource(MessagesSource messagesSource); + Builder setMessagesSource(MessageSource messagesSource); /** * see getter diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParametersImpl.java index 36d0b60bf..fcdff0494 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParametersImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesListQueryParametersImpl.java @@ -17,7 +17,7 @@ public class MessagesListQueryParametersImpl implements MessagesListQueryParamet private final OptionalValue pageSize; private final OptionalValue pageToken; private final OptionalValue view; - private final OptionalValue messagesSource; + private final OptionalValue messagesSource; private final OptionalValue onlyRecipientOriginated; private final OptionalValue channel; private final OptionalValue direction; @@ -32,7 +32,7 @@ private MessagesListQueryParametersImpl( OptionalValue pageSize, OptionalValue pageToken, OptionalValue view, - OptionalValue messagesSource, + OptionalValue messagesSource, OptionalValue onlyRecipientOriginated, OptionalValue channel, OptionalValue direction) { @@ -87,7 +87,7 @@ public OptionalValue getView() { return view; } - public OptionalValue getMessagesSource() { + public OptionalValue getMessagesSource() { return messagesSource; } @@ -192,7 +192,7 @@ static class Builder implements MessagesListQueryParameters.Builder { OptionalValue pageSize = OptionalValue.empty(); OptionalValue pageToken = OptionalValue.empty(); OptionalValue view = OptionalValue.empty(); - OptionalValue messagesSource = OptionalValue.empty(); + OptionalValue messagesSource = OptionalValue.empty(); OptionalValue onlyRecipientOriginated = OptionalValue.empty(); OptionalValue channel = OptionalValue.empty(); OptionalValue direction = OptionalValue.empty(); @@ -264,7 +264,7 @@ public Builder setView(ConversationMessagesView view) { return this; } - public Builder setMessagesSource(MessagesSource messagesSource) { + public Builder setMessagesSource(MessageSource messagesSource) { this.messagesSource = OptionalValue.of(messagesSource); return this; } diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesSource.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesSource.java deleted file mode 100644 index 1715e63f4..000000000 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesSource.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.sinch.sdk.domains.conversation.models.v1.messages.request; - -import com.sinch.sdk.core.utils.EnumDynamic; -import com.sinch.sdk.core.utils.EnumSupportDynamic; -import java.util.Arrays; -import java.util.stream.Stream; - -/** Gets or Sets messages_source */ -public class MessagesSource extends EnumDynamic { - - /** - * The default messages source. Retrieves messages sent in the CONVERSATION - * processing mode, which associates the messages with a specific conversation and contact. - */ - public static final MessagesSource CONVERSATION_SOURCE = - new MessagesSource("CONVERSATION_SOURCE"); - - /** - * Retrieves messages sent in the DISPATCH processing mode. These types of messages - * are not associated with any conversation or contact. - */ - public static final MessagesSource DISPATCH_SOURCE = new MessagesSource("DISPATCH_SOURCE"); - - private static final EnumSupportDynamic ENUM_SUPPORT = - new EnumSupportDynamic<>( - MessagesSource.class, - MessagesSource::new, - Arrays.asList(CONVERSATION_SOURCE, DISPATCH_SOURCE)); - - private MessagesSource(String value) { - super(value); - } - - public static Stream values() { - return ENUM_SUPPORT.values(); - } - - public static MessagesSource from(String value) { - return ENUM_SUPPORT.from(value); - } - - public static String valueOf(MessagesSource e) { - return ENUM_SUPPORT.valueOf(e); - } -} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParameters.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParameters.java index 6304d4a43..40638d6ba 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParameters.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParameters.java @@ -20,7 +20,7 @@ public interface MessagesUpdateQueryParameters { * * @return messagesSource */ - OptionalValue getMessagesSource(); + OptionalValue getMessagesSource(); /** * Getting builder @@ -50,7 +50,7 @@ interface Builder { * @return Current builder * @see #getMessagesSource */ - Builder setMessagesSource(MessagesSource messagesSource); + Builder setMessagesSource(MessageSource messagesSource); /** * Create instance diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParametersImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParametersImpl.java index f176b87f8..4d9e1e21b 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParametersImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/request/MessagesUpdateQueryParametersImpl.java @@ -5,13 +5,13 @@ public class MessagesUpdateQueryParametersImpl implements MessagesUpdateQueryParameters { - private final OptionalValue messagesSource; + private final OptionalValue messagesSource; - private MessagesUpdateQueryParametersImpl(OptionalValue messagesSource) { + private MessagesUpdateQueryParametersImpl(OptionalValue messagesSource) { this.messagesSource = messagesSource; } - public OptionalValue getMessagesSource() { + public OptionalValue getMessagesSource() { return messagesSource; } @@ -55,7 +55,7 @@ private String toIndentedString(Object o) { } static class Builder implements MessagesUpdateQueryParameters.Builder { - OptionalValue messagesSource = OptionalValue.empty(); + OptionalValue messagesSource = OptionalValue.empty(); protected Builder() {} @@ -68,7 +68,7 @@ protected Builder(MessagesUpdateQueryParameters _parameters) { this.messagesSource = parameters.getMessagesSource(); } - public Builder setMessagesSource(MessagesSource messagesSource) { + public Builder setMessagesSource(MessageSource messagesSource) { this.messagesSource = OptionalValue.of(messagesSource); return this; } diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParametersDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParametersDtoTest.java index e32885b58..771a2fb56 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParametersDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/request/LastMessagesByChannelIdentityListQueryParametersDtoTest.java @@ -6,7 +6,6 @@ import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; import com.sinch.sdk.domains.conversation.models.v1.ConversationChannel; import com.sinch.sdk.domains.conversation.models.v1.ConversationDirection; -import com.sinch.sdk.domains.conversation.models.v1.messages.request.LastMessagesByChannelIdentityListQueryParameters.MessagesSourceEnum; import java.time.Instant; import java.util.Arrays; import org.json.JSONException; @@ -20,7 +19,7 @@ public class LastMessagesByChannelIdentityListQueryParametersDtoTest extends Con listLastMessagesByChannelIdentityRequest = LastMessagesByChannelIdentityListQueryParameters.builder() .setAppId("an application ID") - .setMessagesSource(MessagesSourceEnum.CONVERSATION_SOURCE) + .setMessagesSource(MessageSource.CONVERSATION_SOURCE) .setChannelIdentities(Arrays.asList("447700900000", "447700900001", "447700900002")) .setDirection(ConversationDirection.TO_CONTACT) .setView(ConversationMessagesView.WITHOUT_METADATA) From 81f2861773793e7ec047df445b8927a1f0952eef Mon Sep 17 00:00:00 2001 From: Jean-Pierre Portier Date: Mon, 2 Mar 2026 18:22:11 +0100 Subject: [PATCH 2/3] feat (Conversation/messages): Support 'NOTIFICATION_MESSAGE_TEMPLATE' channel specific message --- .../ChannelSpecificMessageInternal.java | 10 +- ...nelSpecificMessageMessageInternalImpl.java | 103 +++++++++++- .../LineNotificationMessageTemplateBody.java | 88 ++++++++++ ...neNotificationMessageTemplateBodyImpl.java | 152 ++++++++++++++++++ ...MessageTemplateChannelSpecificMessage.java | 74 +++++++++ ...ageTemplateChannelSpecificMessageImpl.java | 125 ++++++++++++++ ...ficationMessageTemplateEmphasizedItem.java | 76 +++++++++ ...tionMessageTemplateEmphasizedItemImpl.java | 122 ++++++++++++++ .../LineNotificationMessageTemplateItem.java | 76 +++++++++ ...neNotificationMessageTemplateItemImpl.java | 121 ++++++++++++++ ...LineNotificationMessageTemplateButton.java | 76 +++++++++ ...NotificationMessageTemplateButtonImpl.java | 121 ++++++++++++++ ...TemplateChannelSpecificMessageDtoTest.java | 68 ++++++++ ...sageTemplateChannelSpecificMessageDto.json | 21 +++ 14 files changed, 1228 insertions(+), 5 deletions(-) create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateBody.java create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateBodyImpl.java create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessage.java create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageImpl.java create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateEmphasizedItem.java create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateEmphasizedItemImpl.java create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateItem.java create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateItemImpl.java create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/buttons/LineNotificationMessageTemplateButton.java create mode 100644 openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/buttons/LineNotificationMessageTemplateButtonImpl.java create mode 100644 openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDtoTest.java create mode 100644 openapi-contracts/src/test/resources/domains/conversation/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDto.json diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternal.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternal.java index 077c1b7af..cdbbc2829 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternal.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageInternal.java @@ -28,12 +28,20 @@ public class MessageTypeEnum extends EnumDynamic { public static final MessageTypeEnum COMMERCE = new MessageTypeEnum("COMMERCE"); public static final MessageTypeEnum CAROUSEL_COMMERCE = new MessageTypeEnum("CAROUSEL_COMMERCE"); + public static final MessageTypeEnum NOTIFICATION_MESSAGE_TEMPLATE = + new MessageTypeEnum("NOTIFICATION_MESSAGE_TEMPLATE"); private static final EnumSupportDynamic ENUM_SUPPORT = new EnumSupportDynamic<>( MessageTypeEnum.class, MessageTypeEnum::new, - Arrays.asList(FLOWS, ORDER_DETAILS, ORDER_STATUS, COMMERCE, CAROUSEL_COMMERCE)); + Arrays.asList( + FLOWS, + ORDER_DETAILS, + ORDER_STATUS, + COMMERCE, + CAROUSEL_COMMERCE, + NOTIFICATION_MESSAGE_TEMPLATE)); private MessageTypeEnum(String value) { super(value); diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageMessageInternalImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageMessageInternalImpl.java index 01f50b0b3..bc4e9c929 100644 --- a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageMessageInternalImpl.java +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/internal/ChannelSpecificMessageMessageInternalImpl.java @@ -17,6 +17,7 @@ import com.sinch.sdk.core.utils.databind.JSONNavigator; import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.kakaotalk.carousel.KakaoTalkCarouselCommerceChannelSpecificMessageImpl; import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.kakaotalk.commerce.KakaoTalkCommerceChannelSpecificMessageImpl; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line.LineNotificationMessageTemplateChannelSpecificMessageImpl; import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.whatsapp.flows.FlowChannelSpecificMessageImpl; import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.whatsapp.payment.OrderDetailsImpl; import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.whatsapp.payment.OrderStatusImpl; @@ -227,6 +228,63 @@ public ChannelSpecificMessageMessageInternalImpl deserialize( e); } + // deserialize LineNotificationMessageTemplateChannelSpecificMessageImpl + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals(Integer.class) + || LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals(Long.class) + || LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals(Float.class) + || LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals(Double.class) + || LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals(Boolean.class) + || LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals( + String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals( + Integer.class) + || LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals( + Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals( + Float.class) + || LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals( + Double.class)) + && token == JsonToken.VALUE_NUMBER_FLOAT); + attemptParsing |= + (LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals( + Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LineNotificationMessageTemplateChannelSpecificMessageImpl.class.equals( + String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + deserialized = + tree.traverse(jp.getCodec()) + .readValueAs(LineNotificationMessageTemplateChannelSpecificMessageImpl.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + match++; + log.log( + Level.FINER, + "Input data matches schema" + + " 'LineNotificationMessageTemplateChannelSpecificMessageImpl'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema" + + " 'LineNotificationMessageTemplateChannelSpecificMessageImpl'", + e); + } + // deserialize OrderDetailsImpl try { boolean attemptParsing = true; @@ -352,6 +410,12 @@ public ChannelSpecificMessageMessageInternalImpl(KakaoTalkCommerceChannelSpecifi setActualInstance(o); } + public ChannelSpecificMessageMessageInternalImpl( + LineNotificationMessageTemplateChannelSpecificMessageImpl o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + public ChannelSpecificMessageMessageInternalImpl(OrderDetailsImpl o) { super("oneOf", Boolean.FALSE); setActualInstance(o); @@ -370,6 +434,9 @@ public ChannelSpecificMessageMessageInternalImpl(OrderStatusImpl o) { schemas.put( "KakaoTalkCommerceChannelSpecificMessageImpl", KakaoTalkCommerceChannelSpecificMessageImpl.class); + schemas.put( + "LineNotificationMessageTemplateChannelSpecificMessageImpl", + LineNotificationMessageTemplateChannelSpecificMessageImpl.class); schemas.put("OrderDetailsImpl", OrderDetailsImpl.class); schemas.put("OrderStatusImpl", OrderStatusImpl.class); JSONNavigator.registerDescendants( @@ -385,7 +452,8 @@ public Map> getSchemas() { * Set the instance that matches the oneOf child schema, check the instance parameter is valid * against the oneOf child schemas: FlowChannelSpecificMessageImpl, * KakaoTalkCarouselCommerceChannelSpecificMessageImpl, - * KakaoTalkCommerceChannelSpecificMessageImpl, OrderDetailsImpl, OrderStatusImpl + * KakaoTalkCommerceChannelSpecificMessageImpl, + * LineNotificationMessageTemplateChannelSpecificMessageImpl, OrderDetailsImpl, OrderStatusImpl * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a * composed schema (allOf, anyOf, oneOf). @@ -412,6 +480,14 @@ public void setActualInstance(Object instance) { return; } + if (JSONNavigator.isInstanceOf( + LineNotificationMessageTemplateChannelSpecificMessageImpl.class, + instance, + new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSONNavigator.isInstanceOf(OrderDetailsImpl.class, instance, new HashSet>())) { super.setActualInstance(instance); return; @@ -425,17 +501,22 @@ public void setActualInstance(Object instance) { throw new RuntimeException( "Invalid instance type. Must be FlowChannelSpecificMessageImpl," + " KakaoTalkCarouselCommerceChannelSpecificMessageImpl," - + " KakaoTalkCommerceChannelSpecificMessageImpl, OrderDetailsImpl, OrderStatusImpl"); + + " KakaoTalkCommerceChannelSpecificMessageImpl," + + " LineNotificationMessageTemplateChannelSpecificMessageImpl, OrderDetailsImpl," + + " OrderStatusImpl"); } /** * Get the actual instance, which can be the following: FlowChannelSpecificMessageImpl, * KakaoTalkCarouselCommerceChannelSpecificMessageImpl, - * KakaoTalkCommerceChannelSpecificMessageImpl, OrderDetailsImpl, OrderStatusImpl + * KakaoTalkCommerceChannelSpecificMessageImpl, + * LineNotificationMessageTemplateChannelSpecificMessageImpl, OrderDetailsImpl, OrderStatusImpl * * @return The actual instance (FlowChannelSpecificMessageImpl, * KakaoTalkCarouselCommerceChannelSpecificMessageImpl, - * KakaoTalkCommerceChannelSpecificMessageImpl, OrderDetailsImpl, OrderStatusImpl) + * KakaoTalkCommerceChannelSpecificMessageImpl, + * LineNotificationMessageTemplateChannelSpecificMessageImpl, OrderDetailsImpl, + * OrderStatusImpl) */ @Override public Object getActualInstance() { @@ -481,6 +562,20 @@ public FlowChannelSpecificMessageImpl getFlowChannelSpecificMessageImpl() return (KakaoTalkCommerceChannelSpecificMessageImpl) super.getActualInstance(); } + /** + * Get the actual instance of `LineNotificationMessageTemplateChannelSpecificMessageImpl`. If the + * actual instance is not `LineNotificationMessageTemplateChannelSpecificMessageImpl`, the + * ClassCastException will be thrown. + * + * @return The actual instance of `LineNotificationMessageTemplateChannelSpecificMessageImpl` + * @throws ClassCastException if the instance is not + * `LineNotificationMessageTemplateChannelSpecificMessageImpl` + */ + public LineNotificationMessageTemplateChannelSpecificMessageImpl + getLineNotificationMessageTemplateChannelSpecificMessageImpl() throws ClassCastException { + return (LineNotificationMessageTemplateChannelSpecificMessageImpl) super.getActualInstance(); + } + /** * Get the actual instance of `OrderDetailsImpl`. If the actual instance is not * `OrderDetailsImpl`, the ClassCastException will be thrown. diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateBody.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateBody.java new file mode 100644 index 000000000..30f25b6cf --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateBody.java @@ -0,0 +1,88 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * Contact: support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line.buttons.LineNotificationMessageTemplateButton; +import java.util.List; + +/** Template body */ +@JsonDeserialize(builder = LineNotificationMessageTemplateBodyImpl.Builder.class) +public interface LineNotificationMessageTemplateBody { + + /** + * Get emphasizedItem + * + * @return emphasizedItem + */ + LineNotificationMessageTemplateEmphasizedItem getEmphasizedItem(); + + /** + * List of template items + * + * @return items + */ + List getItems(); + + /** + * List of template buttons + * + * @return buttons + */ + List getButtons(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new LineNotificationMessageTemplateBodyImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param emphasizedItem see getter + * @return Current builder + * @see #getEmphasizedItem + */ + Builder setEmphasizedItem(LineNotificationMessageTemplateEmphasizedItem emphasizedItem); + + /** + * see getter + * + * @param items see getter + * @return Current builder + * @see #getItems + */ + Builder setItems(List items); + + /** + * see getter + * + * @param buttons see getter + * @return Current builder + * @see #getButtons + */ + Builder setButtons(List buttons); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + LineNotificationMessageTemplateBody build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateBodyImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateBodyImpl.java new file mode 100644 index 000000000..9c639c2e7 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateBodyImpl.java @@ -0,0 +1,152 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line.buttons.LineNotificationMessageTemplateButton; +import java.util.List; +import java.util.Objects; + +@JsonPropertyOrder({ + LineNotificationMessageTemplateBodyImpl.JSON_PROPERTY_EMPHASIZED_ITEM, + LineNotificationMessageTemplateBodyImpl.JSON_PROPERTY_ITEMS, + LineNotificationMessageTemplateBodyImpl.JSON_PROPERTY_BUTTONS +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class LineNotificationMessageTemplateBodyImpl + implements LineNotificationMessageTemplateBody { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_EMPHASIZED_ITEM = "emphasized_item"; + + private OptionalValue emphasizedItem; + + public static final String JSON_PROPERTY_ITEMS = "items"; + + private OptionalValue> items; + + public static final String JSON_PROPERTY_BUTTONS = "buttons"; + + private OptionalValue> buttons; + + public LineNotificationMessageTemplateBodyImpl() {} + + protected LineNotificationMessageTemplateBodyImpl( + OptionalValue emphasizedItem, + OptionalValue> items, + OptionalValue> buttons) { + this.emphasizedItem = emphasizedItem; + this.items = items; + this.buttons = buttons; + } + + @JsonIgnore + public LineNotificationMessageTemplateEmphasizedItem getEmphasizedItem() { + return emphasizedItem.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_EMPHASIZED_ITEM) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue emphasizedItem() { + return emphasizedItem; + } + + @JsonIgnore + public List getItems() { + return items.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ITEMS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> items() { + return items; + } + + @JsonIgnore + public List getButtons() { + return buttons.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BUTTONS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue> buttons() { + return buttons; + } + + /** Return true if this LineNotificationMessageTemplateBody object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LineNotificationMessageTemplateBodyImpl lineNotificationMessageTemplateBody = + (LineNotificationMessageTemplateBodyImpl) o; + return Objects.equals(this.emphasizedItem, lineNotificationMessageTemplateBody.emphasizedItem) + && Objects.equals(this.items, lineNotificationMessageTemplateBody.items) + && Objects.equals(this.buttons, lineNotificationMessageTemplateBody.buttons); + } + + @Override + public int hashCode() { + return Objects.hash(emphasizedItem, items, buttons); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LineNotificationMessageTemplateBodyImpl {\n"); + sb.append(" emphasizedItem: ").append(toIndentedString(emphasizedItem)).append("\n"); + sb.append(" items: ").append(toIndentedString(items)).append("\n"); + sb.append(" buttons: ").append(toIndentedString(buttons)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements LineNotificationMessageTemplateBody.Builder { + OptionalValue emphasizedItem = + OptionalValue.empty(); + OptionalValue> items = OptionalValue.empty(); + OptionalValue> buttons = OptionalValue.empty(); + + @JsonProperty(JSON_PROPERTY_EMPHASIZED_ITEM) + public Builder setEmphasizedItem(LineNotificationMessageTemplateEmphasizedItem emphasizedItem) { + this.emphasizedItem = OptionalValue.of(emphasizedItem); + return this; + } + + @JsonProperty(JSON_PROPERTY_ITEMS) + public Builder setItems(List items) { + this.items = OptionalValue.of(items); + return this; + } + + @JsonProperty(JSON_PROPERTY_BUTTONS) + public Builder setButtons(List buttons) { + this.buttons = OptionalValue.of(buttons); + return this; + } + + public LineNotificationMessageTemplateBody build() { + return new LineNotificationMessageTemplateBodyImpl(emphasizedItem, items, buttons); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessage.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessage.java new file mode 100644 index 000000000..a013cc28e --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessage.java @@ -0,0 +1,74 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * Contact: support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** A message type for sending LINE notification messages (template) */ +@JsonDeserialize(builder = LineNotificationMessageTemplateChannelSpecificMessageImpl.Builder.class) +public interface LineNotificationMessageTemplateChannelSpecificMessage { + + /** + * Template key. See LINE + * documentation for available keys + * + *

Field is required + * + * @return templateKey + */ + String getTemplateKey(); + + /** + * Get body + * + * @return body + */ + LineNotificationMessageTemplateBody getBody(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new LineNotificationMessageTemplateChannelSpecificMessageImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param templateKey see getter + * @return Current builder + * @see #getTemplateKey + */ + Builder setTemplateKey(String templateKey); + + /** + * see getter + * + * @param body see getter + * @return Current builder + * @see #getBody + */ + Builder setBody(LineNotificationMessageTemplateBody body); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + LineNotificationMessageTemplateChannelSpecificMessage build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageImpl.java new file mode 100644 index 000000000..5900b9ec4 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageImpl.java @@ -0,0 +1,125 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + LineNotificationMessageTemplateChannelSpecificMessageImpl.JSON_PROPERTY_TEMPLATE_KEY, + LineNotificationMessageTemplateChannelSpecificMessageImpl.JSON_PROPERTY_BODY +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class LineNotificationMessageTemplateChannelSpecificMessageImpl + implements LineNotificationMessageTemplateChannelSpecificMessage { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_TEMPLATE_KEY = "template_key"; + + private OptionalValue templateKey; + + public static final String JSON_PROPERTY_BODY = "body"; + + private OptionalValue body; + + public LineNotificationMessageTemplateChannelSpecificMessageImpl() {} + + protected LineNotificationMessageTemplateChannelSpecificMessageImpl( + OptionalValue templateKey, OptionalValue body) { + this.templateKey = templateKey; + this.body = body; + } + + @JsonIgnore + public String getTemplateKey() { + return templateKey.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_TEMPLATE_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue templateKey() { + return templateKey; + } + + @JsonIgnore + public LineNotificationMessageTemplateBody getBody() { + return body.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BODY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public OptionalValue body() { + return body; + } + + /** + * Return true if this LineNotificationMessageTemplateChannelSpecificMessage object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LineNotificationMessageTemplateChannelSpecificMessageImpl + lineNotificationMessageTemplateChannelSpecificMessage = + (LineNotificationMessageTemplateChannelSpecificMessageImpl) o; + return Objects.equals( + this.templateKey, lineNotificationMessageTemplateChannelSpecificMessage.templateKey) + && Objects.equals(this.body, lineNotificationMessageTemplateChannelSpecificMessage.body); + } + + @Override + public int hashCode() { + return Objects.hash(templateKey, body); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LineNotificationMessageTemplateChannelSpecificMessageImpl {\n"); + sb.append(" templateKey: ").append(toIndentedString(templateKey)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements LineNotificationMessageTemplateChannelSpecificMessage.Builder { + OptionalValue templateKey = OptionalValue.empty(); + OptionalValue body = OptionalValue.empty(); + + @JsonProperty(value = JSON_PROPERTY_TEMPLATE_KEY, required = true) + public Builder setTemplateKey(String templateKey) { + this.templateKey = OptionalValue.of(templateKey); + return this; + } + + @JsonProperty(JSON_PROPERTY_BODY) + public Builder setBody(LineNotificationMessageTemplateBody body) { + this.body = OptionalValue.of(body); + return this; + } + + public LineNotificationMessageTemplateChannelSpecificMessage build() { + return new LineNotificationMessageTemplateChannelSpecificMessageImpl(templateKey, body); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateEmphasizedItem.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateEmphasizedItem.java new file mode 100644 index 000000000..b54ddf560 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateEmphasizedItem.java @@ -0,0 +1,76 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * Contact: support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** Template emphasized item */ +@JsonDeserialize(builder = LineNotificationMessageTemplateEmphasizedItemImpl.Builder.class) +public interface LineNotificationMessageTemplateEmphasizedItem { + + /** + * Item key. See LINE + * documentation for available keys + * + *

Field is required + * + * @return itemKey + */ + String getItemKey(); + + /** + * Item value + * + *

Field is required + * + * @return content + */ + String getContent(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new LineNotificationMessageTemplateEmphasizedItemImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param itemKey see getter + * @return Current builder + * @see #getItemKey + */ + Builder setItemKey(String itemKey); + + /** + * see getter + * + * @param content see getter + * @return Current builder + * @see #getContent + */ + Builder setContent(String content); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + LineNotificationMessageTemplateEmphasizedItem build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateEmphasizedItemImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateEmphasizedItemImpl.java new file mode 100644 index 000000000..99f3c1b17 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateEmphasizedItemImpl.java @@ -0,0 +1,122 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + LineNotificationMessageTemplateEmphasizedItemImpl.JSON_PROPERTY_ITEM_KEY, + LineNotificationMessageTemplateEmphasizedItemImpl.JSON_PROPERTY_CONTENT +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class LineNotificationMessageTemplateEmphasizedItemImpl + implements LineNotificationMessageTemplateEmphasizedItem { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_ITEM_KEY = "item_key"; + + private OptionalValue itemKey; + + public static final String JSON_PROPERTY_CONTENT = "content"; + + private OptionalValue content; + + public LineNotificationMessageTemplateEmphasizedItemImpl() {} + + protected LineNotificationMessageTemplateEmphasizedItemImpl( + OptionalValue itemKey, OptionalValue content) { + this.itemKey = itemKey; + this.content = content; + } + + @JsonIgnore + public String getItemKey() { + return itemKey.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ITEM_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue itemKey() { + return itemKey; + } + + @JsonIgnore + public String getContent() { + return content.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CONTENT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue content() { + return content; + } + + /** Return true if this LineNotificationMessageTemplateEmphasizedItem object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LineNotificationMessageTemplateEmphasizedItemImpl + lineNotificationMessageTemplateEmphasizedItem = + (LineNotificationMessageTemplateEmphasizedItemImpl) o; + return Objects.equals(this.itemKey, lineNotificationMessageTemplateEmphasizedItem.itemKey) + && Objects.equals(this.content, lineNotificationMessageTemplateEmphasizedItem.content); + } + + @Override + public int hashCode() { + return Objects.hash(itemKey, content); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LineNotificationMessageTemplateEmphasizedItemImpl {\n"); + sb.append(" itemKey: ").append(toIndentedString(itemKey)).append("\n"); + sb.append(" content: ").append(toIndentedString(content)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements LineNotificationMessageTemplateEmphasizedItem.Builder { + OptionalValue itemKey = OptionalValue.empty(); + OptionalValue content = OptionalValue.empty(); + + @JsonProperty(value = JSON_PROPERTY_ITEM_KEY, required = true) + public Builder setItemKey(String itemKey) { + this.itemKey = OptionalValue.of(itemKey); + return this; + } + + @JsonProperty(value = JSON_PROPERTY_CONTENT, required = true) + public Builder setContent(String content) { + this.content = OptionalValue.of(content); + return this; + } + + public LineNotificationMessageTemplateEmphasizedItem build() { + return new LineNotificationMessageTemplateEmphasizedItemImpl(itemKey, content); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateItem.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateItem.java new file mode 100644 index 000000000..3e505dcf1 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateItem.java @@ -0,0 +1,76 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * Contact: support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** Template item */ +@JsonDeserialize(builder = LineNotificationMessageTemplateItemImpl.Builder.class) +public interface LineNotificationMessageTemplateItem { + + /** + * Item key. See LINE + * documentation for available keys + * + *

Field is required + * + * @return itemKey + */ + String getItemKey(); + + /** + * Item value + * + *

Field is required + * + * @return content + */ + String getContent(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new LineNotificationMessageTemplateItemImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param itemKey see getter + * @return Current builder + * @see #getItemKey + */ + Builder setItemKey(String itemKey); + + /** + * see getter + * + * @param content see getter + * @return Current builder + * @see #getContent + */ + Builder setContent(String content); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + LineNotificationMessageTemplateItem build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateItemImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateItemImpl.java new file mode 100644 index 000000000..ce105a152 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateItemImpl.java @@ -0,0 +1,121 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + LineNotificationMessageTemplateItemImpl.JSON_PROPERTY_ITEM_KEY, + LineNotificationMessageTemplateItemImpl.JSON_PROPERTY_CONTENT +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class LineNotificationMessageTemplateItemImpl + implements LineNotificationMessageTemplateItem { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_ITEM_KEY = "item_key"; + + private OptionalValue itemKey; + + public static final String JSON_PROPERTY_CONTENT = "content"; + + private OptionalValue content; + + public LineNotificationMessageTemplateItemImpl() {} + + protected LineNotificationMessageTemplateItemImpl( + OptionalValue itemKey, OptionalValue content) { + this.itemKey = itemKey; + this.content = content; + } + + @JsonIgnore + public String getItemKey() { + return itemKey.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_ITEM_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue itemKey() { + return itemKey; + } + + @JsonIgnore + public String getContent() { + return content.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_CONTENT) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue content() { + return content; + } + + /** Return true if this LineNotificationMessageTemplateItem object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LineNotificationMessageTemplateItemImpl lineNotificationMessageTemplateItem = + (LineNotificationMessageTemplateItemImpl) o; + return Objects.equals(this.itemKey, lineNotificationMessageTemplateItem.itemKey) + && Objects.equals(this.content, lineNotificationMessageTemplateItem.content); + } + + @Override + public int hashCode() { + return Objects.hash(itemKey, content); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LineNotificationMessageTemplateItemImpl {\n"); + sb.append(" itemKey: ").append(toIndentedString(itemKey)).append("\n"); + sb.append(" content: ").append(toIndentedString(content)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements LineNotificationMessageTemplateItem.Builder { + OptionalValue itemKey = OptionalValue.empty(); + OptionalValue content = OptionalValue.empty(); + + @JsonProperty(value = JSON_PROPERTY_ITEM_KEY, required = true) + public Builder setItemKey(String itemKey) { + this.itemKey = OptionalValue.of(itemKey); + return this; + } + + @JsonProperty(value = JSON_PROPERTY_CONTENT, required = true) + public Builder setContent(String content) { + this.content = OptionalValue.of(content); + return this; + } + + public LineNotificationMessageTemplateItem build() { + return new LineNotificationMessageTemplateItemImpl(itemKey, content); + } + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/buttons/LineNotificationMessageTemplateButton.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/buttons/LineNotificationMessageTemplateButton.java new file mode 100644 index 000000000..eeda14622 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/buttons/LineNotificationMessageTemplateButton.java @@ -0,0 +1,76 @@ +/* + * Conversation API | Sinch + * + * OpenAPI document version: 1.0 + * Contact: support@sinch.com + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * Do not edit the class manually. + */ + +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line.buttons; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; + +/** Template button */ +@JsonDeserialize(builder = LineNotificationMessageTemplateButtonImpl.Builder.class) +public interface LineNotificationMessageTemplateButton { + + /** + * Button key. See LINE + * documentation for available keys + * + *

Field is required + * + * @return buttonKey + */ + String getButtonKey(); + + /** + * Button URL + * + *

Field is required + * + * @return url + */ + String getUrl(); + + /** + * Getting builder + * + * @return New Builder instance + */ + static Builder builder() { + return new LineNotificationMessageTemplateButtonImpl.Builder(); + } + + /** Dedicated Builder */ + interface Builder { + + /** + * see getter + * + * @param buttonKey see getter + * @return Current builder + * @see #getButtonKey + */ + Builder setButtonKey(String buttonKey); + + /** + * see getter + * + * @param url see getter + * @return Current builder + * @see #getUrl + */ + Builder setUrl(String url); + + /** + * Create instance + * + * @return The instance build with current builder values + */ + LineNotificationMessageTemplateButton build(); + } +} diff --git a/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/buttons/LineNotificationMessageTemplateButtonImpl.java b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/buttons/LineNotificationMessageTemplateButtonImpl.java new file mode 100644 index 000000000..37adf6a92 --- /dev/null +++ b/openapi-contracts/src/main/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/buttons/LineNotificationMessageTemplateButtonImpl.java @@ -0,0 +1,121 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line.buttons; + +import com.fasterxml.jackson.annotation.JsonFilter; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; +import com.sinch.sdk.core.models.OptionalValue; +import java.util.Objects; + +@JsonPropertyOrder({ + LineNotificationMessageTemplateButtonImpl.JSON_PROPERTY_BUTTON_KEY, + LineNotificationMessageTemplateButtonImpl.JSON_PROPERTY_URL +}) +@JsonFilter("uninitializedFilter") +@JsonInclude(value = JsonInclude.Include.CUSTOM) +public class LineNotificationMessageTemplateButtonImpl + implements LineNotificationMessageTemplateButton { + private static final long serialVersionUID = 1L; + + public static final String JSON_PROPERTY_BUTTON_KEY = "button_key"; + + private OptionalValue buttonKey; + + public static final String JSON_PROPERTY_URL = "url"; + + private OptionalValue url; + + public LineNotificationMessageTemplateButtonImpl() {} + + protected LineNotificationMessageTemplateButtonImpl( + OptionalValue buttonKey, OptionalValue url) { + this.buttonKey = buttonKey; + this.url = url; + } + + @JsonIgnore + public String getButtonKey() { + return buttonKey.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_BUTTON_KEY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue buttonKey() { + return buttonKey; + } + + @JsonIgnore + public String getUrl() { + return url.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_URL) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public OptionalValue url() { + return url; + } + + /** Return true if this LineNotificationMessageTemplateButton object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LineNotificationMessageTemplateButtonImpl lineNotificationMessageTemplateButton = + (LineNotificationMessageTemplateButtonImpl) o; + return Objects.equals(this.buttonKey, lineNotificationMessageTemplateButton.buttonKey) + && Objects.equals(this.url, lineNotificationMessageTemplateButton.url); + } + + @Override + public int hashCode() { + return Objects.hash(buttonKey, url); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LineNotificationMessageTemplateButtonImpl {\n"); + sb.append(" buttonKey: ").append(toIndentedString(buttonKey)).append("\n"); + sb.append(" url: ").append(toIndentedString(url)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } + + @JsonPOJOBuilder(withPrefix = "set") + static class Builder implements LineNotificationMessageTemplateButton.Builder { + OptionalValue buttonKey = OptionalValue.empty(); + OptionalValue url = OptionalValue.empty(); + + @JsonProperty(value = JSON_PROPERTY_BUTTON_KEY, required = true) + public Builder setButtonKey(String buttonKey) { + this.buttonKey = OptionalValue.of(buttonKey); + return this; + } + + @JsonProperty(value = JSON_PROPERTY_URL, required = true) + public Builder setUrl(String url) { + this.url = OptionalValue.of(url); + return this; + } + + public LineNotificationMessageTemplateButton build() { + return new LineNotificationMessageTemplateButtonImpl(buttonKey, url); + } + } +} diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDtoTest.java new file mode 100644 index 000000000..c4f906f58 --- /dev/null +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDtoTest.java @@ -0,0 +1,68 @@ +package com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line; + +import com.adelean.inject.resources.junit.jupiter.GivenTextResource; +import com.adelean.inject.resources.junit.jupiter.TestWithResources; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.sinch.sdk.core.TestHelpers; +import com.sinch.sdk.domains.conversation.api.v1.adapters.ConversationBaseTest; +import com.sinch.sdk.domains.conversation.models.v1.messages.types.channelspecific.line.buttons.LineNotificationMessageTemplateButton; +import java.util.Arrays; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.skyscreamer.jsonassert.JSONAssert; + +@TestWithResources +public class LineNotificationMessageTemplateChannelSpecificMessageDtoTest + extends ConversationBaseTest { + + @GivenTextResource( + "/domains/conversation/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDto.json") + static String jsonLineNotificationMessageTemplateChannelSpecificMessageDto; + + public static LineNotificationMessageTemplateChannelSpecificMessage + lineNotificationMessageTemplateChannelSpecificMessageDto = + LineNotificationMessageTemplateChannelSpecificMessage.builder() + .setTemplateKey("order_item_completion_ja") + .setBody( + LineNotificationMessageTemplateBody.builder() + .setEmphasizedItem( + LineNotificationMessageTemplateEmphasizedItem.builder() + .setItemKey("name_013_ja") + .setContent("013 ja content value") + .build()) + .setItems( + Arrays.asList( + LineNotificationMessageTemplateItem.builder() + .setItemKey("name_014_ja") + .setContent("014 ja content value") + .build())) + .setButtons( + Arrays.asList( + LineNotificationMessageTemplateButton.builder() + .setButtonKey("check_delivery_status_ja") + .setUrl("https://example.com") + .build())) + .build()) + .build(); + + @Test + void deserializeKakaoTalkCommerceChannelSpecificMessage() throws JsonProcessingException { + Object deserialized = + objectMapper.readValue( + jsonLineNotificationMessageTemplateChannelSpecificMessageDto, + LineNotificationMessageTemplateChannelSpecificMessage.class); + + TestHelpers.recursiveEquals( + deserialized, lineNotificationMessageTemplateChannelSpecificMessageDto); + } + + @Test + void serializeKakaoTalkCommerceChannelSpecificMessage() + throws JsonProcessingException, JSONException { + String serializedString = + objectMapper.writeValueAsString(lineNotificationMessageTemplateChannelSpecificMessageDto); + + JSONAssert.assertEquals( + jsonLineNotificationMessageTemplateChannelSpecificMessageDto, serializedString, true); + } +} diff --git a/openapi-contracts/src/test/resources/domains/conversation/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDto.json b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDto.json new file mode 100644 index 000000000..5e3c786e4 --- /dev/null +++ b/openapi-contracts/src/test/resources/domains/conversation/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDto.json @@ -0,0 +1,21 @@ +{ + "template_key": "order_item_completion_ja", + "body": { + "emphasized_item": { + "item_key": "name_013_ja", + "content": "013 ja content value" + }, + "items": [ + { + "item_key": "name_014_ja", + "content": "014 ja content value" + } + ], + "buttons": [ + { + "button_key": "check_delivery_status_ja", + "url": "https://example.com" + } + ] + } +} From d5bddfe2ce2f4994cd73f0e4437cbb8a8a28c919 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Portier Date: Thu, 5 Mar 2026 18:44:39 +0100 Subject: [PATCH 3/3] test (Conversation): Fix unit test name --- ...ficationMessageTemplateChannelSpecificMessageDtoTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDtoTest.java b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDtoTest.java index c4f906f58..b6ef344d9 100644 --- a/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDtoTest.java +++ b/openapi-contracts/src/test/java/com/sinch/sdk/domains/conversation/models/v1/messages/types/channelspecific/line/LineNotificationMessageTemplateChannelSpecificMessageDtoTest.java @@ -46,7 +46,8 @@ public class LineNotificationMessageTemplateChannelSpecificMessageDtoTest .build(); @Test - void deserializeKakaoTalkCommerceChannelSpecificMessage() throws JsonProcessingException { + void deserializeLineNotificationMessageTemplateChannelSpecificMessagee() + throws JsonProcessingException { Object deserialized = objectMapper.readValue( jsonLineNotificationMessageTemplateChannelSpecificMessageDto, @@ -57,7 +58,7 @@ void deserializeKakaoTalkCommerceChannelSpecificMessage() throws JsonProcessingE } @Test - void serializeKakaoTalkCommerceChannelSpecificMessage() + void serializeLineNotificationMessageTemplateChannelSpecificMessage() throws JsonProcessingException, JSONException { String serializedString = objectMapper.writeValueAsString(lineNotificationMessageTemplateChannelSpecificMessageDto);