Skip to content
This repository was archived by the owner on Aug 13, 2020. It is now read-only.

Commit bbd5967

Browse files
authored
Merge pull request #767 from CJSCommonPlatform/add-ordering-to-subscriptions
Add ordering to subscriptions descriptor
2 parents 7eeac8f + 75a6746 commit bbd5967

File tree

16 files changed

+145
-81
lines changed

16 files changed

+145
-81
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to
66
## [Unreleased]
77

88
## [6.0.11] - 2018-08-30
9+
### Added
10+
- ordering to subscriptions descriptor yamls
11+
912
### Fixed
1013
- JdbcDataSourceProvider can now handle multiple DataSources
1114

event-subscription-test-utils/src/main/java/uk/gov/justice/subscription/domain/builders/SubscriptionBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public final class SubscriptionBuilder {
1111
private String name;
1212
private final List<Event> events = new ArrayList<>();
1313
private String eventSourceName;
14-
private String prioritisation;
14+
private int prioritisation;
1515

1616
private SubscriptionBuilder() {
1717
}
@@ -40,7 +40,7 @@ public SubscriptionBuilder withEventSourceName(final String eventSourceName) {
4040
return this;
4141
}
4242

43-
public SubscriptionBuilder withPrioritisation(final String prioritisation) {
43+
public SubscriptionBuilder withPrioritisation(final int prioritisation) {
4444
this.prioritisation = prioritisation;
4545
return this;
4646
}

event-subscription-test-utils/src/main/java/uk/gov/justice/subscription/domain/builders/SubscriptionsDescriptorBuilder.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public final class SubscriptionsDescriptorBuilder {
1111
private String specVersion;
1212
private String service;
1313
private String serviceComponent;
14+
private int prioritisation = 0;
1415
private final List<Subscription> subscriptions = new ArrayList<>();
1516

1617
private SubscriptionsDescriptorBuilder() {
@@ -45,7 +46,12 @@ public SubscriptionsDescriptorBuilder withSubscriptions(final List<Subscription>
4546
return this;
4647
}
4748

49+
public SubscriptionsDescriptorBuilder withPrioritisation(final int prioritisation) {
50+
this.prioritisation = prioritisation;
51+
return this;
52+
}
53+
4854
public SubscriptionsDescriptor build() {
49-
return new SubscriptionsDescriptor(specVersion, service, serviceComponent, subscriptions);
55+
return new SubscriptionsDescriptor(specVersion, service, serviceComponent, prioritisation, subscriptions);
5056
}
5157
}

event-subscription-test-utils/src/test/java/uk/gov/justice/subscription/domain/builders/SubscriptionBuilderTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public void shouldBuildASubscription() throws Exception {
2222
final Event event_1 = mock(Event.class);
2323
final Event event_2 = mock(Event.class);
2424
final String eventSourceName = "eventSoureName";
25-
final String prioritisation = "1";
25+
final int prioritisation = 1;
2626

2727
final Subscription subscription = subscription()
2828
.withName(name)
@@ -45,7 +45,7 @@ public void shouldBeAbleToAddEventsOneAtATime() throws Exception {
4545
final Event event_1 = mock(Event.class);
4646
final Event event_2 = mock(Event.class);
4747
final String eventSourceName = "eventSourceName";
48-
final String prioritisation = "1";
48+
final int prioritisation = 1;
4949

5050
final Subscription subscription = subscription()
5151
.withName(name)

event-subscription-test-utils/src/test/java/uk/gov/justice/subscription/domain/builders/SubscriptionsDescriptorBuilderTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,22 @@ public void shouldBuildASubscription() {
2020
final String specVersion = "specVersion";
2121
final String service = "service";
2222
final String serviceComponent = "serviceComponent";
23+
final int prioritisation = 1;
2324
final Subscription subscription_1 = mock(Subscription.class);
2425
final Subscription subscription_2 = mock(Subscription.class);
2526

2627
final SubscriptionsDescriptor subscriptionsDescriptor = subscriptionsDescriptor()
2728
.withSpecVersion(specVersion)
2829
.withService(service)
2930
.withServiceComponent(serviceComponent)
31+
.withPrioritisation(prioritisation)
3032
.withSubscriptions(asList(subscription_1, subscription_2))
3133
.build();
3234

3335
assertThat(subscriptionsDescriptor.getSpecVersion(), is(specVersion));
3436
assertThat(subscriptionsDescriptor.getService(), is(service));
3537
assertThat(subscriptionsDescriptor.getServiceComponent(), is(serviceComponent));
38+
assertThat(subscriptionsDescriptor.getPrioritisation(), is(prioritisation));
3639
assertThat(subscriptionsDescriptor.getSubscriptions(), hasItem(subscription_1));
3740
assertThat(subscriptionsDescriptor.getSubscriptions(), hasItem(subscription_2));
3841
}
@@ -43,20 +46,23 @@ public void shouldBeAbleToAddSubscriptionsOneAtATime() {
4346
final String specVersion = "specVersion";
4447
final String service = "service";
4548
final String serviceComponent = "serviceComponent";
49+
final int prioritisation = 1;
4650
final Subscription subscription_1 = mock(Subscription.class);
4751
final Subscription subscription_2 = mock(Subscription.class);
4852

4953
final SubscriptionsDescriptor subscriptionsDescriptor = subscriptionsDescriptor()
5054
.withSpecVersion(specVersion)
5155
.withService(service)
5256
.withServiceComponent(serviceComponent)
57+
.withPrioritisation(prioritisation)
5358
.withSubscription(subscription_1)
5459
.withSubscription(subscription_2)
5560
.build();
5661

5762
assertThat(subscriptionsDescriptor.getSpecVersion(), is(specVersion));
5863
assertThat(subscriptionsDescriptor.getService(), is(service));
5964
assertThat(subscriptionsDescriptor.getServiceComponent(), is(serviceComponent));
65+
assertThat(subscriptionsDescriptor.getPrioritisation(), is(prioritisation));
6066
assertThat(subscriptionsDescriptor.getSubscriptions(), hasItem(subscription_1));
6167
assertThat(subscriptionsDescriptor.getSubscriptions(), hasItem(subscription_2));
6268
}
Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,16 @@
11
package uk.gov.justice.subscription;
22

3-
import static java.lang.Integer.parseInt;
4-
import static java.lang.String.format;
53
import static java.util.Comparator.comparing;
64
import static java.util.Comparator.naturalOrder;
75

8-
import uk.gov.justice.services.yaml.YamlParserException;
6+
import uk.gov.justice.subscription.domain.subscriptiondescriptor.Subscription;
97
import uk.gov.justice.subscription.domain.subscriptiondescriptor.SubscriptionsDescriptor;
108

119
public class SubscriptionSorter {
1210

13-
private final static int HIGHEST_PRIORITY = 0;
14-
1511
public void sortSubscriptionsByPrioritisation(final SubscriptionsDescriptor subscriptionsDescriptor) {
1612
if (!subscriptionsDescriptor.getSubscriptions().isEmpty()) {
17-
subscriptionsDescriptor.getSubscriptions().sort(comparing(subscription -> getPrioritisationNumber(subscription.getPrioritisation()), naturalOrder()));
18-
}
19-
}
20-
21-
private Integer getPrioritisationNumber(final String prioritisation) {
22-
try {
23-
if (null != prioritisation) {
24-
return parseInt(prioritisation);
25-
}
26-
return HIGHEST_PRIORITY;
27-
} catch (final NumberFormatException nfe) {
28-
throw new YamlParserException(format("Incorrect prioritisation number: %s in subscription-descriptor.yaml", prioritisation), nfe);
13+
subscriptionsDescriptor.getSubscriptions().sort(comparing(Subscription::getPrioritisation, naturalOrder()));
2914
}
3015
}
3116
}

event-subscription/src/main/java/uk/gov/justice/subscription/SubscriptionsDescriptorParser.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package uk.gov.justice.subscription;
22

3+
import static java.util.Comparator.comparingInt;
4+
35
import uk.gov.justice.services.yaml.YamlFileValidator;
46
import uk.gov.justice.services.yaml.YamlParser;
57
import uk.gov.justice.subscription.domain.subscriptiondescriptor.SubscriptionsDescriptor;
@@ -41,7 +43,9 @@ public SubscriptionsDescriptorParser(final YamlParser yamlParser,
4143
* @return Stream of {@link SubscriptionsDescriptor}
4244
*/
4345
public Stream<SubscriptionsDescriptor> getSubscriptionDescriptorsFrom(final Collection<URL> urls) {
44-
return urls.stream().map(this::parseSubscriptionDescriptorFromYaml);
46+
return urls.stream()
47+
.map(this::parseSubscriptionDescriptorFromYaml)
48+
.sorted(comparingInt(SubscriptionsDescriptor::getPrioritisation));
4549
}
4650

4751
private SubscriptionsDescriptor parseSubscriptionDescriptorFromYaml(final URL url) {

event-subscription/src/main/java/uk/gov/justice/subscription/domain/subscriptiondescriptor/Subscription.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ public class Subscription {
88
private final String name;
99
private final List<Event> events;
1010
private final String eventSourceName;
11-
private final String prioritisation;
11+
private final int prioritisation;
1212

1313
public Subscription(final String name,
1414
final List<Event> events,
1515
final String eventSourceName,
16-
final String prioritisation) {
16+
final int prioritisation) {
1717
this.name = name;
1818
this.events = events;
1919
this.eventSourceName = eventSourceName;
@@ -32,7 +32,7 @@ public String getEventSourceName() {
3232
return eventSourceName;
3333
}
3434

35-
public String getPrioritisation() {
35+
public int getPrioritisation() {
3636
return prioritisation;
3737
}
3838

@@ -51,4 +51,14 @@ public boolean equals(final Object o) {
5151
public int hashCode() {
5252
return Objects.hash(name, events,prioritisation, eventSourceName);
5353
}
54+
55+
@Override
56+
public String toString() {
57+
return "Subscription{" +
58+
"name='" + name + '\'' +
59+
", events=" + events +
60+
", eventSourceName='" + eventSourceName + '\'' +
61+
", prioritisation=" + prioritisation +
62+
'}';
63+
}
5464
}

event-subscription/src/main/java/uk/gov/justice/subscription/domain/subscriptiondescriptor/SubscriptionsDescriptor.java

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,18 @@ public class SubscriptionsDescriptor {
88
private final String specVersion;
99
private final String service;
1010
private final String serviceComponent;
11+
private final int prioritisation;
1112
private final List<Subscription> subscriptions;
1213

1314
public SubscriptionsDescriptor(final String specVersion,
1415
final String service,
1516
final String serviceComponent,
17+
final int prioritisation,
1618
final List<Subscription> subscriptions) {
1719
this.specVersion = specVersion;
1820
this.service = service;
1921
this.serviceComponent = serviceComponent;
22+
this.prioritisation = prioritisation;
2023
this.subscriptions = subscriptions;
2124
}
2225

@@ -32,23 +35,39 @@ public String getServiceComponent() {
3235
return serviceComponent;
3336
}
3437

38+
public int getPrioritisation() {
39+
return prioritisation;
40+
}
41+
42+
public List<Subscription> getSubscriptions() {
43+
return subscriptions;
44+
}
45+
3546
@Override
36-
public boolean equals(Object object) {
37-
if (this == object) return true;
38-
if (object == null || getClass() != object.getClass()) return false;
39-
SubscriptionsDescriptor that = (SubscriptionsDescriptor) object;
47+
public boolean equals(final Object o) {
48+
if (this == o) return true;
49+
if (!(o instanceof SubscriptionsDescriptor)) return false;
50+
final SubscriptionsDescriptor that = (SubscriptionsDescriptor) o;
4051
return Objects.equals(specVersion, that.specVersion) &&
4152
Objects.equals(service, that.service) &&
42-
Objects.equals(serviceComponent, that.serviceComponent);
53+
Objects.equals(serviceComponent, that.serviceComponent) &&
54+
Objects.equals(prioritisation, that.prioritisation) &&
55+
Objects.equals(subscriptions, that.subscriptions);
4356
}
4457

4558
@Override
4659
public int hashCode() {
47-
return Objects.hash(specVersion, service, serviceComponent);
60+
return Objects.hash(specVersion, service, serviceComponent, prioritisation, subscriptions);
4861
}
4962

50-
public List<Subscription> getSubscriptions() {
51-
return subscriptions;
63+
@Override
64+
public String toString() {
65+
return "SubscriptionsDescriptor{" +
66+
"specVersion='" + specVersion + '\'' +
67+
", service='" + service + '\'' +
68+
", serviceComponent='" + serviceComponent + '\'' +
69+
", prioritisation='" + prioritisation + '\'' +
70+
", subscriptions=" + subscriptions +
71+
'}';
5272
}
53-
5473
}

event-subscription/src/main/resources/json/schema/subscription-schema.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@
3232
"EVENT_LISTENER"
3333
]
3434
},
35+
"prioritisation": {
36+
"$id": "/properties/subscriptions_descriptor/properties/prioritisation",
37+
"type": "integer",
38+
"title": "Subscription descriptor prioritisation",
39+
"examples": [
40+
"1"
41+
]
42+
},
3543
"subscriptions": {
3644
"$id": "/properties/subscriptions_descriptor/properties/subscriptions",
3745
"type": "array",

0 commit comments

Comments
 (0)