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

Commit 9440b9c

Browse files
pedigree fixes
1 parent ce538ea commit 9440b9c

File tree

2 files changed

+51
-34
lines changed

2 files changed

+51
-34
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,8 @@ private Germplasm convertFromEntity(GermplasmEntity entity) {
247247
germ.setInstituteName(entity.getHostInstitute().getInstituteName());
248248
}
249249
if (entity.getPedigree() != null)
250-
germ.setPedigree(entity.getPedigree().getPedigreeString());
250+
germ.setPedigree(PedigreeService.getPedigreeString(entity.getPedigree()));
251+
251252
germ.setSeedSource(entity.getSeedSource());
252253
germ.setSeedSourceDescription(entity.getSeedSourceDescription());
253254
germ.setSpecies(entity.getSpecies());

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

Lines changed: 49 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -168,14 +168,32 @@ public Optional<PedigreeNodeEntity> getPedigreeNode(String germplasmDbId) {
168168
return node;
169169
}
170170

171+
public PedigreeNodeEntity findOrCreatePedigreeNode(String germplasmDbId) throws BrAPIServerException {
172+
Optional<PedigreeNodeEntity> nodeOpt = getPedigreeNode(germplasmDbId);
173+
PedigreeNodeEntity node;
174+
if (nodeOpt.isPresent()) {
175+
node = nodeOpt.get();
176+
} else {
177+
GermplasmEntity germplasm = germplasmService.getGermplasmEntity(germplasmDbId);
178+
if (germplasm.getPedigree() != null) {
179+
node = germplasm.getPedigree();
180+
} else {
181+
PedigreeNodeEntity newNode = new PedigreeNodeEntity();
182+
newNode.setGermplasm(germplasm);
183+
node = pedigreeRepository.saveAndFlush(newNode);
184+
}
185+
}
186+
return node;
187+
}
188+
171189
public PedigreeNode getGermplasmPedigree(String germplasmDbId, Boolean includeSiblings)
172190
throws BrAPIServerException {
173-
if(includeSiblings == null)
191+
if (includeSiblings == null)
174192
includeSiblings = false;
175-
193+
176194
Optional<PedigreeNodeEntity> pedigreeEntityOpt = getPedigreeNode(germplasmDbId);
177195
PedigreeNode result = null;
178-
if(pedigreeEntityOpt.isPresent()) {
196+
if (pedigreeEntityOpt.isPresent()) {
179197
PedigreeSearchRequest psr = new PedigreeSearchRequest();
180198
psr.setIncludeParents(true);
181199
psr.setIncludeProgeny(false);
@@ -366,17 +384,7 @@ private PedigreeNode convertFromEntity(PedigreeNodeEntity entity, PedigreeSearch
366384
}
367385
node.setCrossingYear(entity.getCrossingYear());
368386
node.setFamilyCode(entity.getFamilyCode());
369-
if (entity.getPedigreeString() == null && entity.getParentEdges() != null
370-
&& !entity.getParentEdges().isEmpty()) {
371-
List<PedigreeNodeEntity> parents = entity.getParentNodes();
372-
String pedStr = parents.get(0).getGermplasm().getGermplasmName();
373-
for (int i = 1; i < parents.size(); i++) {
374-
pedStr += "/" + parents.get(i).getGermplasm().getGermplasmName();
375-
}
376-
node.setPedigreeString(pedStr);
377-
} else {
378-
node.setPedigreeString(entity.getPedigreeString());
379-
}
387+
node.setPedigreeString(getPedigreeString(entity));
380388
if (entity.getParentEdges() != null && request.isIncludeParents()) {
381389
node.setParents(entity.getParentEdges().stream().map(edge -> {
382390
PedigreeNodeParents parent = new PedigreeNodeParents();
@@ -407,6 +415,20 @@ private PedigreeNode convertFromEntity(PedigreeNodeEntity entity, PedigreeSearch
407415
}
408416
return node;
409417
}
418+
419+
static public String getPedigreeString(PedigreeNodeEntity entity) {
420+
if (entity.getPedigreeString() == null && entity.getParentEdges() != null
421+
&& !entity.getParentEdges().isEmpty()) {
422+
List<PedigreeNodeEntity> parents = entity.getParentNodes();
423+
String pedStr = parents.get(0).getGermplasm().getGermplasmName();
424+
for (int i = 1; i < parents.size(); i++) {
425+
pedStr += "/" + parents.get(i).getGermplasm().getGermplasmName();
426+
}
427+
return pedStr;
428+
} else {
429+
return entity.getPedigreeString();
430+
}
431+
}
410432

411433
private void updateEntity(PedigreeNodeEntity entity, PedigreeNode node) throws BrAPIServerException {
412434
UpdateUtility.updateEntity(node, entity);
@@ -416,7 +438,7 @@ private void updateEntity(PedigreeNodeEntity entity, PedigreeNode node) throws B
416438
if (node.getFamilyCode() != null)
417439
entity.setFamilyCode(node.getFamilyCode());
418440
if (node.getPedigreeString() != null)
419-
entity.setPedigreeString(null);
441+
entity.setPedigreeString(node.getPedigreeString());
420442

421443
if (node.getCrossingProjectDbId() != null) {
422444
CrossingProjectEntity crossingProject = crossingProjectService
@@ -434,29 +456,23 @@ private void updateEntityWithEdges(PedigreeNodeEntity entity, PedigreeNode node)
434456
updateEntity(entity, node);
435457
if (node.getParents() != null) {
436458
for (PedigreeNodeParents parentNode : node.getParents()) {
437-
Optional<PedigreeNodeEntity> parentEntityOpt = getPedigreeNode(parentNode.getGermplasmDbId());
438-
if (parentEntityOpt.isPresent()) {
439-
PedigreeNodeEntity parentEntity = parentEntityOpt.get();
440-
if (!entity.getParentNodes().contains(parentEntity)) {
441-
entity.addParent(parentEntity, parentNode.getParentType());
442-
}
443-
if (!parentEntity.getProgenyNodes().contains(entity)) {
444-
parentEntity.addProgeny(entity, parentNode.getParentType());
445-
}
459+
PedigreeNodeEntity parentEntity = findOrCreatePedigreeNode(parentNode.getGermplasmDbId());
460+
if (!entity.getParentNodes().contains(parentEntity)) {
461+
entity.addParent(parentEntity, parentNode.getParentType());
462+
}
463+
if (!parentEntity.getProgenyNodes().contains(entity)) {
464+
parentEntity.addProgeny(entity, parentNode.getParentType());
446465
}
447466
}
448467
}
449468
if (node.getProgeny() != null) {
450469
for (PedigreeNodeParents childNode : node.getProgeny()) {
451-
Optional<PedigreeNodeEntity> childEntityOpt = getPedigreeNode(childNode.getGermplasmDbId());
452-
if (childEntityOpt.isPresent()) {
453-
PedigreeNodeEntity childEntity = childEntityOpt.get();
454-
if (!entity.getProgenyNodes().contains(childEntity)) {
455-
entity.addProgeny(childEntity, childNode.getParentType());
456-
}
457-
if (!childEntity.getParentNodes().contains(entity)) {
458-
childEntity.addParent(entity, childNode.getParentType());
459-
}
470+
PedigreeNodeEntity childEntity = findOrCreatePedigreeNode(childNode.getGermplasmDbId());
471+
if (!entity.getProgenyNodes().contains(childEntity)) {
472+
entity.addProgeny(childEntity, childNode.getParentType());
473+
}
474+
if (!childEntity.getParentNodes().contains(entity)) {
475+
childEntity.addParent(entity, childNode.getParentType());
460476
}
461477
}
462478
}

0 commit comments

Comments
 (0)