Project

General

Profile

« Previous | Next » 

Revision 99366401

Added by Patrick Plitzner about 5 years ago

ref #6413 Add service method for duplicating type specimen

View differences:

cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/INameService.java
36 36
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
37 37
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
38 38
import eu.etaxonomy.cdm.model.name.Rank;
39
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
39 40
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
40 41
import eu.etaxonomy.cdm.model.name.TaxonName;
41 42
import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
43
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
42 44
import eu.etaxonomy.cdm.persistence.dao.initializer.IBeanInitializer;
43 45
import eu.etaxonomy.cdm.persistence.dto.TaxonNameParts;
44 46
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
......
60 62
	 */
61 63
	public DeleteResult delete(UUID nameUUID, NameDeletionConfigurator config);
62 64

  
65
	/**
66
	 * Creates specimen duplicate based on the given type specimen which will be assigned as a type
67
	 * of the given name.<br>
68
	 * The specimen will only differ in accession number, collection and type status and will be attached
69
	 * to the same {@link FieldUnit}
70
	 * @param name the name where this type designation will be added to
71
	 * @param baseDesignation the type specimen of this designation is cloned to create the new specimen
72
 	 * @param accessionNumber the accession number of the clones specimen
73
	 * @param collection the collection the cloned specimen belongs to
74
	 * @param typeStatus the type status of the cloned specimen
75
	 * @return an {@link UpdateResult}
76
	 */
77
    public UpdateResult cloneTypeDesignation(TaxonName name, SpecimenTypeDesignation baseDesignation,
78
            String accessionNumber, eu.etaxonomy.cdm.model.occurrence.Collection collection, SpecimenTypeDesignationStatus typeStatus);
79

  
63 80
	/**
64 81
	 * Removes the given type designation from the given taxon name and deletes it from
65 82
	 * the database if it is not connected to any other name.
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NameServiceImpl.java
69 69
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
70 70
import eu.etaxonomy.cdm.model.name.Rank;
71 71
import eu.etaxonomy.cdm.model.name.Registration;
72
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
72 73
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
73 74
import eu.etaxonomy.cdm.model.name.TaxonName;
74 75
import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
76
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
75 77
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
76 78
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
79
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
77 80
import eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao;
78 81
import eu.etaxonomy.cdm.persistence.dao.common.IReferencedEntityDao;
79 82
import eu.etaxonomy.cdm.persistence.dao.common.ISourcedEntityDao;
......
81 84
import eu.etaxonomy.cdm.persistence.dao.name.INomenclaturalStatusDao;
82 85
import eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao;
83 86
import eu.etaxonomy.cdm.persistence.dao.name.ITypeDesignationDao;
87
import eu.etaxonomy.cdm.persistence.dao.occurrence.IOccurrenceDao;
84 88
import eu.etaxonomy.cdm.persistence.dao.term.IOrderedTermVocabularyDao;
85 89
import eu.etaxonomy.cdm.persistence.dao.term.ITermVocabularyDao;
86 90
import eu.etaxonomy.cdm.persistence.dto.TaxonNameParts;
......
104 108
    @Autowired
105 109
    protected IOrderedTermVocabularyDao orderedVocabularyDao;
106 110
    @Autowired
111
    protected IOccurrenceDao occurrenceDao;
112
    @Autowired
107 113
    @Qualifier("refEntDao")
108 114
    protected IReferencedEntityDao<ReferencedEntityBase> referencedEntityDao;
109 115
    @Autowired
......
196 202
        return delete(name, config);
197 203
    }
198 204

  
205
    @Override
206
    @Transactional(readOnly = false)
207
    public UpdateResult cloneTypeDesignation(TaxonName name, SpecimenTypeDesignation baseDesignation,
208
            String accessionNumber, eu.etaxonomy.cdm.model.occurrence.Collection collection, SpecimenTypeDesignationStatus typeStatus){
209
        UpdateResult result = new UpdateResult();
210

  
211
        DerivedUnit baseSpecimen = (DerivedUnit) occurrenceDao.load(baseDesignation.getTypeSpecimen().getUuid());
212
        DerivedUnit duplicate = DerivedUnit.NewInstance(baseSpecimen.getRecordBasis());
213
        DerivationEvent derivedFrom = baseSpecimen.getDerivedFrom();
214
        for (SpecimenOrObservationBase original : derivedFrom.getOriginals()) {
215
            DerivationEvent.NewSimpleInstance(original, duplicate, derivedFrom.getType());
216
        }
217
        duplicate.setAccessionNumber(accessionNumber);
218
        duplicate.setCollection(collection);
219
        SpecimenTypeDesignation typeDesignation = SpecimenTypeDesignation.NewInstance();
220
        typeDesignation.setTypeSpecimen(duplicate);
221
        typeDesignation.setTypeStatus(typeStatus);
222
        name.getTypeDesignations().add(typeDesignation);
223

  
224
        result.setCdmEntity(typeDesignation);
225
        result.addUpdatedObject(name);
226
        return result;
227
    }
228

  
199 229
    @Override
200 230
    @Transactional
201 231
    public DeleteResult deleteTypeDesignation(TaxonName name, TypeDesignationBase<?> typeDesignation){

Also available in: Unified diff