diff --git a/listing-command/listing-command-api/pom.xml b/listing-command/listing-command-api/pom.xml
index 48ebf427b..45655262b 100644
--- a/listing-command/listing-command-api/pom.xml
+++ b/listing-command/listing-command-api/pom.xml
@@ -4,7 +4,7 @@
listing-command
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-command/listing-command-handler/pom.xml b/listing-command/listing-command-handler/pom.xml
index 6e0124a55..ea1949494 100644
--- a/listing-command/listing-command-handler/pom.xml
+++ b/listing-command/listing-command-handler/pom.xml
@@ -3,7 +3,7 @@
listing-command
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-command/pom.xml b/listing-command/pom.xml
index 06d6f5a8f..ecc4ff4ed 100644
--- a/listing-command/pom.xml
+++ b/listing-command/pom.xml
@@ -3,7 +3,7 @@
listing-parent
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-common/pom.xml b/listing-common/pom.xml
index 8edd8d25e..683db4bbe 100644
--- a/listing-common/pom.xml
+++ b/listing-common/pom.xml
@@ -3,7 +3,7 @@
listing-parent
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-domain/listing-domain-aggregate/pom.xml b/listing-domain/listing-domain-aggregate/pom.xml
index 80b94ff71..0ea69e6ba 100644
--- a/listing-domain/listing-domain-aggregate/pom.xml
+++ b/listing-domain/listing-domain-aggregate/pom.xml
@@ -3,7 +3,7 @@
listing-domain
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-domain/listing-domain-common/pom.xml b/listing-domain/listing-domain-common/pom.xml
index 26fcb2a26..93ab4515a 100644
--- a/listing-domain/listing-domain-common/pom.xml
+++ b/listing-domain/listing-domain-common/pom.xml
@@ -3,7 +3,7 @@
listing-domain
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-domain/listing-domain-event/pom.xml b/listing-domain/listing-domain-event/pom.xml
index 7e7d68c63..df28b4c4e 100644
--- a/listing-domain/listing-domain-event/pom.xml
+++ b/listing-domain/listing-domain-event/pom.xml
@@ -3,7 +3,7 @@
listing-domain
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-domain/listing-domain-xhibit/pom.xml b/listing-domain/listing-domain-xhibit/pom.xml
index 922bed4e3..d66d6a14d 100644
--- a/listing-domain/listing-domain-xhibit/pom.xml
+++ b/listing-domain/listing-domain-xhibit/pom.xml
@@ -3,7 +3,7 @@
listing-domain
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-domain/pom.xml b/listing-domain/pom.xml
index 1907dfb84..4f0fd9a73 100644
--- a/listing-domain/pom.xml
+++ b/listing-domain/pom.xml
@@ -4,7 +4,7 @@
uk.gov.moj.cpp.listing
listing-parent
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
listing-domain
diff --git a/listing-event-sources/pom.xml b/listing-event-sources/pom.xml
index b7bfd62d2..27cdf8617 100644
--- a/listing-event-sources/pom.xml
+++ b/listing-event-sources/pom.xml
@@ -3,7 +3,7 @@
listing-parent
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-event/listing-event-listener/pom.xml b/listing-event/listing-event-listener/pom.xml
index e72510f00..d08bf6bfe 100644
--- a/listing-event/listing-event-listener/pom.xml
+++ b/listing-event/listing-event-listener/pom.xml
@@ -3,7 +3,7 @@
listing-event
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-event/listing-event-processor/pom.xml b/listing-event/listing-event-processor/pom.xml
index 918a230b4..01f76c76e 100644
--- a/listing-event/listing-event-processor/pom.xml
+++ b/listing-event/listing-event-processor/pom.xml
@@ -3,7 +3,7 @@
listing-event
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-event/pom.xml b/listing-event/pom.xml
index 8d78371a9..44cb0ed0d 100644
--- a/listing-event/pom.xml
+++ b/listing-event/pom.xml
@@ -3,7 +3,7 @@
uk.gov.moj.cpp.listing
listing-parent
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-healthchecks/pom.xml b/listing-healthchecks/pom.xml
index 28740830c..d69bf38b3 100644
--- a/listing-healthchecks/pom.xml
+++ b/listing-healthchecks/pom.xml
@@ -3,7 +3,7 @@
listing-parent
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-integration-test-persistence/pom.xml b/listing-integration-test-persistence/pom.xml
index 10bf3104e..59b304244 100644
--- a/listing-integration-test-persistence/pom.xml
+++ b/listing-integration-test-persistence/pom.xml
@@ -3,7 +3,7 @@
listing-parent
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-integration-test/pom.xml b/listing-integration-test/pom.xml
index d5efc1f1e..12609bcc4 100644
--- a/listing-integration-test/pom.xml
+++ b/listing-integration-test/pom.xml
@@ -3,7 +3,7 @@
listing-parent
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-integration-test/src/test/java/uk/gov/moj/cpp/listing/steps/DailyListPayloadSteps.java b/listing-integration-test/src/test/java/uk/gov/moj/cpp/listing/steps/DailyListPayloadSteps.java
index d2004d86d..2b5345cb7 100644
--- a/listing-integration-test/src/test/java/uk/gov/moj/cpp/listing/steps/DailyListPayloadSteps.java
+++ b/listing-integration-test/src/test/java/uk/gov/moj/cpp/listing/steps/DailyListPayloadSteps.java
@@ -17,6 +17,7 @@
import static uk.gov.moj.cpp.listing.utils.ReferenceDataStub.stubGetReferenceDataCourtMappings;
import static uk.gov.moj.cpp.listing.utils.ReferenceDataStub.stubGetReferenceDataCpCourtRooms;
import static uk.gov.moj.cpp.listing.utils.ReferenceDataStub.stubGetReferenceDataJudiciaries;
+import static uk.gov.moj.cpp.listing.utils.ReferenceDataStub.stubGetReferenceDataResultDefinitions;
import static uk.gov.moj.cpp.listing.utils.ReferenceDataStub.stubGetReferenceDataXhibitCourtRoomMappings;
import static uk.gov.moj.cpp.listing.utils.ReferenceDataStub.stubOrganisationUnit;
@@ -26,6 +27,7 @@
import uk.gov.moj.cpp.listing.steps.data.UpdatedHearingData;
import java.time.LocalTime;
+import java.util.UUID;
public class DailyListPayloadSteps extends AbstractIT {
@@ -34,6 +36,7 @@ public class DailyListPayloadSteps extends AbstractIT {
private static final LocalTime DEFAULT_START_TIME = LocalTime.of(10, 0);
private static final String EXPECTED_JUDICIARY_NAME = "Recorder Ainsworth judge";
private static final String EXPECTED_PROSECUTOR_ORGANISATION_NAME = "Transport for London";
+ private static final UUID JUDICIAL_RESULT_ID = UUID.fromString("065b6fcb-0787-4f0d-a9cd-af4b5c36e047");
private final UpdatedHearingData updatedHearingData;
@@ -50,6 +53,7 @@ public DailyListPayloadSteps(final HearingsData hearingsData, final UpdatedHeari
stubOrganisationUnit(updatedHearingData.getCourtCentreId());
stubGetReferenceDataJudiciaries(updatedHearingData.getJudiciary().get(0).getJudicialId());
stubGetProsecutorPoliceFlag(hearingsData.getHearingData().get(0).getListedCases().get(0).getAuthorityId());
+ stubGetReferenceDataResultDefinitions(JUDICIAL_RESULT_ID);
}
public void verifyDailyListPayloadContainsHearing(final String publishCourtListType) {
diff --git a/listing-integration-test/src/test/java/uk/gov/moj/cpp/listing/utils/ReferenceDataStub.java b/listing-integration-test/src/test/java/uk/gov/moj/cpp/listing/utils/ReferenceDataStub.java
index 0ce052991..7c49fdef3 100644
--- a/listing-integration-test/src/test/java/uk/gov/moj/cpp/listing/utils/ReferenceDataStub.java
+++ b/listing-integration-test/src/test/java/uk/gov/moj/cpp/listing/utils/ReferenceDataStub.java
@@ -58,6 +58,8 @@ public class ReferenceDataStub {
private static final String REFERENCE_DATA_OU_COURTROOMS_MEDIA_TYPE = "application/vnd.referencedata.ou-courtrooms+json";
private static final String REFERENCE_DATA_PROSECUTOR_QUERY_URL = "/referencedata-service/query/api/rest/referencedata/prosecutors/%s";
private static final String REFERENCE_DATA_PROSECUTOR_MEDIA_TYPE = "application/vnd.referencedata.query.prosecutor+json";
+ private static final String REFERENCE_DATA_RESULT_DEFINITIONS_URL = "/referencedata-service/query/api/rest/referencedata/result-definitions";
+ private static final String REFERENCE_DATA_RESULT_DEFINITIONS_MEDIA_TYPE = "application/vnd.referencedata.query-result-definitions-by-ids+json";
private static final Map COURT_CENTER_IDS = new HashMap<>(){{
put(fromString("9b583616-049b-30f9-a14f-028a53b7cfe8"), "Liverpool Crown Court");
@@ -415,6 +417,19 @@ public static void stubOrganisationUnit(final UUID ouId) {
.withBody(payload)));
}
+ public static void stubGetReferenceDataResultDefinitions(final UUID judicialResultId) {
+ stubPingForReferenceDataService();
+ String payload = getPayload("stub-data/referencedata.query-result-definitions-by-ids.json")
+ .replace("JUDICIAL_RESULT_ID", judicialResultId.toString());
+
+ stubFor(get(urlPathMatching(REFERENCE_DATA_RESULT_DEFINITIONS_URL))
+ .withQueryParam("ids", containing(judicialResultId.toString()))
+ .willReturn(aResponse().withStatus(SC_OK)
+ .withHeader("CPPID", randomUUID().toString())
+ .withHeader("Content-Type", REFERENCE_DATA_RESULT_DEFINITIONS_MEDIA_TYPE)
+ .withBody(payload)));
+ }
+
public static void stubGetProsecutorPoliceFlag(final UUID prosecutorId) {
stubPingForReferenceDataService();
diff --git a/listing-integration-test/src/test/resources/stub-data/referencedata.query-result-definitions-by-ids.json b/listing-integration-test/src/test/resources/stub-data/referencedata.query-result-definitions-by-ids.json
new file mode 100644
index 000000000..0d3da743a
--- /dev/null
+++ b/listing-integration-test/src/test/resources/stub-data/referencedata.query-result-definitions-by-ids.json
@@ -0,0 +1,9 @@
+{
+ "resultDefinitions": [
+ {
+ "id": "JUDICIAL_RESULT_ID",
+ "label": "Reporting restriction applied",
+ "welshLabel": "Cyfyngiad adrodd wedi'i gymhwyso"
+ }
+ ]
+}
diff --git a/listing-json/pom.xml b/listing-json/pom.xml
index 00a342618..b9ee38987 100644
--- a/listing-json/pom.xml
+++ b/listing-json/pom.xml
@@ -4,7 +4,7 @@
listing-parent
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
listing-json
diff --git a/listing-performance-test/pom.xml b/listing-performance-test/pom.xml
index 04ae10612..2dfb9e91a 100644
--- a/listing-performance-test/pom.xml
+++ b/listing-performance-test/pom.xml
@@ -5,7 +5,7 @@
uk.gov.moj.cpp.listing
listing-parent
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
listing-performance-test
diff --git a/listing-query/listing-query-api/pom.xml b/listing-query/listing-query-api/pom.xml
index b4cec39eb..5388e6836 100644
--- a/listing-query/listing-query-api/pom.xml
+++ b/listing-query/listing-query-api/pom.xml
@@ -4,7 +4,7 @@
uk.gov.moj.cpp.listing
listing-query
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
listing-query-api
diff --git a/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApi.java b/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApi.java
index e73ddf706..2aecb3c72 100644
--- a/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApi.java
+++ b/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApi.java
@@ -100,6 +100,12 @@ public class HearingQueryApi {
private static final String FULL_NAME = "fullName";
private static final String CASE_IDENTIFIER = "caseIdentifier";
private static final String AUTHORITY_ID = "authorityId";
+ private static final String DEFENDANTS = "defendants";
+ private static final String OFFENCES = "offences";
+ private static final String REPORTING_RESTRICTIONS = "reportingRestrictions";
+ private static final String JUDICIAL_RESULT_ID = "judicialResultId";
+ private static final String WELSH_LABEL = "welshLabel";
+ private static final String RESULT_DEFINITIONS = "resultDefinitions";
@Inject
private HearingQueryView hearingQueryView;
@@ -267,10 +273,11 @@ public JsonEnvelope getDailyList(final JsonEnvelope query) {
final JsonObject responsePayload = response.payloadAsJsonObject();
final Map judiciariesById = resolveJudiciariesById(responsePayload, query);
final Map prosecutorOrganisationNamesById = resolveProsecutorOrganisationNames(responsePayload, query);
+ final Map welshLabelsByResultId = resolveWelshLabelsByResultId(responsePayload, query);
final JsonObjectBuilder enrichedBuilder = JsonObjects.createObjectBuilder();
responsePayload.forEach((key, value) -> {
if (COURT_LISTS.equals(key)) {
- enrichedBuilder.add(COURT_LISTS, enrichCourtListsWithAddress(responsePayload.getJsonArray(COURT_LISTS), address1, address2, welshAddress1, welshAddress2, judiciariesById, prosecutorOrganisationNamesById));
+ enrichedBuilder.add(COURT_LISTS, enrichCourtListsWithAddress(responsePayload.getJsonArray(COURT_LISTS), address1, address2, welshAddress1, welshAddress2, judiciariesById, prosecutorOrganisationNamesById, welshLabelsByResultId));
} else {
enrichedBuilder.add(key, value);
}
@@ -296,7 +303,7 @@ public JsonEnvelope getDailyList(final JsonEnvelope query) {
return envelopeFrom(metadataFrom(query.metadata()).withName("listing.search.daily.list.payload"), enrichedBuilder.build());
}
- private JsonArray enrichCourtListsWithAddress(final JsonArray courtLists, final String address1, final String address2, final String welshAddress1, final String welshAddress2, final Map judiciariesById, final Map prosecutorOrganisationNamesById) {
+ private JsonArray enrichCourtListsWithAddress(final JsonArray courtLists, final String address1, final String address2, final String welshAddress1, final String welshAddress2, final Map judiciariesById, final Map prosecutorOrganisationNamesById, final Map welshLabelsByResultId) {
final JsonArrayBuilder enrichedCourtListsBuilder = createArrayBuilder();
courtLists.getValuesAs(JsonObject.class).forEach(courtList -> {
final JsonObject crestCourtSite = courtList.getJsonObject(CREST_COURT_SITE);
@@ -319,7 +326,7 @@ private JsonArray enrichCourtListsWithAddress(final JsonArray courtLists, final
if (CREST_COURT_SITE.equals(key)) {
enrichedCourtListBuilder.add(CREST_COURT_SITE, enrichedSiteBuilder.build());
} else if (SITTINGS.equals(key)) {
- enrichedCourtListBuilder.add(SITTINGS, enrichSittings(courtList.getJsonArray(SITTINGS), judiciariesById, prosecutorOrganisationNamesById));
+ enrichedCourtListBuilder.add(SITTINGS, enrichSittings(courtList.getJsonArray(SITTINGS), judiciariesById, prosecutorOrganisationNamesById, welshLabelsByResultId));
} else {
enrichedCourtListBuilder.add(key, value);
}
@@ -353,6 +360,43 @@ private Map resolveJudiciariesById(final JsonObject response
.collect(Collectors.toMap(judge -> judge.getString(ID), judge -> judge));
}
+ private Map resolveWelshLabelsByResultId(final JsonObject responsePayload, final JsonEnvelope query) {
+ if (!responsePayload.containsKey(COURT_LISTS)) {
+ return Map.of();
+ }
+
+ final List judicialResultIds = responsePayload.getJsonArray(COURT_LISTS).getValuesAs(JsonObject.class).stream()
+ .filter(courtList -> courtList.containsKey(SITTINGS))
+ .flatMap(courtList -> courtList.getJsonArray(SITTINGS).getValuesAs(JsonObject.class).stream())
+ .filter(sitting -> sitting.containsKey(HEARINGS))
+ .flatMap(sitting -> sitting.getJsonArray(HEARINGS).getValuesAs(JsonObject.class).stream())
+ .filter(hearing -> hearing.containsKey(DEFENDANTS))
+ .flatMap(hearing -> hearing.getJsonArray(DEFENDANTS).getValuesAs(JsonObject.class).stream())
+ .filter(defendant -> defendant.containsKey(OFFENCES))
+ .flatMap(defendant -> defendant.getJsonArray(OFFENCES).getValuesAs(JsonObject.class).stream())
+ .filter(offence -> offence.containsKey(REPORTING_RESTRICTIONS))
+ .flatMap(offence -> offence.getJsonArray(REPORTING_RESTRICTIONS).getValuesAs(JsonObject.class).stream())
+ .filter(reportingRestriction -> reportingRestriction.containsKey(JUDICIAL_RESULT_ID))
+ .map(reportingRestriction -> reportingRestriction.getString(JUDICIAL_RESULT_ID))
+ .distinct()
+ .collect(Collectors.toList());
+
+ if (judicialResultIds.isEmpty()) {
+ return Map.of();
+ }
+
+ final JsonObject resultDefinitionsPayload = referenceDataService.getResultDefinitionsByIdList(
+ judicialResultIds.stream().map(UUID::fromString).collect(Collectors.toList()), query).payloadAsJsonObject();
+
+ final Map welshLabelsByResultId = new HashMap<>();
+ resultDefinitionsPayload.getJsonArray(RESULT_DEFINITIONS).getValuesAs(JsonObject.class).forEach(resultDefinition -> {
+ if (resultDefinition.containsKey(WELSH_LABEL)) {
+ welshLabelsByResultId.put(resultDefinition.getString(ID), resultDefinition.getString(WELSH_LABEL));
+ }
+ });
+ return welshLabelsByResultId;
+ }
+
private Map resolveProsecutorOrganisationNames(final JsonObject responsePayload, final JsonEnvelope query) {
if (!responsePayload.containsKey(COURT_LISTS)) {
return Map.of();
@@ -411,7 +455,7 @@ private static String resolveOrganisationName(final Map prosecut
return authorityId != null ? prosecutorOrganisationNamesById.get(authorityId) : null;
}
- private JsonArray enrichSittings(final JsonArray sittings, final Map judiciariesById, final Map prosecutorOrganisationNamesById) {
+ private JsonArray enrichSittings(final JsonArray sittings, final Map judiciariesById, final Map prosecutorOrganisationNamesById, final Map welshLabelsByResultId) {
final JsonArrayBuilder enrichedSittingsBuilder = createArrayBuilder();
sittings.getValuesAs(JsonObject.class).forEach(sitting -> {
final JsonObjectBuilder enrichedSittingBuilder = JsonObjects.createObjectBuilder();
@@ -419,7 +463,7 @@ private JsonArray enrichSittings(final JsonArray sittings, final Map prosecutorOrganisationNamesById) {
+ private JsonArray enrichHearingsWithProsecutorOrganisationNames(final JsonArray hearings, final Map prosecutorOrganisationNamesById, final Map welshLabelsByResultId) {
final JsonArrayBuilder enrichedHearingsBuilder = createArrayBuilder();
hearings.getValuesAs(JsonObject.class)
- .forEach(hearing -> enrichedHearingsBuilder.add(enrichHearingWithProsecutorOrganisationName(hearing, prosecutorOrganisationNamesById)));
+ .forEach(hearing -> enrichedHearingsBuilder.add(enrichHearingWithProsecutorOrganisationName(hearing, prosecutorOrganisationNamesById, welshLabelsByResultId)));
return enrichedHearingsBuilder.build();
}
- private JsonObject enrichHearingWithProsecutorOrganisationName(final JsonObject hearing, final Map prosecutorOrganisationNamesById) {
+ private JsonObject enrichHearingWithProsecutorOrganisationName(final JsonObject hearing, final Map prosecutorOrganisationNamesById, final Map welshLabelsByResultId) {
final boolean hasProsecutor = hearing.containsKey(PROSECUTOR);
final String authorityId = getAuthorityId(hearing);
final String prosecutorId = hasProsecutor ? getProsecutorId(hearing.getJsonObject(PROSECUTOR)) : null;
@@ -444,7 +488,11 @@ private JsonObject enrichHearingWithProsecutorOrganisationName(final JsonObject
final JsonObjectBuilder enrichedHearingBuilder = JsonObjects.createObjectBuilder();
hearing.forEach((key, value) -> {
- if (!PROSECUTOR.equals(key)) {
+ if (PROSECUTOR.equals(key)) {
+ // handled below
+ } else if (DEFENDANTS.equals(key)) {
+ enrichedHearingBuilder.add(DEFENDANTS, enrichDefendantsWithWelshReportingRestrictionLabels(hearing.getJsonArray(DEFENDANTS), welshLabelsByResultId));
+ } else {
enrichedHearingBuilder.add(key, value);
}
});
@@ -456,6 +504,52 @@ private JsonObject enrichHearingWithProsecutorOrganisationName(final JsonObject
return enrichedHearingBuilder.build();
}
+ private JsonArray enrichDefendantsWithWelshReportingRestrictionLabels(final JsonArray defendants, final Map welshLabelsByResultId) {
+ final JsonArrayBuilder enrichedDefendantsBuilder = createArrayBuilder();
+ defendants.getValuesAs(JsonObject.class).forEach(defendant -> {
+ final JsonObjectBuilder enrichedDefendantBuilder = JsonObjects.createObjectBuilder();
+ defendant.forEach((key, value) -> {
+ if (OFFENCES.equals(key)) {
+ enrichedDefendantBuilder.add(OFFENCES, enrichOffencesWithWelshReportingRestrictionLabels(defendant.getJsonArray(OFFENCES), welshLabelsByResultId));
+ } else {
+ enrichedDefendantBuilder.add(key, value);
+ }
+ });
+ enrichedDefendantsBuilder.add(enrichedDefendantBuilder.build());
+ });
+ return enrichedDefendantsBuilder.build();
+ }
+
+ private JsonArray enrichOffencesWithWelshReportingRestrictionLabels(final JsonArray offences, final Map welshLabelsByResultId) {
+ final JsonArrayBuilder enrichedOffencesBuilder = createArrayBuilder();
+ offences.getValuesAs(JsonObject.class).forEach(offence -> {
+ final JsonObjectBuilder enrichedOffenceBuilder = JsonObjects.createObjectBuilder();
+ offence.forEach((key, value) -> {
+ if (REPORTING_RESTRICTIONS.equals(key)) {
+ enrichedOffenceBuilder.add(REPORTING_RESTRICTIONS, enrichReportingRestrictionsWithWelshLabel(offence.getJsonArray(REPORTING_RESTRICTIONS), welshLabelsByResultId));
+ } else {
+ enrichedOffenceBuilder.add(key, value);
+ }
+ });
+ enrichedOffencesBuilder.add(enrichedOffenceBuilder.build());
+ });
+ return enrichedOffencesBuilder.build();
+ }
+
+ private JsonArray enrichReportingRestrictionsWithWelshLabel(final JsonArray reportingRestrictions, final Map welshLabelsByResultId) {
+ final JsonArrayBuilder enrichedReportingRestrictionsBuilder = createArrayBuilder();
+ reportingRestrictions.getValuesAs(JsonObject.class).forEach(reportingRestriction -> {
+ final JsonObjectBuilder enrichedReportingRestrictionBuilder = JsonObjects.createObjectBuilder();
+ reportingRestriction.forEach(enrichedReportingRestrictionBuilder::add);
+ final String welshLabel = welshLabelsByResultId.get(reportingRestriction.getString(JUDICIAL_RESULT_ID, null));
+ if (welshLabel != null) {
+ enrichedReportingRestrictionBuilder.add(WELSH_LABEL, welshLabel);
+ }
+ enrichedReportingRestrictionsBuilder.add(enrichedReportingRestrictionBuilder.build());
+ });
+ return enrichedReportingRestrictionsBuilder.build();
+ }
+
private static String getProsecutorId(final JsonObject prosecutor) {
return prosecutor.containsKey(PROSECUTOR_ID) ? prosecutor.getString(PROSECUTOR_ID) : null;
}
@@ -572,7 +666,7 @@ private JsonEnvelope processGetCaseByDefendant(final JsonObject payload, final S
.map(UUID::fromString)
.collect(Collectors.toList());
- final List defendants = payload.getJsonArray("defendants").stream()
+ final List defendants = payload.getJsonArray(DEFENDANTS).stream()
.map(JsonString.class::cast)
.map(JsonString::getString)
.map(UUID::fromString)
diff --git a/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/service/ReferenceDataService.java b/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/service/ReferenceDataService.java
index 3196aad00..e08d91c8d 100644
--- a/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/service/ReferenceDataService.java
+++ b/listing-query/listing-query-api/src/main/java/uk/gov/moj/cpp/listing/query/api/service/ReferenceDataService.java
@@ -37,6 +37,7 @@ public class ReferenceDataService {
private static final String REFERENCEDATA_QUERY_HEARING_TYPES = "referencedata.query.hearing-types";
private static final String WELSH_HEARING_DESCRIPTION = "welshHearingDescription";
private static final String REFERENCEDATA_QUERY_PROSECUTOR = "referencedata.query.prosecutor";
+ private static final String REFERENCEDATA_QUERY_RESULT_DEFINITIONS_BY_IDS = "referencedata.query-result-definitions-by-ids";
@Inject
private Enveloper enveloper;
@@ -67,6 +68,17 @@ public JsonEnvelope getJudiciariesByIdList(final List judiciaryIds, final
return requester.requestAsAdmin(envelopeFrom(requestEnvelope.metadata(), requestEnvelope.payload()));
}
+ public JsonEnvelope getResultDefinitionsByIdList(final List resultDefinitionIds, final JsonEnvelope event) {
+ final JsonObject payload = createObjectBuilder().add("ids", resultDefinitionIds.stream().map(UUID::toString).collect(Collectors.joining(","))).build();
+ LOGGER.info("'referencedata.query-result-definitions-by-ids' request with payload {}", payload);
+
+ final Envelope requestEnvelope = Enveloper.envelop(payload)
+ .withName(REFERENCEDATA_QUERY_RESULT_DEFINITIONS_BY_IDS)
+ .withMetadataFrom(event);
+
+ return requester.requestAsAdmin(envelopeFrom(requestEnvelope.metadata(), requestEnvelope.payload()));
+ }
+
public JsonEnvelope getProsecutorById(final String prosecutorId, final JsonEnvelope event) {
final JsonObject payload = createObjectBuilder().add("id", prosecutorId).build();
LOGGER.info("'referencedata.query.prosecutor' request with payload {}", payload);
diff --git a/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApiTest.java b/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApiTest.java
index acee064ec..d20de0ba3 100644
--- a/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApiTest.java
+++ b/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/HearingQueryApiTest.java
@@ -1017,6 +1017,101 @@ void shouldGetDailyListWithJudiciaryName() {
assertThat(enrichedJudiciary.getString("welshJudiciaryName"), is(welshJudiciaryName));
}
+ @Test
+ void shouldGetDailyListWithReportingRestrictionWelshLabel() {
+ final String courtCentreId = randomUUID().toString();
+ final String startDate = "2026-05-07";
+ final String publishCourtListType = "FINAL";
+ final String judicialResultId = randomUUID().toString();
+ final String label = "Reporting restriction applies";
+ final String welshLabel = "Mae cyfyngiad adrodd yn berthnasol";
+
+ final JsonEnvelope query = envelopeFrom(
+ metadataBuilder()
+ .withId(randomUUID())
+ .withName("listing.search.daily.list.payload"),
+ createObjectBuilder()
+ .add("courtCentreId", courtCentreId)
+ .add("startDate", startDate)
+ .add("publishCourtListType", publishCourtListType)
+ .build());
+
+ final JsonObject reportingRestriction = createObjectBuilder()
+ .add("judicialResultId", judicialResultId)
+ .add("label", label)
+ .build();
+
+ final JsonObject offence = createObjectBuilder()
+ .add("offenceCode", "TH001")
+ .add("reportingRestrictions", createArrayBuilder().add(reportingRestriction).build())
+ .build();
+
+ final JsonObject defendant = createObjectBuilder()
+ .add("id", randomUUID().toString())
+ .add("offences", createArrayBuilder().add(offence).build())
+ .build();
+
+ final JsonObject hearing = createObjectBuilder()
+ .add("startTime", "2026-05-07T10:00:00")
+ .add("defendants", createArrayBuilder().add(defendant).build())
+ .build();
+
+ final JsonObject sitting = createObjectBuilder()
+ .add("sittingDate", startDate)
+ .add("judiciary", createArrayBuilder().build())
+ .add("hearings", createArrayBuilder().add(hearing).build())
+ .build();
+
+ final JsonObject courtListPayload = createObjectBuilder()
+ .add("courtCentreId", courtCentreId)
+ .add("courtLists", createArrayBuilder()
+ .add(createObjectBuilder()
+ .add("crestCourtSite", createObjectBuilder()
+ .add("crestCourtSiteId", "415")
+ .add("crestCourtSiteName", "Kingston Crown Court")
+ .add("courtType", "CROWN")
+ .build())
+ .add("sittings", createArrayBuilder().add(sitting).build())
+ .build())
+ .build())
+ .build();
+
+ final JsonEnvelope courtListResponse = envelopeFrom(
+ metadataBuilder().withId(randomUUID()).withName("listing.courtlist"),
+ courtListPayload);
+
+ final JsonObject courtCentreEnvelopePayload = createObjectBuilder().add("isWelsh", false).build();
+ final JsonEnvelope courtCentreEnvelope = envelopeFrom(
+ metadataBuilder().withId(randomUUID()).withName("referencedata.query.courtroom"),
+ courtCentreEnvelopePayload);
+
+ final JsonObject resultDefinitionsReferenceData = createObjectBuilder()
+ .add("resultDefinitions", createArrayBuilder()
+ .add(createObjectBuilder().add("id", judicialResultId).add("welshLabel", welshLabel).build())
+ .build())
+ .build();
+ final JsonEnvelope resultDefinitionsReferenceDataEnvelope = envelopeFrom(
+ metadataBuilder().withId(randomUUID()).withName("referencedata.query-result-definitions-by-ids"),
+ resultDefinitionsReferenceData);
+
+ when(hearingQueryView.retrieveCourtList(any(JsonEnvelope.class))).thenReturn(courtListResponse);
+ when(referenceDataService.isHearingLanguageWelsh(any(), eq(courtCentreId))).thenReturn(Optional.of(false));
+ when(referenceDataService.getCourtCentreById(any(UUID.class), any(JsonEnvelope.class))).thenReturn(courtCentreEnvelope);
+ when(referenceDataService.getResultDefinitionsByIdList(eq(List.of(fromString(judicialResultId))), any(JsonEnvelope.class))).thenReturn(resultDefinitionsReferenceDataEnvelope);
+
+ final JsonObject resultPayload = hearingQueryApi.getDailyList(query).payloadAsJsonObject();
+
+ final JsonObject enrichedReportingRestriction = resultPayload.getJsonArray("courtLists").getJsonObject(0)
+ .getJsonArray("sittings").getJsonObject(0)
+ .getJsonArray("hearings").getJsonObject(0)
+ .getJsonArray("defendants").getJsonObject(0)
+ .getJsonArray("offences").getJsonObject(0)
+ .getJsonArray("reportingRestrictions").getJsonObject(0);
+
+ assertThat(enrichedReportingRestriction.getString("label"), is(label));
+ assertThat(enrichedReportingRestriction.getString("welshLabel"), is(welshLabel));
+ }
+
@Test
void shouldGetDailyListWithProsecutorOrganisationName() {
final String courtCentreId = randomUUID().toString();
diff --git a/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/service/ReferenceDataServiceTest.java b/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/service/ReferenceDataServiceTest.java
index 07e404009..3f1ba1e52 100644
--- a/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/service/ReferenceDataServiceTest.java
+++ b/listing-query/listing-query-api/src/test/java/uk/gov/moj/cpp/listing/query/api/service/ReferenceDataServiceTest.java
@@ -96,6 +96,23 @@ public void shouldGetJudiciariesByIdList() {
assertThat(requestEnvelope.metadata().name(), is("referencedata.query.judiciaries"));
}
+ @Test
+ public void shouldGetResultDefinitionsByIdList() {
+ final JsonEnvelope eventEnvelope = generateEmptyEnvelope();
+
+ final UUID resultDefinitionId = randomUUID();
+
+ referenceDataService.getResultDefinitionsByIdList(asList(resultDefinitionId), eventEnvelope);
+
+ verify(requester).requestAsAdmin(argumentCaptorForRequestEnvelope.capture());
+ final JsonEnvelope requestEnvelope = argumentCaptorForRequestEnvelope.getValue();
+ assertThat(requestEnvelope.metadata().name(), is("referencedata.query-result-definitions-by-ids"));
+ final JsonObject expectedPayload = createObjectBuilder()
+ .add("ids", resultDefinitionId.toString())
+ .build();
+ assertThat(requestEnvelope.payloadAsJsonObject(), is(expectedPayload));
+ }
+
@Test
public void shouldGetProsecutorById() {
final JsonEnvelope eventEnvelope = generateEmptyEnvelope();
diff --git a/listing-query/listing-query-view/pom.xml b/listing-query/listing-query-view/pom.xml
index e0d5e06f1..48648441b 100644
--- a/listing-query/listing-query-view/pom.xml
+++ b/listing-query/listing-query-view/pom.xml
@@ -4,7 +4,7 @@
uk.gov.moj.cpp.listing
listing-query
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
listing-query-view
diff --git a/listing-query/pom.xml b/listing-query/pom.xml
index 8d5f20494..535da8a63 100644
--- a/listing-query/pom.xml
+++ b/listing-query/pom.xml
@@ -3,7 +3,7 @@
uk.gov.moj.cpp.listing
listing-parent
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-service/pom.xml b/listing-service/pom.xml
index bee778b20..ee5d3806b 100644
--- a/listing-service/pom.xml
+++ b/listing-service/pom.xml
@@ -3,7 +3,7 @@
uk.gov.moj.cpp.listing
listing-parent
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-viewstore/listing-viewstore-liquibase/pom.xml b/listing-viewstore/listing-viewstore-liquibase/pom.xml
index 1ed328104..97eada46e 100644
--- a/listing-viewstore/listing-viewstore-liquibase/pom.xml
+++ b/listing-viewstore/listing-viewstore-liquibase/pom.xml
@@ -3,7 +3,7 @@
listing-viewstore
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-viewstore/listing-viewstore-persistence/pom.xml b/listing-viewstore/listing-viewstore-persistence/pom.xml
index c27fdd587..1eee6d214 100644
--- a/listing-viewstore/listing-viewstore-persistence/pom.xml
+++ b/listing-viewstore/listing-viewstore-persistence/pom.xml
@@ -3,7 +3,7 @@
uk.gov.moj.cpp.listing
listing-viewstore
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/listing-viewstore/pom.xml b/listing-viewstore/pom.xml
index 66a254739..a96f25dbc 100644
--- a/listing-viewstore/pom.xml
+++ b/listing-viewstore/pom.xml
@@ -3,7 +3,7 @@
listing-parent
uk.gov.moj.cpp.listing
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
4.0.0
diff --git a/pom.xml b/pom.xml
index 1bd400a65..94415a2a6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,7 +11,7 @@
uk.gov.moj.cpp.listing
listing-parent
- 17.104.8-cct-1981-SNAPSHOT
+ 17.104.9-cct-1981-SNAPSHOT
pom
Listing Context Microservice Parent