99import static uk .gov .justice .services .messaging .Envelope .metadataFrom ;
1010import static uk .gov .justice .services .messaging .JsonEnvelope .envelopeFrom ;
1111import static uk .gov .justice .services .messaging .JsonObjects .createObjectBuilderWithFilter ;
12+ import static uk .gov .moj .cpp .listing .domain .CourtListType .ALPHABETICAL ;
13+ import static uk .gov .moj .cpp .listing .domain .CourtListType .JUDGE ;
1214import static uk .gov .moj .cpp .listing .domain .CourtListType .ONLINE_PUBLIC ;
1315import static uk .gov .moj .cpp .listing .domain .CourtListType .PUBLIC ;
1416
2527import uk .gov .moj .cpp .listing .common .xhibit .ReferenceDataLoader ;
2628import uk .gov .moj .cpp .listing .domain .CourtListType ;
2729import uk .gov .moj .cpp .listing .domain .referencedata .OrganisationUnit ;
30+ import uk .gov .moj .cpp .listing .query .api .service .AlphabeticalCourtListService ;
2831import uk .gov .moj .cpp .listing .query .api .service .ReferenceDataService ;
32+ import uk .gov .moj .cpp .listing .query .document .generator .JudgeListTemplateAssembler ;
2933import uk .gov .moj .cpp .listing .query .document .generator .StandardPublicCourtListTemplateAssembler ;
3034import uk .gov .moj .cpp .listing .query .view .HearingQueryView ;
3135import uk .gov .moj .cpp .listing .query .view .service .ProgressionService ;
@@ -63,6 +67,7 @@ public class HearingQueryApi {
6367 public static final String RESTRICTED = "restricted" ;
6468 public static final String INCLUDE_APPLICATIONS = "includeApplications" ;
6569 private static final String LIST_ID = "listId" ;
70+ private static final String START_DATE = "startDate" ;
6671 private static final String OU_L2_CODE = "oucodeL2Code" ;
6772 private static final String FIRST_NAME = "firstName" ;
6873 private static final String LAST_NAME = "lastName" ;
@@ -86,6 +91,12 @@ public class HearingQueryApi {
8691 @ Inject
8792 private StandardPublicCourtListTemplateAssembler standardPublicCourtListAssembler ;
8893
94+ @ Inject
95+ private AlphabeticalCourtListService alphabeticalCourtListService ;
96+
97+ @ Inject
98+ private JudgeListTemplateAssembler judgeListTemplateAssembler ;
99+
89100 @ Inject
90101 private ReferenceDataService referenceDataService ;
91102
@@ -165,18 +176,23 @@ public JsonEnvelope searchHearingsForCourtListPayload(final JsonEnvelope query)
165176
166177 final String courtCentreId = query .payloadAsJsonObject ().getString (COURT_CENTRE_ID , null );
167178 final String courtRoomId = query .payloadAsJsonObject ().getString (COURT_ROOM_ID , null );
179+ final String startDate = query .payloadAsJsonObject ().getString (START_DATE , null );
168180 final String listId = query .payloadAsJsonObject ().getString (LIST_ID );
169181 final boolean restricted = Optional .ofNullable (query .payloadAsJsonObject ().get (RESTRICTED )).map (restrictedJson -> Boolean .valueOf (restrictedJson .toString ())).orElse (false );
170182 final boolean includeApplications = Optional .ofNullable (query .payloadAsJsonObject ().get (INCLUDE_APPLICATIONS )).map (includeApplicationsJson -> Boolean .valueOf (includeApplicationsJson .toString ())).orElse (false );
171183 final Optional <CourtListType > courtListType = CourtListType .valueFor (listId );
172184
173185 if (courtListType .isPresent ()) {
174- final JsonEnvelope queryResponse = hearingQueryView .getCourtListContent (query );
175- final Optional <JsonObject > courtListData = standardPublicCourtListAssembler .assemble (queryResponse , courtCentreId , courtRoomId , courtListType .get (), restricted , includeApplications );
186+ final CourtListType listType = courtListType .get ();
187+ // JUDGE uses a different query (range search by judge); all other types use the standard court list content.
188+ final JsonEnvelope queryResponse = JUDGE .equals (listType )
189+ ? hearingQueryView .rangeSearchHearingsForJudge (query )
190+ : hearingQueryView .getCourtListContent (query );
191+ final Optional <JsonObject > courtListData = buildCourtListData (queryResponse , courtCentreId , courtRoomId , listType , restricted , includeApplications , startDate );
176192 if (courtListData .isPresent ()) {
177193 final JsonObject courtListPayload = courtListData .get ();
178194 final boolean isWelsh = referenceDataService .isHearingLanguageWelsh (queryResponse , courtCentreId ).orElse (false );
179- final String templateName = getTemplateName (courtListType . get () , isWelsh );
195+ final String templateName = getTemplateName (listType , isWelsh );
180196 final JsonObjectBuilder builder = JsonObjects .createObjectBuilder ();
181197 courtListPayload .forEach (builder ::add );
182198 builder .add ("templateName" , templateName );
@@ -290,8 +306,25 @@ private JsonEnvelope processGetCaseByDefendant(final JsonObject payload, final S
290306 return this .hearingQueryView .getCasesByDefendantAndHearingDate (caseIds , defendants , hearingDate , query );
291307 }
292308
309+ /**
310+ * Builds the court list payload for the given type, routing ALPHABETICAL and JUDGE to their dedicated
311+ * assemblers (mirroring the binary /courtlist endpoint). Without this, those types fall through to the
312+ * standard assembler and yield an empty payload.
313+ */
314+ private Optional <JsonObject > buildCourtListData (final JsonEnvelope queryResponse , final String courtCentreId , final String courtRoomId ,
315+ final CourtListType courtListType , final boolean restricted ,
316+ final boolean includeApplications , final String startDate ) {
317+ if (ALPHABETICAL .equals (courtListType )) {
318+ return alphabeticalCourtListService .buildAlphabeticalCourtListData (queryResponse , courtCentreId );
319+ }
320+ if (JUDGE .equals (courtListType )) {
321+ return judgeListTemplateAssembler .assemble (queryResponse , courtCentreId , courtRoomId , courtListType , startDate );
322+ }
323+ return standardPublicCourtListAssembler .assemble (queryResponse , courtCentreId , courtRoomId , courtListType , restricted , includeApplications );
324+ }
325+
293326 private String getTemplateName (final CourtListType courtListType , boolean welsh ) {
294- if ((PUBLIC .equals (courtListType ) || ONLINE_PUBLIC .equals (courtListType )) && welsh ) {
327+ if ((ALPHABETICAL . equals ( courtListType ) || PUBLIC .equals (courtListType ) || ONLINE_PUBLIC .equals (courtListType )) && welsh ) {
295328 return courtListType .getWelshTemplateName ();
296329 }
297330 return courtListType .getTemplateName ();
0 commit comments