Merge branch 'release/3.12.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / CdmFormFactory.java
index 705d33e033871fb39b0162e33f8a9dd4de52464d..8972e222ab36c560bd679d28ab9eef1199fde5d5 100644 (file)
@@ -37,6 +37,7 @@ import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Section;
 import org.eclipse.ui.internal.forms.widgets.FormFonts;
+import org.joda.time.DateTime;
 import org.joda.time.Partial;
 import org.springframework.security.core.GrantedAuthority;
 
@@ -56,10 +57,13 @@ import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.IEnumTerm;
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
+import eu.etaxonomy.cdm.model.common.Identifier;
+import eu.etaxonomy.cdm.model.common.LSID;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.LanguageString;
 import eu.etaxonomy.cdm.model.common.Marker;
 import eu.etaxonomy.cdm.model.common.TermType;
+import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.common.TimePeriod;
 import eu.etaxonomy.cdm.model.common.User;
 import eu.etaxonomy.cdm.model.common.VersionableEntity;
@@ -71,8 +75,11 @@ import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.description.Feature;
 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
 import eu.etaxonomy.cdm.model.description.KeyStatement;
+import eu.etaxonomy.cdm.model.description.MeasurementUnit;
 import eu.etaxonomy.cdm.model.description.QuantitativeData;
+import eu.etaxonomy.cdm.model.description.State;
 import eu.etaxonomy.cdm.model.description.StateData;
+import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
 import eu.etaxonomy.cdm.model.description.TaxonInteraction;
 import eu.etaxonomy.cdm.model.description.TextData;
@@ -84,6 +91,7 @@ import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
 import eu.etaxonomy.cdm.model.media.Rights;
+import eu.etaxonomy.cdm.model.molecular.DnaSample;
 import eu.etaxonomy.cdm.model.name.NameRelationship;
 import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
@@ -95,10 +103,12 @@ import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
+import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
+import eu.etaxonomy.taxeditor.ui.combo.VocabularyComboElement;
 import eu.etaxonomy.taxeditor.ui.element.MinMaxTextSection.UnitType;
+import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
 import eu.etaxonomy.taxeditor.ui.openurl.IOpenUrlEnabled;
 import eu.etaxonomy.taxeditor.ui.openurl.OpenUrlSelectorElement;
 import eu.etaxonomy.taxeditor.ui.password.EditPasswordElement;
@@ -160,7 +170,8 @@ import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.group.GroupDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.group.MemberDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.key.GeographicalScopeDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.identifier.IdentifierDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.identifier.IdentifierDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyNodeDetailElement;
@@ -168,7 +179,8 @@ import eu.etaxonomy.taxeditor.ui.section.key.PolytomousKeyNodeDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.key.ScopeRestrictionSection;
 import eu.etaxonomy.taxeditor.ui.section.key.TaxonomicScopeSection;
 import eu.etaxonomy.taxeditor.ui.section.media.ImageFileElement;
-import eu.etaxonomy.taxeditor.ui.section.media.MediaElement;
+import eu.etaxonomy.taxeditor.ui.section.media.MediaDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.media.MediaMetaElement;
 import eu.etaxonomy.taxeditor.ui.section.media.MediaRepresentationElement;
 import eu.etaxonomy.taxeditor.ui.section.media.MediaRepresentationPartElement;
 import eu.etaxonomy.taxeditor.ui.section.media.MediaRepresentationPartSection;
@@ -198,8 +210,6 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectionDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.CurrentDeterminationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitFacadeDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitFacadeDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailElement;
@@ -213,10 +223,19 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailElemen
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.GeoScopeDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.GeoScopePolyKeyDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.NamedAreaDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.OriginalLabelDataSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.SourceCollectionDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenCollectionDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenCollectionDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenHierarchyDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenHierarchyDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.association.DerivedUnitTypeDesignationElement;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.association.DerivedUnitTypeDesignationSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.association.TaxonAssociationDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.association.TaxonAssociationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.derivedUnit.PreservedSpecimenCurrentDeterminationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.derivedUnit.PreservedSpecimenDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.derivedUnit.PreservedSpecimenDetailSection;
@@ -226,18 +245,27 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.derivedUnit.PreservedSpecime
 import eu.etaxonomy.taxeditor.ui.section.occurrence.derivedUnit.PreservedSpecimenGeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.derivedUnit.PreservedSpecimenGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.derivedUnit.PreservedSpecimenSourceCollectionDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AbstractSampleDesignationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationCloningDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationCloningDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationGelPhotoCollectionDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationGelPhotoDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationGeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationPrimerDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationPrimerDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.CurrentSampleDesignationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaQualityDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaQualityDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSampleGeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSampleGeneralDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSamplePreparationPreservationDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSamplePreparationPreservationSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.PrimerGeneralDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationHistoryDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationTextDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceContigFileCollectionDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceGeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceGeneralDetailSection;
