Editor now uses IIdentifiableEntityServiceConfigurator consistently. Working on ...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / forms / CdmFormFactory.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.ui.forms;
5
6 import java.net.URI;
7 import java.util.ArrayList;
8 import java.util.HashSet;
9 import java.util.List;
10 import java.util.Map;
11 import java.util.Set;
12
13 import org.eclipse.jface.util.IPropertyChangeListener;
14 import org.eclipse.jface.viewers.ISelection;
15 import org.eclipse.jface.viewers.ISelectionProvider;
16 import org.eclipse.jface.window.Window;
17 import org.eclipse.swt.SWT;
18 import org.eclipse.swt.custom.StyledText;
19 import org.eclipse.swt.events.FocusAdapter;
20 import org.eclipse.swt.events.FocusEvent;
21 import org.eclipse.swt.events.FocusListener;
22 import org.eclipse.swt.events.MouseAdapter;
23 import org.eclipse.swt.events.MouseEvent;
24 import org.eclipse.swt.events.MouseListener;
25 import org.eclipse.swt.events.SelectionEvent;
26 import org.eclipse.swt.events.SelectionListener;
27 import org.eclipse.swt.events.TypedEvent;
28 import org.eclipse.swt.graphics.Color;
29 import org.eclipse.swt.graphics.Font;
30 import org.eclipse.swt.widgets.Composite;
31 import org.eclipse.swt.widgets.Control;
32 import org.eclipse.swt.widgets.Display;
33 import org.eclipse.swt.widgets.Event;
34 import org.eclipse.swt.widgets.Label;
35 import org.eclipse.ui.forms.IFormColors;
36 import org.eclipse.ui.forms.widgets.FormToolkit;
37 import org.eclipse.ui.forms.widgets.Section;
38 import org.eclipse.ui.forms.widgets.TableWrapData;
39 import org.eclipse.ui.forms.widgets.TableWrapLayout;
40 import org.eclipse.ui.internal.forms.widgets.FormFonts;
41 import org.joda.time.Partial;
42 import org.springframework.security.core.GrantedAuthority;
43
44 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
45 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
46 import eu.etaxonomy.cdm.model.agent.Institution;
47 import eu.etaxonomy.cdm.model.agent.Person;
48 import eu.etaxonomy.cdm.model.agent.Team;
49 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
50 import eu.etaxonomy.cdm.model.common.Annotation;
51 import eu.etaxonomy.cdm.model.common.AnnotationType;
52 import eu.etaxonomy.cdm.model.common.Credit;
53 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
54 import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
55 import eu.etaxonomy.cdm.model.common.Extension;
56 import eu.etaxonomy.cdm.model.common.ExtensionType;
57 import eu.etaxonomy.cdm.model.common.Group;
58 import eu.etaxonomy.cdm.model.common.IAnnotatableEntity;
59 import eu.etaxonomy.cdm.model.common.ICdmBase;
60 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
61 import eu.etaxonomy.cdm.model.common.Language;
62 import eu.etaxonomy.cdm.model.common.LanguageString;
63 import eu.etaxonomy.cdm.model.common.Marker;
64 import eu.etaxonomy.cdm.model.common.MarkerType;
65 import eu.etaxonomy.cdm.model.common.TimePeriod;
66 import eu.etaxonomy.cdm.model.common.User;
67 import eu.etaxonomy.cdm.model.common.VersionableEntity;
68 import eu.etaxonomy.cdm.model.description.CategoricalData;
69 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
70 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
71 import eu.etaxonomy.cdm.model.description.Distribution;
72 import eu.etaxonomy.cdm.model.description.Feature;
73 import eu.etaxonomy.cdm.model.description.FeatureTree;
74 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
75 import eu.etaxonomy.cdm.model.description.KeyStatement;
76 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
77 import eu.etaxonomy.cdm.model.description.Modifier;
78 import eu.etaxonomy.cdm.model.description.PolytomousKey;
79 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
80 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
81 import eu.etaxonomy.cdm.model.description.QuantitativeData;
82 import eu.etaxonomy.cdm.model.description.Scope;
83 import eu.etaxonomy.cdm.model.description.Sex;
84 import eu.etaxonomy.cdm.model.description.Stage;
85 import eu.etaxonomy.cdm.model.description.State;
86 import eu.etaxonomy.cdm.model.description.StateData;
87 import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
88 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
89 import eu.etaxonomy.cdm.model.description.TaxonInteraction;
90 import eu.etaxonomy.cdm.model.description.TextData;
91 import eu.etaxonomy.cdm.model.location.NamedArea;
92 import eu.etaxonomy.cdm.model.location.NamedAreaType;
93 import eu.etaxonomy.cdm.model.location.Point;
94 import eu.etaxonomy.cdm.model.location.ReferenceSystem;
95 import eu.etaxonomy.cdm.model.media.ImageFile;
96 import eu.etaxonomy.cdm.model.media.Media;
97 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
98 import eu.etaxonomy.cdm.model.media.Rights;
99 import eu.etaxonomy.cdm.model.media.RightsTerm;
100 import eu.etaxonomy.cdm.model.name.NameRelationship;
101 import eu.etaxonomy.cdm.model.name.NameRelationshipType;
102 import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
103 import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
104 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
105 import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
106 import eu.etaxonomy.cdm.model.name.Rank;
107 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
108 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
109 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
110 import eu.etaxonomy.cdm.model.occurrence.Collection;
111 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
112 import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
113 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
114 import eu.etaxonomy.cdm.model.occurrence.DeterminationModifier;
115 import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
116 import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
117 import eu.etaxonomy.cdm.model.occurrence.Specimen;
118 import eu.etaxonomy.cdm.model.reference.Reference;
119 import eu.etaxonomy.cdm.model.taxon.Classification;
120 import eu.etaxonomy.cdm.model.taxon.Synonym;
121 import eu.etaxonomy.cdm.model.taxon.Taxon;
122 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
123 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
124 import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
125 import eu.etaxonomy.taxeditor.store.StoreUtil;
126 import eu.etaxonomy.taxeditor.ui.forms.password.EditPasswordElement;
127 import eu.etaxonomy.taxeditor.ui.openurl.IOpenUrlEnabled;
128 import eu.etaxonomy.taxeditor.ui.openurl.OpenUrlSelectorElement;
129 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
130 import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
131 import eu.etaxonomy.taxeditor.ui.section.EmptyElement;
132 import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionDetailElement;
133 import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionDetailSection;
134 import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailElement;
135 import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailSection;
136 import eu.etaxonomy.taxeditor.ui.section.agent.TeamDetailElement;
137 import eu.etaxonomy.taxeditor.ui.section.agent.TeamDetailSection;
138 import eu.etaxonomy.taxeditor.ui.section.agent.TeamMemberElement;
139 import eu.etaxonomy.taxeditor.ui.section.agent.TeamMemberSection;
140 import eu.etaxonomy.taxeditor.ui.section.agent.TeamOrPersonBaseDetailSection;
141 import eu.etaxonomy.taxeditor.ui.section.classification.ClassificationDetailElement;
142 import eu.etaxonomy.taxeditor.ui.section.classification.ClassificationDetailSection;
143 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailElement;
144 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailSection;
145 import eu.etaxonomy.taxeditor.ui.section.description.DerivedUnitElement;
146 import eu.etaxonomy.taxeditor.ui.section.description.DescribedSpecimenSection;
147 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionDetailElement;
148 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionDetailSection;
149 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailElement;
150 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailSection;
151 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementMediaSection;
152 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementSourceElement;
153 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementSourceSection;
154 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionSourceElement;
155 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionSourceSection;
156 import eu.etaxonomy.taxeditor.ui.section.description.ModifierElement;
157 import eu.etaxonomy.taxeditor.ui.section.description.ModifierSection;
158 import eu.etaxonomy.taxeditor.ui.section.description.NaturalLanguageDetailElement;
159 import eu.etaxonomy.taxeditor.ui.section.description.NaturalLanguageSection;
160 import eu.etaxonomy.taxeditor.ui.section.description.ScopeElement;
161 import eu.etaxonomy.taxeditor.ui.section.description.ScopeSection;
162 import eu.etaxonomy.taxeditor.ui.section.description.StateDataElement;
163 import eu.etaxonomy.taxeditor.ui.section.description.StateDataSection;
164 import eu.etaxonomy.taxeditor.ui.section.description.StatisticalMeasurementValueElement;
165 import eu.etaxonomy.taxeditor.ui.section.description.StatisticalMeasurementValueSection;
166 import eu.etaxonomy.taxeditor.ui.section.description.detail.AbstractDetailedDescriptionDetailElement;
167 import eu.etaxonomy.taxeditor.ui.section.description.detail.CategoricalDataDetailElement;
168 import eu.etaxonomy.taxeditor.ui.section.description.detail.CommonNameDetailElement;
169 import eu.etaxonomy.taxeditor.ui.section.description.detail.DistributionDetailElement;
170 import eu.etaxonomy.taxeditor.ui.section.description.detail.IndividualsAssociationDetailElement;
171 import eu.etaxonomy.taxeditor.ui.section.description.detail.QuantitativeDataDetailElement;
172 import eu.etaxonomy.taxeditor.ui.section.description.detail.TaxonInteractionDetailElement;
173 import eu.etaxonomy.taxeditor.ui.section.description.detail.TextDataDetailElement;
174 import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailElement;
175 import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailSection;
176 import eu.etaxonomy.taxeditor.ui.section.group.GrantedAuthorityDetailElement;
177 import eu.etaxonomy.taxeditor.ui.section.group.GrantedAuthorityDetailSection;
178 import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailElement;
179 import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailSection;
180 import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailElement;
181 import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailSection;
182 import eu.etaxonomy.taxeditor.ui.section.key.GeographicalScopeDetailSection;
183 import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailElement;
184 import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailSection;
185 import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyNodeDetailElement;
186 import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyNodeDetailSection;
187 import eu.etaxonomy.taxeditor.ui.section.key.ScopeRestrictionSection;
188 import eu.etaxonomy.taxeditor.ui.section.key.TaxonomicScopeSection;
189 import eu.etaxonomy.taxeditor.ui.section.name.AuthorshipDetailElement;
190 import eu.etaxonomy.taxeditor.ui.section.name.AuthorshipDetailSection;
191 import eu.etaxonomy.taxeditor.ui.section.name.HybridDetailElement;
192 import eu.etaxonomy.taxeditor.ui.section.name.HybridDetailSection;
193 import eu.etaxonomy.taxeditor.ui.section.name.NameDetailElement;
194 import eu.etaxonomy.taxeditor.ui.section.name.NameDetailSection;
195 import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailElement;
196 import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailSection;
197 import eu.etaxonomy.taxeditor.ui.section.name.NameTypeDesignationElement;
198 import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusElement;
199 import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;
200 import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailElement;
201 import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection;
202 import eu.etaxonomy.taxeditor.ui.section.name.ProtologueElement;
203 import eu.etaxonomy.taxeditor.ui.section.name.ProtologueSection;
204 import eu.etaxonomy.taxeditor.ui.section.name.SpecimenTypeDesignationElement;
205 import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;
206 import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectingAreasDetailSection;
207 import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectionDetailElement;
208 import eu.etaxonomy.taxeditor.ui.section.occurrence.CurrentDeterminationDetailSection;
209 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailElement;
210 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
211 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitFacadeDetailElement;
212 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitFacadeDetailSection;
213 import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailElement;
214 import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
215 import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationEventDetailElement;
216 import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationHistoryDetailSection;
217 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailElement;
218 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailSection;
219 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailElement;
220 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
221 import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralDetailElement;
222 import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralDetailSection;
223 import eu.etaxonomy.taxeditor.ui.section.occurrence.NamedAreaDetailElement;
224 import eu.etaxonomy.taxeditor.ui.section.occurrence.SourceCollectionDetailSection;
225 import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenCollectionDetailElement;
226 import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenCollectionDetailSection;
227 import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailElement;
228 import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
229 import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailElement;
230 import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
231 import eu.etaxonomy.taxeditor.ui.section.supplemental.AnnotationElement;
232 import eu.etaxonomy.taxeditor.ui.section.supplemental.AnnotationSection;
233 import eu.etaxonomy.taxeditor.ui.section.supplemental.CreditElement;
234 import eu.etaxonomy.taxeditor.ui.section.supplemental.CreditSection;
235 import eu.etaxonomy.taxeditor.ui.section.supplemental.ExtensionElement;
236 import eu.etaxonomy.taxeditor.ui.section.supplemental.ExtensionSection;
237 import eu.etaxonomy.taxeditor.ui.section.supplemental.HeadlineSection;
238 import eu.etaxonomy.taxeditor.ui.section.supplemental.IdentifiableSourceElement;
239 import eu.etaxonomy.taxeditor.ui.section.supplemental.ImageFileElement;
240 import eu.etaxonomy.taxeditor.ui.section.supplemental.MarkerElement;
241 import eu.etaxonomy.taxeditor.ui.section.supplemental.MarkerSection;
242 import eu.etaxonomy.taxeditor.ui.section.supplemental.MediaElement;
243 import eu.etaxonomy.taxeditor.ui.section.supplemental.MediaRepresentationElement;
244 import eu.etaxonomy.taxeditor.ui.section.supplemental.MediaRepresentationPartSection;
245 import eu.etaxonomy.taxeditor.ui.section.supplemental.MediaRepresentationSection;
246 import eu.etaxonomy.taxeditor.ui.section.supplemental.MediaSection;
247 import eu.etaxonomy.taxeditor.ui.section.supplemental.RightsElement;
248 import eu.etaxonomy.taxeditor.ui.section.supplemental.RightsSection;
249 import eu.etaxonomy.taxeditor.ui.section.supplemental.SourceSection;
250 import eu.etaxonomy.taxeditor.ui.section.supplemental.VersionElement;
251 import eu.etaxonomy.taxeditor.ui.section.supplemental.VersionSection;
252 import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessageElement;
253 import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessagesSection;
254 import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonBaseDetailElement;
255 import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonBaseDetailSection;
256 import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonDetailElement;
257 import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailElement;
258 import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailSection;
259 import eu.etaxonomy.taxeditor.ui.section.user.UserDetailElement;
260 import eu.etaxonomy.taxeditor.ui.section.user.UserDetailSection;
261 import eu.etaxonomy.taxeditor.ui.selection.AbstractSelectionElement;
262 import eu.etaxonomy.taxeditor.ui.selection.AgentSelectionElement;
263 import eu.etaxonomy.taxeditor.ui.selection.ClassificationSelectionElement;
264 import eu.etaxonomy.taxeditor.ui.selection.CollectionSelectionElement;
265 import eu.etaxonomy.taxeditor.ui.selection.DerivedUnitBaseSelectionElement;
266 import eu.etaxonomy.taxeditor.ui.selection.FeatureSelectionElement;
267 import eu.etaxonomy.taxeditor.ui.selection.FeatureTreeSelectionElement;
268 import eu.etaxonomy.taxeditor.ui.selection.FieldObservationSelectionElement;
269 import eu.etaxonomy.taxeditor.ui.selection.GroupSelectionElement;
270 import eu.etaxonomy.taxeditor.ui.selection.InstitutionSelectionElement;
271 import eu.etaxonomy.taxeditor.ui.selection.NameSelectionElement;
272 import eu.etaxonomy.taxeditor.ui.selection.NamedAreaSelectionElement;
273 import eu.etaxonomy.taxeditor.ui.selection.NomenclaturalAuthorTeamSelectionElement;
274 import eu.etaxonomy.taxeditor.ui.selection.PersonSelectionElement;
275 import eu.etaxonomy.taxeditor.ui.selection.PolytomousKeyNodeSelectionElement;
276 import eu.etaxonomy.taxeditor.ui.selection.PolytomousKeySelectionElement;
277 import eu.etaxonomy.taxeditor.ui.selection.ReferenceSelectionElement;
278 import eu.etaxonomy.taxeditor.ui.selection.SynonymSelectionElement;
279 import eu.etaxonomy.taxeditor.ui.selection.TaxonBaseSelectionElement;
280 import eu.etaxonomy.taxeditor.ui.selection.TaxonNodeSelectionElement;
281 import eu.etaxonomy.taxeditor.ui.selection.TaxonSelectionElement;
282 import eu.etaxonomy.taxeditor.ui.selection.TeamSelectionElement;
283 import eu.etaxonomy.taxeditor.ui.selection.UserSelectionElement;
284 import eu.etaxonomy.taxeditor.ui.term.AbstractEnumComboElement;
285 import eu.etaxonomy.taxeditor.ui.term.AbstractTermComboElement;
286 import eu.etaxonomy.taxeditor.ui.term.AnnotationTypeComboElement;
287 import eu.etaxonomy.taxeditor.ui.term.DeterminationModifierComboElement;
288 import eu.etaxonomy.taxeditor.ui.term.EmptyComboElement;
289 import eu.etaxonomy.taxeditor.ui.term.ExtensionTypeComboElement;
290 import eu.etaxonomy.taxeditor.ui.term.LanguageComboElement;
291 import eu.etaxonomy.taxeditor.ui.term.MarkerTypeComboElement;
292 import eu.etaxonomy.taxeditor.ui.term.MeasurementUnitComboElement;
293 import eu.etaxonomy.taxeditor.ui.term.ModifierComboElement;
294 import eu.etaxonomy.taxeditor.ui.term.NameRelationshipTypeComboElement;
295 import eu.etaxonomy.taxeditor.ui.term.NameTypeDesignationStatusComboElement;
296 import eu.etaxonomy.taxeditor.ui.term.NamedAreaTypeComboElement;
297 import eu.etaxonomy.taxeditor.ui.term.NomenclaturalCodeComboElement;
298 import eu.etaxonomy.taxeditor.ui.term.NomenclaturalStatusTypeComboElement;
299 import eu.etaxonomy.taxeditor.ui.term.PresenceAbsenceTermComboElement;
300 import eu.etaxonomy.taxeditor.ui.term.PreservationMethodComboElement;
301 import eu.etaxonomy.taxeditor.ui.term.RankComboElement;
302 import eu.etaxonomy.taxeditor.ui.term.ReferenceSystemComboElement;
303 import eu.etaxonomy.taxeditor.ui.term.ReferenceTypeComboElement;
304 import eu.etaxonomy.taxeditor.ui.term.RightsTypeComboElement;
305 import eu.etaxonomy.taxeditor.ui.term.ScopeComboElement;
306 import eu.etaxonomy.taxeditor.ui.term.SexComboElement;
307 import eu.etaxonomy.taxeditor.ui.term.SpecimenTypeDesignationStatusComboElement;
308 import eu.etaxonomy.taxeditor.ui.term.StageComboElement;
309 import eu.etaxonomy.taxeditor.ui.term.StateComboElement;
310 import eu.etaxonomy.taxeditor.ui.term.StatisticalMeasureComboElement;
311
312 /**
313 * <p>
314 * CdmFormFactory class.
315 * </p>
316 *
317 * @author n.hoffmann
318 * @created Feb 24, 2010
319 * @version 1.0
320 */
321 public class CdmFormFactory extends FormToolkit {
322
323 private BoldFontHolder2 boldFontHolder2;
324 private MouseListener selectionMouseHandler;
325 private FocusListener selectionFocusHandler;
326
327 private final Set selectionListenerList = new HashSet();
328
329 private final List<IPropertyChangeListener> propertyChangeListeners = new ArrayList<IPropertyChangeListener>();
330
331 private final int orientation = Window.getDefaultOrientation();
332 private ISelectionProvider selectionProvider;
333
334 /**
335 * <p>
336 * LAYOUT
337 * </p>
338 *
339 * @return a {@link org.eclipse.ui.forms.widgets.TableWrapLayout} object.
340 */
341 public static final TableWrapLayout LAYOUT() {
342 return LAYOUT(1, false);
343 }
344
345 /**
346 * <p>
347 * LAYOUT
348 * </p>
349 *
350 * @param columns
351 * a int.
352 * @param equalWidth
353 * a boolean.
354 * @return a {@link org.eclipse.ui.forms.widgets.TableWrapLayout} object.
355 */
356 public static final TableWrapLayout LAYOUT(int columns, boolean equalWidth) {
357 TableWrapLayout layout = new TableWrapLayout();
358 layout.topMargin = 0;
359 layout.rightMargin = 0;
360 layout.bottomMargin = 0;
361 layout.leftMargin = 0;
362 layout.numColumns = columns;
363 layout.makeColumnsEqualWidth = equalWidth;
364 layout.verticalSpacing = 0;
365 layout.horizontalSpacing = 0;
366 return layout;
367 }
368
369 /**
370 * <p>
371 * FILL
372 * </p>
373 *
374 * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
375 */
376 public static final TableWrapData FILL() {
377 return FILL(1, 1);
378 }
379
380 /**
381 * <p>
382 * FILL
383 * </p>
384 *
385 * @param horizontalSpan
386 * a int.
387 * @param verticalSpan
388 * a int.
389 * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
390 */
391 public static final TableWrapData FILL(int horizontalSpan, int verticalSpan) {
392 TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB,
393 TableWrapData.FILL_GRAB);
394 layoutData.colspan = horizontalSpan;
395 layoutData.rowspan = verticalSpan;
396 return layoutData;
397 }
398
399 /**
400 * <p>
401 * LEFT
402 * </p>
403 *
404 * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
405 */
406 public static final TableWrapData LEFT() {
407 return new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP);
408 }
409
410 /**
411 * <p>
412 * RIGHT
413 * </p>
414 *
415 * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
416 */
417 public static final TableWrapData RIGHT() {
418 return new TableWrapData(TableWrapData.RIGHT, TableWrapData.TOP);
419 }
420
421 /**
422 * <p>
423 * FILL_HORIZONTALLY
424 * </p>
425 *
426 * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
427 */
428 public static final TableWrapData FILL_HORIZONTALLY() {
429 return FILL_HORIZONTALLY(1, 1);
430 }
431
432 /**
433 * <p>
434 * FILL_HORIZONTALLY
435 * </p>
436 *
437 * @param horizontalSpan
438 * a int.
439 * @param verticalSpan
440 * a int.
441 * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
442 */
443 public static final TableWrapData FILL_HORIZONTALLY(int horizontalSpan,
444 int verticalSpan) {
445 TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB,
446 TableWrapData.TOP);
447 layoutData.colspan = horizontalSpan;
448 layoutData.rowspan = verticalSpan;
449 return layoutData;
450 }
451
452 /** Constant <code>EMPTY_SELECTION</code> */
453 public static ISelection EMPTY_SELECTION = new ISelection() {
454 @Override
455 public boolean isEmpty() {
456 return true;
457 }
458 };
459
460 private class SelectionMouseHandler extends MouseAdapter {
461 @Override
462 public void mouseDown(MouseEvent e) {
463 notifySelectionListeners(e);
464 }
465 }
466
467 private class SelectionFocusHandler extends FocusAdapter {
468 @Override
469 public void focusGained(FocusEvent e) {
470 notifySelectionListeners(e);
471 }
472 }
473
474 private void notifySelectionListeners(TypedEvent e) {
475 Event event = new Event();
476 event.widget = e.widget;
477 SelectionEvent selectionEvent = new SelectionEvent(event);
478
479 for (Object listener : selectionListenerList) {
480 ((SelectionListener) listener).widgetSelected(selectionEvent);
481 }
482 }
483
484 /**
485 * <p>
486 * Constructor for CdmFormFactory.
487 * </p>
488 *
489 * @param display
490 * a {@link org.eclipse.swt.widgets.Display} object.
491 * @param selectionProvider
492 * a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
493 */
494 public CdmFormFactory(Display display, ISelectionProvider selectionProvider) {
495 super(display);
496 this.selectionProvider = selectionProvider;
497 init();
498 }
499
500 /**
501 * <p>
502 * Constructor for CdmFormFactory.
503 * </p>
504 *
505 * @param display
506 * a {@link org.eclipse.swt.widgets.Display} object.
507 */
508 public CdmFormFactory(Display display) {
509 super(display);
510 init();
511 }
512
513 /**
514 *
515 */
516 private void init() {
517 boldFontHolder2 = new BoldFontHolder2();
518 selectionMouseHandler = new SelectionMouseHandler();
519 selectionFocusHandler = new SelectionFocusHandler();
520 }
521
522 /**
523 * Creates an instance initialized with the correct selectionProvider
524 *
525 * Make sure to remove the instance when the entityComposite disposes via
526 * destroySelectionArbitrator(..)
527 *
528 * @param entityElement
529 * a {@link eu.etaxonomy.taxeditor.ui.forms.IEntityElement}
530 * object.
531 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.SelectionArbitrator}
532 * object.
533 */
534 public SelectionArbitrator createSelectionArbitrator(
535 IEntityElement entityElement) {
536 SelectionArbitrator selectionArbitrator = new SelectionArbitrator(
537 entityElement);
538 selectionArbitrator.addSelectionProvider(selectionProvider);
539 selectionProvider.addSelectionChangedListener(selectionArbitrator);
540 addSelectionListener(selectionArbitrator);
541 return selectionArbitrator;
542 }
543
544 /**
545 * <p>
546 * destroySelectionArbitrator
547 * </p>
548 *
549 * @param selectionArbitrator
550 * a {@link eu.etaxonomy.taxeditor.ui.forms.SelectionArbitrator}
551 * object.
552 */
553 public void destroySelectionArbitrator(
554 SelectionArbitrator selectionArbitrator) {
555 removeSelectionListener(selectionArbitrator);
556 if (selectionProvider != null) {
557 selectionProvider
558 .removeSelectionChangedListener(selectionArbitrator);
559 } else {
560 StoreUtil
561 .error(this.getClass(),
562 "Tried to destroy a selection listener from this factories listeners but was null",
563 null);
564 }
565 }
566
567 /** {@inheritDoc} */
568 @Override
569 public void adapt(Composite composite) {
570 composite.addMouseListener(selectionMouseHandler);
571 super.adapt(composite);
572 }
573
574 /**
575 * <p>
576 * adapt
577 * </p>
578 *
579 * @param formElement
580 * a
581 * {@link eu.etaxonomy.taxeditor.ui.forms.AbstractCdmFormElement}
582 * object.
583 */
584 public void adapt(AbstractCdmFormElement formElement) {
585 formElement.setPropertyChangeListeners(propertyChangeListeners);
586 }
587
588 /** {@inheritDoc} */
589 @Override
590 public void adapt(Control control, boolean trackFocus, boolean trackKeyboard) {
591 if (trackFocus) {
592 control.addFocusListener(selectionFocusHandler);
593 }
594 super.adapt(control, trackFocus, trackKeyboard);
595 }
596
597 /**
598 * <p>
599 * destroyElement
600 * </p>
601 *
602 * @param formElement
603 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
604 * object.
605 */
606 public void destroyElement(ICdmFormElement formElement) {
607 // return if element was not initialized
608 if (formElement == null) {
609 return;
610 }
611 // destroy selection arbitrator, if any
612 if (formElement instanceof ISelectableElement) {
613 destroySelectionArbitrator(((ISelectableElement) formElement)
614 .getSelectionArbitrator());
615 }
616 // remove this element form its parents list of elements
617 // ICdmFormElement parentElement = formElement.getParentElement();
618 // if(parentElement != null){
619 // parentElement.removeElement(formElement);
620 // }
621 // call destroy on child elements recursively
622 for (ICdmFormElement childElement : formElement.getElements()) {
623 destroyElement(childElement);
624 }
625 // dispose of the controls
626 for (Control control : formElement.getControls()) {
627 // we added the layoutComposite of the parental element as the
628 // layout composite to this formElement
629 // but we do not want to destroy it.
630 if (control.equals(formElement.getLayoutComposite())) {
631 continue;
632 } else {
633 control.dispose();
634 control = null;
635 }
636 }
637 }
638
639 /**
640 * <p>
641 * createEmptyCell
642 * </p>
643 *
644 * @param parent
645 * a {@link org.eclipse.swt.widgets.Composite} object.
646 * @return a {@link org.eclipse.swt.widgets.Label} object.
647 */
648 public Label createEmptyCell(Composite parent) {
649 return this.createLabel(parent, null);
650 }
651
652 /**
653 * <p>
654 * createMultilineTextWithLabel
655 * </p>
656 *
657 * @param labelString
658 * a {@link java.lang.String} object.
659 * @param textHeight
660 * a int.
661 * @param style
662 * a int.
663 * @param parentElement
664 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
665 * object.
666 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.TextWithLabelElement}
667 * object.
668 */
669 public TextWithLabelElement createMultilineTextWithLabel(
670 ICdmFormElement parentElement, String labelString, int textHeight,
671 int style) {
672 TextWithLabelElement element = new TextWithLabelElement(this,
673 parentElement, labelString, "", textHeight, style);
674 adapt(element);
675 parentElement.addElement(element);
676 return element;
677 }
678
679 /**
680 * <p>
681 * createMultiLanguageTextElement
682 * </p>
683 *
684 * @param parentElement
685 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
686 * object.
687 * @param labelString
688 * a {@link java.lang.String} object.
689 * @param multilanguageText
690 * a {@link java.util.Map} object.
691 * @param textHeight
692 * a int.
693 * @param style
694 * a int.
695 * @return a
696 * {@link eu.etaxonomy.taxeditor.ui.forms.MultilanguageTextElement}
697 * object.
698 */
699 public MultilanguageTextElement createMultiLanguageTextElement(
700 ICdmFormElement parentElement, String labelString,
701 Map<Language, LanguageString> multilanguageText, int textHeight,
702 int style) {
703 MultilanguageTextElement element = new MultilanguageTextElement(this,
704 parentElement, labelString, multilanguageText, textHeight,
705 style);
706 adapt(element);
707 parentElement.addElement(element);
708 return element;
709 }
710
711 public KeyStatementElement createKeyStatementElement(
712 ICdmFormElement parentElement, String labelString,
713 KeyStatement keyStatement, int textHeight, int style) {
714 KeyStatementElement element = new KeyStatementElement(this,
715 parentElement, labelString, keyStatement, textHeight, style);
716 adapt(element);
717 parentElement.addElement(element);
718 return element;
719 }
720
721 /**
722 * <p>
723 * createTextWithLabelElement
724 * </p>
725 *
726 * @param labelString
727 * a {@link java.lang.String} object.
728 * @param initialText
729 * a {@link java.lang.String} object.
730 * @param style
731 * a int.
732 * @param parentElement
733 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
734 * object.
735 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.TextWithLabelElement}
736 * object.
737 */
738 public TextWithLabelElement createTextWithLabelElement(
739 ICdmFormElement parentElement, String labelString,
740 String initialText, int style) {
741 TextWithLabelElement element = new TextWithLabelElement(this,
742 parentElement, labelString, initialText, null, style);
743 adapt(element);
744 parentElement.addElement(element);
745 return element;
746 }
747
748 public UriWithLabelElement createUriWithLabelElement(
749 ICdmFormElement parentElement, String labelString, URI initialUri,
750 int style) {
751 UriWithLabelElement element = new UriWithLabelElement(this,
752 parentElement, labelString, initialUri, null, style);
753 adapt(element);
754 parentElement.addElement(element);
755 return element;
756 }
757
758 /**
759 * @param element
760 * @param string
761 * @param uri
762 * @param style
763 * @return
764 */
765 public OpenUrlSelectorElement createOpenUrlSelectorElement(
766 ICdmFormElement parentElement, String labelString,
767 IOpenUrlEnabled openUrlEnabled, int style) {
768 OpenUrlSelectorElement element = new OpenUrlSelectorElement(this,
769 parentElement, labelString, openUrlEnabled, style);
770 adapt(element);
771 parentElement.addElement(element);
772 return element;
773 }
774
775 /**
776 *
777 * @param parentElement
778 * @param labelString
779 * @param conversationEnabled
780 * @param user
781 * @param style
782 * @return
783 */
784 public EditPasswordElement createEditPasswordElement(
785 ICdmFormElement parentElement, String labelString,
786 ConversationHolder conversation, User user, int style) {
787 EditPasswordElement element = new EditPasswordElement(this,
788 parentElement, labelString, user, conversation);
789 adapt(element);
790 parentElement.addElement(element);
791 return element;
792 }
793
794 /**
795 * <p>
796 * createIntegerTextWithLabelElement
797 * </p>
798 *
799 * @param parentElement
800 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
801 * object.
802 * @param labelString
803 * a {@link java.lang.String} object.
804 * @param initialInteger
805 * a {@link java.lang.Integer} object.
806 * @param style
807 * a int.
808 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.NumberWithLabelElement}
809 * object.
810 */
811 public NumberWithLabelElement createIntegerTextWithLabelElement(
812 ICdmFormElement parentElement, String labelString,
813 Integer initialInteger, int style) {
814 NumberWithLabelElement element = new NumberWithLabelElement(this,
815 parentElement, labelString, initialInteger, style);
816 adapt(element);
817 parentElement.addElement(element);
818 return element;
819 }
820
821 /**
822 * <p>
823 * createFloatTextWithLabelElement
824 * </p>
825 *
826 * @param parentElement
827 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
828 * object.
829 * @param labelString
830 * a {@link java.lang.String} object.
831 * @param initialFloat
832 * a float.
833 * @param style
834 * a int.
835 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.NumberWithLabelElement}
836 * object.
837 */
838 public NumberWithLabelElement createFloatTextWithLabelElement(
839 ICdmFormElement parentElement, String labelString,
840 float initialFloat, int style) {
841 NumberWithLabelElement element = new NumberWithLabelElement(this,
842 parentElement, labelString, initialFloat, style);
843 adapt(element);
844 parentElement.addElement(element);
845 return element;
846 }
847
848 /**
849 * <p>
850 * createLanguageStringWithLabelElement
851 * </p>
852 *
853 * @param parentElement
854 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
855 * object.
856 * @param labelString
857 * a {@link java.lang.String} object.
858 * @param languageString
859 * a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
860 * @param style
861 * a int.
862 * @return a
863 * {@link eu.etaxonomy.taxeditor.ui.forms.LanguageStringWithLabelElement}
864 * object.
865 */
866 public LanguageStringWithLabelElement createLanguageStringWithLabelElement(
867 ICdmFormElement parentElement, String labelString,
868 LanguageString languageString, int style) {
869 LanguageStringWithLabelElement element = new LanguageStringWithLabelElement(
870 this, parentElement, labelString, languageString, style);
871 adapt(element);
872 parentElement.addElement(element);
873 return element;
874 }
875
876 /**
877 * <p>
878 * createLanguageStringWithLabelElement
879 * </p>
880 *
881 * @param parentElement
882 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
883 * object.
884 * @param labelString
885 * a {@link java.lang.String} object.
886 * @param languageString
887 * a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
888 * @param height
889 * a int.
890 * @param style
891 * a int.
892 * @return a
893 * {@link eu.etaxonomy.taxeditor.ui.forms.LanguageStringWithLabelElement}
894 * object.
895 */
896 public LanguageStringWithLabelElement createLanguageStringWithLabelElement(
897 ICdmFormElement parentElement, String labelString,
898 LanguageString languageString, int height, int style) {
899 LanguageStringWithLabelElement element = new LanguageStringWithLabelElement(
900 this, parentElement, labelString, languageString, height, style);
901 adapt(element);
902 parentElement.addElement(element);
903 return element;
904 }
905
906 /**
907 * <p>
908 * createTextElement
909 * </p>
910 *
911 * @param parentElement
912 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
913 * object.
914 * @param initialText
915 * a {@link java.lang.String} object.
916 * @param style
917 * a int.
918 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.TextWithLabelElement}
919 * object.
920 */
921 public TextWithLabelElement createTextElement(
922 ICdmFormElement parentElement, String initialText, int style) {
923 TextWithLabelElement element = new TextWithLabelElement(this,
924 parentElement, null, initialText, null, style);
925 adapt(element);
926 parentElement.addElement(element);
927 return element;
928 }
929
930 /**
931 * <p>
932 * createKeyValueViewerElement
933 * </p>
934 *
935 * @param parentElement
936 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
937 * object.
938 * @param keyHeading
939 * a {@link java.lang.String} object.
940 * @param valueHeading
941 * a {@link java.lang.String} object.
942 * @param map
943 * a {@link java.util.Map} object.
944 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.KeyValueViewerElement}
945 * object.
946 */
947 public KeyValueViewerElement createKeyValueViewerElement(
948 ICdmFormElement parentElement, String keyHeading,
949 String valueHeading, Map<Object, Object> map) {
950 KeyValueViewerElement element = new KeyValueViewerElement(this,
951 parentElement, keyHeading, valueHeading, map);
952 adapt(element);
953 parentElement.addElement(element);
954 return element;
955 }
956
957 public static enum TermComboType {
958 EXTENSIONTYPE, LANGUAGE, MARKERTYPE, NOMENCLATURALSTATUSTYPE, RANK, RIGHTSTYPE, NAMERELATIONSHIP, NAMEDAREATYPE, PRESENCEABSENCESTATUS, ANNOTATIONTYPE, NAMETYPEDESIGNATIONSTATUS, SPECIMENTYPEDESIGNATIONSTATUS, SEX, STAGE, PRESERVATION_METHOD, MEASUREMENT_UNIT, STATE, MODIFIER, STATISTICAL_MEASURE, SCOPE, EMPTY, DETERMINATION_MODIFIER, REFERENCE_SYSTEM
959 }
960
961 /**
962 * <p>
963 * createTermComboElement
964 * </p>
965 *
966 * @param termComboType
967 * a
968 * {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.TermComboType}
969 * object.
970 * @param parentElement
971 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
972 * object.
973 * @param labelString
974 * a {@link java.lang.String} object.
975 * @param selection
976 * a {@link eu.etaxonomy.cdm.model.common.DefinedTermBase}
977 * object.
978 * @param style
979 * a int.
980 * @return a {@link eu.etaxonomy.taxeditor.ui.term.AbstractTermComboElement}
981 * object.
982 */
983 public AbstractTermComboElement createTermComboElement(
984 TermComboType termComboType, ICdmFormElement parentElement,
985 String labelString, DefinedTermBase selection, int style) {
986 AbstractTermComboElement element = null;
987
988 switch (termComboType) {
989 case EMPTY:
990 element = new EmptyComboElement<DefinedTermBase>(this,
991 parentElement, labelString, style);
992 break;
993 case EXTENSIONTYPE:
994 element = new ExtensionTypeComboElement(this, parentElement,
995 labelString, (ExtensionType) selection, style);
996 break;
997 case LANGUAGE:
998 element = new LanguageComboElement(this, parentElement,
999 labelString, (Language) selection, style);
1000 break;
1001 case MARKERTYPE:
1002 element = new MarkerTypeComboElement(this, parentElement,
1003 labelString, (MarkerType) selection, style);
1004 break;
1005 case NOMENCLATURALSTATUSTYPE:
1006 element = new NomenclaturalStatusTypeComboElement(this,
1007 parentElement, labelString,
1008 (NomenclaturalStatusType) selection, style);
1009 break;
1010 case RANK:
1011 element = new RankComboElement(this, parentElement, labelString,
1012 (Rank) selection, style);
1013 break;
1014 case RIGHTSTYPE:
1015 element = new RightsTypeComboElement(this, parentElement,
1016 labelString, (RightsTerm) selection, style);
1017 break;
1018 case NAMERELATIONSHIP:
1019 element = new NameRelationshipTypeComboElement(this, parentElement,
1020 labelString, (NameRelationshipType) selection, style);
1021 break;
1022 case NAMEDAREATYPE:
1023 element = new NamedAreaTypeComboElement(this, parentElement,
1024 labelString, (NamedAreaType) selection, style);
1025 break;
1026 case ANNOTATIONTYPE:
1027 element = new AnnotationTypeComboElement(this, parentElement,
1028 labelString, (AnnotationType) selection, style);
1029 break;
1030 case PRESENCEABSENCESTATUS:
1031 element = new PresenceAbsenceTermComboElement(this, parentElement,
1032 labelString, (PresenceAbsenceTermBase) selection, style);
1033 break;
1034 case NAMETYPEDESIGNATIONSTATUS:
1035 element = new NameTypeDesignationStatusComboElement(this,
1036 parentElement, labelString,
1037 (NameTypeDesignationStatus) selection, style);
1038 break;
1039 case SPECIMENTYPEDESIGNATIONSTATUS:
1040 element = new SpecimenTypeDesignationStatusComboElement(this,
1041 parentElement, labelString,
1042 (SpecimenTypeDesignationStatus) selection, style);
1043 break;
1044 case SEX:
1045 element = new SexComboElement(this, parentElement, labelString,
1046 (Sex) selection, style);
1047 break;
1048 case STAGE:
1049 element = new StageComboElement(this, parentElement, labelString,
1050 (Stage) selection, style);
1051 break;
1052 case PRESERVATION_METHOD:
1053 element = new PreservationMethodComboElement(this, parentElement,
1054 labelString, (PreservationMethod) selection, style);
1055 break;
1056 case MEASUREMENT_UNIT:
1057 element = new MeasurementUnitComboElement(this, parentElement,
1058 labelString, (MeasurementUnit) selection, style);
1059 break;
1060 case STATE:
1061 element = new StateComboElement(this, parentElement, labelString,
1062 (State) selection, style);
1063 break;
1064 case SCOPE:
1065 element = new ScopeComboElement(this, parentElement, labelString,
1066 (Scope) selection, style);
1067 break;
1068 case MODIFIER:
1069 element = new ModifierComboElement(this, parentElement,
1070 labelString, (Modifier) selection, style);
1071 break;
1072 case STATISTICAL_MEASURE:
1073 element = new StatisticalMeasureComboElement(this, parentElement,
1074 labelString, (StatisticalMeasure) selection, style);
1075 break;
1076 case DETERMINATION_MODIFIER:
1077 element = new DeterminationModifierComboElement(this,
1078 parentElement, labelString,
1079 (DeterminationModifier) selection, style);
1080 break;
1081 case REFERENCE_SYSTEM:
1082 element = new ReferenceSystemComboElement(this, parentElement,
1083 labelString, (ReferenceSystem) selection, style);
1084 break;
1085 }
1086
1087 adapt(element);
1088 parentElement.addElement(element);
1089 return element;
1090 }
1091
1092 public static enum EnumComboType {
1093 REFERENCETYPE, NOMENCLATURALCODE
1094 }
1095
1096 /**
1097 * <p>
1098 * createEnumComboElement
1099 * </p>
1100 *
1101 * @param enumComboType
1102 * a
1103 * {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.EnumComboType}
1104 * object.
1105 * @param parentElement
1106 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1107 * object.
1108 * @param style
1109 * a int.
1110 * @return a {@link eu.etaxonomy.taxeditor.ui.term.AbstractEnumComboElement}
1111 * object.
1112 */
1113 public AbstractEnumComboElement createEnumComboElement(
1114 EnumComboType enumComboType, ICdmFormElement parentElement,
1115 int style) {
1116 AbstractEnumComboElement element = null;
1117
1118 switch (enumComboType) {
1119 case REFERENCETYPE:
1120 element = new ReferenceTypeComboElement(this, parentElement,
1121 "Reference Type", null, style);
1122 break;
1123 case NOMENCLATURALCODE:
1124 element = new NomenclaturalCodeComboElement(this, parentElement,
1125 "Nomenclatural Code", null, style);
1126 break;
1127 }
1128 adapt(element);
1129 parentElement.addElement(element);
1130 return element;
1131 }
1132
1133 /**
1134 * <p>
1135 * createBrowserElement
1136 * </p>
1137 *
1138 * @param imageUri
1139 * a {@link java.net.URI} object.
1140 * @param style
1141 * a int.
1142 * @param parentElement
1143 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1144 * object.
1145 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.BrowserElement} object.
1146 */
1147 public BrowserElement createBrowserElement(ICdmFormElement parentElement,
1148 URI imageUri, int style) {
1149 BrowserElement element = new BrowserElement(this, parentElement,
1150 imageUri, style);
1151 adapt(element);
1152 parentElement.addElement(element);
1153 return element;
1154 }
1155
1156 /**
1157 * <p>
1158 * createImageElement
1159 * </p>
1160 *
1161 * @param parentElement
1162 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1163 * object.
1164 * @param imageUri
1165 * a {@link java.net.URI} object.
1166 * @param style
1167 * a int.
1168 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.ImageElement} object.
1169 */
1170 public ImageElement createImageElement(ICdmFormElement parentElement,
1171 URI imageUri, int style) {
1172 ImageElement element = new ImageElement(this, parentElement, imageUri,
1173 style);
1174 adapt(element);
1175 parentElement.addElement(element);
1176 return element;
1177 }
1178
1179 /**
1180 * <p>
1181 * createTextActionElement
1182 * </p>
1183 *
1184 * @param labelString
1185 * a {@link java.lang.String} object.
1186 * @param initialText
1187 * a {@link java.lang.String} object.
1188 * @param style
1189 * a int.
1190 * @param parentElement
1191 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1192 * object.
1193 * @param buttonLabel
1194 * a {@link java.lang.String} object.
1195 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.TextActionElement}
1196 * object.
1197 */
1198 public TextActionElement createTextActionElement(
1199 ICdmFormElement parentElement, String labelString,
1200 String buttonLabel, String initialText, int style) {
1201 TextActionElement element = new TextActionElement(this, parentElement,
1202 labelString, buttonLabel, initialText, style);
1203 adapt(element);
1204 parentElement.addElement(element);
1205 return element;
1206 }
1207
1208 /**
1209 *
1210 * @author n.hoffmann
1211 * @created Mar 5, 2010
1212 * @version 1.0
1213 */
1214 public static enum SelectionType {
1215 AGENT, INSTITUTION, NAME, REFERENCE, TAXON_BASE, TAXON, SYNONYM, TEAM, AUTHOR_TEAM, PERSON, DERIVED_UNIT, FIELD_OBSERVATION, FEATURE_TREE, CLASSIFICATION, TAXON_NODE, COLLECTION, FEATURE, POLYTOMOUS_KEY, POLYTOMOUS_KEY_NODE, USER, GROUP
1216 }
1217
1218 /**
1219 * <p>
1220 * createCheckbox
1221 * </p>
1222 *
1223 * @param parentElement
1224 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1225 * object.
1226 * @param label
1227 * a {@link java.lang.String} object.
1228 * @param initialState
1229 * a boolean.
1230 * @param style
1231 * a int.
1232 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.CheckboxElement} object.
1233 */
1234 public CheckboxElement createCheckbox(ICdmFormElement parentElement,
1235 String label, boolean initialState, int style) {
1236 CheckboxElement element = new CheckboxElement(this, parentElement,
1237 label, initialState, style | orientation);
1238 adapt(element);
1239 parentElement.addElement(element);
1240 return element;
1241 }
1242
1243 /**
1244 * Creates a section as a part of the form.
1245 *
1246 * @return the section widget
1247 * @param section
1248 * a {@link eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection}
1249 * object.
1250 */
1251 public Section adapt(AbstractFormSection section) {
1252 section.setMenu(section.getLayoutComposite().getMenu());
1253 adapt(section, true, true);
1254
1255 // handle focus and property change events for cdm use
1256 section.addFocusListener(selectionFocusHandler);
1257 section.setPropertyChangeListeners(propertyChangeListeners);
1258
1259 if (section.getToggle() != null) {
1260 section.getToggle().setHoverDecorationColor(
1261 getColors().getColor(IFormColors.TB_TOGGLE_HOVER));
1262 section.getToggle().setDecorationColor(
1263 getColors().getColor(IFormColors.TB_TOGGLE));
1264 }
1265
1266 section.setFont(boldFontHolder2.getBoldFont(section
1267 .getLayoutComposite().getFont()));
1268
1269 if ((section.getStyle() & Section.TITLE_BAR) != 0
1270 || (section.getStyle() & Section.SHORT_TITLE_BAR) != 0) {
1271 getColors().initializeSectionToolBarColors();
1272 section.setTitleBarBackground(getColors().getColor(
1273 IFormColors.TB_BG));
1274 section.setTitleBarBorderColor(getColors().getColor(
1275 IFormColors.TB_BORDER));
1276 }
1277 // call setTitleBarForeground regardless as it also sets the label color
1278 section.setTitleBarForeground(getColors().getColor(
1279 IFormColors.TB_TOGGLE));
1280 return section;
1281 }
1282
1283 private class BoldFontHolder2 {
1284 private Font normalFont;
1285
1286 private Font boldFont;
1287
1288 public BoldFontHolder2() {
1289 }
1290
1291 public Font getBoldFont(Font font) {
1292 createBoldFont(font);
1293 return boldFont;
1294 }
1295
1296 private void createBoldFont(Font font) {
1297 if (normalFont == null || !normalFont.equals(font)) {
1298 normalFont = font;
1299 dispose();
1300 }
1301 if (boldFont == null) {
1302 boldFont = FormFonts.getInstance().getBoldFont(
1303 getColors().getDisplay(), normalFont);
1304 }
1305 }
1306
1307 public void dispose() {
1308 if (boldFont != null) {
1309 FormFonts.getInstance().markFinished(boldFont,
1310 getColors().getDisplay());
1311 boldFont = null;
1312 }
1313 }
1314 }
1315
1316 /**
1317 * <p>
1318 * createToggleableTextField
1319 * </p>
1320 *
1321 * @param parentElement
1322 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1323 * object.
1324 * @param labelString
1325 * a {@link java.lang.String} object.
1326 * @param initialText
1327 * a {@link java.lang.String} object.
1328 * @param initialState
1329 * a boolean.
1330 * @param style
1331 * a int.
1332 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.ToggleableTextElement}
1333 * object.
1334 */
1335 public ToggleableTextElement createToggleableTextField(
1336 ICdmFormElement parentElement, String labelString,
1337 String initialText, boolean initialState, int style) {
1338 ToggleableTextElement element = new ToggleableTextElement(this,
1339 parentElement, labelString, initialText, initialState, style
1340 | orientation);
1341 adapt(element);
1342 parentElement.addElement(element);
1343 return element;
1344 }
1345
1346 /**
1347 * <p>
1348 * createTimePeriodElement
1349 * </p>
1350 *
1351 * @param parentElement
1352 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1353 * object.
1354 * @param labelString
1355 * a {@link java.lang.String} object.
1356 * @param timePeriod
1357 * a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
1358 * @param style
1359 * a int.
1360 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.TimePeriodElement}
1361 * object.
1362 */
1363 public TimePeriodElement createTimePeriodElement(
1364 ICdmFormElement parentElement, String labelString,
1365 TimePeriod timePeriod, int style) {
1366 TimePeriodElement element = new TimePeriodElement(this, parentElement,
1367 labelString, timePeriod, style);
1368 adapt(element);
1369 parentElement.addElement(element);
1370 return element;
1371 }
1372
1373 /**
1374 * <p>
1375 * createPointElement
1376 * </p>
1377 *
1378 * @param style
1379 * a int.
1380 * @param parentElement
1381 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1382 * object.
1383 * @param point
1384 * a {@link eu.etaxonomy.cdm.model.location.Point} object.
1385 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.PointElement} object.
1386 */
1387 public PointElement createPointElement(ICdmFormElement parentElement,
1388 Point point, int style) {
1389 PointElement element = new PointElement(this, parentElement, point,
1390 style);
1391 adapt(element);
1392 parentElement.addElement(element);
1393 return element;
1394 }
1395
1396 /**
1397 * <p>
1398 * createDateDetailSection
1399 * </p>
1400 *
1401 * @param parentElement
1402 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1403 * object.
1404 * @param style
1405 * a int.
1406 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.DateDetailSection}
1407 * object.
1408 */
1409 public DateDetailSection createDateDetailSection(
1410 ICdmFormElement parentElement, int style) {
1411 DateDetailSection section = new DateDetailSection(this, parentElement,
1412 style);
1413 parentElement.addElement(section);
1414 adapt(section);
1415 return section;
1416 }
1417
1418 /**
1419 * <p>
1420 * createPartialElement
1421 * </p>
1422 *
1423 * @param parentElement
1424 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1425 * object.
1426 * @param labelString
1427 * a {@link java.lang.String} object.
1428 * @param partial
1429 * a {@link org.joda.time.Partial} object.
1430 * @param style
1431 * a int.
1432 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.PartialElement} object.
1433 */
1434 public PartialElement createPartialElement(ICdmFormElement parentElement,
1435 String labelString, Partial partial, int style) {
1436 PartialElement element = new PartialElement(this, parentElement,
1437 labelString, style);
1438 adapt(element);
1439 parentElement.addElement(element);
1440 return element;
1441 }
1442
1443 /**
1444 * <p>
1445 * addSelectionListener
1446 * </p>
1447 *
1448 * @param listener
1449 * a {@link org.eclipse.swt.events.SelectionListener} object.
1450 */
1451 public void addSelectionListener(SelectionListener listener) {
1452 selectionListenerList.add(listener);
1453 }
1454
1455 /**
1456 * <p>
1457 * removeSelectionListener
1458 * </p>
1459 *
1460 * @param listener
1461 * a {@link org.eclipse.swt.events.SelectionListener} object.
1462 */
1463 public void removeSelectionListener(SelectionListener listener) {
1464 if (listener == null) {
1465 StoreUtil
1466 .error(this.getClass(),
1467 "Tried to remove a selection listener from this factories listeners but was null",
1468 null);
1469 } else {
1470 selectionListenerList.remove(listener);
1471 }
1472 }
1473
1474 /**
1475 * <p>
1476 * addPropertyChangeListener
1477 * </p>
1478 *
1479 * @param listener
1480 * a {@link org.eclipse.jface.util.IPropertyChangeListener}
1481 * object.
1482 */
1483 public void addPropertyChangeListener(IPropertyChangeListener listener) {
1484 propertyChangeListeners.add(0, listener);
1485 }
1486
1487 /**
1488 * <p>
1489 * removePropertyChangeListener
1490 * </p>
1491 *
1492 * @param listener
1493 * a {@link org.eclipse.jface.util.IPropertyChangeListener}
1494 * object.
1495 */
1496 public void removePropertyChangeListener(IPropertyChangeListener listener) {
1497 propertyChangeListeners.remove(listener);
1498 }
1499
1500 /**
1501 * <p>
1502 * createHorizontalSeparator
1503 * </p>
1504 *
1505 * @param parentElement
1506 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1507 * object.
1508 * @param style
1509 * a int.
1510 * @return a {@link org.eclipse.swt.widgets.Label} object.
1511 */
1512 public Label createHorizontalSeparator(ICdmFormElement parentElement,
1513 int style) {
1514 Label separator = this.createSeparator(
1515 parentElement.getLayoutComposite(), SWT.HORIZONTAL | style);
1516 separator.setLayoutData(FILL_HORIZONTALLY());
1517 return separator;
1518 }
1519
1520 /**
1521 * <p>
1522 * createVersionElement
1523 * </p>
1524 *
1525 * @param parentElement
1526 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1527 * object.
1528 * @param entity
1529 * a {@link eu.etaxonomy.cdm.model.common.VersionableEntity}
1530 * object.
1531 * @param style
1532 * a int.
1533 * @return a
1534 * {@link eu.etaxonomy.taxeditor.ui.section.supplemental.VersionElement}
1535 * object.
1536 */
1537 public VersionElement createVersionElement(ICdmFormElement parentElement,
1538 VersionableEntity entity, int style) {
1539 VersionElement element = new VersionElement(this, parentElement,
1540 entity, style);
1541 adapt(element);
1542 parentElement.addElement(element);
1543 return element;
1544 }
1545
1546 /**
1547 * <p>
1548 * createVersionSection
1549 * </p>
1550 *
1551 * @param parentElement
1552 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1553 * object.
1554 * @param style
1555 * a int.
1556 * @return a
1557 * {@link eu.etaxonomy.taxeditor.ui.section.supplemental.VersionSection}
1558 * object.
1559 */
1560 public VersionSection createVersionSection(ICdmFormElement parentElement,
1561 int style) {
1562 VersionSection section = new VersionSection(this, parentElement, style);
1563 parentElement.addElement(section);
1564 adapt(section);
1565 return section;
1566 }
1567
1568 /**
1569 * <p>
1570 * createEmptyElement
1571 * </p>
1572 *
1573 * @param parentElement
1574 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1575 * object.
1576 * @return a {@link eu.etaxonomy.taxeditor.ui.section.EmptyElement} object.
1577 */
1578 public EmptyElement createEmptyElement(ICdmFormElement parentElement) {
1579 EmptyElement element = new EmptyElement(this, parentElement, null,
1580 SWT.NULL);
1581 adapt(element);
1582 parentElement.addElement(element);
1583 return element;
1584 }
1585
1586 /**
1587 * <p>
1588 * createHeadlineSection
1589 * </p>
1590 *
1591 * @param parentElement
1592 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1593 * object.
1594 * @return a
1595 * {@link eu.etaxonomy.taxeditor.ui.section.supplemental.HeadlineSection}
1596 * object.
1597 */
1598 public HeadlineSection createHeadlineSection(ICdmFormElement parentElement) {
1599 HeadlineSection section = new HeadlineSection(this, parentElement,
1600 SWT.NULL);
1601 parentElement.addElement(section);
1602 adapt(section);
1603 return section;
1604 }
1605
1606 /**
1607 * <p>
1608 * createParsingMessageElement
1609 * </p>
1610 *
1611 * @param parentElement
1612 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1613 * object.
1614 * @param parserProblem
1615 * a {@link eu.etaxonomy.cdm.strategy.parser.ParserProblem}
1616 * object.
1617 * @param style
1618 * a int.
1619 * @return a
1620 * {@link eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessageElement}
1621 * object.
1622 */
1623 public ParsingMessageElement createParsingMessageElement(
1624 ICdmFormElement parentElement, ParserProblem parserProblem,
1625 int style) {
1626 ParsingMessageElement element = new ParsingMessageElement(this,
1627 parentElement, parserProblem, style);
1628 adapt(element);
1629 parentElement.addElement(element);
1630 return element;
1631 }
1632
1633 // SIMPLIFY
1634
1635 /**
1636 *
1637 */
1638 public static enum DetailType {
1639 NONVIRALNAME,
1640 SCIENTIFICNAME,
1641 REFERENCEBASE,
1642 NOMENCLATURALREFERENCE,
1643 TAXONBASE,
1644 AUTHORSHIP,
1645 TEAM,
1646 PERSON,
1647 DESCRIPTION,
1648 DESCRIPTIONELEMENT,
1649 PARSINGMESSAGE,
1650 NAMERELATIONSHIP,
1651 TEAMORPERSONBASE,
1652 MEDIA,
1653 FIELD_OBSERVATION,
1654 DERIVED_UNIT_FACADE,
1655 GATHERING_EVENT,
1656 DERIVED_UNIT,
1657 NATURAL_LANGUAGE,
1658 FEATURE_DISTRIBUTION,
1659 CLASSIFICATION,
1660 TAXON_NODE,
1661 COLLECTION,
1662 POLYTOMOUS_KEY,
1663 POLYTOMOUS_KEY_NODE,
1664 INSTITUTION,
1665 DERIVED_UNIT_GENERAL,
1666 HYBRID,
1667 USER,
1668 GROUP,
1669 DETERMINATION
1670 }
1671
1672 /**
1673 * <p>
1674 * createCdmDetailSection
1675 * </p>
1676 *
1677 * @param detailType
1678 * a
1679 * {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.DetailType}
1680 * object.
1681 * @param parentElement
1682 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1683 * object.
1684 * @param selectionProvider
1685 * a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
1686 * @param style
1687 * a int.
1688 * @param conversation
1689 * a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
1690 * object.
1691 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection}
1692 * object.
1693 */
1694 public AbstractFormSection createCdmDetailSection(DetailType detailType,
1695 ConversationHolder conversation, ICdmFormElement parentElement,
1696 ISelectionProvider selectionProvider, int style) {
1697 AbstractFormSection section = null;
1698
1699 switch (detailType) {
1700 case SCIENTIFICNAME:
1701 section = new NameDetailSection(this, conversation, parentElement,
1702 selectionProvider, style);
1703 break;
1704 case REFERENCEBASE:
1705 section = new ReferenceDetailSection(this, conversation,
1706 parentElement, selectionProvider, style);
1707 break;
1708 case NOMENCLATURALREFERENCE:
1709 section = new NomenclaturalReferenceDetailSection(this,
1710 conversation, parentElement, selectionProvider, style);
1711 break;
1712 case TAXONBASE:
1713 section = new TaxonBaseDetailSection(this, conversation,
1714 parentElement, selectionProvider, style);
1715 break;
1716 case AUTHORSHIP:
1717 section = new AuthorshipDetailSection(this, conversation,
1718 parentElement, selectionProvider, style);
1719 break;
1720 case TEAMORPERSONBASE:
1721 section = new TeamOrPersonBaseDetailSection(this, conversation,
1722 parentElement, selectionProvider, style);
1723 break;
1724 case TEAM:
1725 section = new TeamDetailSection(this, conversation, parentElement,
1726 null, style);
1727 break;
1728 case PERSON:
1729 section = new PersonDetailSection(this, conversation,
1730 parentElement, null, style);
1731 break;
1732 case DESCRIPTION:
1733 section = new DescriptionDetailSection(this, conversation,
1734 parentElement, selectionProvider, style);
1735 break;
1736 case DESCRIPTIONELEMENT:
1737 section = new DescriptionElementDetailSection(this, conversation,
1738 parentElement, selectionProvider, style);
1739 break;
1740 case PARSINGMESSAGE:
1741 section = new ParsingMessagesSection(this, conversation,
1742 parentElement, selectionProvider, style);
1743 break;
1744 case NONVIRALNAME:
1745 section = new NonViralNameDetailSection(this, conversation,
1746 parentElement, selectionProvider, style);
1747 break;
1748 case MEDIA:
1749 section = new eu.etaxonomy.taxeditor.ui.section.description.MediaDetailsSection(
1750 this, conversation, parentElement, selectionProvider, style);
1751 break;
1752 case DERIVED_UNIT_FACADE:
1753 section = new DerivedUnitFacadeDetailSection(this, conversation,
1754 parentElement, selectionProvider, style);
1755 break;
1756 case FIELD_OBSERVATION:
1757 section = new FieldObservationDetailSection(this, conversation,
1758 parentElement, selectionProvider, style);
1759 break;
1760 case GATHERING_EVENT:
1761 section = new GatheringEventDetailSection(this, conversation,
1762 parentElement, selectionProvider, style);
1763 break;
1764 case DERIVED_UNIT:
1765 section = new DerivedUnitBaseDetailSection(this, conversation,
1766 parentElement, selectionProvider, style);
1767 break;
1768 case NATURAL_LANGUAGE:
1769 section = new NaturalLanguageSection(this, conversation,
1770 parentElement, selectionProvider, style);
1771 break;
1772 case FEATURE_DISTRIBUTION:
1773 section = new FeatureDistributionDetailSection(this, conversation,
1774 parentElement, selectionProvider, style);
1775 break;
1776 case CLASSIFICATION:
1777 section = new ClassificationDetailSection(this, conversation,
1778 parentElement, selectionProvider, style);
1779 break;
1780 case TAXON_NODE:
1781 section = new TaxonNodeDetailSection(this, conversation,
1782 parentElement, selectionProvider, style);
1783 break;
1784 case POLYTOMOUS_KEY:
1785 section = new PolytomousKeyDetailSection(this, conversation,
1786 parentElement, selectionProvider, style);
1787 break;
1788 case POLYTOMOUS_KEY_NODE:
1789 section = new PolytomousKeyNodeDetailSection(this, conversation,
1790 parentElement, selectionProvider, style);
1791 break;
1792 case INSTITUTION:
1793 section = new InstitutionDetailSection(this, conversation,
1794 parentElement, selectionProvider, style);
1795 break;
1796 case DERIVED_UNIT_GENERAL:
1797 section = new GeneralDetailSection(this, conversation,
1798 parentElement, selectionProvider, style);
1799 break;
1800 case HYBRID:
1801 section = new HybridDetailSection(this, conversation,
1802 parentElement, selectionProvider, style);
1803 break;
1804 case USER:
1805 section = new UserDetailSection(this, conversation, parentElement,
1806 selectionProvider, style);
1807 break;
1808 case GROUP:
1809 section = new GroupDetailSection(this, conversation, parentElement,
1810 selectionProvider, style);
1811 break;
1812 case DETERMINATION:
1813 section = new DeterminationDetailSection(this, conversation, parentElement,
1814 selectionProvider, style);
1815 }
1816
1817 if (section == null) {
1818 throw new RuntimeException(
1819 "You tried to create a cdm detail section that is not implemented yet.");
1820 }
1821
1822 parentElement.addElement(section);
1823 adapt(section);
1824 return section;
1825 }
1826
1827 /**
1828 * <p>
1829 * createCdmDetailElement
1830 * </p>
1831 *
1832 * @param detailType
1833 * a
1834 * {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.DetailType}
1835 * object.
1836 * @param style
1837 * a int.
1838 * @param parentElement
1839 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1840 * object.
1841 * @return a
1842 * {@link eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement}
1843 * object.
1844 */
1845 public AbstractCdmDetailElement createCdmDetailElement(
1846 DetailType detailType, ICdmFormElement parentElement, int style) {
1847 AbstractCdmDetailElement element = null;
1848
1849 switch (detailType) {
1850 case SCIENTIFICNAME:
1851 element = new NameDetailElement(this, parentElement, style);
1852 break;
1853 case REFERENCEBASE:
1854 element = new ReferenceDetailElement(this, parentElement, style);
1855 break;
1856 case NOMENCLATURALREFERENCE:
1857 element = new NomenclaturalReferenceDetailElement(this,
1858 parentElement, style);
1859 break;
1860 case TAXONBASE:
1861 element = new TaxonBaseDetailElement(this, parentElement, style);
1862 break;
1863 case AUTHORSHIP:
1864 element = new AuthorshipDetailElement(this, parentElement, style);
1865 break;
1866 case TEAM:
1867 element = new TeamDetailElement(this, parentElement, style);
1868 break;
1869 case PERSON:
1870 element = new PersonDetailElement(this, parentElement, style);
1871 break;
1872 case DESCRIPTION:
1873 element = new DescriptionDetailElement(this, parentElement, style);
1874 break;
1875 case DESCRIPTIONELEMENT:
1876 element = new DescriptionElementDetailElement(this, parentElement,
1877 style);
1878 break;
1879 case NONVIRALNAME:
1880 element = new NonViralNameDetailElement(this, parentElement);
1881 break;
1882 case DERIVED_UNIT_FACADE:
1883 element = new DerivedUnitFacadeDetailElement(this, parentElement);
1884 break;
1885 case FIELD_OBSERVATION:
1886 element = new FieldObservationDetailElement(this, parentElement);
1887 break;
1888 case GATHERING_EVENT:
1889 element = new GatheringEventDetailElement(this, parentElement);
1890 break;
1891 case DERIVED_UNIT:
1892 element = new DerivedUnitBaseDetailElement(this, parentElement);
1893 break;
1894 case NATURAL_LANGUAGE:
1895 element = new NaturalLanguageDetailElement(this, parentElement);
1896 break;
1897 case FEATURE_DISTRIBUTION:
1898 element = new FeatureDistributionDetailElement(this, parentElement);
1899 break;
1900 case CLASSIFICATION:
1901 element = new ClassificationDetailElement(this, parentElement);
1902 break;
1903 case TAXON_NODE:
1904 element = new TaxonNodeDetailElement(this, parentElement);
1905 break;
1906 case COLLECTION:
1907 element = new CollectionDetailElement(this, parentElement);
1908 break;
1909 case POLYTOMOUS_KEY:
1910 element = new PolytomousKeyDetailElement(this, parentElement);
1911 break;
1912 case POLYTOMOUS_KEY_NODE:
1913 element = new PolytomousKeyNodeDetailElement(this, parentElement);
1914 break;
1915 case INSTITUTION:
1916 element = new InstitutionDetailElement(this, parentElement);
1917 break;
1918 case DERIVED_UNIT_GENERAL:
1919 element = new GeneralDetailElement(this, parentElement);
1920 break;
1921 case HYBRID:
1922 element = new HybridDetailElement(this, parentElement);
1923 break;
1924 case USER:
1925 element = new UserDetailElement(this, parentElement);
1926 break;
1927 case GROUP:
1928 element = new GroupDetailElement(this, parentElement);
1929 break;
1930 case DETERMINATION:
1931 element = new DeterminationDetailElement(this, parentElement);
1932 break;
1933 }
1934
1935 if (element == null) {
1936 StoreUtil
1937 .error(this.getClass(),
1938 "Detail element was not created. Seems like the case was not implemented for the requested detail type: "
1939 + detailType, null);
1940 }
1941
1942 adapt(element);
1943 parentElement.addElement(element);
1944 return element;
1945 }
1946
1947 /**
1948 *
1949 * @author n.hoffmann
1950 * @created Mar 5, 2010
1951 * @version 1.0
1952 */
1953 public static enum EntityDetailType {
1954 TEAM, TEAMMEMBER, ANNOTATION, CREDIT, DESCRIPTIONELEMENTSOURCE, EXTENSION, MARKER, MEDIA, DESCRIPTIONELEMENTMEDIA, MEDIAREPRESENTATION, MEDIAREPRESENTATIONPART, MODIFIER, NOMENCLATURALSTATUS, NAME_RELATIONSHIP, PROTOLOG, RIGHTS, SOURCE, SCOPE, DESCRIPTIONSOURCE, TYPEDESIGNATION, STATE_DATA, STATISTICAL_MEASUREMENT_VALUE, DESCRIBED_SPECIMEN, COLLECTING_AREA, DETERMINATION_EVENT, SPECIMEN_COLLECTION, IDENTIFIABLE_SOURCE_COLLECTION, GEOGRAPHICAL_SCOPE, SCOPE_RESTRICTION, MEMBER, GRANTED_AUTHORITY, GROUPS_BY_USER, TAXONOMIC_SCOPE, DETERMINATION_CURRENT, DETERMINATION_HISTORY
1955 }
1956
1957 /**
1958 * <p>
1959 * createEntityDetailSection
1960 * </p>
1961 *
1962 * @param entityDetailType
1963 * a
1964 * {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.EntityDetailType}
1965 * object.
1966 * @param style
1967 * a int.
1968 * @param conversation
1969 * a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
1970 * object.
1971 * @param parentElement
1972 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
1973 * object.
1974 * @return a {@link eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection}
1975 * object.
1976 */
1977 public AbstractFormSection createEntityDetailSection(
1978 EntityDetailType entityDetailType, ConversationHolder conversation,
1979 ICdmFormElement parentElement, int style) {
1980 AbstractFormSection section = null;
1981
1982 switch (entityDetailType) {
1983 case TEAM:
1984 section = new TeamDetailSection(this, conversation, parentElement,
1985 null, style);
1986 break;
1987 case TEAMMEMBER:
1988 section = new TeamMemberSection(this, conversation, parentElement,
1989 style);
1990 break;
1991 case ANNOTATION:
1992 section = new AnnotationSection(this, conversation, parentElement,
1993 style);
1994 break;
1995 case CREDIT:
1996 section = new CreditSection(this, conversation, parentElement,
1997 style);
1998 break;
1999 case DESCRIPTIONELEMENTSOURCE:
2000 section = new DescriptionElementSourceSection(this, conversation,
2001 parentElement, style);
2002 break;
2003 case EXTENSION:
2004 section = new ExtensionSection(this, conversation, parentElement,
2005 style);
2006 break;
2007 case MARKER:
2008 section = new MarkerSection(this, conversation, parentElement,
2009 style);
2010 break;
2011 case MEDIA:
2012 section = new MediaSection(this, conversation, parentElement, style);
2013 break;
2014 case DESCRIPTIONELEMENTMEDIA:
2015 section = new DescriptionElementMediaSection(this, conversation,
2016 parentElement, style);
2017 break;
2018 case MEDIAREPRESENTATION:
2019 section = new MediaRepresentationSection(this, conversation,
2020 parentElement, style);
2021 break;
2022 case MEDIAREPRESENTATIONPART:
2023 section = new MediaRepresentationPartSection(this, conversation,
2024 parentElement, style);
2025 break;
2026 case MODIFIER:
2027 section = new ModifierSection(this, conversation, parentElement,
2028 style);
2029 break;
2030 case NOMENCLATURALSTATUS:
2031 section = new NomenclaturalStatusSection(this, conversation,
2032 parentElement, style);
2033 break;
2034 case NAME_RELATIONSHIP:
2035 section = new NameRelationshipDetailSection(this, conversation,
2036 parentElement, style);
2037 break;
2038 case PROTOLOG:
2039 section = new ProtologueSection(this, conversation, parentElement,
2040 style);
2041 break;
2042 case RIGHTS:
2043 section = new RightsSection(this, conversation, parentElement,
2044 style);
2045 break;
2046 case SOURCE:
2047 section = new SourceSection(this, conversation, parentElement,
2048 style);
2049 break;
2050 case SCOPE:
2051 section = new ScopeSection(this, conversation, parentElement, style);
2052 break;
2053 case DESCRIPTIONSOURCE:
2054 section = new DescriptionSourceSection(this, conversation,
2055 parentElement, style);
2056 break;
2057 case TYPEDESIGNATION:
2058 section = new TypeDesignationSection(this, conversation,
2059 parentElement, style);
2060 break;
2061 case STATE_DATA:
2062 section = new StateDataSection(this, conversation, parentElement,
2063 style);
2064 break;
2065 case STATISTICAL_MEASUREMENT_VALUE:
2066 section = new StatisticalMeasurementValueSection(this,
2067 conversation, parentElement, style);
2068 break;
2069 case DESCRIBED_SPECIMEN:
2070 section = new DescribedSpecimenSection(this, conversation,
2071 parentElement, style);
2072 break;
2073 case COLLECTING_AREA:
2074 section = new CollectingAreasDetailSection(this, conversation,
2075 parentElement, style);
2076 break;
2077 case DETERMINATION_CURRENT:
2078 section = new CurrentDeterminationDetailSection(this, conversation,
2079 parentElement, style);
2080 break;
2081 case DETERMINATION_HISTORY:
2082 section = new DeterminationHistoryDetailSection(this, conversation,
2083 parentElement, style);
2084 break;
2085 case SPECIMEN_COLLECTION:
2086 section = new SpecimenCollectionDetailSection(this, conversation,
2087 parentElement, style);
2088 break;
2089 case IDENTIFIABLE_SOURCE_COLLECTION:
2090 section = new SourceCollectionDetailSection(this, conversation,
2091 parentElement, style);
2092 break;
2093 case GEOGRAPHICAL_SCOPE:
2094 section = new GeographicalScopeDetailSection(this, conversation,
2095 parentElement, style);
2096 break;
2097 case SCOPE_RESTRICTION:
2098 section = new ScopeRestrictionSection(this, conversation,
2099 parentElement, style);
2100 break;
2101 case MEMBER:
2102 section = new MemberDetailSection(this, conversation,
2103 parentElement, style);
2104 break;
2105 case GRANTED_AUTHORITY:
2106 section = new GrantedAuthorityDetailSection(this, conversation,
2107 parentElement, style);
2108 break;
2109 case GROUPS_BY_USER:
2110 section = new GroupsByUserDetailSection(this, conversation,
2111 parentElement, style);
2112 break;
2113 case TAXONOMIC_SCOPE:
2114 section = new TaxonomicScopeSection(this, conversation,
2115 parentElement, style);
2116 break;
2117 }
2118 parentElement.addElement(section);
2119 adapt(section);
2120 return section;
2121 }
2122
2123 /**
2124 * <p>
2125 * createEntityCollectionElement
2126 * </p>
2127 *
2128 * @param removeListener
2129 * a {@link org.eclipse.swt.events.SelectionListener} object.
2130 * @param style
2131 * a int.
2132 * @param parentElement
2133 * a {@link eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection}
2134 * object.
2135 * @param versionableEntity
2136 * a {@link eu.etaxonomy.cdm.model.common.IVersionableEntity}
2137 * object.
2138 * @param backgroundColor
2139 * a {@link org.eclipse.swt.graphics.Color} object.
2140 * @return a
2141 * {@link eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement}
2142 * object.
2143 */
2144 public AbstractEntityCollectionElement createEntityCollectionElement(
2145 AbstractFormSection parentElement, Object versionableEntity,
2146 SelectionListener removeListener, Color backgroundColor, int style) {
2147 AbstractEntityCollectionElement element = null;
2148
2149 Object entity = HibernateProxyHelper.deproxy(versionableEntity);
2150
2151 if (entity instanceof Annotation) {
2152 element = new AnnotationElement(this, parentElement,
2153 (Annotation) entity, removeListener, style);
2154 } else if (entity instanceof Person) {
2155 element = new TeamMemberElement(this, parentElement,
2156 (Person) entity, removeListener, style);
2157 } else if (entity instanceof Credit) {
2158 element = new CreditElement(this, parentElement, (Credit) entity,
2159 removeListener, style);
2160 } else if (entity instanceof Extension) {
2161 element = new ExtensionElement(this, parentElement,
2162 (Extension) entity, removeListener, style);
2163 } else if (entity instanceof Marker) {
2164 element = new MarkerElement(this, parentElement, (Marker) entity,
2165 removeListener, style);
2166 } else if (entity instanceof Media) {
2167 element = new MediaElement(this, parentElement, (Media) entity,
2168 removeListener, style);
2169 } else if (entity instanceof MediaRepresentation) {
2170 element = new MediaRepresentationElement(this, parentElement,
2171 (MediaRepresentation) entity, removeListener, style);
2172 } else if (entity instanceof ImageFile) {
2173 element = new ImageFileElement(this, parentElement,
2174 (ImageFile) entity, removeListener, style);
2175 } else if (entity instanceof NomenclaturalStatus) {
2176 element = new NomenclaturalStatusElement(this, parentElement,
2177 (NomenclaturalStatus) entity, removeListener, style);
2178 } else if (entity instanceof Rights) {
2179 element = new RightsElement(this, parentElement, (Rights) entity,
2180 removeListener, style);
2181 } else if (entity instanceof DescriptionElementSource) {
2182 element = new DescriptionElementSourceElement(this, parentElement,
2183 (DescriptionElementSource) entity, removeListener, style);
2184 } else if (entity instanceof IdentifiableSource) {
2185 element = new IdentifiableSourceElement(this, parentElement,
2186 (IdentifiableSource) entity, removeListener, style);
2187 } else if (entity instanceof Scope) {
2188 element = new ScopeElement(this, parentElement, (Scope) entity,
2189 removeListener, style);
2190 } else if (entity instanceof Modifier) {
2191 element = new ModifierElement(this, parentElement,
2192 (Modifier) entity, removeListener, style);
2193 } else if (entity instanceof Reference) {
2194 element = new DescriptionSourceElement(this, parentElement,
2195 (Reference) entity, removeListener, style);
2196 } else if (entity instanceof NameTypeDesignation) {
2197 element = new NameTypeDesignationElement(this, parentElement,
2198 (NameTypeDesignation) entity, removeListener, style);
2199 } else if (entity instanceof NameRelationship) {
2200 element = new NameRelationshipDetailElement(this, parentElement,
2201 (NameRelationship) entity, removeListener, style);
2202 } else if (entity instanceof SpecimenTypeDesignation) {
2203 element = new SpecimenTypeDesignationElement(this, parentElement,
2204 (SpecimenTypeDesignation) entity, removeListener, style);
2205 } else if (entity instanceof StateData) {
2206 element = new StateDataElement(this, parentElement,
2207 (StateData) entity, removeListener, style);
2208 } else if (entity instanceof StatisticalMeasurementValue) {
2209 element = new StatisticalMeasurementValueElement(this,
2210 parentElement, (StatisticalMeasurementValue) entity,
2211 removeListener, style);
2212 } else if (entity instanceof DerivedUnit) {
2213 element = new DerivedUnitElement(this, parentElement,
2214 (DerivedUnit) entity, removeListener, style);
2215 } else if (entity instanceof NamedArea) {
2216 element = new NamedAreaDetailElement(this, parentElement,
2217 (NamedArea) entity, removeListener, style);
2218 } else if (entity instanceof DeterminationEvent) {
2219 element = new DeterminationEventDetailElement(this, parentElement,
2220 (DeterminationEvent) entity, removeListener, style);
2221 } else if (entity instanceof Specimen) {
2222 element = new SpecimenCollectionDetailElement(this, parentElement,
2223 (Specimen) entity, removeListener, style);
2224 } else if (entity instanceof User) {
2225 element = new MemberDetailElement(this, parentElement,
2226 (User) entity, removeListener, style);
2227 } else if (entity instanceof GrantedAuthority) {
2228 element = new GrantedAuthorityDetailElement(this, parentElement,
2229 (GrantedAuthority) entity, removeListener, style);
2230 } else if (entity instanceof Group) {
2231 element = new GroupsByUserDetailElement(this, parentElement,
2232 (Group) entity, removeListener, style);
2233 } else if (entity instanceof Taxon) {
2234 element = new TaxonDetailElement(this, parentElement,
2235 (Taxon) entity, removeListener, style);
2236 } else if (entity instanceof DescriptionElementBase) {
2237 // this is the special case for protologs, maybe we can do this
2238 // differently when API improves
2239 DescriptionElementBase descriptionElement = (DescriptionElementBase) entity;
2240 if (descriptionElement.getFeature().equals(Feature.PROTOLOGUE())) {
2241 element = new ProtologueElement(this, parentElement,
2242 descriptionElement, removeListener, style);
2243 }
2244 }
2245
2246 if (element == null) {
2247 StoreUtil
2248 .errorDialog(
2249 "No element for entity",
2250 this,
2251 "Could not generate element for entity. "
2252 + "Looks like the case is not handled already. Check implementation. Entity: "
2253 + entity, null);
2254 }
2255
2256 if (backgroundColor != null && !backgroundColor.isDisposed()) {
2257 element.setBackgroundColor(backgroundColor);
2258 }
2259
2260 adapt(element);
2261 parentElement.addElement(element);
2262 return element;
2263 }
2264
2265 /**
2266 * <p>
2267 * createSelectionElement
2268 * </p>
2269 *
2270 * @param selectionType
2271 * a
2272 * {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.SelectionType}
2273 * object.
2274 * @param parentElement
2275 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
2276 * object.
2277 * @param labelString
2278 * a {@link java.lang.String} object.
2279 * @param selectionType
2280 * @param selection
2281 * a {@link eu.etaxonomy.cdm.model.common.IAnnotatableEntity}
2282 * object.
2283 * @param style
2284 * a int.
2285 * @param conversation
2286 * a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
2287 * object.
2288 * @return a
2289 * {@link eu.etaxonomy.taxeditor.ui.selection.AbstractSelectionElement}
2290 * object.
2291 */
2292 public AbstractSelectionElement createSelectionElement(
2293 SelectionType selectionType, ConversationHolder conversation,
2294 ICdmFormElement parentElement, String labelString,
2295 ICdmBase selection, int mode, int style) {
2296 AbstractSelectionElement element = null;
2297
2298 IAnnotatableEntity entity = (IAnnotatableEntity) HibernateProxyHelper
2299 .deproxy(selection);
2300
2301 switch (selectionType) {
2302 case AGENT:
2303 element = new AgentSelectionElement(this, conversation,
2304 parentElement, labelString, (TeamOrPersonBase) entity,
2305 mode, style);
2306 break;
2307 case PERSON:
2308 element = new PersonSelectionElement(this, conversation,
2309 parentElement, labelString, (Person) entity, mode, style);
2310 break;
2311 case TEAM:
2312 element = new TeamSelectionElement(this, conversation,
2313 parentElement, labelString, (Team) entity, mode, style);
2314 break;
2315 case AUTHOR_TEAM:
2316 element = new NomenclaturalAuthorTeamSelectionElement(this,
2317 conversation, parentElement, labelString, (Team) entity,
2318 mode, style);
2319 break;
2320 case INSTITUTION:
2321 element = new InstitutionSelectionElement(this, conversation,
2322 parentElement, labelString, (Institution) entity, mode,
2323 style);
2324 break;
2325 case NAME:
2326 element = new NameSelectionElement(this, conversation,
2327 parentElement, labelString, (TaxonNameBase) entity, mode,
2328 style);
2329 break;
2330 case REFERENCE:
2331 element = new ReferenceSelectionElement(this, conversation,
2332 parentElement, labelString, (Reference) entity, mode, style);
2333 break;
2334 case TAXON_BASE:
2335 element = new TaxonBaseSelectionElement(this, conversation,
2336 parentElement, labelString, (TaxonBase) entity, mode, style);
2337 break;
2338 case TAXON:
2339 element = new TaxonSelectionElement(this, conversation,
2340 parentElement, labelString, (Taxon) entity, mode, style);
2341 break;
2342 case SYNONYM:
2343 element = new SynonymSelectionElement(this, conversation,
2344 parentElement, labelString, (Synonym) entity, mode, style);
2345 break;
2346 case DERIVED_UNIT:
2347 element = new DerivedUnitBaseSelectionElement(this, conversation,
2348 parentElement, labelString, (DerivedUnitBase) entity, mode,
2349 style);
2350 break;
2351 case FIELD_OBSERVATION:
2352 element = new FieldObservationSelectionElement(this, conversation,
2353 parentElement, labelString, (FieldObservation) entity,
2354 mode, style);
2355 break;
2356 case FEATURE_TREE:
2357 element = new FeatureTreeSelectionElement(this, conversation,
2358 parentElement, labelString, (FeatureTree) entity, mode,
2359 style);
2360 break;
2361 case CLASSIFICATION:
2362 element = new ClassificationSelectionElement(this, conversation,
2363 parentElement, labelString, (Classification) entity, mode,
2364 style);
2365 break;
2366 case TAXON_NODE:
2367 element = new TaxonNodeSelectionElement(this, conversation,
2368 parentElement, labelString, (TaxonNode) entity, mode, style);
2369 break;
2370 case COLLECTION:
2371 element = new CollectionSelectionElement(this, conversation,
2372 parentElement, labelString, (Collection) entity, mode,
2373 style);
2374 break;
2375 case FEATURE:
2376 element = new FeatureSelectionElement(this, conversation,
2377 parentElement, labelString, (Feature) entity, mode, style);
2378 break;
2379 case POLYTOMOUS_KEY:
2380 element = new PolytomousKeySelectionElement(this, conversation,
2381 parentElement, labelString, (PolytomousKey) entity, mode,
2382 style);
2383 break;
2384 case POLYTOMOUS_KEY_NODE:
2385 element = new PolytomousKeyNodeSelectionElement(this, conversation,
2386 parentElement, labelString, (PolytomousKeyNode) entity,
2387 mode, style);
2388 break;
2389 case USER:
2390 element = new UserSelectionElement(this, conversation,
2391 parentElement, labelString, (User) entity, mode, style);
2392 break;
2393 case GROUP:
2394 element = new GroupSelectionElement(this, conversation,
2395 parentElement, labelString, (Group) entity, mode, style);
2396 break;
2397 default:
2398 new RuntimeException(
2399 "There is no selection composite for the desired selection type.");
2400 break;
2401 }
2402
2403 adapt(element);
2404 parentElement.addElement(element);
2405 return element;
2406 }
2407
2408 /**
2409 * <p>
2410 * createNamedAreaSelectionElement
2411 * </p>
2412 *
2413 * @param parentElement
2414 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
2415 * object.
2416 * @param conversation
2417 * a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
2418 * object.
2419 * @param labelString
2420 * a {@link java.lang.String} object.
2421 * @param selection
2422 * a {@link eu.etaxonomy.cdm.model.location.NamedArea} object.
2423 * @param style
2424 * a int.
2425 * @return a
2426 * {@link eu.etaxonomy.taxeditor.ui.selection.NamedAreaSelectionElement}
2427 * object.
2428 */
2429 public NamedAreaSelectionElement createNamedAreaSelectionElement(
2430 ICdmFormElement parentElement, ConversationHolder conversation,
2431 String labelString, NamedArea selection, int style) {
2432 NamedAreaSelectionElement element = new NamedAreaSelectionElement(this,
2433 conversation, parentElement, labelString, selection,
2434 AbstractSelectionElement.NOTHING, style);
2435 adapt(element);
2436 parentElement.addElement(element);
2437 return element;
2438 }
2439
2440 /** {@inheritDoc} */
2441 public LabelElement createLabel(ICdmFormElement parentElement, String text) {
2442 LabelElement labelElement = new LabelElement(this, parentElement, text);
2443 adapt(labelElement);
2444 parentElement.addElement(labelElement);
2445 return labelElement;
2446 }
2447
2448 /**
2449 * <p>
2450 * Getter for the field <code>selectionProvider</code>.
2451 * </p>
2452 *
2453 * @return a {@link org.eclipse.jface.viewers.ISelectionProvider} object.
2454 */
2455 public ISelectionProvider getSelectionProvider() {
2456 return selectionProvider;
2457 }
2458
2459 /**
2460 * <p>
2461 * createDetailedDescriptionDetailElement
2462 * </p>
2463 *
2464 * @param parentElement
2465 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
2466 * object.
2467 * @param entity
2468 * a
2469 * {@link eu.etaxonomy.cdm.model.description.DescriptionElementBase}
2470 * object.
2471 * @param style
2472 * a int.
2473 * @return a
2474 * {@link eu.etaxonomy.taxeditor.ui.section.description.detail.AbstractDetailedDescriptionDetailElement}
2475 * object.
2476 */
2477 public AbstractDetailedDescriptionDetailElement createDetailedDescriptionDetailElement(
2478 ICdmFormElement parentElement, DescriptionElementBase entity,
2479 int style) {
2480 AbstractDetailedDescriptionDetailElement detailedDescriptionElement = null;
2481
2482 if (entity instanceof CategoricalData) {
2483 detailedDescriptionElement = new CategoricalDataDetailElement(this,
2484 parentElement, (CategoricalData) entity, style);
2485 } else if (entity instanceof CommonTaxonName) {
2486 detailedDescriptionElement = new CommonNameDetailElement(this,
2487 parentElement, (CommonTaxonName) entity, style);
2488 } else if (entity instanceof Distribution) {
2489 detailedDescriptionElement = new DistributionDetailElement(this,
2490 parentElement, (Distribution) entity, style);
2491 } else if (entity instanceof IndividualsAssociation) {
2492 detailedDescriptionElement = new IndividualsAssociationDetailElement(
2493 this, parentElement, (IndividualsAssociation) entity, style);
2494 } else if (entity instanceof QuantitativeData) {
2495 detailedDescriptionElement = new QuantitativeDataDetailElement(
2496 this, parentElement, (QuantitativeData) entity, style);
2497 } else if (entity instanceof TaxonInteraction) {
2498 detailedDescriptionElement = new TaxonInteractionDetailElement(
2499 this, parentElement, (TaxonInteraction) entity, style);
2500 } else if (entity instanceof TextData) {
2501 detailedDescriptionElement = new TextDataDetailElement(this,
2502 parentElement, (TextData) entity, style);
2503 } else {
2504 throw new IllegalStateException(
2505 "There is no interface for the given description element");
2506 }
2507 adapt(detailedDescriptionElement);
2508 parentElement.addElement(detailedDescriptionElement);
2509 return detailedDescriptionElement;
2510
2511 }
2512
2513 /**
2514 * Creates a styled text as a part of the form.
2515 *
2516 * @param parent
2517 * the text parent
2518 * @param value
2519 * the text initial value
2520 * @param style
2521 * the text style
2522 * @return the text widget
2523 */
2524 public StyledText createStyledText(Composite parent, String value, int style) {
2525 StyledText text = new StyledText(parent, getBorderStyle() | style
2526 | getOrientation());
2527 if (value != null)
2528 text.setText(value);
2529 text.setForeground(getColors().getForeground());
2530 text.setBackground(getColors().getBackground());
2531 // text.addFocusListener(visibilityHandler);
2532 return text;
2533 }
2534 }