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

Commit 7f64183

Browse files
committed
Merge branch 'plantbreeding/brapi-Java-TestServer:brapi-server-v2' into develop
2 parents 7383fac + 4399e44 commit 7f64183

File tree

5 files changed

+86
-49
lines changed

5 files changed

+86
-49
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
import javax.persistence.ManyToOne;
66
import javax.persistence.Table;
77

8-
import org.brapi.test.BrAPITestServer.model.entity.BrAPIBaseEntity;
8+
import org.brapi.test.BrAPITestServer.model.entity.BrAPIPrimaryEntity;
9+
910
import io.swagger.model.germ.ParentType;
1011

1112
@Entity
1213
@Table(name="pedigree_edge")
13-
public class PedigreeEdgeEntity extends BrAPIBaseEntity{
14+
public class PedigreeEdgeEntity extends BrAPIPrimaryEntity{
1415
@ManyToOne
1516
private PedigreeNodeEntity thisNode;
1617
@ManyToOne
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.brapi.test.BrAPITestServer.repository.germ;
2+
3+
import org.brapi.test.BrAPITestServer.model.entity.germ.PedigreeEdgeEntity;
4+
import org.brapi.test.BrAPITestServer.repository.BrAPIRepository;
5+
6+
public interface PedigreeEdgeRepository extends BrAPIRepository<PedigreeEdgeEntity, String> {
7+
8+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ public Germplasm updateGermplasm(String germplasmDbId, GermplasmNewRequest body)
193193
throws BrAPIServerException {
194194
GermplasmEntity entity = getGermplasmEntity(germplasmDbId, HttpStatus.NOT_FOUND);
195195
updateEntity(entity, body);
196-
GermplasmEntity savedEntity = germplasmRepository.save(entity);
196+
GermplasmEntity savedEntity = germplasmRepository.saveAndFlush(entity);
197197

198198
return convertFromEntity(savedEntity);
199199
}
@@ -204,7 +204,7 @@ public List<Germplasm> saveGermplasm(@Valid List<GermplasmNewRequest> body) thro
204204
for (GermplasmNewRequest germplasm : body) {
205205
GermplasmEntity entity = new GermplasmEntity();
206206
updateEntity(entity, germplasm);
207-
GermplasmEntity savedEntity = germplasmRepository.save(entity);
207+
GermplasmEntity savedEntity = germplasmRepository.saveAndFlush(entity);
208208
savedGermplasm.add(convertFromEntity(savedEntity));
209209
}
210210

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

Lines changed: 64 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.brapi.test.BrAPITestServer.model.entity.germ.PedigreeEdgeEntity;
1919
import org.brapi.test.BrAPITestServer.model.entity.germ.PedigreeEdgeEntity.EdgeType;
2020
import org.brapi.test.BrAPITestServer.model.entity.germ.PedigreeNodeEntity;
21+
import org.brapi.test.BrAPITestServer.repository.germ.PedigreeEdgeRepository;
2122
import org.brapi.test.BrAPITestServer.repository.germ.PedigreeRepository;
2223
import org.brapi.test.BrAPITestServer.service.PagingUtility;
2324
import org.brapi.test.BrAPITestServer.service.SearchQueryBuilder;
@@ -45,13 +46,15 @@ public class PedigreeService {
4546
private static final Logger log = LoggerFactory.getLogger(PedigreeService.class);
4647

4748
private final PedigreeRepository pedigreeRepository;
49+
private final PedigreeEdgeRepository pedigreeEdgeRepository;
4850
private final CrossingProjectService crossingProjectService;
4951
private final GermplasmService germplasmService;
5052

5153
@Autowired
52-
public PedigreeService(PedigreeRepository pedigreeRepository, CrossingProjectService crossingProjectService,
53-
GermplasmService germplasmService) {
54+
public PedigreeService(PedigreeRepository pedigreeRepository, PedigreeEdgeRepository pedigreeEdgeRepository,
55+
CrossingProjectService crossingProjectService, GermplasmService germplasmService) {
5456
this.pedigreeRepository = pedigreeRepository;
57+
this.pedigreeEdgeRepository = pedigreeEdgeRepository;
5558
this.crossingProjectService = crossingProjectService;
5659
this.germplasmService = germplasmService;
5760
}
@@ -284,12 +287,15 @@ public List<PedigreeNode> updatePedigreeNodes(Map<String, PedigreeNode> request)
284287
public void updateGermplasmPedigree(List<Germplasm> data) throws BrAPIServerException {
285288
List<PedigreeNode> createPedigreeNodes = new ArrayList<>();
286289
Map<String, PedigreeNode> updatePedigreeNodes = new HashMap<>();
290+
291+
Map<String, PedigreeNodeEntity> nodesByGermplasm = getExistingPedigreeNodes(
292+
data.stream().map(p -> p.getGermplasmDbId()).collect(Collectors.toList()));
293+
287294
for (Germplasm germplasm : data) {
288-
GermplasmEntity germplasmEntity = germplasmService.getGermplasmEntity(germplasm.getGermplasmDbId());
289-
if (germplasmEntity.getPedigree() == null) {
290-
createPedigreeNodes.add(convertFromGermplasmToPedigree(germplasm));
291-
} else {
295+
if (nodesByGermplasm.containsKey(germplasm.getGermplasmDbId())) {
292296
updatePedigreeNodes.put(germplasm.getGermplasmDbId(), convertFromGermplasmToPedigree(germplasm));
297+
} else {
298+
createPedigreeNodes.add(convertFromGermplasmToPedigree(germplasm));
293299
}
294300
}
295301

@@ -299,18 +305,23 @@ public void updateGermplasmPedigree(List<Germplasm> data) throws BrAPIServerExce
299305
}
300306

301307
private Map<String, PedigreeNodeEntity> getExistingPedigreeNodes(List<String> germplasmDbIds) {
302-
PedigreeSearchRequest searchReq = new PedigreeSearchRequest();
303-
searchReq.setGermplasmDbIds(germplasmDbIds);
304-
searchReq.setIncludeParents(false);
305-
searchReq.setIncludeProgeny(false);
306-
searchReq.setIncludeSiblings(false);
307-
308-
List<PedigreeNodeEntity> nodeEntities = findPedigreeEntities(searchReq, null);
309308
Map<String, PedigreeNodeEntity> nodesByGermplasm = new HashMap<>();
310309

311-
for (PedigreeNodeEntity nodeEntity : nodeEntities) {
312-
if (nodeEntity.getGermplasm() != null && nodeEntity.getGermplasm().getId() != null) {
313-
nodesByGermplasm.put(nodeEntity.getGermplasm().getId(), nodeEntity);
310+
if (null != germplasmDbIds && !germplasmDbIds.isEmpty()) {
311+
PedigreeSearchRequest searchReq = new PedigreeSearchRequest();
312+
searchReq.setGermplasmDbIds(germplasmDbIds);
313+
searchReq.setIncludeParents(false);
314+
searchReq.setIncludeProgeny(false);
315+
searchReq.setIncludeSiblings(false);
316+
searchReq.setPedigreeDepth(0);
317+
searchReq.setProgenyDepth(0);
318+
319+
List<PedigreeNodeEntity> nodeEntities = findPedigreeEntities(searchReq, null);
320+
321+
for (PedigreeNodeEntity nodeEntity : nodeEntities) {
322+
if (nodeEntity.getGermplasm() != null && nodeEntity.getGermplasm().getId() != null) {
323+
nodesByGermplasm.put(nodeEntity.getGermplasm().getId(), nodeEntity);
324+
}
314325
}
315326
}
316327

@@ -422,24 +433,22 @@ static public String getPedigreeString(PedigreeNodeEntity entity) {
422433
if (entity.getPedigreeString() == null || entity.getPedigreeString().isEmpty()) {
423434
String pedStr = "";
424435
if (entity.getParentEdges() != null && !entity.getParentEdges().isEmpty()) {
425-
Optional<PedigreeNodeEntity> mother = entity.getParentEdges().stream()
426-
.filter(parentEdge -> {return ParentType.FEMALE == parentEdge.getParentType();})
427-
.map(PedigreeEdgeEntity::getConncetedNode)
428-
.findFirst();
429-
Optional<PedigreeNodeEntity> father = entity.getParentEdges().stream()
430-
.filter(parentEdge -> {return ParentType.MALE == parentEdge.getParentType();})
431-
.map(PedigreeEdgeEntity::getConncetedNode)
432-
.findFirst();
433-
434-
if(mother.isPresent()) {
436+
Optional<PedigreeNodeEntity> mother = entity.getParentEdges().stream().filter(parentEdge -> {
437+
return ParentType.FEMALE == parentEdge.getParentType();
438+
}).map(PedigreeEdgeEntity::getConncetedNode).findFirst();
439+
Optional<PedigreeNodeEntity> father = entity.getParentEdges().stream().filter(parentEdge -> {
440+
return ParentType.MALE == parentEdge.getParentType();
441+
}).map(PedigreeEdgeEntity::getConncetedNode).findFirst();
442+
443+
if (mother.isPresent()) {
435444
pedStr += mother.get().getGermplasm().getGermplasmName() + "/";
436-
}else {
445+
} else {
437446
pedStr += "Unknown/";
438447
}
439-
440-
if(father.isPresent()) {
448+
449+
if (father.isPresent()) {
441450
pedStr += father.get().getGermplasm().getGermplasmName();
442-
}else {
451+
} else {
443452
pedStr += "Unknown";
444453
}
445454
}
@@ -454,7 +463,7 @@ private void updateEntity(PedigreeNodeEntity entity, PedigreeNode node) throws B
454463
GermplasmEntity germplasm = germplasmService.getGermplasmEntity(node.getGermplasmDbId());
455464
entity.setGermplasm(germplasm);
456465
}
457-
466+
458467
UpdateUtility.updateEntity(node, entity);
459468

460469
if (node.getCrossingYear() != null)
@@ -475,25 +484,37 @@ private void updateEntityWithEdges(PedigreeNodeEntity entity, PedigreeNode node)
475484
UpdateUtility.updateEntity(node, entity);
476485
updateEntity(entity, node);
477486
if (node.getParents() != null) {
487+
488+
List<String> edgeIdsToDelete = new ArrayList<>();
489+
edgeIdsToDelete.addAll(entity.getParentEdges().stream().map(e -> e.getId()).collect(Collectors.toList()));
490+
edgeIdsToDelete.addAll(entity.getParentNodes().stream().flatMap(parent -> parent.getProgenyEdges().stream())
491+
.filter(childEdge -> childEdge.getConncetedNode().equals(entity))
492+
.map(e -> e.getId()).collect(Collectors.toList()));
493+
494+
pedigreeEdgeRepository.deleteAllByIdInBatch(edgeIdsToDelete);
495+
pedigreeEdgeRepository.flush();
496+
478497
for (PedigreeNodeParents parentNode : node.getParents()) {
479498
PedigreeNodeEntity parentEntity = findOrCreatePedigreeNode(parentNode.getGermplasmDbId());
480-
if (!entity.getParentNodes().contains(parentEntity)) {
481-
entity.addParent(parentEntity, parentNode.getParentType());
482-
}
483-
if (!parentEntity.getProgenyNodes().contains(entity)) {
484-
parentEntity.addProgeny(entity, parentNode.getParentType());
485-
}
499+
entity.addParent(parentEntity, parentNode.getParentType());
500+
parentEntity.addProgeny(entity, parentNode.getParentType());
486501
}
487502
}
488503
if (node.getProgeny() != null) {
504+
505+
List<String> edgeIdsToDelete = new ArrayList<>();
506+
edgeIdsToDelete.addAll(entity.getProgenyEdges().stream().map(e -> e.getId()).collect(Collectors.toList()));
507+
edgeIdsToDelete.addAll(entity.getProgenyNodes().stream().flatMap(progeny -> progeny.getParentEdges().stream())
508+
.filter(parentEdge -> parentEdge.getConncetedNode().equals(entity))
509+
.map(e -> e.getId()).collect(Collectors.toList()));
510+
511+
pedigreeEdgeRepository.deleteAllByIdInBatch(edgeIdsToDelete);
512+
pedigreeEdgeRepository.flush();
513+
489514
for (PedigreeNodeParents childNode : node.getProgeny()) {
490515
PedigreeNodeEntity childEntity = findOrCreatePedigreeNode(childNode.getGermplasmDbId());
491-
if (!entity.getProgenyNodes().contains(childEntity)) {
492-
entity.addProgeny(childEntity, childNode.getParentType());
493-
}
494-
if (!childEntity.getParentNodes().contains(entity)) {
495-
childEntity.addParent(entity, childNode.getParentType());
496-
}
516+
entity.addProgeny(childEntity, childNode.getParentType());
517+
childEntity.addParent(entity, childNode.getParentType());
497518
}
498519
}
499520
}

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,11 @@ public Page<ObservationUnitEntity> findObservationUnitEntities(@Valid Observatio
238238
.appendIntList(
239239
request.getObservationLevelRelationships().stream().filter(r -> r.getLevelOrder() != null)
240240
.map(r -> r.getLevelOrder()).collect(Collectors.toList()),
241-
"*levelRelationship.levelOrder");
241+
"*levelRelationship.levelOrder")
242+
.appendList(
243+
request.getObservationLevelRelationships().stream().filter(r -> r.getObservationUnitDbId() != null)
244+
.map(r -> r.getObservationUnitDbId()).collect(Collectors.toList()),
245+
"*levelRelationship.observationUnit.id");
242246
}
243247
searchQuery = searchQuery.withExRefs(request.getExternalReferenceIDs(), request.getExternalReferenceSources())
244248
.appendList(request.getGermplasmDbIds(), "germplasm.id")
@@ -265,6 +269,9 @@ public ObservationUnitEntity getObservationUnitEntity(String observationUnitDbId
265269

266270
public ObservationUnitEntity getObservationUnitEntity(String observationUnitDbId, HttpStatus errorStatus)
267271
throws BrAPIServerException {
272+
if(observationUnitDbId == null) {
273+
throw new BrAPIServerDbIdNotFoundException("observationUnit", "null", errorStatus);
274+
}
268275
ObservationUnitEntity observationUnit = null;
269276
Optional<ObservationUnitEntity> entityOpt = observationUnitRepository.findById(observationUnitDbId);
270277
if (entityOpt.isPresent()) {
@@ -537,7 +544,7 @@ private void updateEntity(ObservationUnitPositionEntity entity, ObservationUnitP
537544
relationshipEntity.setLevelCode(level.getLevelCode());
538545
relationshipEntity.setLevelName(level.getLevelName());
539546
relationshipEntity.setLevelOrder(level.getLevelOrder());
540-
if(level.getObservationUnitDbId() != null) {
547+
if (level.getObservationUnitDbId() != null) {
541548
ObservationUnitEntity parentEntity = getObservationUnitEntity(level.getObservationUnitDbId());
542549
relationshipEntity.setObservationUnit(parentEntity);
543550
}

0 commit comments

Comments
 (0)