Project

General

Profile

« Previous | Next » 

Revision 0979f889

Added by Andreas Kohlbecker over 3 years ago

ref #9252 harmonizing SpecimenOrOberservationBase related DTOs - renaming classes

View differences:

cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/OccurrenceServiceImpl.java
49 49
import eu.etaxonomy.cdm.api.service.config.IIdentifiableEntityServiceConfigurator;
50 50
import eu.etaxonomy.cdm.api.service.config.SpecimenDeleteConfigurator;
51 51
import eu.etaxonomy.cdm.api.service.dto.DNASampleDTO;
52
import eu.etaxonomy.cdm.api.service.dto.DerivateDTO;
52
import eu.etaxonomy.cdm.api.service.dto.SpecimenOrObservationBaseDTO;
53 53
import eu.etaxonomy.cdm.api.service.dto.DerivateDataDTO;
54 54
import eu.etaxonomy.cdm.api.service.dto.DerivateDataDTO.ContigFile;
55 55
import eu.etaxonomy.cdm.api.service.dto.DerivateDataDTO.Link;
56 56
import eu.etaxonomy.cdm.api.service.dto.DerivateDataDTO.MolecularData;
57 57
import eu.etaxonomy.cdm.api.service.dto.FieldUnitDTO;
58
import eu.etaxonomy.cdm.api.service.dto.PreservedSpecimenDTO;
58
import eu.etaxonomy.cdm.api.service.dto.DerivedUnitDTO;
59 59
import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
60 60
import eu.etaxonomy.cdm.api.service.molecular.ISequenceService;
61 61
import eu.etaxonomy.cdm.api.service.pager.Pager;
......
464 464
                    collectionToCountMap.put(collection, herbariumCount + 1);
465 465
                }
466 466
                if (derivedUnit.getRecordBasis().equals(SpecimenOrObservationType.PreservedSpecimen)) {
467
                    PreservedSpecimenDTO preservedSpecimenDTO = assemblePreservedSpecimenDTO(derivedUnit, fieldUnitDTO);
467
                    DerivedUnitDTO preservedSpecimenDTO = assemblePreservedSpecimenDTO(derivedUnit, fieldUnitDTO);
468 468
                    fieldUnitDTO.addDerivate(preservedSpecimenDTO);
469 469
                    fieldUnitDTO.setHasCharacterData(fieldUnitDTO.isHasCharacterData() || preservedSpecimenDTO.isHasCharacterData());
470 470
                    fieldUnitDTO.setHasDetailImage(fieldUnitDTO.isHasDetailImage() || preservedSpecimenDTO.isHasDetailImage());
......
514 514
    }
515 515

  
516 516
    @Override
517
    public PreservedSpecimenDTO assemblePreservedSpecimenDTO(DerivedUnit derivedUnit) {
517
    public DerivedUnitDTO assemblePreservedSpecimenDTO(DerivedUnit derivedUnit) {
518 518
        return assemblePreservedSpecimenDTO(derivedUnit, null);
519 519
    }
520 520

  
......
532 532
        return null;
533 533
    }