@@ -248,12 +276,8 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadGeneralDetailS
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadPherogramCollectionDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.media.LivingPlantPhotoGeneralDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.media.LivingPlantPhotoGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.media.SpecimenScanGeneralDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.media.SpecimenScanGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailElement;
@@ -291,10 +315,19 @@ import eu.etaxonomy.taxeditor.ui.section.userecords.UseRecordDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.FeatureDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.MeasurementUnitCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.MeasurementUnitCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.NamedAreaDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.RecommendedModifierVocabulariesCollectionSection;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.RecommendedModifierVocabulariesElement;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.StateVocabularyCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.StateVocabularyCollectionSection;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.StatisticalMeasureCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.StatisticalMeasureCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
+import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElementWithAbbreviatedTitle;
 import eu.etaxonomy.taxeditor.ui.selection.NomenclaturalAuthorTeamSelectionElement;
 import eu.etaxonomy.taxeditor.ui.selection.TaxonNodeSelectionElement;
 
@@ -437,7 +470,7 @@ public class CdmFormFactory extends FormToolkit {
         if (selectionProvider != null) {
             selectionProvider.removeSelectionChangedListener(selectionArbitrator);
         } else {
-            AbstractUtility.error(this.getClass(),
+            MessagingUtils.error(this.getClass(),
                     "Tried to destroy a selection listener from this factories listeners but was null", null);
         }
     }
@@ -453,7 +486,7 @@ public class CdmFormFactory extends FormToolkit {
      *            {@link eu.etaxonomy.taxeditor.ui.element.AbstractCdmFormElement}
      *            object.
      */
-    public void adapt(AbstractCdmFormElement formElement) {
+    public void adapt(ICdmFormElement formElement) {
         formElement.setPropertyChangeListeners(propertyChangeListeners);
     }
 
@@ -527,31 +560,6 @@ public class CdmFormFactory extends FormToolkit {
         return this.createLabel(parent, null);
     }
 
-    /**
-     * <p>
-     * createMultilineTextWithLabel
-     * </p>
-     *
-     * @param labelString
-     *            a {@link java.lang.String} object.
-     * @param textHeight
-     *            a int.
-     * @param style
-     *            a int.
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement}
-     *         object.
-     */
-    public TextWithLabelElement createMultilineTextWithLabel(ICdmFormElement parentElement, String labelString,
-            int textHeight, int style) {
-        TextWithLabelElement element = new TextWithLabelElement(this, parentElement, labelString, "", textHeight, style);
-        adapt(element);
-        parentElement.addElement(element);
-        return element;
-    }
-
     /**
      * <p>
      * createMultiLanguageTextElement
@@ -650,7 +658,24 @@ public class CdmFormFactory extends FormToolkit {
             initialText = "";
         }
 
-        TextWithLabelElement element = new TextWithLabelElement(this, parentElement, labelString, initialText, null, textLimit, style);
+        TextWithLabelElement element = new TextWithLabelElement(this, parentElement, labelString, initialText, null,
+                textLimit, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+    public TextWithLabelElement createMultiLineTextWithLabel(ICdmFormElement parentElement, String labelString,
+            int textHeight, int style) {
+        TextWithLabelElement element = new TextWithLabelElement(this, parentElement, labelString, "", textHeight, true, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+    public LsidWithExceptionLabelElement createLsidWithExceptionLabelElement(ICdmFormElement parentElement, String labelString,
+            LSID initialLsid, int style) {
+        LsidWithExceptionLabelElement element = new LsidWithExceptionLabelElement(this, parentElement, labelString, initialLsid, null, style);
         adapt(element);
         parentElement.addElement(element);
         return element;
@@ -725,79 +750,15 @@ public class CdmFormFactory extends FormToolkit {
                return element;
        }
 
-    /**
-     * <p>
-     * createLanguageStringWithLabelElement
-     * </p>
-     *
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     * @param labelString
-     *            a {@link java.lang.String} object.
-     * @param languageString
-     *            a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
-     * @param style
-     *            a int.
-     * @return a
-     *         {@link eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement}
-     *         object.
-     */
     public LanguageStringWithLabelElement createLanguageStringWithLabelElement(ICdmFormElement parentElement,
             String labelString, LanguageString languageString, int style) {
-        LanguageStringWithLabelElement element = new LanguageStringWithLabelElement(this, parentElement, labelString,
-                languageString, style);
-        adapt(element);
-        parentElement.addElement(element);
-        return element;
+        return createLanguageStringWithLabelElement(parentElement, labelString, languageString, null, false, style);
     }
 
-    /**
-     * <p>
-     * createLanguageStringWithLabelElement
-     * </p>
-     *
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     * @param labelString
-     *            a {@link java.lang.String} object.
-     * @param languageString
-     *            a {@link eu.etaxonomy.cdm.model.common.LanguageString} object.
-     * @param height
-     *            a int.
-     * @param style
-     *            a int.
-     * @return a
-     *         {@link eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement}
-     *         object.
-     */
     public LanguageStringWithLabelElement createLanguageStringWithLabelElement(ICdmFormElement parentElement,
-            String labelString, LanguageString languageString, int height, int style) {
+            String labelString, LanguageString languageString, Integer height, boolean isMultiLine, int style) {
         LanguageStringWithLabelElement element = new LanguageStringWithLabelElement(this, parentElement, labelString,
-                languageString, height, style);
-        adapt(element);
-        parentElement.addElement(element);
-        return element;
-    }
-
-    /**
-     * <p>
-     * createTextElement
-     * </p>
-     *
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     * @param initialText
-     *            a {@link java.lang.String} object.
-     * @param style
-     *            a int.
-     * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement}
-     *         object.
-     */
-    public TextWithLabelElement createTextElement(ICdmFormElement parentElement, String initialText, int style) {
-        TextWithLabelElement element = new TextWithLabelElement(this, parentElement, null, initialText, null, style);
+                languageString, height, isMultiLine, style);
         adapt(element);
         parentElement.addElement(element);
         return element;
@@ -827,74 +788,69 @@ public class CdmFormFactory extends FormToolkit {
         parentElement.addElement(element);
         return element;
     }
-
     /**
-     * <p>
-     * createTermComboElement
-     * </p>
-     *
-     * @param termComboType
-     *            a
-     *            {@link eu.eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.TermComboType}
-     *            object.
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     * @param labelString
-     *            a {@link java.lang.String} object.
-     * @param selection
-     *            a {@link eu.etaxonomy.cdm.model.common.DefinedTermBase}
-     *            object.
-     * @param style
-     *            a int.
-     * @return a {@link eu.etaxonomy.taxeditor.ui.combo.TermComboElement}
-     *         object.
+     * @deprecated Use {@link #createDefinedTermComboElement(TermType, ICdmFormElement, String, DefinedTermBase, int)} instead
      */
-
+    @Deprecated
     public <T extends DefinedTermBase> TermComboElement<T> createTermComboElement(Class<T> termComboType,
             ICdmFormElement parentElement, String labelString, T selection, int style) {
         TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termComboType, labelString,
-                selection, style);
+                selection, true,  style);
         adapt(element);
         parentElement.addElement(element);
         return element;
     }
 
-       /**
-        * <p>
-        * createTermComboElement
-        * </p>
-        *
-        * @param termComboType
-        *            a
-        *            {@link eu.eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.TermComboType}
-        *            object.
-        * @param parentElement
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-        *            object.
-        * @param labelString
-        *            a {@link java.lang.String} object.
-        * @param selection
-        *            a {@link eu.etaxonomy.cdm.model.common.DefinedTermBase}
-        *            object.
-        * @param style
-        *            a int.
-        * @return a {@link eu.etaxonomy.taxeditor.ui.combo.TermComboElement}
-        *         object.
-        */
+    public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
+            TermType termType,
+            ICdmFormElement parentElement,
+            String labelString,
+            T selection,
+            int style) {
+        TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termType, labelString, selection, true, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
 
-       public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
+    public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
                        TermType termType,
                        ICdmFormElement parentElement,
                        String labelString,
                        T selection,
+                       boolean addEmptyElement,
                        int style) {
-               TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termType, labelString, selection, style);
+               TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termType, labelString, selection, addEmptyElement, style);
                adapt(element);
                parentElement.addElement(element);
                return element;
        }
 
