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

Commit 3e5afc2

Browse files
restructure germplasm pedigree code a little bit
1 parent f457503 commit 3e5afc2

File tree

4 files changed

+200
-145
lines changed

4 files changed

+200
-145
lines changed

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

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.brapi.test.BrAPITestServer.model.entity.SearchRequestEntity.SearchRequestTypes;
2323
import org.brapi.test.BrAPITestServer.service.SearchService;
2424
import org.brapi.test.BrAPITestServer.service.germ.GermplasmService;
25+
import org.brapi.test.BrAPITestServer.service.germ.PedigreeService;
2526
import org.slf4j.Logger;
2627
import org.slf4j.LoggerFactory;
2728
import org.springframework.beans.factory.annotation.Autowired;
@@ -33,6 +34,8 @@
3334
import org.springframework.web.bind.annotation.RequestHeader;
3435
import org.springframework.web.bind.annotation.RequestParam;
3536
import javax.servlet.http.HttpServletRequest;
37+
38+
import java.util.Arrays;
3639
import java.util.List;
3740

3841
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2020-03-20T16:33:36.513Z[GMT]")
@@ -42,13 +45,15 @@ public class GermplasmApiController extends BrAPIController implements Germplasm
4245
private static final Logger log = LoggerFactory.getLogger(GermplasmApiController.class);
4346

4447
private final GermplasmService germplasmService;
48+
private final PedigreeService pedigreeService;
4549
private final SearchService searchService;
4650
private final HttpServletRequest request;
4751

4852
@Autowired
49-
public GermplasmApiController(GermplasmService germplasmService, SearchService searchService,
50-
HttpServletRequest request) {
53+
public GermplasmApiController(GermplasmService germplasmService, PedigreeService pedigreeService,
54+
SearchService searchService, HttpServletRequest request) {
5155
this.germplasmService = germplasmService;
56+
this.pedigreeService = pedigreeService;
5257
this.searchService = searchService;
5358
this.request = request;
5459
}
@@ -93,7 +98,7 @@ public ResponseEntity<GermplasmPedigreeResponse> germplasmGermplasmDbIdPedigreeG
9398
log.debug("Request: " + request.getRequestURI());
9499
validateSecurityContext(request, "ROLE_ANONYMOUS", "ROLE_USER");
95100
validateAcceptHeader(request);
96-
PedigreeNode data = germplasmService.getGermplasmPedigree(germplasmDbId, notation, includeSiblings);
101+
PedigreeNode data = pedigreeService.getGermplasmPedigree(germplasmDbId, notation, includeSiblings);
97102
return responseOK(new GermplasmPedigreeResponse(), data);
98103
}
99104

@@ -107,24 +112,10 @@ public ResponseEntity<GermplasmProgenyResponse> germplasmGermplasmDbIdProgenyGet
107112
log.debug("Request: " + request.getRequestURI());
108113
validateSecurityContext(request, "ROLE_ANONYMOUS", "ROLE_USER");
109114
validateAcceptHeader(request);
110-
ProgenyNode data = germplasmService.getGermplasmProgeny(germplasmDbId);
115+
ProgenyNode data = pedigreeService.getGermplasmProgeny(germplasmDbId);
111116
return responseOK(new GermplasmProgenyResponse(), data);
112117
}
113118

