Skip to content

Commit 71da62d

Browse files
committed
added message stream endpoints
1 parent 0698b32 commit 71da62d

9 files changed

Lines changed: 337 additions & 2 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
</developers>
2525

2626
<properties>
27-
<postmark.version>1.5.3</postmark.version>
27+
<postmark.version>1.5.5</postmark.version>
2828
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2929
<java.version>1.8</java.version>
3030
<jackson.minimum.version>2.9.7</jackson.minimum.version>

src/main/java/com/wildbit/java/postmark/client/ApiClient.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
import com.wildbit.java.postmark.client.data.model.messages.*;
1212
import com.wildbit.java.postmark.client.data.model.server.Server;
1313
import com.wildbit.java.postmark.client.data.model.stats.*;
14+
import com.wildbit.java.postmark.client.data.model.streams.MessageStream;
15+
import com.wildbit.java.postmark.client.data.model.streams.MessageStreamArchiveResponse;
16+
import com.wildbit.java.postmark.client.data.model.streams.MessageStreamUnarchiveResponse;
17+
import com.wildbit.java.postmark.client.data.model.streams.MessageStreams;
1418
import com.wildbit.java.postmark.client.data.model.suppressions.SuppressionEntries;
1519
import com.wildbit.java.postmark.client.data.model.suppressions.SuppressionStatuses;
1620
import com.wildbit.java.postmark.client.data.model.suppressions.Suppressions;
@@ -430,8 +434,43 @@ public SuppressionStatuses deleteSuppressions(String messageStream, SuppressionE
430434
}
431435

432436
/*
433-
Message stream endpoints
437+
Message streams
434438
*/
435439

440+
public MessageStreams getMessageStreams() throws PostmarkException, IOException {
441+
String response = execute(HttpClient.REQUEST_TYPES.GET, getEndpointUrl(messageStreamsEndpoint));
442+
return dataHandler.fromJson(response, MessageStreams.class);
443+
}
444+
445+
public MessageStreams getMessageStreams(Parameters parameters) throws PostmarkException, IOException {
446+
String response = execute(HttpClient.REQUEST_TYPES.GET, getEndpointUrl(messageStreamsEndpoint) + parameters);
447+
return dataHandler.fromJson(response, MessageStreams.class);
448+
}
449+
450+
public MessageStream getMessageStream(String messageStreamId) throws PostmarkException, IOException {
451+
String response = execute(HttpClient.REQUEST_TYPES.GET, getEndpointUrl(messageStreamsEndpoint + messageStreamId));
452+
return dataHandler.fromJson(response, MessageStream.class);
453+
}
454+
455+
public MessageStream setMessageStream(String messageStreamId, MessageStream data) throws PostmarkException, IOException {
456+
String response = execute(HttpClient.REQUEST_TYPES.PATCH,
457+
getEndpointUrl(messageStreamsEndpoint + messageStreamId), data);
458+
return dataHandler.fromJson(response, MessageStream.class);
459+
}
460+
461+
public MessageStream createMessageStream(MessageStream data) throws PostmarkException, IOException {
462+
String response = execute(HttpClient.REQUEST_TYPES.POST, getEndpointUrl(messageStreamsEndpoint), data);
463+
return dataHandler.fromJson(response, MessageStream.class);
464+
}
465+
466+
public MessageStreamArchiveResponse archiveMessageStream(String messageStreamId) throws PostmarkException, IOException {
467+
String response = execute(HttpClient.REQUEST_TYPES.POST, getEndpointUrl(messageStreamsEndpoint + messageStreamId + "/archive"));
468+
return dataHandler.fromJson(response, MessageStreamArchiveResponse.class);
469+
}
470+
471+
public MessageStreamUnarchiveResponse unarchiveMessageStream(String messageStreamId) throws PostmarkException, IOException {
472+
String response = execute(HttpClient.REQUEST_TYPES.POST, getEndpointUrl(messageStreamsEndpoint + messageStreamId + "/unarchive"));
473+
return dataHandler.fromJson(response, MessageStreamUnarchiveResponse.class);
474+
}
436475

437476
}

src/main/java/com/wildbit/java/postmark/client/HttpClient.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.wildbit.java.postmark.client;
22

33
import org.glassfish.jersey.client.ClientProperties;
4+
import org.glassfish.jersey.client.HttpUrlConnectorProvider;
45

