Revision 485da8a9
Added by Andreas Kohlbecker over 3 years ago
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java | ||
---|---|---|
635 | 635 |
//It will search recursively over all {@link DerivationEvent}s and get the "originals" ({@link SpecimenOrObservationBase}) |
636 | 636 |
//from which this DerivedUnit was derived until all FieldUnits are found. |
637 | 637 |
|
638 |
// FIXME: use HQL queries to increase performance |
|
638 |
// FIXME: use HQL queries to avoid entity instantiation and to increase performance
|
|
639 | 639 |
|
640 |
SpecimenOrObservationBase<?> specimen = load(derivedUnitUuid, propertyPaths); |
|
641 |
// specimen = HibernateProxyHelper.deproxy(specimen, SpecimenOrObservationBase.class); |
|
640 |
SpecimenOrObservationBase<?> specimen = load(derivedUnitUuid); |
|
642 | 641 |
Collection<FieldUnit> fieldUnits = new ArrayList<>(); |
643 | 642 |
if (specimen == null){ |
644 | 643 |
return null; |
... | ... | |
647 | 646 |
fieldUnits.add(HibernateProxyHelper.deproxy(specimen, FieldUnit.class)); |
648 | 647 |
} |
649 | 648 |
else if(specimen.isInstanceOf(DerivedUnit.class)){ |
650 |
fieldUnits.addAll(HibernateProxyHelper.deproxy(specimen, DerivedUnit.class).collectFieldUnits());
|
|
649 |
fieldUnits.addAll(HibernateProxyHelper.deproxy(specimen, DerivedUnit.class).collectRootUnits(FieldUnit.class));
|
|
651 | 650 |
} |
652 | 651 |
|
653 | 652 |
fieldUnits = beanInitializer.initializeAll(fieldUnits, propertyPaths); |
654 | 653 |
return fieldUnits; |
655 | 654 |
} |
656 | 655 |
|
656 |
@Override |
|
657 |
@Transactional(readOnly=true) |
|
658 |
public Collection<SpecimenOrObservationBase> findRootUnits(UUID derivedUnitUuid, List<String> propertyPaths) { |
|
659 |
|
|
660 |
// FIXME: use HQL queries to avoid entity instantiation and to increase performance |
|
661 |
|
|
662 |
SpecimenOrObservationBase<?> specimen = load(derivedUnitUuid); |
|
663 |
Collection<SpecimenOrObservationBase> rootUnits = new ArrayList<>(); |
|
664 |
if (specimen == null){ |
|
665 |
return null; |
|
666 |
} |
|
667 |
if (specimen.isInstanceOf(FieldUnit.class)) { |
|
668 |
rootUnits.add(HibernateProxyHelper.deproxy(specimen, FieldUnit.class)); |
|
669 |
} |
|
670 |
else if(specimen.isInstanceOf(DerivedUnit.class)){ |
|
671 |
rootUnits.addAll(HibernateProxyHelper.deproxy(specimen, DerivedUnit.class).collectRootUnits(SpecimenOrObservationBase.class)); |
|
672 |
} |
|
673 |
|
|
674 |
rootUnits = beanInitializer.initializeAll(rootUnits, propertyPaths); |
|
675 |
return rootUnits; |
|
676 |
} |
|
677 |
|
|
657 | 678 |
|
658 | 679 |
/** |
659 | 680 |
* Recursively searches all {@link DerivationEvent}s to find all "originals" ({@link SpecimenOrObservationBase}) |
Also available in: Unified diff
fix #9395 DerivedUnit.collectFieldUnits() as DerivedUnit.collectRootUnits() to return all types of root units