@Override public void run() throws TaxomaticException { List<Taxon> taxaToSave = new ArrayList<Taxon>(); for (Taxon mergedTaxon : taxaToMerge) { mergedTaxon.setStatus(TaxonStatus.STATUS_SYNONYM); { Synonym synonym = Taxon.synonymizeTaxon(mergedTaxon); synonym.setStatus(Synonym.MERGE); synonym.setTaxon(mergeTarget); mergeTarget.getSynonyms().add(synonym); } { Synonym synonym = Taxon.synonymizeTaxon(mergeTarget); synonym.setStatus(Synonym.MERGE); synonym.setTaxon(mergedTaxon); mergedTaxon.getSynonyms().add(synonym); } for (Taxon child : mergedTaxon.getChildren()) { child.setParent(mergeTarget); mergeTarget.getChildren().add(child); taxaToSave.add(child); } taxaToSave.add(mergedTaxon); } taxaToSave.add(mergeTarget); taxomaticIO.updateAndSave(taxaToSave, operation.getUser(), true); recordOperationHistory(taxaToSave, operation); }