acceptedTaxon.setName(synonymName);
synonym.setName(taxonName);
- for(TaxonDescription description : acceptedTaxon.getDescriptions()){
- String message = "Description copied from former accepted taxon: %s (Old title: %s)";
- message = String.format(message, oldTaxonTitleCache, description.getTitleCache());
- description.setTitleCache(message, true);
- if(setNameInSource){
- for (DescriptionElementBase element: description.getElements()){
- for (DescriptionElementSource source: element.getSources()){
- if (source.getNameUsedInSource() == null){
- source.setNameUsedInSource(taxonName);
- }
- }
- }
- }
-
- }
+ //nameUsedInSource
+ handleNameUsedInSourceForSwap(setNameInSource, taxonName, oldTaxonTitleCache, acceptedTaxon.getDescriptions());
saveOrUpdate(acceptedTaxon);
saveOrUpdate(synonym);
result.setCdmEntity(acceptedTaxon);
result.addUpdatedObject(synonym);
-
return result;
}
acceptedTaxon.removeSynonym(synonym);
TaxonName synonymName = synonym.getName();
TaxonName taxonName = HibernateProxyHelper.deproxy(acceptedTaxon.getName());
+ String oldTaxonTitleCache = acceptedTaxon.getTitleCache();
boolean sameHomotypicGroup = synonymName.getHomotypicalGroup().equals(taxonName.getHomotypicalGroup());
synonymName.removeTaxonBase(synonym);
}
Taxon newTaxon = acceptedTaxon.clone(true, true, false, true);
+ //move descriptions
Set<TaxonDescription> descriptionsToCopy = new HashSet<>(acceptedTaxon.getDescriptions());
for (TaxonDescription description: descriptionsToCopy){
newTaxon.addDescription(description);
}
+ //nameUsedInSource
+ handleNameUsedInSourceForSwap(setNameInSource, taxonName, oldTaxonTitleCache, newTaxon.getDescriptions());
newTaxon.setName(synonymName);
taxonRelationship.setFromTaxon(null);
}
- //Move descriptions to new taxon
- List<TaxonDescription> descriptions = new ArrayList<>( newTaxon.getDescriptions()); //to avoid concurrent modification errors (newAcceptedTaxon.addDescription() modifies also oldtaxon.descritpions())
- for(TaxonDescription description : descriptions){
- String message = "Description copied from former accepted taxon: %s (Old title: %s)";
- message = String.format(message, acceptedTaxon.getTitleCache(), description.getTitleCache());
- description.setTitleCache(message, true);
- if(setNameInSource){
- for (DescriptionElementBase element: description.getElements()){
- for (DescriptionElementSource source: element.getSources()){
- if (source.getNameUsedInSource() == null){
- source.setNameUsedInSource(taxonName);
- }
- }
- }
- }
- }
-
//taxon nodes
List<TaxonNode> nodes = new ArrayList<>(acceptedTaxon.getTaxonNodes());
for (TaxonNode node: nodes){
return result;
}
+ private void handleNameUsedInSourceForSwap(boolean setNameInSource, TaxonName taxonName, String oldTaxonTitleCache,
+ Set<TaxonDescription> descriptions) {
+ for(TaxonDescription description : descriptions){
+ String message = "Description copied from former accepted taxon: %s (Old title: %s)";
+ message = String.format(message, oldTaxonTitleCache, description.getTitleCache());
+ description.setTitleCache(message, true);
+ if(setNameInSource){
+ for (DescriptionElementBase element: description.getElements()){
+ for (DescriptionElementSource source: element.getSources()){
+ if (source.getNameUsedInSource() == null){
+ source.setNameUsedInSource(taxonName);
+ }
+ }
+ }
+ }
+ }
+ }
+
@Override
@Transactional(readOnly = false)
public UpdateResult changeSynonymToAcceptedTaxon(Synonym synonym, Taxon acceptedTaxon, Reference newSecRef, String microRef, SecReferenceHandlingEnum secHandling, boolean deleteSynonym) {