About to add serious annotation functionality - backup first.
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / actions / cdm / ChangeTaxonRelationToSynonymAction.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.resource.ImageDescriptor;
15
16 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
17 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
18 import eu.etaxonomy.cdm.model.taxon.Synonym;
19 import eu.etaxonomy.cdm.model.taxon.Taxon;
20 import eu.etaxonomy.taxeditor.ITaxEditorConstants;
21
22 /**
23 * 1) Changes synonym name's homotypic group, 2) Deletes synonym from its accepted taxon,
24 * 3) Creates a new synonym for the accepted taxon
25 * @author p.ciardelli
26 * @created 22.05.2008
27 * @version 1.0
28 */
29 public class ChangeTaxonRelationToSynonymAction extends Action {
30 private static final Logger logger = Logger
31 .getLogger(ChangeTaxonRelationToSynonymAction.class);
32
33 private static String text = "Change synonym's homotypic group";
34 private ImageDescriptor image = null;
35
36 private Taxon relatedTaxon;
37 private Taxon taxon;
38 private HomotypicalGroup newHomotypicGroup;
39
40 private ChangeTaxonRelationToSynonymAction() {
41 super(text);
42 setImageDescriptor(image);
43 }
44
45 public ChangeTaxonRelationToSynonymAction(Taxon relatedTaxon, Taxon taxon, HomotypicalGroup newHomotypicGroup) {
46 this();
47
48 this.relatedTaxon = relatedTaxon;
49 this.taxon = taxon;
50 this.newHomotypicGroup = newHomotypicGroup;
51 }
52
53 public void run() {
54
55 if (relatedTaxon == null || relatedTaxon.getName() == null ||
56 taxon == null || taxon.getName() == null) {
57 return;
58 }
59
60 TaxonNameBase relatedTaxonName = relatedTaxon.getName();
61 String synonymType = null;
62 Synonym synonym = null;
63
64 HomotypicalGroup oldHomotypicGroup = relatedTaxonName.getHomotypicalGroup();
65 HomotypicalGroup taxonHomotypicGroup = taxon.getName().getHomotypicalGroup();
66
67 new ChangeNameHomotypicGroup(relatedTaxonName, newHomotypicGroup).run();
68
69 new DeleteRelatedTaxonFromAcceptedTaxonAction(relatedTaxon, taxon).run();
70 if (newHomotypicGroup.equals(taxonHomotypicGroup)) {
71 AddHomotypicSynonymToTaxonAction addSynonymAction = new AddHomotypicSynonymToTaxonAction(relatedTaxonName, taxon);
72 addSynonymAction.run();
73 synonym = addSynonymAction.getSynonym();
74 } else {
75 AddHeterotypicSynonymToTaxonAction addSynonymAction = new AddHeterotypicSynonymToTaxonAction(relatedTaxonName, taxon);
76 addSynonymAction.run();
77 synonym = addSynonymAction.getSynonym();
78 }
79
80 firePropertyChange(ITaxEditorConstants.HOMOTYPIC_GROUP, null, synonym);
81 }
82 }