56
import javax.ws.rs.client.Client;
67
import javax.ws.rs.client.ClientBuilder;
@@ -69,6 +70,13 @@ public ClientResponse execute(REQUEST_TYPES requestType, String url, String data
6970
response = target.request().headers(headers).put(Entity.json(data), Response.class);
7071
break;
7172

73+
case PATCH:
74+
// client doesn't have PATCH method, therefore workaround has to be used
75+
// https://stackoverflow.com/questions/55778145/how-to-use-patch-method-with-jersey-invocation-builder
76+
target.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
77+
response = target.request().headers(headers).method("PATCH", Entity.json(data), Response.class);
78+
break;
79+
7280
case DELETE:
7381
response = target.request().headers(headers).delete(Response.class);
7482
break;
@@ -152,6 +160,7 @@ public enum REQUEST_TYPES {
152160
POST,
153161
GET,
154162
PUT,
163+
PATCH,
155164
DELETE
156165
}
157166

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
package com.wildbit.java.postmark.client.data.model.streams;
2+
3+
import java.util.Date;
4+
5+
public class MessageStream {
6+
private String id;
7+
private String serverId;
8+
private String name;
9+
private String description;
10+
private String messageStreamType;
11+
private Date createdAt;
12+
private Date updatedAt;
13+
private Date archivedAt;
14+
private Date expectedPurgeDate;
15+
private SubscriptionManagementConfiguration subscriptionManagementConfiguration;
16+
17+
public MessageStream() {}
18+
public MessageStream(String id, String name, String description, String messageStreamType,
19+
SubscriptionManagementConfiguration subscriptionManagementConfiguration) {
20+
this.id = id;
21+
this.name = name;
22+
this.description = description;
23+
this.messageStreamType = messageStreamType;
24+
this.subscriptionManagementConfiguration = subscriptionManagementConfiguration;
25+
}
26+
27+
public MessageStream(String id, String name, String messageStreamType,
28+
SubscriptionManagementConfiguration subscriptionManagementConfiguration) {
29+
this.id = id;
30+
this.name = name;
31+
this.description = description;
32+
this.messageStreamType = messageStreamType;
33+
this.subscriptionManagementConfiguration = subscriptionManagementConfiguration;
34+
}
35+
36+
public MessageStream(String id, String name, String messageStreamType) {
37+
this.id = id;
38+
this.name = name;
39+
this.messageStreamType = messageStreamType;
40+
this.subscriptionManagementConfiguration = new SubscriptionManagementConfiguration();
41+
}
42+
43+
public String getId() {
44+
return id;
45+
}
46+
47+
public void setId(String id) {
48+
this.id = id;
49+
}
50+
51+
public String getServerId() {
52+
return serverId;
53+
}
54+
55+
public void setServerId(String serverId) {
56+
this.serverId = serverId;
57+
}
58+
59+
public String getName() {
60+
return name;
61+
}
62+
63+
public void setName(String name) {
64+
this.name = name;
65+
}
66+
67+
public String getDescription() {
68+
return description;
69+
}
70+
71+
public void setDescription(String description) {
72+
this.description = description;
73+
}
74+
75+
public String getMessageStreamType() {
76+
return messageStreamType;
77+
}
78+
79+
public void setMessageStreamType(String messageStreamType) {
80+
this.messageStreamType = messageStreamType;
81+
}
82+
83+
public Date getCreatedAt() {
84+
return createdAt;
85+
}
86+
87+
public void setCreatedAt(Date createdAt) {
88+
this.createdAt = createdAt;
89+
}
90+
91+
public Date getUpdatedAt() {
92+
return updatedAt;
93+
}
94+
95+
public void setUpdatedAt(Date updatedAt) {
96+
this.updatedAt = updatedAt;
97+
}
98+
99+
public Date getArchivedAt() {
100+
return archivedAt;
101+
}
102+
103+
public void setArchivedAt(Date archivedAt) {
104+
this.archivedAt = archivedAt;
105+
}
106+
107+
public Date getExpectedPurgeDate() {
108+
return expectedPurgeDate;
109+
}
110+
111+
public void setExpectedPurgeDate(Date expectedPurgeDate) {
112+
this.expectedPurgeDate = expectedPurgeDate;
113+
}
114+
115+
public SubscriptionManagementConfiguration getSubscriptionManagementConfiguration() {
116+
return subscriptionManagementConfiguration;
117+
}
118+
119+
public void setSubscriptionManagementConfiguration(SubscriptionManagementConfiguration subscriptionManagementConfiguration) {
120+
this.subscriptionManagementConfiguration = subscriptionManagementConfiguration;
121+
}
122+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.wildbit.java.postmark.client.data.model.streams;
2+
3+
import java.util.Date;
4+
5+
public class MessageStreamArchiveResponse {
6+
private String id;
7+
private String serverId;
8+
private Date expectedPurgeDate;
9+
10+
public String getId() {
11+
return id;
12+
}
13+
14+
public void setId(String id) {
15+
this.id = id;
16+
}
17+
18+
public String getServerId() {
19+
return serverId;
20+
}
21+
22+
public void setServerId(String serverId) {
23+
this.serverId = serverId;
24+
}
25+
26+
public Date getExpectedPurgeDate() {
27+
return expectedPurgeDate;
28+
}
29+
30+
public void setExpectedPurgeDate(Date expectedPurgeDate) {
31+
this.expectedPurgeDate = expectedPurgeDate;
32+
}
33+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.wildbit.java.postmark.client.data.model.streams;
2+
3+
public class MessageStreamUnarchiveResponse extends MessageStream {
4+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.wildbit.java.postmark.client.data.model.streams;
2+
3+
public class MessageStreams {
4+
private MessageStream[] messageStreams;
5+
private Integer totalCount;
6+
7+
public Integer getTotalCount() {
8+
return totalCount;
9+
}
10+
11+
public void setTotalCount(Integer totalCount) {
12+
this.totalCount = totalCount;
13+
}
14+
15+
public MessageStream[] getMessageStreams() {
16+
return messageStreams;
17+
}
18+
19+
public void setMessageStreams(MessageStream[] messageStreams) {
20+
this.messageStreams = messageStreams;
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.wildbit.java.postmark.client.data.model.streams;
2+
3+
public class SubscriptionManagementConfiguration {
4+
private String unsubscribeHandlingType;
5+
6+
public SubscriptionManagementConfiguration() {
7+
this.unsubscribeHandlingType = "Postmark";
8+
}
9+
10+
public SubscriptionManagementConfiguration(String unsubscribeHandlingType) {
11+
this.unsubscribeHandlingType = unsubscribeHandlingType;
12+
}
13+
14+
15+
public String getUnsubscribeHandlingType() {
16+
return unsubscribeHandlingType;
17+
}
18+
19+
public void setUnsubscribeHandlingType(String unsubscribeHandlingType) {
20+
this.unsubscribeHandlingType = unsubscribeHandlingType;
21+
}
22+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package integration;
2+
3+
import base.BaseTest;
4+
import com.wildbit.java.postmark.client.ApiClient;
5+
import com.wildbit.java.postmark.client.Parameters;
6+
import com.wildbit.java.postmark.client.data.model.streams.MessageStream;
7+
import com.wildbit.java.postmark.client.data.model.streams.MessageStreams;
8+
import com.wildbit.java.postmark.client.exception.PostmarkException;
9+
import org.junit.jupiter.api.Test;
10+
11+
import java.io.IOException;
12+
import java.util.Random;
13+
14+
import static org.junit.jupiter.api.Assertions.*;
15+
16+
public class MessageStreamsTest extends BaseTest {
17+
18+
ApiClient client = getDefaultApiClient();
19+
20+
private MessageStream findMessageStream(String streamId) throws PostmarkException, IOException {
21+
MessageStream foundStream = null;
22+
for (MessageStream streamInList : client.getMessageStreams(Parameters.init().build("messageStreamType", "all")
23+
.build("includeArchivedStreams", "true")).getMessageStreams()) {
24+
if (streamInList.getId().equalsIgnoreCase(streamId)) {
25+
foundStream = streamInList;
26+
break;
27+
}
28+
}
29+
30+
return foundStream;
31+
}
32+
33+
34+
@Test
35+
void list() throws PostmarkException, IOException {
36+
MessageStreams messages = client.getMessageStreams(Parameters.init());
37+
38+
assertTrue(messages.getTotalCount() >= 2);
39+
assertTrue(messages.getMessageStreams().length >= 2);
40+
}
41+
42+
@Test
43+
void listWithParameter() throws PostmarkException, IOException {
44+
MessageStreams messages = client.getMessageStreams(Parameters.init().build("messageStreamType", "Transactional"));
45+
46+
assertTrue(messages.getTotalCount() >= 1);
47+
assertTrue(messages.getMessageStreams().length >= 1);
48+
}
49+
50+
@Test
51+
void edit() throws PostmarkException, IOException {
52+
MessageStreams messages = client.getMessageStreams(Parameters.init().build("messageStreamType", "Transactional"));
53+
MessageStream stream = messages.getMessageStreams()[0];
54+
55+
String newDescription = "Some description" + Integer.toString(new Random().nextInt());
56+
57+
stream.setDescription(newDescription);
58+
client.setMessageStream(stream.getId(), stream);
59+
60+
MessageStream foundStream = findMessageStream(stream.getId());
61+
assertTrue(foundStream.getDescription().equalsIgnoreCase(stream.getDescription()));
62+
}
63+
64+
@Test
65+
void archive() throws PostmarkException, IOException {
66+
String streamId = "bulk";
67+
MessageStreams messages = client.getMessageStreams(Parameters.init().build("messageStreamType", "all")
68+
.build("includeArchivedStreams", "true"));
69+
70+
MessageStream foundStream = findMessageStream(streamId);
71+
72+
if (foundStream == null) {
73+
client.createMessageStream(new MessageStream(streamId, streamId,"Broadcasts"));
74+
}
75+
76+
else if (foundStream.getArchivedAt() != null) {
77+
client.unarchiveMessageStream(streamId);
78+
}
79+
80+
client.archiveMessageStream(streamId);
81+
assertNotNull(findMessageStream(streamId).getArchivedAt());
82+
83+
}
84+
}

0 commit comments

Comments
 (0)