534 534

  
535
    public PreservedSpecimenDTO assemblePreservedSpecimenDTO(DerivedUnit derivedUnit, FieldUnitDTO fieldUnitDTO) {
535
    public DerivedUnitDTO assemblePreservedSpecimenDTO(DerivedUnit derivedUnit, FieldUnitDTO fieldUnitDTO) {
536 536
        if (!getSession().contains(derivedUnit)) {
537 537
            derivedUnit = (DerivedUnit) load(derivedUnit.getUuid());
538 538
        }
539
        PreservedSpecimenDTO preservedSpecimenDTO = new PreservedSpecimenDTO(derivedUnit);
539
        DerivedUnitDTO preservedSpecimenDTO = new DerivedUnitDTO(derivedUnit);
540 540

  
541 541
        //specimen identifier
542 542
        FormatKey collectionKey = FormatKey.COLLECTION_CODE;
......
626 626
        return preservedSpecimenDTO;
627 627
    }
628 628

  
629
    private DerivateDataDTO assembleDerivateDataDTO(DerivateDTO derivateDTO, SpecimenOrObservationBase<?> specimenOrObservation) {
629
    private DerivateDataDTO assembleDerivateDataDTO(SpecimenOrObservationBaseDTO derivateDTO, SpecimenOrObservationBase<?> specimenOrObservation) {
630 630
        DerivateDataDTO derivateDataDTO = new DerivateDataDTO();
631 631
        Collection<DerivedUnit> childDerivates = getDerivedUnitsFor(specimenOrObservation);
632 632
        for (DerivedUnit childDerivate : childDerivates) {
......
691 691
                        derivateDataDTO.addSpecimenScanUuid(media.getMediaSpecimen().getUuid());
692 692
                        derivateDTO.setHasSpecimenScan(true);
693 693
                        String imageLinkText = "scan";
694
                        if (derivateDTO instanceof PreservedSpecimenDTO && ((PreservedSpecimenDTO) derivateDTO).getAccessionNumber() != null) {
695
                            imageLinkText = ((PreservedSpecimenDTO) derivateDTO).getAccessionNumber();
694
                        if (derivateDTO instanceof DerivedUnitDTO && ((DerivedUnitDTO) derivateDTO).getAccessionNumber() != null) {
695
                            imageLinkText = ((DerivedUnitDTO) derivateDTO).getAccessionNumber();
696 696
                        }
697 697
                        derivateDataDTO.addSpecimenScan(mediaUri, imageLinkText);
698 698
                    }
......
747 747
        return derivedUnits;
748 748
    }
749 749

  
750
    private Set<DerivateDTO> getDerivedUnitDTOsFor(DerivateDTO specimenDto, DerivedUnit specimen, HashMap<UUID, DerivateDTO> alreadyCollectedSpecimen) {
751
        Set<DerivateDTO> derivedUnits = new HashSet<>();
750
    private Set<SpecimenOrObservationBaseDTO> getDerivedUnitDTOsFor(SpecimenOrObservationBaseDTO specimenDto, DerivedUnit specimen, HashMap<UUID, SpecimenOrObservationBaseDTO> alreadyCollectedSpecimen) {
751
        Set<SpecimenOrObservationBaseDTO> derivedUnits = new HashSet<>();
752 752
//        load
753 753
        for (DerivationEvent derivationEvent : specimen.getDerivationEvents()) {
754 754
            for (DerivedUnit derivative : derivationEvent.getDerivatives()) {
755 755
                if (!alreadyCollectedSpecimen.containsKey(specimenDto.getUuid())){
756
                    PreservedSpecimenDTO dto;
756
                    DerivedUnitDTO dto;
757 757
                    if (derivative instanceof DnaSample) {
758 758
                        dto = new DNASampleDTO(derivative);
759 759
                    } else {
760
                        dto = new PreservedSpecimenDTO(derivative);
760
                        dto = new DerivedUnitDTO(derivative);
761 761
                    }
762 762
                    alreadyCollectedSpecimen.put(dto.getUuid(), dto);
763 763
                    dto.addAllDerivates(getDerivedUnitDTOsFor(dto, derivative, alreadyCollectedSpecimen));
......
844 844
        Set<Taxon> taxa = new HashSet<>();
845 845
        Set<Integer> occurrenceIds = new HashSet<>();
846 846
        List<FieldUnitDTO> fieldUnitDTOs = new ArrayList<>();
847
        HashMap<UUID, DerivateDTO> alreadyCollectedSpecimen = new HashMap<>();
847
        HashMap<UUID, SpecimenOrObservationBaseDTO> alreadyCollectedSpecimen = new HashMap<>();
848 848
        List<SpecimenOrObservationBase> occurrences = new ArrayList<>();
849 849
        boolean includeUnpublished = INCLUDE_UNPUBLISHED;
850 850

  
......
865 865
            for (SpecimenOrObservationBase<?> o : perTaxonOccurrences) {
866 866
                if (o.isInstanceOf(DerivedUnit.class)){
867 867
                    DerivedUnit derivedUnit;
868
                    DerivateDTO derivedUnitDTO;
868
                    SpecimenOrObservationBaseDTO derivedUnitDTO;
869 869
                    if (o.isInstanceOf(DnaSample.class)) {
870 870
                         derivedUnit = HibernateProxyHelper.deproxy(o, DnaSample.class);
871 871
                        derivedUnitDTO = new DNASampleDTO(derivedUnit);
872 872
                    } else {
873 873
                        derivedUnit = HibernateProxyHelper.deproxy(o, DerivedUnit.class);
874
                        derivedUnitDTO = new PreservedSpecimenDTO(derivedUnit);
874
                        derivedUnitDTO = new DerivedUnitDTO(derivedUnit);
875 875
                    }
876 876
                    if (alreadyCollectedSpecimen.get(derivedUnitDTO.getUuid()) == null){
877 877
                        alreadyCollectedSpecimen.put(derivedUnitDTO.getUuid(), derivedUnitDTO);
......
896 896
            List<String> propertyPaths)  {
897 897

  
898 898
        DnaSample dnaSample = dao.findByGeneticAccessionNumber(accessionNumberString, propertyPaths);
899
        DerivateDTO derivedUnitDTO;
900
        HashMap<UUID, DerivateDTO> alreadyCollectedSpecimen = new HashMap<>();
899
        SpecimenOrObservationBaseDTO derivedUnitDTO;
900
        HashMap<UUID, SpecimenOrObservationBaseDTO> alreadyCollectedSpecimen = new HashMap<>();
901 901
        List<FieldUnitDTO> fieldUnitDTOs = new ArrayList<>();
902 902
        if (dnaSample != null){
903 903
            derivedUnitDTO = new DNASampleDTO(dnaSample);
......
1021 1021

  
1022 1022
    @Override
1023 1023
    @Transactional(readOnly=true)
1024
    public FieldUnitDTO findFieldUnitDTO(DerivateDTO derivedUnitDTO, Collection<FieldUnitDTO> fieldUnits,
1025
            HashMap<UUID, DerivateDTO> alreadyCollectedSpecimen) {
1024
    public FieldUnitDTO findFieldUnitDTO(SpecimenOrObservationBaseDTO derivedUnitDTO, Collection<FieldUnitDTO> fieldUnits,
1025
            HashMap<UUID, SpecimenOrObservationBaseDTO> alreadyCollectedSpecimen) {
1026 1026
        //It will search recursively over all {@link DerivationEvent}s and get the "originals" ({@link SpecimenOrObservationBase})
1027 1027
        //from which this DerivedUnit was derived until all FieldUnits are found.
1028 1028
        List<SpecimenOrObservationBase> specimens = new ArrayList<>();
......
1057 1057
                fieldUnits.add(fieldUnitDto);
1058 1058

  
1059 1059
            }else{
1060
                DerivateDTO originalDTO;
1060
                SpecimenOrObservationBaseDTO originalDTO;
1061 1061
                if (specimen instanceof DnaSample){
1062 1062
                    originalDTO = new DNASampleDTO((DnaSample)specimen);
1063 1063
                } else {
1064
                    originalDTO = new PreservedSpecimenDTO((DerivedUnit)specimen);
1064
                    originalDTO = new DerivedUnitDTO((DerivedUnit)specimen);
1065 1065
                }
1066 1066
                originalDTO.addDerivate(derivedUnitDTO);
1067 1067
                fieldUnitDto = findFieldUnitDTO(originalDTO, fieldUnits,
......
1083 1083
    public FieldUnitDTO loadFieldUnitDTO(UUID derivedUnitUuid) {
1084 1084

  
1085 1085
        FieldUnitDTO fieldUnitDTO = null;
1086
        DerivateDTO derivedUnitDTO = null;
1086
        SpecimenOrObservationBaseDTO derivedUnitDTO = null;
1087 1087

  
1088
        Map<UUID, DerivateDTO> cycleDetectionMap = new HashMap<>();
1088
        Map<UUID, SpecimenOrObservationBaseDTO> cycleDetectionMap = new HashMap<>();
1089 1089
        SpecimenOrObservationBase derivative = dao.load(derivedUnitUuid);
1090 1090
        if(derivative != null){
1091 1091
            if (derivative instanceof FieldUnit){
......
1093 1093
                return fieldUnitDTO;
1094 1094
            } else {
1095 1095
                // must be a DerivedUnit otherwise
1096
                derivedUnitDTO = PreservedSpecimenDTO.fromEntity((DerivedUnit)derivative);
1096
                derivedUnitDTO = DerivedUnitDTO.fromEntity((DerivedUnit)derivative);
1097 1097
                while(true){
1098 1098

  
1099
                    Set<DerivateDTO> originals = originalDTOs(derivedUnitDTO.getUuid());
1099
                    Set<SpecimenOrObservationBaseDTO> originals = originalDTOs(derivedUnitDTO.getUuid());
1100 1100

  
1101 1101
                    if(originals.isEmpty()){
1102 1102
                        break;
......
1105 1105
                        logger.debug("The derived unit with uuid " + derivedUnitUuid + "has more than one orginal, ignoring all but the first one.");
1106 1106
                    }
1107 1107

  
1108
                    DerivateDTO originalDTO = originals.iterator().next();
1108
                    SpecimenOrObservationBaseDTO originalDTO = originals.iterator().next();
1109 1109

  
1110 1110
                    // cycle detection and handling
1111 1111
                    if(cycleDetectionMap.containsKey(originalDTO.getUuid())){
......
1118 1118
                        // to solve the situation for the output we remove the derivate from the more distant graph node
1119 1119
                        // by removing it from the derivatives of its original
1120 1120
                        // but let the derivate to be added to the original which is closer to the FieldUnit (below at originalDTO.addDerivate(derivedUnitDTO);)
1121
                        for(DerivateDTO seenOriginal: cycleDetectionMap.values()){
1122
                            for(DerivateDTO derivateDTO : seenOriginal.getDerivates()){
1121
                        for(SpecimenOrObservationBaseDTO seenOriginal: cycleDetectionMap.values()){
1122
                            for(SpecimenOrObservationBaseDTO derivateDTO : seenOriginal.getDerivates()){
1123 1123
                                if(derivateDTO.equals(originalDTO)){
1124 1124
                                    seenOriginal.getDerivates().remove(originalDTO);
1125 1125
                                }
......
1156 1156
     * @param originalDTO
1157 1157
     * @return
1158 1158
     */
1159
    private Set<DerivateDTO> originalDTOs(UUID derivativeUuid) {
1159
    private Set<SpecimenOrObservationBaseDTO> originalDTOs(UUID derivativeUuid) {
1160 1160

  
1161
        Set<DerivateDTO> dtos = new HashSet<>();
1161
        Set<SpecimenOrObservationBaseDTO> dtos = new HashSet<>();
1162 1162
        List<SpecimenOrObservationBase> specimens = dao.findOriginalsForDerivedUnit(derivativeUuid, null);
1163 1163
        for(SpecimenOrObservationBase sob : specimens){
1164 1164
            if(sob instanceof FieldUnit) {
1165 1165
                dtos.add(FieldUnitDTO.fromEntity((FieldUnit)sob));
1166 1166
            } else {
1167
                dtos.add(PreservedSpecimenDTO.fromEntity((DerivedUnit)sob));
1167
                dtos.add(DerivedUnitDTO.fromEntity((DerivedUnit)sob));
1168 1168
            }
1169 1169
        }
1170 1170
        return dtos;
......
1717 1717
    }
1718 1718

  
1719 1719
    @Override
1720
    public List<PreservedSpecimenDTO> findByTitlePreservedSpecimenDTO(FindOccurrencesConfigurator config) {
1720
    public List<DerivedUnitDTO> findByTitlePreservedSpecimenDTO(FindOccurrencesConfigurator config) {
1721 1721
        Taxon taxon = null;
1722 1722
        if(config.getAssociatedTaxonUuid()!=null){
1723 1723
            TaxonBase<?> taxonBase = taxonService.load(config.getAssociatedTaxonUuid());
......
1735 1735
                config.getSpecimenType(), taxon, taxonName, config.getMatchMode(), null, null,
1736 1736
                config.getOrderHints(), null));
1737 1737

  
1738
        List<PreservedSpecimenDTO> dtos = new ArrayList<>();
1738
        List<DerivedUnitDTO> dtos = new ArrayList<>();
1739 1739
        occurrences.forEach(derivedUnit->dtos.add(assemblePreservedSpecimenDTO(derivedUnit)));
1740 1740
        return dtos;
1741 1741
    }

Also available in: Unified diff