+    public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
+            TermVocabulary<?> termVocabulary,
+            ICdmFormElement parentElement,
+            String labelString,
+            T selection,
+            int style) {
+        TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termVocabulary, labelString, selection, true, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+       public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
+               TermVocabulary<?> termVocabulary,
+               ICdmFormElement parentElement,
+               String labelString,
+               T selection,
+               boolean addEmptyElement,
+               int style) {
+           TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termVocabulary, labelString, selection, addEmptyElement, style);
+           adapt(element);
+           parentElement.addElement(element);
+           return element;
+       }
+
     /**
      * <p>
      * createEnumComboElement
@@ -921,6 +877,14 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+       public <TERM extends DefinedTermBase<TERM>, VOC extends TermVocabulary<TERM>> VocabularyComboElement<TERM, VOC> createVocabularyComboElement(
+               TermType termType, String label, VOC selection, ICdmFormElement parentElement, int style) {
+           VocabularyComboElement<TERM, VOC> element = new VocabularyComboElement<TERM, VOC>(this, parentElement, termType, label, selection, style);
+           adapt(element);
+           parentElement.addElement(element);
+           return element;
+       }
+
     /**
      * <p>
      * createBrowserElement
@@ -1296,7 +1260,7 @@ public class CdmFormFactory extends FormToolkit {
      */
     public void removeSelectionListener(SelectionListener listener) {
         if (listener == null) {
-            AbstractUtility.error(this.getClass(),
+            MessagingUtils.error(this.getClass(),
                     "Tried to remove a selection listener from this factories listeners but was null", null);
         } else {
             selectionListenerList.remove(listener);
@@ -1437,8 +1401,8 @@ public class CdmFormFactory extends FormToolkit {
      *            object.
      * @return a {@link eu.etaxonomy.taxeditor.ui.section.EmptyElement} object.
      */
-    public EmptyElement createEmptyElement(ICdmFormElement parentElement) {
-        EmptyElement element = new EmptyElement(this, parentElement, null, SWT.NULL);
+    public EmptyElement createEmptyElement(ICdmFormElement parentElement, String emptyText) {
+        EmptyElement element = new EmptyElement(this, parentElement, emptyText, SWT.NULL);
         adapt(element);
         parentElement.addElement(element);
         return element;
@@ -1591,8 +1555,8 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public NonViralNameDetailSection createNonViralNameDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        NonViralNameDetailSection section = new NonViralNameDetailSection(this, conversation, parentElement, selectionProvider, style);
+    public NonViralNameDetailSection createNonViralNameDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, boolean nameChoosable, int style){
+        NonViralNameDetailSection section = new NonViralNameDetailSection(this, conversation, parentElement, selectionProvider, nameChoosable, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
@@ -1603,12 +1567,6 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public DerivedUnitFacadeDetailSection createDerivedUnitFacadeDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        DerivedUnitFacadeDetailSection section = new DerivedUnitFacadeDetailSection(this, conversation, parentElement, selectionProvider, style);
-        addAndAdaptSection(parentElement, section);
-        return section;
-    }
-
     public FieldUnitDetailSection createFieldUnitDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         FieldUnitDetailSection section = new FieldUnitDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
@@ -1621,12 +1579,36 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public SpecimenHierarchyDetailSection createSpecimenHierarchyDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        SpecimenHierarchyDetailSection section = new SpecimenHierarchyDetailSection(this, conversation, parentElement, selectionProvider, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public DerivedUnitBaseDetailSection createDerivedUnitBaseDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         DerivedUnitBaseDetailSection section = new DerivedUnitBaseDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
 
+    public DerivedUnitTypeDesignationSection createDerivedUnitTypeDesignationSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        DerivedUnitTypeDesignationSection section = new DerivedUnitTypeDesignationSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public TaxonAssociationDetailSection createTaxonAssociationDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        TaxonAssociationDetailSection section = new TaxonAssociationDetailSection(this, conversation, parentElement, selectionProvider, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public OriginalLabelDataSection createOriginalLabelDataSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        OriginalLabelDataSection section = new OriginalLabelDataSection(this, conversation, parentElement, selectionProvider, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public NaturalLanguageSection createNaturalLanguageSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         NaturalLanguageSection section = new NaturalLanguageSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
@@ -1699,6 +1681,12 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public DnaSamplePreparationPreservationSection createDnaSamplePreparationPreservationSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        DnaSamplePreparationPreservationSection section = new DnaSamplePreparationPreservationSection(this, conversation, parentElement, selectionProvider, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public DnaQualityDetailSection createDnaQualityDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         DnaQualityDetailSection section = new DnaQualityDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
@@ -1759,18 +1747,6 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public SpecimenScanGeneralDetailSection createSpecimenScanGeneralDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        SpecimenScanGeneralDetailSection section = new SpecimenScanGeneralDetailSection(this, conversation, parentElement, selectionProvider, style);
-        addAndAdaptSection(parentElement, section);
-        return section;
-    }
-
-    public LivingPlantPhotoGeneralDetailSection createLivingPlantPhotoGeneralDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        LivingPlantPhotoGeneralDetailSection section = new LivingPlantPhotoGeneralDetailSection(this, conversation, parentElement, selectionProvider, style);
-        addAndAdaptSection(parentElement, section);
-        return section;
-    }
-
     public MediaSpecimenGeneralDetailSection createMediaSpecimenGeneralDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         MediaSpecimenGeneralDetailSection section = new MediaSpecimenGeneralDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
@@ -1801,6 +1777,12 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public SampleDesignationDetailSection createSampleDesignationDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        SampleDesignationDetailSection section = new SampleDesignationDetailSection(this, conversation, parentElement, selectionProvider, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public PreservedSpecimenDeterminationDetailSection createPreservedSpecimenDeterminationDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         PreservedSpecimenDeterminationDetailSection section = new PreservedSpecimenDeterminationDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
@@ -1958,12 +1940,6 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
-    public DerivedUnitFacadeDetailElement createDerivedUnitFacadeDetailElement(ICdmFormElement parentElement){
-        DerivedUnitFacadeDetailElement element = new DerivedUnitFacadeDetailElement(this, parentElement);
-        addAndAdaptElement(parentElement, element);
-        return element;
-    }
-
     public NonViralNameDetailElement createNonViralNameDetailElement(ICdmFormElement parentElement){
         NonViralNameDetailElement element = new NonViralNameDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
@@ -2037,6 +2013,12 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public TaxonAssociationDetailElement createTaxonAssociationDetailElement(ICdmFormElement parentElement){
+        TaxonAssociationDetailElement element = new TaxonAssociationDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
     public PreservedSpecimenGeneralDetailElement createPreservedSpecimenGeneralDetailElement(ICdmFormElement parentElement){
         PreservedSpecimenGeneralDetailElement element = new PreservedSpecimenGeneralDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
@@ -2055,6 +2037,12 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public DnaSamplePreparationPreservationDetailElement createDnaSamplePreparationPreservationDetailElement(ICdmFormElement parentElement){
+        DnaSamplePreparationPreservationDetailElement element = new DnaSamplePreparationPreservationDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
     public DnaQualityDetailElement createDnaQualityDetailElement(ICdmFormElement parentElement){
         DnaQualityDetailElement element = new DnaQualityDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
@@ -2097,14 +2085,8 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
-    public SpecimenScanGeneralDetailElement createSpecimenScanGeneralDetailElement(ICdmFormElement parentElement){
-        SpecimenScanGeneralDetailElement element = new SpecimenScanGeneralDetailElement(this, parentElement);
-        addAndAdaptElement(parentElement, element);
-        return element;
-    }
-
-    public LivingPlantPhotoGeneralDetailElement createLivingPlantPhotoGeneralDetailElement(ICdmFormElement parentElement){
-        LivingPlantPhotoGeneralDetailElement element = new LivingPlantPhotoGeneralDetailElement(this, parentElement);
+    public AmplificationGelPhotoDetailElement createAmplificationGelPhotoDetailElement(ICdmFormElement parentElement){
+        AmplificationGelPhotoDetailElement element = new AmplificationGelPhotoDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
@@ -2115,6 +2097,11 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public MediaDetailElement createMediaDetailElement(ICdmFormElement parentElement){
+        MediaDetailElement mediaDetailElement = new MediaDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, mediaDetailElement);
+        return mediaDetailElement;
+    }
 
     public GatheringEventDetailElement createGatheringEventDetailElement(ICdmFormElement parentElement) {
         GatheringEventDetailElement element = new GatheringEventDetailElement(this, parentElement);
@@ -2128,6 +2115,11 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public SpecimenHierarchyDetailElement createSpecimenHierarchyDetailElement(ICdmFormElement parentElement) {
+        SpecimenHierarchyDetailElement element = new SpecimenHierarchyDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
 
     public DerivedUnitBaseDetailElement createDerivedUnitBaseDetailElement(ICdmFormElement parentElement) {
         DerivedUnitBaseDetailElement element = new DerivedUnitBaseDetailElement(this, parentElement);
@@ -2135,6 +2127,12 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public OriginalLabelDataElement createOriginalLabelDataElement(ICdmFormElement parentElement) {
+        OriginalLabelDataElement element = new OriginalLabelDataElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
     public PreservedSpecimenDetailElement createPreservedSpecimenDetailElement(ICdmFormElement parentElement) {
         PreservedSpecimenDetailElement element = new PreservedSpecimenDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
@@ -2153,6 +2151,12 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public SampleDesignationDetailElement createSampleDesignationDetailElement(ICdmFormElement parentElement) {
+        SampleDesignationDetailElement element = new SampleDesignationDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
     /**
      * @param parentElement
      * @param element
@@ -2301,12 +2305,60 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public StateVocabularyCollectionSection createStateVocabulariesSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        StateVocabularyCollectionSection section = new StateVocabularyCollectionSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public RecommendedModifierVocabulariesCollectionSection createRecommendedModifierVocabulariesCollectionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        RecommendedModifierVocabulariesCollectionSection section = new RecommendedModifierVocabulariesCollectionSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public MeasurementUnitCollectionSection createMeasurementUnitCollectionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        MeasurementUnitCollectionSection section = new MeasurementUnitCollectionSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public StatisticalMeasureCollectionSection createStatisticalMeasureCollectionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        StatisticalMeasureCollectionSection section = new StatisticalMeasureCollectionSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public CollectingAreasDetailSection createCollectingAreasDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
         CollectingAreasDetailSection section = new CollectingAreasDetailSection(this, conversation, parentElement, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
 
+    public GeoScopeDetailSection createGeoScopeDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        GeoScopeDetailSection section = new GeoScopeDetailSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public GeoScopePolyKeyDetailSection createGeoScopePolyKeyDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        GeoScopePolyKeyDetailSection section = new GeoScopePolyKeyDetailSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public IdentifierDetailSection createIdentifierDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        IdentifierDetailSection section = new IdentifierDetailSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public CurrentSampleDesignationDetailSection createCurrentSampleDesignationDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        CurrentSampleDesignationDetailSection section = new CurrentSampleDesignationDetailSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public CurrentDeterminationDetailSection createCurrentDeterminationDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
         CurrentDeterminationDetailSection section = new CurrentDeterminationDetailSection(this, conversation, parentElement, style);
         addAndAdaptSection(parentElement, section);
@@ -2319,6 +2371,12 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public SampleDesignationHistoryDetailSection createSampleDesignationHistoryDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        SampleDesignationHistoryDetailSection section = new SampleDesignationHistoryDetailSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public DeterminationHistoryDetailSection createDeterminationHistoryDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
         DeterminationHistoryDetailSection section = new DeterminationHistoryDetailSection(this, conversation, parentElement, style);
         addAndAdaptSection(parentElement, section);
@@ -2349,12 +2407,6 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public GeographicalScopeDetailSection createGeographicalScopeDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
-        GeographicalScopeDetailSection section = new GeographicalScopeDetailSection(this, conversation, parentElement, style);
-        addAndAdaptSection(parentElement, section);
-        return section;
-    }
-
     public ScopeRestrictionSection createScopeRestrictionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
         ScopeRestrictionSection section = new ScopeRestrictionSection(this, conversation, parentElement, style);
         addAndAdaptSection(parentElement, section);
@@ -2385,28 +2437,6 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    /**
-     * <p>
-     * createEntityCollectionElement
-     * </p>
-     *
-     * @param removeListener
-     *            a {@link org.eclipse.swt.events.SelectionListener} object.
-     * @param style
-     *            a int.
-     * @param parentElement
-     *            a
-     *            {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection}
-     *            object.
-     * @param versionableEntity
-     *            a {@link eu.etaxonomy.cdm.model.common.IVersionableEntity}
-     *            object.
-     * @param backgroundColor
-     *            a {@link org.eclipse.swt.graphics.Color} object.
-     * @return a
-     *         {@link eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement}
-     *         object.
-     */
     public AbstractEntityCollectionElement createEntityCollectionElement(AbstractFormSection parentElement,
             Object versionableEntity, SelectionListener removeListener, Color backgroundColor, int style) {
         AbstractEntityCollectionElement element = null;
@@ -2424,7 +2454,7 @@ public class CdmFormFactory extends FormToolkit {
         } else if (entity instanceof Marker) {
             element = new MarkerElement(this, parentElement, (Marker) entity, removeListener, style);
         } else if (entity instanceof Media) {
-            element = new MediaElement(this, parentElement, (Media) entity, removeListener, style);
+            element = new MediaMetaElement(this, parentElement, (Media) entity, removeListener, true, style);
         } else if (entity instanceof MediaRepresentation) {
             element = new MediaRepresentationElement(this, parentElement, (MediaRepresentation) entity, removeListener,
                     style);
@@ -2444,28 +2474,26 @@ public class CdmFormFactory extends FormToolkit {
         } else if (entity instanceof IdentifiableSource) {
             element = new IdentifiableSourceElement(this, parentElement, (IdentifiableSource) entity, removeListener,
                     style);
-               } else if (entity instanceof DefinedTerm) {
-                       switch(((DefinedTerm)entity).getTermType()) {
-                               case Scope:
-                                       element = new ScopeElement(this,
-                                                       parentElement,
-                                                       (DefinedTerm) entity,
-                                                       removeListener,
-                                                       style);
-                                       break;
-                               case Modifier:
-                                       element = new ModifierElement(this,
-                                                       parentElement,
-                                                       (DefinedTerm) entity,
-                                                       removeListener,
-                                                       style);
-                                       break;
-                               default:
-                                       //FIXME : Actually we should through an exception here
-                                       element = null;
-                                       break;
-
-                       }
+        } else if (entity instanceof DefinedTerm) {
+            switch(((DefinedTerm)entity).getTermType()) {
+            case Scope:
+                element = new ScopeElement(this,
+                        parentElement,
+                        (DefinedTerm) entity,
+                        removeListener,
+                        style);
+                break;
+            case Modifier:
+                element = new ModifierElement(this,
+                        parentElement,
+                        (DefinedTerm) entity,
+                        removeListener,
+                        style);
+                break;
+            default:
+                break;
+
+            }
         } else if (entity instanceof Reference) {
             if(parentElement instanceof SequenceReferenceCollectionDetailSection){
                 element = new SequenceReferenceCollectionDetailElement(this, parentElement, (Reference) entity, removeListener, style);
@@ -2483,31 +2511,37 @@ public class CdmFormFactory extends FormToolkit {
             element = new SynonymRelationshipDetailElement(this, parentElement, (SynonymRelationship) entity, removeListener,
                     style);
         } else if (entity instanceof SpecimenTypeDesignation) {
-            element = new SpecimenTypeDesignationElement(this, parentElement, (SpecimenTypeDesignation) entity,
-                    removeListener, style);
+            if(parentElement instanceof DerivedUnitTypeDesignationSection){
+                element = new DerivedUnitTypeDesignationElement(this, parentElement, (SpecimenTypeDesignation) entity,
+                        removeListener, style);
+            }
+            else{
+                element = new SpecimenTypeDesignationElement(this, parentElement, (SpecimenTypeDesignation) entity,
+                        removeListener, style);
+            }
         } else if (entity instanceof StateData) {
             element = new StateDataElement(this, parentElement, (StateData) entity, removeListener, style);
         } else if (entity instanceof StatisticalMeasurementValue) {
             element = new StatisticalMeasurementValueElement(this, parentElement, (StatisticalMeasurementValue) entity,
                     removeListener, style);
         } else if (entity instanceof DerivedUnit) {
-               switch(((DerivedUnit)entity).getRecordBasis()) {
-                               case LivingSpecimen:
-                               case PreservedSpecimen:
-                               case OtherSpecimen:
-                                       element = new SpecimenCollectionDetailElement(this,
-                                                               parentElement,
-                                                               (DerivedUnit) entity,
-                                                               removeListener,
-                                                               style);
-                                       break;
-                               default:
-                                       element = new DerivedUnitElement(this,
-                                                               parentElement,
-                                                               (DerivedUnit) entity,
-                                                               removeListener,
-                                                               style);
-                       }
+            switch(((DerivedUnit)entity).getRecordBasis()) {
+            case LivingSpecimen:
+            case PreservedSpecimen:
+            case OtherSpecimen:
+                element = new SpecimenCollectionDetailElement(this,
+                        parentElement,
+                        (DerivedUnit) entity,
+                        removeListener,
+                        style);
+                break;
+            default:
+                element = new DerivedUnitElement(this,
+                        parentElement,
+                        (DerivedUnit) entity,
+                        removeListener,
+                        style);
+            }
 
         } else if (entity instanceof NamedArea) {
             element = new NamedAreaDetailElement(this, parentElement, (NamedArea) entity, removeListener, style);
@@ -2529,16 +2563,41 @@ public class CdmFormFactory extends FormToolkit {
             if (descriptionElement.getFeature().equals(Feature.PROTOLOGUE())) {
                 element = new ProtologueElement(this, parentElement, descriptionElement, removeListener, style);
             }
+        } else if (entity instanceof Identifier) {
+            if(parentElement instanceof AbstractSampleDesignationDetailSection){
+                element = new SampleDesignationTextDetailElement(this, parentElement, (Identifier<DnaSample>) entity, removeListener, backgroundColor, style);
+            }
+            else{
+                element = new IdentifierDetailElement(this, parentElement, (Identifier) entity, removeListener, style);
+            }
+        } else if (entity instanceof TermVocabulary) {
+            TermVocabulary<?> termVocabulary = (TermVocabulary<?>)entity;
+            switch (termVocabulary.getTermType()) {
+            case State:
+                element = new StateVocabularyCollectionElement(this, parentElement, (TermVocabulary<State>) entity, removeListener, backgroundColor, style);
+                break;
+            case Modifier:
+                element = new RecommendedModifierVocabulariesElement(this, parentElement, (TermVocabulary<DefinedTerm>) entity, removeListener, backgroundColor, style);
+                break;
+            default:
+                break;
+            }
+        } else if (entity instanceof MeasurementUnit) {
+            element = new MeasurementUnitCollectionElement(this, parentElement, (MeasurementUnit) entity, removeListener, backgroundColor, style);
+        } else if (entity instanceof StatisticalMeasure) {
+            element = new StatisticalMeasureCollectionElement(this, parentElement, (StatisticalMeasure) entity, removeListener, backgroundColor, style);
         }
 
         if (element == null) {
-            AbstractUtility.errorDialog("No element for entity", this,
+            MessagingUtils.messageDialog("No element for entity", this,
                     "Could not generate element for entity. Looks like the case is not handled already. Check implementation. Entity: "
                             + entity, null);
         }
 
-        else if (backgroundColor != null && !backgroundColor.isDisposed()) {
-            element.setPersistentBackground(backgroundColor);
+        else{
+            if (backgroundColor != null && !backgroundColor.isDisposed()) {
+                element.setPersistentBackground(backgroundColor);
+            }
             adapt(element);
             parentElement.addElement(element);
         }
@@ -2578,7 +2637,7 @@ public class CdmFormFactory extends FormToolkit {
      *            a {@link ConversationHolder} object.
      * @return a {@link EntitySelectionElement} object.
      */
-    public <T extends ICdmBase> EntitySelectionElement<T> createSelectionElement(Class<T> clazz,
+    public <T extends CdmBase> EntitySelectionElement<T> createSelectionElement(Class<T> clazz,
             ConversationHolder conversation, ICdmFormElement parentElement, String labelString, T selection, int mode,
             int style) {
         EntitySelectionElement<T> element = new EntitySelectionElement<T>(this, conversation, parentElement, clazz,
@@ -2588,6 +2647,48 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    /**
+     * <p>
+     * Creates a selection element for the given type T which shows only the <b>abbreviated</b> title as the label.
+     * </p>
+     * <p>
+     * <strong>Selection elements not handled by this method:</strong>
+     * <ul>
+     * <li>{@link TaxonNodeSelectionElement} see
+     * {@link #createTaxonNodeSelectionElement(ConversationHolder, ICdmFormElement, String, TaxonNode, int, int)}
+     * </li>
+     * <li>{@link NomenclaturalAuthorTeamSelectionElement} see
+     * {@link #createNomenclaturalAuthorTeamSelectionElement(ConversationHolder, ICdmFormElement, String, Team, int, int)}
+     * </li>
+     * </ul>
+     * </p>
+     *
+     * @param clazz
+     *            a {@link Class} object of the type that you want the selection
+     *            element to handle
+     * @param parentElement
+     *            a {@link ICdmFormElement} object.
+     * @param labelString
+     *            a {@link String} object.
+     * @param selectionType
+     * @param selection
+     *            a {@link ICdmBase} object.
+     * @param style
+     *            a int.
+     * @param conversation
+     *            a {@link ConversationHolder} object.
+     * @return a {@link EntitySelectionElement} object.
+     */
+    public <T extends CdmBase> EntitySelectionElementWithAbbreviatedTitle<T> createSelectionElementWithAbbreviatedTitle(
+            Class<T> clazz, ConversationHolder conversation, ICdmFormElement parentElement, String labelString,
+            T selection, int mode, int style) {
+        EntitySelectionElementWithAbbreviatedTitle<T> element = new EntitySelectionElementWithAbbreviatedTitle<T>(this, conversation, parentElement, clazz,
+                labelString, selection, mode, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
     public TaxonNodeSelectionElement createTaxonNodeSelectionElement(ConversationHolder conversation,
             ICdmFormElement parentElement, String labelString, TaxonNode selection, int mode, int style) {
         TaxonNodeSelectionElement element = new TaxonNodeSelectionElement(this, conversation, parentElement,
@@ -2615,6 +2716,14 @@ public class CdmFormFactory extends FormToolkit {
         return labelElement;
     }
 
+    public DateElement createDateElement(ICdmFormElement formElement, String labelText, DateTime dateTime, int style){
+        Label label = new Label(formElement.getLayoutComposite(), style);
+        label.setText(labelText+" (yyyy-MM-dd)");
+        DateElement dateElement = new DateElement(formElement.getLayoutComposite(), dateTime, style);
+        dateElement.initController(this, formElement);
+        return dateElement;
+    }
+
     /**
      * <p>
      * Getter for the field <code>selectionProvider</code>.