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

Commit 6760fe6

Browse files
Merge pull request #46 from Breeding-Insight/bug/BI-2422
BI-2422 - Add paging support for GET /observations/table
2 parents 5620417 + 04ba359 commit 6760fe6

File tree

3 files changed

+21
-14
lines changed

3 files changed

+21
-14
lines changed

src/main/java/io/swagger/api/pheno/ObservationsApi.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ ResponseEntity<ObservationTableResponse> observationsTableGet(
154154
@ApiParam(value = "observationUnitLevelRelationshipOrder") @Valid @RequestParam(value = "observationUnitLevelRelationshipOrder", required = false) String observationUnitLevelRelationshipOrder,
155155
@ApiParam(value = "observationUnitLevelRelationshipCode") @Valid @RequestParam(value = "observationUnitLevelRelationshipCode", required = false) String observationUnitLevelRelationshipCode,
156156
@ApiParam(value = "observationUnitLevelRelationshipDbId") @Valid @RequestParam(value = "observationUnitLevelRelationshipDbId", required = false) String observationUnitLevelRelationshipDbId,
157+
@ApiParam(value = "page") @Valid @RequestParam(value = "page", required = false) Integer page,
158+
@ApiParam(value = "pageSize") @Valid @RequestParam(value = "pageSize", required = false) Integer pageSize,
157159
@ApiParam(value = "HTTP HEADER - Token used for Authorization <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
158160
throws BrAPIServerException;
159161

src/main/java/org/brapi/test/BrAPITestServer/controller/pheno/ObservationsApiController.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,14 @@ public ResponseEntity observationsTableGet(@RequestHeader(value = "Accept", requ
173173
@RequestParam(value = "observationUnitLevelRelationshipOrder", required = false) String observationUnitLevelRelationshipOrder,
174174
@RequestParam(value = "observationUnitLevelRelationshipCode", required = false) String observationUnitLevelRelationshipCode,
175175
@RequestParam(value = "observationUnitLevelRelationshipDbId", required = false) String observationUnitLevelRelationshipDbId,
176+
@RequestParam(value = "page", required = false) Integer page,
177+
@RequestParam(value = "pageSize", required = false) Integer pageSize,
176178
@RequestHeader(value = "Authorization", required = false) String authorization)
177179
throws BrAPIServerException {
178180

179181
log.debug("Request: " + request.getRequestURI());
180182
validateSecurityContext(request, "ROLE_ANONYMOUS", "ROLE_USER");
183+
Metadata metadata = generateMetaDataTemplate(page, pageSize);
181184

182185
String sep = "";
183186
if ("text/csv".equals(accept)) {
@@ -193,7 +196,8 @@ public ResponseEntity observationsTableGet(@RequestHeader(value = "Accept", requ
193196
SearchRequestEntity request = searchService.findById(searchResultsDbId);
194197
if (request != null) {
195198
ObservationSearchRequest body = request.getParameters(ObservationSearchRequest.class);
196-
data = observationService.findObservationsTable(body);
199+
//TODO: revisit paging for this case; metadata=null
200+
data = observationService.findObservationsTable(body, null);
197201
} else {
198202
return responseAccepted(searchResultsDbId);
199203
}
@@ -204,11 +208,11 @@ public ResponseEntity observationsTableGet(@RequestHeader(value = "Accept", requ
204208
observationUnitLevelName, observationUnitLevelOrder, observationUnitLevelCode,
205209
observationUnitLevelRelationshipName, observationUnitLevelRelationshipOrder,
206210
observationUnitLevelRelationshipCode, observationUnitLevelRelationshipDbId,
207-
observationTimeStampRangeStart, observationTimeStampRangeEnd, searchResultsDbId);
211+
observationTimeStampRangeStart, observationTimeStampRangeEnd, searchResultsDbId, metadata);
208212
}
209213

210214
if (sep.isEmpty()) {
211-
return responseOK(new ObservationTableResponse(), data);
215+
return responseOK(new ObservationTableResponse(), data, metadata);
212216
} else {
213217
String textTable = observationService.getObservationTableText(data, sep);
214218
return new ResponseEntity<String>(textTable, HttpStatus.OK);

src/main/java/org/brapi/test/BrAPITestServer/service/pheno/ObservationService.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.brapi.test.BrAPITestServer.service.pheno;
22

33
import io.swagger.model.Metadata;
4+
import io.swagger.model.Pagination;
45
import io.swagger.model.pheno.*;
56
import jakarta.validation.Valid;
67
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerDbIdNotFoundException;
@@ -22,11 +23,8 @@
2223
import org.springframework.http.HttpStatus;
2324
import org.springframework.stereotype.Service;
2425

25-
import java.util.ArrayList;
26-
import java.util.List;
27-
import java.util.Map;
26+
import java.util.*;
2827
import java.util.Map.Entry;
29-
import java.util.Optional;
3028
import java.util.stream.Collectors;
3129

3230
@Service
@@ -137,27 +135,30 @@ public ObservationTable findObservationsTable(String observationUnitDbId, String
137135
String observationUnitLevelOrder, String observationUnitLevelCode,
138136
String observationUnitLevelRelationshipName, String observationUnitLevelRelationshipOrder,
139137
String observationUnitLevelRelationshipCode, String observationUnitLevelRelationshipDbId,
140-
String observationTimeStampRangeStart, String observationTimeStampRangeEnd, String searchResultsDbId)
138+
String observationTimeStampRangeStart, String observationTimeStampRangeEnd, String searchResultsDbId, Metadata metadata)
141139
throws BrAPIServerException {
142140
ObservationSearchRequest obsRequest = buildObservationsSearchRequest(null, observationUnitDbId, germplasmDbId,
143141
observationVariableDbId, studyDbId, locationDbId, trialDbId, programDbId, seasonDbId,
144142
observationUnitLevelName, observationUnitLevelOrder, observationUnitLevelCode,
145143
observationTimeStampRangeStart, observationTimeStampRangeEnd, observationUnitLevelRelationshipName,
146144
observationUnitLevelRelationshipOrder, observationUnitLevelRelationshipCode,
147145
observationUnitLevelRelationshipDbId, null, null, null, null);
148-
return findObservationsTable(obsRequest);
146+
return findObservationsTable(obsRequest, metadata);
149147
}
150148

151-
public ObservationTable findObservationsTable(ObservationSearchRequest obsRequest) {
152-
Page<ObservationEntity> observations = findObservationEntities(obsRequest, null);
149+
public ObservationTable findObservationsTable(ObservationSearchRequest obsRequest, Metadata metadata) {
150+
Page<ObservationEntity> page = findObservationEntities(obsRequest, metadata);
151+
log.debug("converting "+page.getSize()+" entities");
153152

154-
List<ObservationVariableEntity> variables = observations.stream().map(obs -> obs.getObservationVariable())
155-
.filter(vid -> vid != null).distinct().collect(Collectors.toList());
153+
List<ObservationVariableEntity> variables = page.stream().map(ObservationEntity::getObservationVariable)
154+
.filter(Objects::nonNull).distinct().collect(Collectors.toList());
156155

157156
ObservationTable table = new ObservationTable();
158-
table.setData(buildDataMatrix(observations, variables));
157+
table.setData(buildDataMatrix(page, variables));
159158
table.setHeaderRow(buildHeaderRow());
160159
table.setObservationVariables(variables.stream().map(this::convertVariables).collect(Collectors.toList()));
160+
log.debug("done converting entities");
161+
PagingUtility.calculateMetaData(metadata, page);
161162
return table;
162163
}
163164

0 commit comments

Comments
 (0)