114-
@CrossOrigin
115-
@Override
116-
public ResponseEntity<GermplasmSingleResponse> germplasmGermplasmDbIdPut(
117-
@PathVariable("germplasmDbId") String germplasmDbId, @RequestBody GermplasmNewRequest body,
118-
@RequestHeader(value = "Authorization", required = false) String authorization)
119-
throws BrAPIServerException {
120-
121-
log.debug("Request: " + request.getRequestURI());
122-
validateSecurityContext(request, "ROLE_USER");
123-
validateAcceptHeader(request);
124-
Germplasm data = germplasmService.updateGermplasm(germplasmDbId, body);
125-
return responseOK(new GermplasmSingleResponse(), data);
126-
}
127-
128119
@CrossOrigin
129120
@Override
130121
public ResponseEntity<GermplasmListResponse> germplasmGet(
@@ -162,6 +153,21 @@ public ResponseEntity<GermplasmListResponse> germplasmGet(
162153
return responseOK(new GermplasmListResponse(), new GermplasmListResponseResult(), data, metadata);
163154
}
164155

156+
@CrossOrigin
157+
@Override
158+
public ResponseEntity<GermplasmSingleResponse> germplasmGermplasmDbIdPut(
159+
@PathVariable("germplasmDbId") String germplasmDbId, @RequestBody GermplasmNewRequest body,
160+
@RequestHeader(value = "Authorization", required = false) String authorization)
161+
throws BrAPIServerException {
162+
163+
log.debug("Request: " + request.getRequestURI());
164+
validateSecurityContext(request, "ROLE_USER");
165+
validateAcceptHeader(request);
166+
Germplasm data = germplasmService.updateGermplasm(germplasmDbId, body);
167+
pedigreeService.updateGermplasmPedigree(Arrays.asList(data));
168+
return responseOK(new GermplasmSingleResponse(), data);
169+
}
170+
165171
@CrossOrigin
166172
@Override
167173
public ResponseEntity<GermplasmListResponse> germplasmPost(@RequestBody List<GermplasmNewRequest> body,
@@ -172,6 +178,7 @@ public ResponseEntity<GermplasmListResponse> germplasmPost(@RequestBody List<Ger
172178
validateSecurityContext(request, "ROLE_USER");
173179
validateAcceptHeader(request);
174180
List<Germplasm> data = germplasmService.saveGermplasm(body);
181+
pedigreeService.updateGermplasmPedigree(data);
175182
return responseOK(new GermplasmListResponse(), new GermplasmListResponseResult(), data);
176183
}
177184

src/main/java/org/brapi/test/BrAPITestServer/model/entity/germ/PedigreeNodeEntity.java

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

33
import java.util.ArrayList;
44
import java.util.List;
5+
import java.util.Objects;
56
import java.util.stream.Collectors;
67

78
import javax.persistence.CascadeType;
@@ -33,6 +34,23 @@ public class PedigreeNodeEntity extends BrAPIPrimaryEntity {
3334
@OneToMany(mappedBy = "thisNode", cascade = CascadeType.ALL)
3435
private List<PedigreeEdgeEntity> edges = new ArrayList<>();
3536

37+
@Override
38+
public int hashCode() {
39+
return Objects.hash(germplasm);
40+
}
41+
42+
@Override
43+
public boolean equals(Object obj) {
44+
if (this == obj)
45+
return true;
46+
if (obj == null)
47+
return false;
48+
if (getClass() != obj.getClass())
49+
return false;
50+
PedigreeNodeEntity other = (PedigreeNodeEntity) obj;
51+
return Objects.equals(germplasm, other.germplasm);
52+
}
53+
3654
public CrossingProjectEntity getCrossingProject() {
3755
return crossingProject;
3856
}

src/main/java/org/brapi/test/BrAPITestServer/service/germ/GermplasmService.java

Lines changed: 8 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.brapi.test.BrAPITestServer.model.entity.pheno.TaxonEntity;
2424
import org.brapi.test.BrAPITestServer.repository.germ.GermplasmDonorRepository;
2525
import org.brapi.test.BrAPITestServer.repository.germ.GermplasmRepository;
26-
import org.brapi.test.BrAPITestServer.repository.germ.PedigreeRepository;
2726
import org.brapi.test.BrAPITestServer.service.DateUtility;
2827
import org.brapi.test.BrAPITestServer.service.GeoJSONUtility;
2928
import org.brapi.test.BrAPITestServer.service.PagingUtility;
@@ -55,29 +54,21 @@
5554
import io.swagger.model.germ.GermplasmOrigin;
5655
import io.swagger.model.germ.GermplasmSearchRequest;
5756
import io.swagger.model.germ.GermplasmStorageTypes;
58-
import io.swagger.model.germ.ParentType;
59-
import io.swagger.model.germ.PedigreeNode;
60-
import io.swagger.model.germ.PedigreeNodeParents;
61-
import io.swagger.model.germ.PedigreeNodeSiblings;
62-
import io.swagger.model.germ.ProgenyNode;
63-
import io.swagger.model.germ.ProgenyNodeProgeny;
6457
import io.swagger.model.germ.TaxonID;
6558

6659
@Service
6760
public class GermplasmService {
6861

6962
private final GermplasmRepository germplasmRepository;
7063
private final GermplasmDonorRepository donorRepository;
71-
private final PedigreeRepository pedigreeRepository;
7264
private final BreedingMethodService breedingMethodService;
7365
private final CropService cropService;
7466

7567
@Autowired
76-
public GermplasmService(GermplasmRepository germplasmRepository, GermplasmDonorRepository donorRepository, PedigreeRepository pedigreeRepository,
68+
public GermplasmService(GermplasmRepository germplasmRepository, GermplasmDonorRepository donorRepository,
7769
BreedingMethodService breedingMethodService, CropService cropService) {
7870
this.germplasmRepository = germplasmRepository;
7971
this.donorRepository = donorRepository;
80-
this.pedigreeRepository = pedigreeRepository;
8172

8273
this.breedingMethodService = breedingMethodService;
8374
this.cropService = cropService;
@@ -198,35 +189,6 @@ public GermplasmEntity getGermplasmEntity(String germplasmDbId, HttpStatus error
198189
return germplasm;
199190
}
200191

201-
public PedigreeNode getGermplasmPedigree(String germplasmDbId, String notation, Boolean includeSiblings)
202-
throws BrAPIServerException {
203-
return convertFromEntityToPedigree(getGermplasmEntity(germplasmDbId), notation, includeSiblings);
204-
}
205-
206-
public ProgenyNode getGermplasmProgeny(String germplasmDbId) throws BrAPIServerException {
207-
GermplasmEntity germplasm = getGermplasmEntity(germplasmDbId);
208-
209-
ProgenyNode result = new ProgenyNode();
210-
result.setProgeny(new ArrayList<>());
211-
result.setGermplasmDbId(germplasm.getId());
212-
result.setGermplasmName(germplasm.getGermplasmName());
213-
214-
if (germplasm.getPedigree() != null) {
215-
List<PedigreeNodeEntity> progenyEntities = germplasm.getPedigree().getProgenyNodes();
216-
for (PedigreeNodeEntity progenyNode : progenyEntities) {
217-
ProgenyNodeProgeny progeny = new ProgenyNodeProgeny();
218-
progeny.setGermplasmName(progenyNode.getGermplasm().getGermplasmName());
219-
progeny.setGermplasmDbId(progenyNode.getGermplasm().getId());
220-
if (progenyNode.getParentEdges() != null && !progenyNode.getParentEdges().isEmpty()) {
221-
progeny.setParentType(progenyNode.getParentEdges().get(0).getParentType());
222-
}
223-
result.getProgeny().add(progeny);
224-
}
225-
}
226-
227-
return result;
228-
}
229-
230192
public Germplasm updateGermplasm(String germplasmDbId, GermplasmNewRequest body)
231193
throws BrAPIServerException {
232194
GermplasmEntity entity = getGermplasmEntity(germplasmDbId, HttpStatus.NOT_FOUND);
@@ -351,8 +313,12 @@ private void updateEntity(GermplasmEntity entity, GermplasmNewRequest request) t
351313
if (request.getInstituteCode() != null || request.getInstituteName() != null)
352314
entity.setHostInstitute(request.getInstituteCode(), request.getInstituteName());
353315
entity.setMlsStatus(MlsStatusEnum.EMPTY);
354-
if (request.getPedigree() != null)
355-
updatePedigreeEntity(request.getPedigree(), entity);
316+
if (request.getPedigree() != null) {
317+
if(entity.getPedigree() == null) {
318+
entity.setPedigree(new PedigreeNodeEntity());
319+
}
320+
entity.getPedigree().setPedigreeString(request.getPedigree());
321+
}
356322
if (request.getSeedSource() != null)
357323
entity.setSeedSource(request.getSeedSource());
358324
if (request.getSeedSourceDescription() != null)
@@ -406,35 +372,7 @@ private void updateSynonymEntities(List<GermplasmNewRequestSynonyms> synonyms, G
406372
}
407373
}
408374

409-
private void updatePedigreeEntity(String pedigree, GermplasmEntity entity) throws BrAPIServerException {
410-
pedigreeEntityNullCheck(entity);
411-
PedigreeNodeEntity pedEntity = entity.getPedigree();
412-
pedEntity.setPedigreeString(pedigree);
413-
414-
List<String> pedigreeList = Arrays.asList(pedigree.split("/"));
415-
Optional<GermplasmEntity> motherOpt = Optional.empty();
416-
Optional<GermplasmEntity> fatherOpt = Optional.empty();
417-
if (pedigreeList.size() > 0) {
418-
motherOpt = Optional.ofNullable(findByUnknownIdentity(pedigreeList.get(0)));
419-
if (pedigreeList.size() > 1) {
420-
fatherOpt = Optional.ofNullable(findByUnknownIdentity(pedigreeList.get(1)));
421-
}
422-
}
423-
if (motherOpt.isPresent()) {
424-
pedigreeEntityNullCheck(motherOpt.get());
425-
PedigreeNodeEntity mother = motherOpt.get().getPedigree();
426-
pedEntity.addParent(mother, ParentType.FEMALE);
427-
mother.addProgeny(pedEntity, ParentType.FEMALE);
428-
}
429-
if (fatherOpt.isPresent()) {
430-
pedigreeEntityNullCheck(fatherOpt.get());
431-
PedigreeNodeEntity father = fatherOpt.get().getPedigree();
432-
pedEntity.addParent(father, ParentType.MALE);
433-
father.addProgeny(pedEntity, ParentType.MALE);
434-
}
435-
}
436-
437-
private GermplasmEntity findByUnknownIdentity(String germplasmStr) {
375+
public GermplasmEntity findByUnknownIdentity(String germplasmStr) {
438376
List<String> germplasmList = Arrays.asList(germplasmStr);
439377
Metadata metadata = new Metadata().pagination(new IndexPagination());
440378

@@ -472,13 +410,6 @@ private GermplasmEntity findByUnknownIdentity(String germplasmStr) {
472410
return null;
473411
}
474412

475-
private void pedigreeEntityNullCheck(GermplasmEntity entity) {
476-
if (entity.getPedigree() == null) {
477-
entity.setPedigree(new PedigreeNodeEntity());
478-
entity.getPedigree().setGermplasm(entity);
479-
}
480-
}
481-
482413
private void updateOriginEntities(List<GermplasmOrigin> origins, GermplasmEntity entity) {
483414
if (entity.getGermplasmOrigin() != null) {
484415
for (GermplasmOriginEntity oldEntity : entity.getGermplasmOrigin()) {
@@ -542,44 +473,6 @@ private TaxonID convertFromEntity(TaxonEntity entity) {
542473
return taxonId;
543474
}
544475

545-
public PedigreeNode convertFromEntityToPedigree(GermplasmEntity germplasm, String notation,
546-
Boolean includeSiblings) {
547-
PedigreeNode pedigree = new PedigreeNode();
548-
pedigree.setGermplasmDbId(germplasm.getId());
549-
pedigree.setGermplasmName(germplasm.getGermplasmName());
550-
pedigree.setParents(new ArrayList<>());
551-
pedigree.setSiblings(new ArrayList<>());
552-
553-
if (germplasm.getPedigree() != null) {
554-
PedigreeNodeEntity entity = germplasm.getPedigree();
555-
if (entity.getCrossingProject() != null)
556-
pedigree.setCrossingProjectDbId(entity.getCrossingProject().getId());
557-
pedigree.setCrossingYear(entity.getCrossingYear());
558-
pedigree.setFamilyCode(entity.getFamilyCode());
559-
560-
if (entity.getParentEdges() != null) {
561-
pedigree.getParents().addAll(entity.getParentEdges().stream().map(edge -> {
562-
PedigreeNodeParents parent = new PedigreeNodeParents();
563-
parent.setGermplasmDbId(edge.getConncetedNode().getGermplasm().getId());
564-
parent.setGermplasmName(edge.getConncetedNode().getGermplasm().getGermplasmName());
565-
parent.setParentType(edge.getParentType());
566-
return parent;
567-
}).collect(Collectors.toList()));
568-
}
569-
570-
if (includeSiblings != null && includeSiblings) {
571-
List<PedigreeNodeEntity> siblingEntities = pedigreeRepository.findPedigreeSiblings(entity);
572-
pedigree.setSiblings(siblingEntities.stream().map(sibNode -> {
573-
PedigreeNodeSiblings progeny = new PedigreeNodeSiblings();
574-
progeny.setGermplasmDbId(sibNode.getGermplasm().getId());
575-
progeny.setGermplasmName(sibNode.getGermplasm().getGermplasmName());
576-
return progeny;
577-
}).collect(Collectors.toList()));
578-
}
579-
}
580-
return pedigree;
581-
}
582-
583476
private GermplasmMCPD convertFromEntityToMCPD(GermplasmEntity entity) {
584477
GermplasmMCPD mcpd = new GermplasmMCPD();
585478
mcpd.setAccessionNames(getAccessionNames(entity));

0 commit comments

Comments
 (0)