Skip to content

Commit fc39b02

Browse files
author
gdgate
authored
Merge pull request #840 from apascenko/apa-subscr
Add email subject to subscription Reviewed-by: Peter Plocháň https://github.com/peter-plochan
2 parents 463210b + 9a79ce6 commit fc39b02

3 files changed

Lines changed: 103 additions & 12 deletions

File tree

src/main/java/com/gooddata/notification/Subscription.java

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
*/
66
package com.gooddata.notification;
77

8+
import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
89
import static org.apache.commons.lang3.Validate.notEmpty;
910
import static org.apache.commons.lang3.Validate.notNull;
1011

1112
import com.fasterxml.jackson.annotation.JsonCreator;
1213
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
14+
import com.fasterxml.jackson.annotation.JsonInclude;
1315
import com.fasterxml.jackson.annotation.JsonProperty;
1416
import com.fasterxml.jackson.annotation.JsonTypeInfo;
1517
import com.fasterxml.jackson.annotation.JsonTypeName;
@@ -26,14 +28,16 @@
2628
@JsonTypeName("subscription")
2729
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT, use = JsonTypeInfo.Id.NAME)
2830
@JsonIgnoreProperties(ignoreUnknown = true)
31+
@JsonInclude(NON_NULL)
2932
public class Subscription {
3033

3134
public static final String URI = "/gdc/projects/{project}/users/{user}/subscriptions";
3235
public static final UriTemplate URI_TEMPLATE = new UriTemplate(URI);
3336

3437
private final List<Trigger> triggers;
3538
private final TriggerCondition condition;
36-
private final MessageTemplate template;
39+
private final MessageTemplate messageTemplate;
40+
private final MessageTemplate subjectTemplate;
3741
private final List<String> channels;
3842
private final Meta meta;
3943

@@ -44,33 +48,55 @@ public class Subscription {
4448
* @param triggers triggers of subscription
4549
* @param channels list of {@link Channel}
4650
* @param condition condition under which this subscription activates
47-
* @param template of message
51+
* @param messageTemplate of message
4852
* @param title name of subscription
4953
*/
5054
public Subscription(final List<Trigger> triggers,
5155
final List<Channel> channels,
5256
final TriggerCondition condition,
53-
final MessageTemplate template,
57+
final MessageTemplate messageTemplate,
58+
final String title) {
59+
this(triggers, channels, condition, messageTemplate, null, title);
60+
}
61+
62+
/**
63+
* Creates Subscription
64+
*
65+
* @param triggers triggers of subscription
66+
* @param channels list of {@link Channel}
67+
* @param condition condition under which this subscription activates
68+
* @param messageTemplate of message
69+
* @param subjectTemplate of message
70+
* @param title name of subscription
71+
*/
72+
public Subscription(final List<Trigger> triggers,
73+
final List<Channel> channels,
74+
final TriggerCondition condition,
75+
final MessageTemplate messageTemplate,
76+
final MessageTemplate subjectTemplate,
5477
final String title) {
5578
this(notNull(triggers, "triggers"),
56-
notNull(condition, "condition"),
57-
notNull(template, "template"),
58-
notNull(channels, "channels").stream().map(e -> e.getMeta().getUri()).collect(Collectors.toList()),
59-
new Meta(
60-
notEmpty(title, "title")
61-
)
79+
notNull(condition, "condition"),
80+
notNull(messageTemplate, "messageTemplate"),
81+
subjectTemplate,
82+
notNull(channels, "channels").stream().map(e -> e.getMeta().getUri()).collect(Collectors.toList()),
83+
new Meta(
84+
notEmpty(title, "title")
85+
)
6286
);
6387
}
6488

6589
@JsonCreator
6690
Subscription(@JsonProperty("triggers") final List<Trigger> triggers,
6791
@JsonProperty("condition") final TriggerCondition condition,
68-
@JsonProperty("message") final MessageTemplate template,
92+
@JsonProperty("message") final MessageTemplate messageTemplate,
93+
@JsonProperty("subject") final MessageTemplate subjectTemplate,
6994
@JsonProperty("channels") final List<String> channels,
7095
@JsonProperty("meta") final Meta meta) {
7196
this.triggers = triggers;
7297
this.condition = condition;
73-
this.template = template;
98+
this.messageTemplate = messageTemplate;
99+
this.subjectTemplate = subjectTemplate;
74100
this.channels = channels;
75101
this.meta = meta;
76102
}
@@ -85,7 +111,12 @@ public TriggerCondition getCondition() {
85111

86112
@JsonProperty("message")
87113
public MessageTemplate getTemplate() {
88-
return template;
114+
return messageTemplate;
115+
}
116+
117+
@JsonProperty("subject")
118+
public MessageTemplate getSubjectTemplate() {
119+
return subjectTemplate;
89120
}
90121

91122
public List<String> getChannels() {

src/test/java/com/gooddata/notification/SubscriptionTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import static java.util.Collections.singletonList;
1010
import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
1111
import static net.javacrumbs.jsonunit.core.util.ResourceUtils.resource;
12+
import static org.hamcrest.CoreMatchers.instanceOf;
1213
import static org.hamcrest.CoreMatchers.is;
1314
import static org.hamcrest.CoreMatchers.notNullValue;
1415
import static org.hamcrest.MatcherAssert.assertThat;
@@ -41,10 +42,37 @@ public void testSerialization() throws Exception {
4142
Arrays.asList(new TimerEvent("0 * * * * *"), new TimerEvent("1 * * * * *")),
4243
new TriggerCondition("true"),
4344
new MessageTemplate("test message"),
45+
null,
4446
singletonList("/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff/channelConfigurations/59dca62e60b2c601f3c72e18"),
4547
new Meta("test subscription"));
4648

4749
assertThat(subscription, jsonEquals(resource("notification/subscriptionToCreate.json")));
4850
}
4951

52+
@Test
53+
public void testSerializationWithSubject() {
54+
Subscription subscription = new Subscription(
55+
singletonList(new TimerEvent("0 * * * * *")),
56+
new TriggerCondition("true"),
57+
new MessageTemplate("test message"),
58+
new MessageTemplate("test subject"),
59+
singletonList("/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff/channelConfigurations/59dca62e60b2c601f3c72e18"),
60+
new Meta("test subscription"));
61+
62+
assertThat(subscription, jsonEquals(resource("notification/subscriptionWithSubject.json")));
63+
}
64+
65+
@Test
66+
public void testDeserializationWithSubject() {
67+
Subscription subscription = readObjectFromResource("/notification/subscriptionWithSubject.json", Subscription.class);
68+
assertThat(subscription.getSubjectTemplate().getExpression(), is("test subject"));
69+
assertThat(subscription.getTemplate().getExpression(), is("test message"));
70+
assertThat(subscription.getCondition().getExpression(), is("true"));
71+
assertThat(subscription.getChannels().get(0), is("/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff/channelConfigurations/59dca62e60b2c601f3c72e18"));
72+
assertThat(subscription.getMeta().getTitle(), is ("test subscription"));
73+
74+
Trigger trigger = subscription.getTriggers().get(0);
75+
assertThat(trigger, instanceOf(TimerEvent.class));
76+
assertThat(((TimerEvent)trigger).getCronExpression(), is("0 * * * * *"));
77+
}
5078
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"subscription": {
3+
"triggers": [
4+
{
5+
"timerEvent": {
6+
"cronExpression": "0 * * * * *"
7+
}
8+
}
9+
],
10+
"condition": {
11+
"condition": {
12+
"expression": "true"
13+
}
14+
},
15+
"message": {
16+
"template": {
17+
"expression": "test message"
18+
}
19+
},
20+
"subject": {
21+
"template": {
22+
"expression": "test subject"
23+
}
24+
},
25+
"channels": [
26+
"/gdc/account/profile/876ec68f5630b38de65852ed5d6236ff/channelConfigurations/59dca62e60b2c601f3c72e18"
27+
],
28+
"meta": {
29+
"title": "test subscription"
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)