Skip to content

Commit 9a79ce6

Browse files
committed
Add email subject to subscription
Currently, it's impossible to specify the subscription email subject, only field for the email body template is defined. The subject added as per https://confluence.intgdc.com/display/analysis/Notifications+-+User+documentation.
1 parent 463210b commit 9a79ce6

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)