62ee9f72d6a1b833e5b7b9de5a1e91e2080b33d1
[taxeditor.git] / eclipseprojects / eu.etaxonomy.taxeditor / src / eu / etaxonomy / taxeditor / editor / FreeTextElementFactory.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;
11
12 import java.util.HashMap;
13 import java.util.Map;
14
15 import org.apache.log4j.Logger;
16 import org.eclipse.core.runtime.Assert;
17 import org.eclipse.swt.widgets.Composite;
18 import org.eclipse.ui.forms.IManagedForm;
19
20 import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
21 import eu.etaxonomy.cdm.model.taxon.Synonym;
22 import eu.etaxonomy.cdm.model.taxon.Taxon;
23 import eu.etaxonomy.taxeditor.UiUtil;
24 import eu.etaxonomy.taxeditor.editor.name.AcceptedNameComposite;
25 import eu.etaxonomy.taxeditor.editor.name.HomotypicalGroupComposite;
26 import eu.etaxonomy.taxeditor.editor.name.MisappliedGroupComposite;
27 import eu.etaxonomy.taxeditor.editor.name.MisappliedNameComposite;
28 import eu.etaxonomy.taxeditor.editor.name.SynonymComposite;
29
30 /**
31 * @author p.ciardelli
32 * @created 08.01.2009
33 * @version 1.0
34 */
35 public class FreeTextElementFactory implements IFreeTextElementFactory {
36 private static final Logger logger = Logger
37 .getLogger(FreeTextElementFactory.class);
38
39 private static IFreeTextElementFactory factory;
40
41 private Map<Taxon, IManagedForm> nameForms;
42
43
44 /**
45 * Returns a taxon's composite which holds all misapplied names.
46 */
47 private Map<Taxon, Composite> misappliedComposites;
48
49 public static IFreeTextElementFactory getDefault() {
50 if (factory == null) {
51 factory = new FreeTextElementFactory();
52 }
53 return factory;
54 }
55
56 public Composite createAcceptedTaxon(IManagedForm form, Taxon taxon) {
57
58 // Put the taxon's form in the form map
59 Assert.isNotNull(form, "A non-null IManagedForm must be provided.");
60 getTaxonForms().put(taxon, form);
61
62 // Create a homotypic group composite for the accepted taxon
63 HomotypicalGroup group = taxon.getHomotypicGroup();
64 Assert.isNotNull(group, "Taxon does not have a homotypic group");
65 Composite groupComposite = createHomotypicalGroup(taxon, group);
66
67 // Create a name composite for the accepted taxon
68 Composite acceptedNameComposite =
69 new AcceptedNameComposite(groupComposite, form, taxon);
70
71
72 // Return the name composite
73 return acceptedNameComposite;
74 }
75
76 public Composite createSynonym(Synonym synonym, Taxon taxon) {
77
78 // Get the taxon's form
79 IManagedForm form = getForm(taxon);
80 Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");
81
82 // Get the synonym's homotypic group
83 HomotypicalGroup group = synonym.getHomotypicGroup();
84 Assert.isNotNull(group, "Synonym does not have a homotypic group");
85
86 // If the group doesn't yet have a composite, create one and add it to the repository
87 Composite groupComposite =
88 UiUtil.getTaxonNameEditor(taxon).getHomotypicGroup(group);
89 if (groupComposite == null) {
90 groupComposite = createHomotypicalGroup(taxon, group);
91 }
92
93 // Create a synonym composite in the homotypic group
94 Composite synonymComposite =
95 new SynonymComposite(groupComposite, form, taxon, synonym);
96
97 return synonymComposite;
98 }
99
100 @Override
101 public Composite createMisappliedName(Taxon misappliedName, Taxon taxon) {
102
103 // Get the taxon's form
104 IManagedForm form = getForm(taxon);
105 Assert.isNotNull(form, "No IManagedForm has been provided for the synonym's accepted taxon.");
106
107 // If there is no composite for misapplied names,
108 // create one and add it to the repository
109 Composite groupComposite =
110 UiUtil.getTaxonNameEditor(taxon).getMisappliedGroup();
111 if (groupComposite == null) {
112 groupComposite = createMisappliedGroup(taxon);
113 }
114
115 // Create the name's composite
116 Composite composite = new MisappliedNameComposite
117 (groupComposite, form, taxon, misappliedName);
118
119 return composite;
120 }
121
122
123 public Composite createMisappliedGroup(Taxon taxon) {
124
125 // Get the taxon's form
126 IManagedForm form = getForm(taxon);
127
128 // Create the group composite
129 Composite groupComposite = new MisappliedGroupComposite(getTopLevelComposite(form), taxon);
130 new CompositeBorderDecorator(groupComposite, form);
131
132 return groupComposite;
133 }
134
135 public Composite createHomotypicalGroup(Taxon taxon, HomotypicalGroup group) {
136
137 // Get the taxon's form
138 IManagedForm form = getForm(taxon);
139
140 // Create the group composite
141 Composite groupComposite = new HomotypicalGroupComposite(getTopLevelComposite(form), taxon, group);
142 new CompositeBorderDecorator(groupComposite, form);
143
144 return groupComposite;
145 }
146
147 private Map<Taxon, IManagedForm> getTaxonForms() {
148 if (nameForms == null) {
149 nameForms = new HashMap<Taxon, IManagedForm>();
150 }
151 return nameForms;
152 }
153
154 private IManagedForm getForm(Taxon taxon) {
155 return getTaxonForms().get(taxon);
156 }
157
158 private Composite getTopLevelComposite(IManagedForm form) {
159 return form.getForm().getBody();
160 }
161 }