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

Commit a60459a

Browse files
authored
Merge pull request #53 from Breeding-Insight/release/1.1
Release/1.1
2 parents dbe8cac + 3fb4a47 commit a60459a

32 files changed

+1225
-72
lines changed

src/main/java/io/swagger/api/germ/GermplasmApi.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
import io.swagger.model.BrAPIResponse;
99
import io.swagger.model.Model202AcceptedSearchResponse;
10+
import io.swagger.model.core.ListsListResponse;
11+
import io.swagger.model.core.ListsSingleResponse;
1012
import io.swagger.model.germ.GermplasmListResponse;
1113
import io.swagger.model.germ.GermplasmMCPDResponse;
1214
import io.swagger.model.germ.GermplasmNewRequest;
@@ -45,6 +47,20 @@ ResponseEntity<GermplasmSingleResponse> germplasmGermplasmDbIdGet(
4547
@ApiParam(value = "HTTP HEADER - Token used for Authorization <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
4648
throws BrAPIServerException;
4749

50+
@ApiOperation(value = "Delete an existing germplasm", nickname = "germplasmGermplasmDbIdDelete", notes = "Delete an existing germplasm", response = GermplasmSingleResponse.class, authorizations = {
51+
@Authorization(value = "AuthorizationToken") }, tags = { "Germplasm", })
52+
@ApiResponses(value = { @ApiResponse(code = 204, message = "OK", response = GermplasmSingleResponse.class),
53+
@ApiResponse(code = 400, message = "Bad Request", response = String.class),
54+
@ApiResponse(code = 401, message = "Unauthorized", response = String.class),
55+
@ApiResponse(code = 403, message = "Forbidden", response = String.class),
56+
@ApiResponse(code = 404, message = "Not Found", response = String.class) })
57+
@RequestMapping(value = "/germplasm/{germplasmDbId}", produces = { "application/json" }, method = RequestMethod.DELETE)
58+
ResponseEntity<GermplasmSingleResponse> germplasmGermplasmDbIdDelete(
59+
@ApiParam(value = "The unique ID of this germplasm", required = true) @PathVariable("germplasmDbId") String germplasmDbId,
60+
@ApiParam(value = "hardDelete") @Valid @RequestParam(value = "hardDelete", defaultValue = "false", required = false) boolean hardDelete,
61+
@ApiParam(value = "HTTP HEADER - Token used for Authorization <strong> Bearer {token_string} </strong>") @RequestHeader(value = "Authorization", required = false) String authorization)
62+
throws BrAPIServerException;
63+
4864
@ApiOperation(value = "Get the details of a specific Germplasm in MCPD format", nickname = "germplasmGermplasmDbIdMcpdGet", notes = "Get all MCPD details of a germplasm <a target=\"_blank\" href=\"https://www.bioversityInternational.org/fileadmin/user_upload/online_library/publications/pdfs/FAOBIOVERSITY_MULTI-CROP_PASSPORT_DESCRIPTORS_V.2.1_2015_2020.pdf\"> MCPD v2.1 spec can be found here </a> Implementation Notes - When the MCPD spec identifies a field which can have multiple values returned, the JSON response should be an array instead of a semi-colon separated string.", response = GermplasmMCPDResponse.class, authorizations = {
4965
@Authorization(value = "AuthorizationToken") }, tags = { "Germplasm", })
5066
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK", response = GermplasmMCPDResponse.class),

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/io/swagger/model/core/BatchDeleteSearchRequest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.fasterxml.jackson.annotation.JsonSubTypes;
55
import com.fasterxml.jackson.annotation.JsonTypeInfo;
66
import io.swagger.model.SearchRequest;
7+
import io.swagger.model.geno.PlateSearchRequest;
78
import io.swagger.model.geno.SampleSearchRequest;
89
import io.swagger.model.germ.GermplasmSearchRequest;
910

@@ -17,7 +18,8 @@ public class BatchDeleteSearchRequest extends SearchRequest {
1718
@JsonSubTypes.Type(value = GermplasmSearchRequest.class, name = "germplasm"),
1819
@JsonSubTypes.Type(value = ListSearchRequest.class, name = "lists"),
1920
@JsonSubTypes.Type(value = TrialSearchRequest.class, name = "trials"),
20-
@JsonSubTypes.Type(value = SampleSearchRequest.class, name = "samples")
21+
@JsonSubTypes.Type(value = SampleSearchRequest.class, name = "samples"),
22+
@JsonSubTypes.Type(value = PlateSearchRequest.class, name = "plates")
2123
})
2224
private SearchRequest searchRequest = null;
2325

src/main/java/io/swagger/model/core/BatchDeleteTypes.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ public enum BatchDeleteTypes {
1111
GERMPLASM("germplasm"),
1212
LISTS("lists"),
1313
TRIALS("trials"),
14-
SAMPLES("samples");
14+
SAMPLES("samples"),
15+
PLATES("plates");
1516

1617

1718
private final String value;

src/main/java/org/brapi/test/BrAPITestServer/controller/core/BatchDeletesApiController.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,11 @@ public ResponseEntity<? extends BrAPIResponse> batchDeletesPost(@Valid @RequestB
113113
BrAPIComponent component = componentFactory.getComponent(batchType);
114114

115115
// Return the searchDbId with a 202 if the search is too in-depth with several parameters
116-
String searchReqDbId = searchService.saveSearchRequest(body, SearchRequestEntity.SearchRequestTypes.BATCHES);
117-
if (searchReqDbId != null) {
118-
return responseAccepted(searchReqDbId);
119-
}
116+
// TODO: disabled for now
117+
//String searchReqDbId = searchService.saveSearchRequest(body, SearchRequestEntity.SearchRequestTypes.BATCHES);
118+
//if (searchReqDbId != null) {
119+
// return responseAccepted(searchReqDbId);
120+
//}
120121

121122
// Fetch requested BrAPI entities
122123
SearchRequest entitySearch = body.getSearchRequest();

src/main/java/org/brapi/test/BrAPITestServer/controller/germ/GermplasmApiController.java

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

33
import io.swagger.model.BrAPIResponse;
44
import io.swagger.model.Metadata;
5+
import io.swagger.model.core.ListsSingleResponse;
56
import io.swagger.model.germ.Germplasm;
67
import io.swagger.model.germ.GermplasmListResponse;
78
import io.swagger.model.germ.GermplasmListResponseResult;
@@ -16,6 +17,7 @@
1617
import io.swagger.model.germ.GermplasmProgenyResponse;
1718
import io.swagger.api.germ.GermplasmApi;
1819

20+
import jakarta.validation.Valid;
1921
import org.brapi.test.BrAPITestServer.controller.core.BrAPIController;
2022
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerException;
2123
import org.brapi.test.BrAPITestServer.model.entity.SearchRequestEntity;
@@ -72,6 +74,26 @@ public ResponseEntity<GermplasmSingleResponse> germplasmGermplasmDbIdGet(
7274
return responseOK(new GermplasmSingleResponse(), data);
7375
}
7476

77+
@CrossOrigin
78+
@Override
79+
public ResponseEntity<GermplasmSingleResponse> germplasmGermplasmDbIdDelete(
80+
@PathVariable("germplasmDbId") String germplasmDbId,
81+
@Valid @RequestParam(value = "hardDelete", defaultValue = "false" ,required = false) boolean hardDelete,
82+
@RequestHeader(value = "Authorization", required = false) String authorization) throws BrAPIServerException {
83+
84+
log.debug("Request: " + request.getRequestURI());
85+
validateSecurityContext(request, "ROLE_USER");
86+
validateAcceptHeader(request);
87+
88+
if (hardDelete) {
89+
germplasmService.deleteGermplasm(germplasmDbId);
90+
return responseNoContent();
91+
}
92+
93+
germplasmService.softDeleteGermplasm(germplasmDbId);
94+
return responseNoContent();
95+
}
96+
7597
@CrossOrigin
7698
@Override
7799
public ResponseEntity<GermplasmMCPDResponse> germplasmGermplasmDbIdMcpdGet(

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);
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.brapi.test.BrAPITestServer.factory.geno;
2+
3+
import io.swagger.model.Metadata;
4+
import io.swagger.model.core.BatchDeleteTypes;
5+
import io.swagger.model.geno.Plate;
6+
import io.swagger.model.geno.PlateSearchRequest;
7+
import org.apache.commons.lang3.NotImplementedException;
8+
import org.brapi.test.BrAPITestServer.factory.BrAPIComponent;
9+
import org.brapi.test.BrAPITestServer.service.geno.PlateService;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.stereotype.Component;
12+
13+
import java.util.List;
14+
import java.util.stream.Collectors;
15+
16+
@Component
17+
public class PlateComponent implements BrAPIComponent<Plate, PlateSearchRequest> {
18+
private final PlateService plateService;
19+
20+
@Autowired
21+
public PlateComponent(PlateService plateService) {
22+
this.plateService = plateService;
23+
}
24+
25+
@Override
26+
public List<Plate> findEntities(PlateSearchRequest request, Metadata metadata) {
27+
return plateService.findPlates(request, metadata);
28+
}
29+
30+
@Override
31+
public BatchDeleteTypes getBatchDeleteType() {
32+
return BatchDeleteTypes.PLATES;
33+
}
34+
35+
36+
@Override
37+
public List<String> collectDbIds(List<Plate> entities) {
38+
return entities.stream().map(Plate::getPlateDbId).collect(Collectors.toList());
39+
}
40+
41+
@Override
42+
public void deleteBatchDeleteData(List<String> dbIds) {
43+
plateService.deletePlateBatch(dbIds);
44+
}
45+
46+
@Override
47+
public void softDeleteBatchDeleteData(List<String> dbIds) {
48+
//TODO: implement if needed in future
49+
throw new NotImplementedException("plate softDeleteBatchDeleteData not implemented");
50+
}
51+
}

src/main/java/org/brapi/test/BrAPITestServer/factory/germ/GermplasmComponent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ public List<String> collectDbIds(List<Germplasm> entities) {
4040

4141
@Override
4242
public void deleteBatchDeleteData(List<String> dbIds) {
43-
43+
germplasmService.deleteGermplasmBatch(dbIds);
4444
}
4545

4646
@Override
4747
public void softDeleteBatchDeleteData(List<String> dbIds) {
48-
48+
germplasmService.softDeleteGermplasmBatch(dbIds);
4949
}
5050
}

src/main/java/org/brapi/test/BrAPITestServer/model/entity/core/DatasetAuthorshipEntity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
import javax.persistence.*;
66

77
import org.brapi.test.BrAPITestServer.model.entity.BrAPIBaseEntity;
8+
import org.hibernate.annotations.Where;
89

910
@Entity
1011
@Table(name = "trial_dataset_authorship")
12+
@Where(clause = "soft_deleted = false")
1113
public class DatasetAuthorshipEntity extends BrAPIBaseEntity {
1214
@Column
1315
private String datasetPUI;

0 commit comments

Comments
 (0)