Skip to content

Commit 8021f5d

Browse files
author
Anders Breid
authored
Add chaining for all setters in subscription object
1 parent a5b924a commit 8021f5d

File tree

5 files changed

+66
-30
lines changed

5 files changed

+66
-30
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.github.ericsson</groupId>
66
<artifactId>eiffel-commons-java</artifactId>
7-
<version>0.0.12</version>
7+
<version>0.0.13-SNAPSHOT</version>
88

99
<name>eiffel commons java</name>
1010
<description>A shared library for eiffel components</description>

src/main/java/com/ericsson/eiffelcommons/subscriptionobject/MailSubscriptionObject.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
import java.io.IOException;
44

5-
public class MailSubscriptionObject extends SubscriptionObject {
5+
public class MailSubscriptionObject extends SubscriptionObject<MailSubscriptionObject> {
66

77
/**
88
* Creates a subscriptionObject with MAIL capabilities.
99
* @param subscriptionName
1010
* @throws IOException
1111
*/
1212
public MailSubscriptionObject(String subscriptionName) throws IOException {
13-
super(subscriptionName);
13+
super(MailSubscriptionObject.class, subscriptionName);
1414

1515
subscriptionJson.put("notificationType", "MAIL");
1616
}

src/main/java/com/ericsson/eiffelcommons/subscriptionobject/RestPostSubscriptionObject.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.io.IOException;
44

5-
public class RestPostSubscriptionObject extends SubscriptionObject {
5+
public class RestPostSubscriptionObject extends SubscriptionObject<RestPostSubscriptionObject> {
66

77
private final String NOTIFICATION_TYPE_KEY = "notificationType";
88
private final String NOTIFICATION_TYPE = "REST_POST";
@@ -19,8 +19,7 @@ public class RestPostSubscriptionObject extends SubscriptionObject {
1919
* @throws IOException
2020
*/
2121
public RestPostSubscriptionObject(String subscriptionName) throws IOException {
22-
super(subscriptionName);
23-
22+
super(RestPostSubscriptionObject.class, subscriptionName);
2423
subscriptionJson.put(NOTIFICATION_TYPE_KEY, NOTIFICATION_TYPE);
2524
}
2625

src/main/java/com/ericsson/eiffelcommons/subscriptionobject/SubscriptionObject.java

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,66 +9,88 @@
99

1010
import lombok.Getter;
1111

12-
public abstract class SubscriptionObject {
12+
public abstract class SubscriptionObject<T extends SubscriptionObject<?>> {
1313
private static final String SUBSCRIPTION_TEMPLATE_PATH = "subscriptionsTemplate.json";
1414

15+
// reference to self as the subclass type
16+
protected final T self;
17+
1518
@Getter
1619
protected JSONObject subscriptionJson;
1720

1821
/**
1922
* Creates a subscription with a specific name.
23+
*
2024
* @param subscriptionName
2125
* @throws IOException
2226
*/
23-
public SubscriptionObject(String subscriptionName) throws IOException {
27+
public SubscriptionObject(final Class<T> selfClass, String subscriptionName) throws IOException {
2428
subscriptionJson = Utils.getResourceFileAsJsonObject(SUBSCRIPTION_TEMPLATE_PATH);
2529
subscriptionJson.put("subscriptionName", subscriptionName);
30+
this.self = selfClass.cast(this);
2631
}
2732

2833
/**
2934
* Adds a notification message to the subscriptionObject as key value.
35+
*
3036
* @param notificationKey
3137
* @param notificationValue
38+
* @return
3239
*/
33-
public void addNotificationMessageKeyValue(String notificationKey, String notificationValue) {
40+
public T addNotificationMessageKeyValue(String notificationKey, String notificationValue) {
3441
JSONObject keyValue = new JSONObject();
3542
keyValue.put("formkey", notificationKey);
3643
keyValue.put("formvalue", notificationValue);
3744

38-
JSONArray notificationMessageKeyValue = subscriptionJson.getJSONArray("notificationMessageKeyValues");
45+
JSONArray notificationMessageKeyValue = subscriptionJson.getJSONArray(
46+
"notificationMessageKeyValues");
3947
notificationMessageKeyValue.put(keyValue);
48+
return this.self;
4049
}
4150

4251
/**
43-
* Adds a condition to a requirement, the condition is objectNode containing key value for the jmesPath expression
52+
* Adds a condition to a requirement, the condition is objectNode containing key value for the
53+
* jmesPath expression
54+
*
4455
* @param requirementIndex
4556
* @param condition
57+
* @return
4658
*/
47-
public void addConditionToRequirement(int requirementIndex, JSONObject condition) {
48-
JSONArray requirements = subscriptionJson.getJSONArray("requirements");
59+
public T addConditionToRequirement(int requirementIndex, JSONObject condition) {
60+
JSONArray requirements = subscriptionJson.getJSONArray("requirements");
4961
JSONObject requirement = requirements.getJSONObject(requirementIndex);
5062
JSONArray conditions = requirement.getJSONArray("conditions");
5163
conditions.put(condition);
64+
return this.self;
5265
}
5366

5467
/**
5568
* Sets the field notificationMeta to the wanted value
69+
*
5670
* @param notificationMeta
71+
* @return
5772
*/
58-
public void setNotificationMeta(String notificationMeta) {
73+
public T setNotificationMeta(String notificationMeta) {
5974
subscriptionJson.put("notificationMeta", notificationMeta);
75+
return this.self;
6076
}
6177

6278
/**
63-
* Set the restPostBodyMediaType field in the subscriptions to wanted value for example "application/x-www-form-urlencoded"
79+
* Set the restPostBodyMediaType field in the subscriptions to wanted value for example
80+
* "application/x-www-form-urlencoded"
81+
*
6482
* @param value
83+
* @return
6584
*/
66-
public void setRestPostBodyMediaType(String restPostBodyMediaType) {
85+
public T setRestPostBodyMediaType(String restPostBodyMediaType) {
6786
subscriptionJson.put("restPostBodyMediaType", restPostBodyMediaType);
87+
return this.self;
6888
}
6989

7090
/**
71-
* Returns the subscription as an array with the subscription. (This is the way Eiffel-intelligence stores it.)
91+
* Returns the subscription as an array with the subscription. (This is the way
92+
* Eiffel-intelligence stores it.)
93+
*
7294
* @return ArrayNode
7395
*/
7496
public JSONArray getAsSubscriptions() {

src/test/java/com/ericsson/eiffelcommons/subscriptionobjecttest/SubscriptionObjectTest.java

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void addConditionToRequirement() {
2828
restPostSubscription.addConditionToRequirement(0, condition);
2929

3030
JSONArray actualRequirement = restPostSubscription.getSubscriptionJson()
31-
.getJSONArray("requirements");
31+
.getJSONArray("requirements");
3232
JSONObject actualCondition = actualRequirement.getJSONObject(0);
3333

3434
assertEquals("{\"conditions\":[{\"test\":\"'test'\"}]}", actualCondition.toString());
@@ -39,17 +39,19 @@ public void testAddNotificationMessageKeyValue() {
3939
restPostSubscription.addNotificationMessageKeyValue("jmespath", "'test'");
4040

4141
JSONArray actualNotificationMessageKeyValue = restPostSubscription.getSubscriptionJson()
42-
.getJSONArray("notificationMessageKeyValues");
43-
assertEquals("[{\"formkey\":\"jmespath\",\"formvalue\":\"'test'\"}]", actualNotificationMessageKeyValue.toString());
42+
.getJSONArray(
43+
"notificationMessageKeyValues");
44+
assertEquals("[{\"formkey\":\"jmespath\",\"formvalue\":\"'test'\"}]",
45+
actualNotificationMessageKeyValue.toString());
4446
}
4547

4648
@Test
4749
public void testSetNotificationMeta() {
4850
restPostSubscription.setNotificationMeta("http://localhost:8080");
4951

5052
String actualNotificationMeta = restPostSubscription.getSubscriptionJson()
51-
.get("notificationMeta")
52-
.toString();
53+
.get("notificationMeta")
54+
.toString();
5355
assertEquals("http://localhost:8080", actualNotificationMeta);
5456
}
5557

@@ -58,14 +60,14 @@ public void testSetBasicAuth() {
5860
restPostSubscription.setBasicAuth("admin", "admin");
5961

6062
String actualUsername = restPostSubscription.getSubscriptionJson()
61-
.get("userName")
62-
.toString();
63+
.get("userName")
64+
.toString();
6365
String actualPassword = restPostSubscription.getSubscriptionJson()
64-
.get("password")
65-
.toString();
66+
.get("password")
67+
.toString();
6668
String actualAuthenticationType = restPostSubscription.getSubscriptionJson()
67-
.get("authenticationType")
68-
.toString();
69+
.get("authenticationType")
70+
.toString();
6971

7072
assertEquals("admin", actualUsername);
7173
assertEquals("admin", actualPassword);
@@ -77,8 +79,21 @@ public void testSetRestPostBodyMediaType() {
7779
restPostSubscription.setRestPostBodyMediaType(MediaType.APPLICATION_FORM_URLENCODED);
7880

7981
String actualRestPostBodyMediaType = restPostSubscription.getSubscriptionJson()
80-
.get("restPostBodyMediaType")
81-
.toString();
82+
.get("restPostBodyMediaType")
83+
.toString();
8284
assertEquals("application/x-www-form-urlencoded", actualRestPostBodyMediaType);
8385
}
86+
87+
@Test
88+
public void testChaining() {
89+
restPostSubscription.addNotificationMessageKeyValue("Key", "value")
90+
.setAuthenticationType("test_type")
91+
.setPassword("my_password")
92+
.setUsername("username")
93+
.addNotificationMessageKeyValue("key2", "value2")
94+
.setNotificationMeta("SomeURL");
95+
JSONObject subscription = restPostSubscription.getSubscriptionJson();
96+
97+
assertEquals("my_password", subscription.getString("password"));
98+
}
8499
}

0 commit comments

Comments
 (0)