fixes #888 and #889
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / SynonymComposite.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.editor.name;
11
12 import org.apache.log4j.Logger;
13 import org.eclipse.core.commands.operations.IUndoableOperation;
14 import org.eclipse.swt.graphics.Font;
15 import org.eclipse.swt.widgets.Composite;
16 import org.eclipse.ui.views.properties.IPropertySource;
17
18 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
19 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
20 import eu.etaxonomy.cdm.model.taxon.Synonym;
21 import eu.etaxonomy.taxeditor.editor.EditorUtil;
22 import eu.etaxonomy.taxeditor.model.NameHelper;
23 import eu.etaxonomy.taxeditor.operations.ChangeHomotypicGroupOperation;
24 import eu.etaxonomy.taxeditor.operations.ChangeSynonymToMisapplicationOperation;
25 import eu.etaxonomy.taxeditor.propertysheet.name.SynonymPropertySource;
26
27 /**
28 * @author p.ciardelli
29 * @created 13.01.2009
30 * @version 1.0
31 */
32 public class SynonymComposite extends NameComposite<Synonym> {
33 @SuppressWarnings("unused")
34 private static final Logger logger = Logger
35 .getLogger(SynonymComposite.class);
36
37 public SynonymComposite(TaxonNameEditor editor, Composite parent, Synonym synonym) {
38 super(editor, parent, synonym);
39
40 initializeComposite();
41 }
42
43 /* (non-Javadoc)
44 * @see eu.etaxonomy.taxeditor.editor.name.NameComposite#initializeComposite()
45 */
46 @Override
47 protected void initializeComposite() {
48 setIsDraggable(true);
49 setFont(getViewerFont());
50 setIndent(SYNONYM_INDENT);
51
52 if (isHomotypic()) {
53 if (NameHelper.isNameGroupBasionym(getSynonym().getName())) {
54 setIcon(HOMOTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);
55 } else {
56 setIcon(HOMOTYPIC_SYNONYM_ICON);
57 }
58 } else {
59 if (NameHelper.isNameGroupBasionym(getSynonym().getName())) {
60 setIcon(HETEROTYPIC_SYNONYM_ORIGINAL_COMBINATION_ICON);
61 } else {
62 setIcon(HETEROTYPIC_SYNONYM_ICON);
63 }
64 }
65
66 initTextViewer(getSynonym());
67 }
68
69 private boolean isHomotypic() {
70 HomotypicalGroup group = getSynonym().getHomotypicGroup();
71 return group.equals(taxon.getHomotypicGroup());
72 }
73
74 public Synonym getSynonym() {
75 return getTaxonBase();
76 }
77
78 public boolean setParent(Composite parent) {
79
80 boolean doSetParent = false;
81
82 // Has this been moved to the misapplied names group?
83 if (parent instanceof MisappliedGroupComposite) {
84 IUndoableOperation operation = new ChangeSynonymToMisapplicationOperation
85 ("change to misapplication", editor.getUndoContext(), taxon, getSynonym(), editor); //$NON-NLS-1$
86 EditorUtil.executeOperation(operation);
87
88 doSetParent = true;
89 }
90
91 // Has this been moved to a HomotypicalGroup?
92 if (parent instanceof HomotypicalGroupComposite) {
93
94 HomotypicalGroup homotypicalGroup =
95 ((HomotypicalGroupComposite)parent).getGroup();
96
97 // Make sure we are not dropping synonym on its own group
98 if (!homotypicalGroup.equals(getSynonym().getHomotypicGroup())) {
99 IUndoableOperation operation = new ChangeHomotypicGroupOperation
100 ("change type", editor.getUndoContext(), taxon, getSynonym(), homotypicalGroup, editor); //$NON-NLS-1$
101 EditorUtil.executeOperation(operation);
102
103 doSetParent = true;
104 }
105 }
106 return doSetParent;
107 }
108
109 public IPropertySource getPropertySource() {
110 if (NameHelper.isNameGroupBasionym(getSynonym().getName())) {
111 return new BasionymSynonymPropertySource(getSynonym());
112 } else {
113 return new SynonymPropertySource(getSynonym());
114 }
115 }
116
117 protected Font getViewerFont() {
118 return SYNONYM_FONT;
119 }
120
121 @Override
122 protected TaxonNameBase<?, ?> getName() {
123 return getSynonym().getName();
124 }
125
126 public Object getData () {
127 return getSynonym();
128 }
129 }