Project

General

Profile

« Previous | Next » 

Revision 485da8a9

Added by Andreas Kohlbecker over 3 years ago

fix #9395 DerivedUnit.collectFieldUnits() as DerivedUnit.collectRootUnits() to return all types of root units

View differences:

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