fa58e68efb72c15b53a606ccf9fb3b0cf3e4d43f
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / actions / cdm / SwapSynonymAndTaxonAction.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.taxeditor.actions.cdm;
11
12 import org.apache.log4j.Logger;
13 import org.eclipse.jface.action.Action;
14 import org.eclipse.jface.dialogs.MessageDialog;
15 import org.eclipse.jface.resource.ImageDescriptor;
16 import org.eclipse.ui.IEditorPart;
17 import org.eclipse.ui.PartInitException;
18
19 import eu.etaxonomy.cdm.model.description.TaxonDescription;
20 import eu.etaxonomy.cdm.model.taxon.Synonym;
21 import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
22 import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;
23 import eu.etaxonomy.cdm.model.taxon.Taxon;
24 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
25 import eu.etaxonomy.taxeditor.ITaxEditorConstants;
26 import eu.etaxonomy.taxeditor.TaxEditorPlugin;
27 import eu.etaxonomy.taxeditor.UiUtil;
28 import eu.etaxonomy.taxeditor.model.CdmUtil;
29
30 /**
31 * @author p.ciardelli
32 * @created 09.06.2008
33 * @version 1.0
34 */
35 public class SwapSynonymAndTaxonAction extends Action {
36 private static final Logger logger = Logger
37 .getLogger(SwapSynonymAndTaxonAction.class);
38
39 private static String text = "Make synonym accepted name for this taxon";
40 private ImageDescriptor image = TaxEditorPlugin.getDefault()
41 .getImageDescriptor(ITaxEditorConstants.SYNONYM_TO_TAXON_ICON);
42
43 private Synonym synonym;
44 private Taxon taxon;
45
46 public SwapSynonymAndTaxonAction(Synonym synonym, Taxon taxon) {
47 this.synonym = synonym;
48 this.taxon = taxon;
49 }
50
51 public void run() {
52
53 // TODO: Call a taxon service method similar to makeTaxonSynonym()
54 // instead of implementing the logic here
55
56 try {
57 IEditorPart oldEditor = UiUtil.getEditorByTaxon(taxon);
58 if (oldEditor.isDirty()) {
59 if (!MessageDialog.openConfirm(UiUtil.getShell(), "Save before proceeding",
60 "All changes must be saved before proceeding with this action.\n\n" +
61 "Press \"OK\" to save and continue, or \"Cancel\" to cancel this action.")) {
62 return;
63 }
64 oldEditor.doSave(null);
65 }
66 } catch (PartInitException e) {
67 e.printStackTrace();
68 MessageDialog.openError(UiUtil.getShell(), "Error", "Error swapping synonym and taxon");
69 return;
70 }
71
72 taxon.removeSynonym(synonym);
73
74 Taxon parentTaxon = taxon.getTaxonomicParent();
75 Taxon newTaxon = Taxon.NewInstance(synonym.getName(), taxon.getSec());
76 newTaxon.setTaxonomicParent(parentTaxon, null, null);
77
78 Synonym newSynonym = Synonym.NewInstance(taxon.getName(), taxon.getSec());
79
80 if (CdmUtil.isNameHomotypic(newSynonym.getName(), newTaxon)) {
81 newTaxon.addSynonym(newSynonym, SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF());
82 } else {
83 newTaxon.addSynonym(newSynonym, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF());
84 }
85
86 // Move the other synonyms from old accepted taxon to new accepted taxon
87 for (Synonym synonym: taxon.getSynonyms()) {
88 SynonymRelationshipType synRelType = SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF();
89 if (CdmUtil.isNameHomotypic(synonym.getName(), newTaxon) != true) {
90 synRelType = SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF();
91 }
92 newTaxon.addSynonym(synonym, synRelType);
93 taxon.removeSynonym(synonym);
94 }
95
96 // Move misapplied names
97 for (Taxon misappliedNameTaxon: taxon.getMisappliedNames()) {
98 newTaxon.addMisappliedName(misappliedNameTaxon,
99 misappliedNameTaxon.getName().getCitation(),
100 ""); //TODO: Set the microcitation
101 taxon.removeTaxon(misappliedNameTaxon, TaxonRelationshipType.MISAPPLIED_NAME_FOR());
102 }
103
104 // Move descriptions
105 for(TaxonDescription taxDescription : taxon.getDescriptions()){
106 newTaxon.addDescription(taxDescription);
107 taxon.removeDescription(taxDescription);
108 }
109
110 firePropertyChange(ITaxEditorConstants.TAXON, null, newTaxon);
111 }
112 }