ref #9900: fix consistent use of abbrev title for authors of nomenclatural reference
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / CdmFormFactory.java
index 09260c0934a3b31f4fe1ed25bbbf81a36fcfb097..e83696d8e87dab498be6a625deb22f4843fe77d6 100644 (file)
@@ -1,9 +1,13 @@
 /**
- *
- */
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
 package eu.etaxonomy.taxeditor.ui.element;
 
-import java.net.URI;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashSet;
@@ -52,10 +56,13 @@ import org.springframework.security.core.GrantedAuthority;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 import eu.etaxonomy.cdm.common.DOI;
+import eu.etaxonomy.cdm.common.URI;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
+import eu.etaxonomy.cdm.model.agent.AgentBase;
 import eu.etaxonomy.cdm.model.agent.ORCID;
 import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
 import eu.etaxonomy.cdm.model.common.Annotation;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Credit;
@@ -99,7 +106,6 @@ 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.NameRelationshipType;
 import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
@@ -124,6 +130,9 @@ import eu.etaxonomy.cdm.model.term.TermBase;
 import eu.etaxonomy.cdm.model.term.TermTree;
 import eu.etaxonomy.cdm.model.term.TermType;
 import eu.etaxonomy.cdm.model.term.TermVocabulary;
+import eu.etaxonomy.cdm.persistence.dto.FeatureStateDto;
+import eu.etaxonomy.cdm.persistence.dto.TermDto;
+import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
 import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
@@ -135,6 +144,7 @@ import eu.etaxonomy.taxeditor.ui.combo.NameRelationshipTypeCombo;
 import eu.etaxonomy.taxeditor.ui.combo.VocabularyComboElement;
 import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
 import eu.etaxonomy.taxeditor.ui.dialog.CloneClassificationDetailElement;
+import eu.etaxonomy.taxeditor.ui.dialog.selection.CollectorSelectionDialog;
 import eu.etaxonomy.taxeditor.ui.element.MinMaxTextSection.UnitType;
 import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
 import eu.etaxonomy.taxeditor.ui.openurl.IOpenUrlEnabled;
@@ -146,6 +156,7 @@ import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
 import eu.etaxonomy.taxeditor.ui.section.EmptyElement;
 import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.agent.InstitutionDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.agent.NomenclaturalTeamMemberElement;
 import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.agent.TeamDetailElement;
@@ -197,22 +208,28 @@ import eu.etaxonomy.taxeditor.ui.section.description.detail.TemporalDataDetailEl
 import eu.etaxonomy.taxeditor.ui.section.description.detail.TextDataDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.feature.CharacterDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.feature.CharacterDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.feature.CharacterDtoDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.feature.CharacterDtoDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDtoDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDtoDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.feature.FeatureDistributionDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.feature.FeatureNodeDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.feature.FeatureNodeDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.feature.FeatureTreeDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.feature.FeatureTreeDetailElementForNode;
-import eu.etaxonomy.taxeditor.ui.section.feature.FeatureTreeDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.feature.FeatureTreeDetailSectionForNode;
 import eu.etaxonomy.taxeditor.ui.section.feature.InapplicableIfCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.feature.InapplicableIfCollectionElementForDto;
 import eu.etaxonomy.taxeditor.ui.section.feature.InapplicableIfEntityCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.feature.InapplicableIfEntityCollectionSectionForNode;
 import eu.etaxonomy.taxeditor.ui.section.feature.OnlyApplicableIfCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.feature.OnlyApplicableIfCollectionElementForDto;
 import eu.etaxonomy.taxeditor.ui.section.feature.OnlyApplicableIfEntityCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.feature.OnlyApplicableIfEntityCollectionSectionForNode;
+import eu.etaxonomy.taxeditor.ui.section.feature.TermNodeDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.feature.TermNodeDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.feature.TermTreeDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.feature.TermTreeDetailElementForNode;
+import eu.etaxonomy.taxeditor.ui.section.feature.TermTreeDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.feature.TermTreeDetailSectionForNode;
 import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityCollectionElement;
 import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailSection;
@@ -247,8 +264,6 @@ import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusElement;
 import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;
 import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.name.ProtologueElement;
-import eu.etaxonomy.taxeditor.ui.section.name.ProtologueSection;
 import eu.etaxonomy.taxeditor.ui.section.name.RuleConsideredElement;
 import eu.etaxonomy.taxeditor.ui.section.name.SpecimenTypeDesignationElement;
 import eu.etaxonomy.taxeditor.ui.section.name.TextTypeDesignationElement;
@@ -267,10 +282,10 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationEventDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationHistoryDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.EmptySection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitFacadeDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitFacadeDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitFacadeGeneralDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitFacadeGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GeoScopeDetailSection;
@@ -322,12 +337,18 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetai
 import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.reference.AdvancedNomenclaturalSourceElement;
+import eu.etaxonomy.taxeditor.ui.section.reference.AdvancedSourceElement;
+import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalSourceDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalSourceDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalSourceElement;
 import eu.etaxonomy.taxeditor.ui.section.reference.OriginalSourceAdvancedSection;
 import eu.etaxonomy.taxeditor.ui.section.reference.OriginalSourceElement;
 import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.reference.SecundumSourceDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.reference.SecundumSourceElement;
+import eu.etaxonomy.taxeditor.ui.section.reference.SecundumSourceSection;
 import eu.etaxonomy.taxeditor.ui.section.reference.SingleSourceSection;
 import eu.etaxonomy.taxeditor.ui.section.supplemental.AnnotationElement;
 import eu.etaxonomy.taxeditor.ui.section.supplemental.AnnotationSection;
@@ -367,19 +388,29 @@ 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.LanguageDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.MeasurementUnitCollectionElement;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.MeasurementUnitCollectionSection;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.MeasurementUnitDtoCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.MeasurementUnitDtoCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.NamedAreaDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.PresenceAbsenceTermDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.RecommendedModifierDtoVocabulariesElement;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.RecommendedModifierVocabulariesCollectionSection;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.RecommendedModifierVocabulariesDtoCollectionSection;
 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.StateVocabularyDtoCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.StateVocabularyDtoCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.StatisticalMeasureCollectionElement;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.StatisticalMeasureCollectionSection;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.StatisticalMeasureDtoCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.StatisticalMeasureDtoCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermMediaSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
+import eu.etaxonomy.taxeditor.ui.selection.CollectorSelectionElement;
 import eu.etaxonomy.taxeditor.ui.selection.CommonNameReferenceSelectionElement;
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElementWithAbbreviatedTitle;
@@ -673,6 +704,14 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public TranslatableRepresentationElement createTranslatableRepresentationElementDto(ICdmFormElement parentElement, Representation representation, TermDto term,int textHeight, int style, boolean fillDetails) {
+        TranslatableRepresentationElement element = new TranslatableRepresentationElement(this, parentElement, representation, term, textHeight, style, fillDetails);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+
     public KeyStatementElement createKeyStatementElement(ICdmFormElement parentElement, String labelString,
             KeyStatement keyStatement, int textHeight, int style) {
         KeyStatementElement element = new KeyStatementElement(this, parentElement, labelString, keyStatement,
@@ -919,6 +958,7 @@ public class CdmFormFactory extends FormToolkit {
         parentElement.addElement(element);
         return element;
     }
+
     /**
      * @deprecated Use {@link #createDefinedTermComboElement(TermType, ICdmFormElement, String, DefinedTermBase, int)} instead
      */
@@ -940,6 +980,15 @@ public class CdmFormFactory extends FormToolkit {
             Comparator<T> comparator) {
         return this.createDefinedTermComboElement(termType, null, null, parentElement, labelString, selection, true, style, false, comparator);
     }
+    public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
+            List<T> terms,
+            ICdmFormElement parentElement,
+            String labelString,
+            T selection,
+            int style,
+            Comparator<T> comparator) {
+        return this.createDefinedTermComboElement(null, null, terms, parentElement, labelString, selection, true, style, false, comparator);
+    }
 
     public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
                        TermType termType,
@@ -959,6 +1008,14 @@ public class CdmFormFactory extends FormToolkit {
                        int style) {
                return  this.createDefinedTermComboElement(termType, null, null, parentElement, labelString, selection, true, style, false, null);
        }
+       public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElementDto(
+            TermType termType,
+            ICdmFormElement parentElement,
+            String labelString,
+            TermDto selection,
+            int style) {
+        return  this.createDefinedTermComboElement(termType, null, null, parentElement, labelString, selection, true, style, false, null);
+    }
 
        public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
             List<T> terms,
@@ -968,6 +1025,7 @@ public class CdmFormFactory extends FormToolkit {
             int style) {
         return  this.createDefinedTermComboElement(null, null, terms, parentElement, labelString, selection, true, style, false, null);
     }
+
        public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
                List<T> terms,
                ICdmFormElement parentElement,
@@ -977,6 +1035,7 @@ public class CdmFormFactory extends FormToolkit {
                int style) {
            return  this.createDefinedTermComboElement(null, null, terms, parentElement, labelString, selection, addEmptyElement, style, false, null);
        }
+
     public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
                        TermType termType,
                        ICdmFormElement parentElement,
@@ -1020,6 +1079,7 @@ public class CdmFormFactory extends FormToolkit {
                int style,
                boolean useAbbrevLabel,
                Comparator<T> comparator) {
+
            if(termType!=null){
                TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termType, labelString, selection, addEmptyElement, style, useAbbrevLabel, comparator);
                adapt(element);
@@ -1028,18 +1088,16 @@ public class CdmFormFactory extends FormToolkit {
            }
            else if(termVocabulary!=null){
                TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termVocabulary, labelString, selection, addEmptyElement, style, useAbbrevLabel, comparator);
-               if (comparator!= null){
-                       element.setTermComparator(comparator);
-               }
+//             if (comparator!= null){
+//                     element.setTermComparator(comparator);
+//             }
                adapt(element);
                parentElement.addElement(element);
                return element;
            }else if (terms != null){
 
-               TermComboElement<T> element = new TermComboElement<T>(this, parentElement, terms, labelString, selection, addEmptyElement, style, useAbbrevLabel);
-            if (comparator!= null){
-                element.setTermComparator(comparator);
-            }
+               TermComboElement<T> element = new TermComboElement<T>(this, parentElement, terms, labelString, selection, addEmptyElement, style, useAbbrevLabel, comparator);
+
             adapt(element);
             parentElement.addElement(element);
             return element;
@@ -1050,6 +1108,30 @@ public class CdmFormFactory extends FormToolkit {
            }
        }
 
+          private <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
+                   TermType termType,
+                   TermVocabulary<?> termVocabulary,
+                   List<T> terms,
+                   ICdmFormElement parentElement,
+                   String labelString,
+                   TermDto selection,
+                   boolean addEmptyElement,
+                   int style,
+                   boolean useAbbrevLabel,
+                   Comparator<T> comparator) {
+               if(termType!=null){
+                   TermComboElement<T> element = new TermComboElement<T>(this, parentElement, termType, labelString, selection, addEmptyElement, style, useAbbrevLabel, comparator);
+                   adapt(element);
+                   parentElement.addElement(element);
+                   return element;
+               }
+
+               else {
+                   //this should never happen
+                   return null;
+               }
+           }
+
        public NameRelationshipTypeCombo createNameRelationshipTypeCombo(ICdmFormElement parentElement,
             String labelString,
             int style,
@@ -1101,13 +1183,21 @@ public class CdmFormFactory extends FormToolkit {
            return element;
        }
 
+       public <TERM extends DefinedTermBase<TERM>, VOC extends TermVocabulary<TERM>> VocabularyComboElement<TERM, VOC> createVocabularyDtoComboElement(
+            TermType termType, String label, TermVocabularyDto 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
      * </p>
      *
      * @param imageUri
-     *            a {@link java.net.URI} object.
+     *            a {@link eu.etaxonomy.cdm.common.URI} object.
      * @param style
      *            a int.
      * @param parentElement
@@ -1132,7 +1222,7 @@ public class CdmFormFactory extends FormToolkit {
      *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
      *            object.
      * @param imageUri
-     *            a {@link java.net.URI} object.
+     *            a {@link eu.etaxonomy.cdm.common.URI} object.
      * @param style
      *            a int.
      * @return a {@link eu.etaxonomy.taxeditor.ui.element.ImageElement} object.
@@ -1203,10 +1293,6 @@ public class CdmFormFactory extends FormToolkit {
      * Creates a section as a part of the form.
      *
      * @return the section widget
-     * @param section
-     *            a
-     *            {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection}
-     *            object.
      */
     public Section adapt(AbstractFormSection section) {
         section.setMenu(section.getLayoutComposite().getMenu());
@@ -1276,50 +1362,44 @@ public class CdmFormFactory extends FormToolkit {
     }
 
     /**
-     * <p>
-     * createToggleableTextField
-     * </p>
-     *
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     * @param labelString
-     *            a {@link java.lang.String} object.
-     * @param initialText
-     *            a {@link java.lang.String} object.
-     * @param initialState
-     *            a boolean.
-     * @param style
-     *            a int.
-     * @return a {@link eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement}
-     *         object.
+     * createToggleableTextField with relevance
      */
     public ToggleableTextElement createToggleableTextField(ICdmFormElement parentElement, String labelString,
-            String initialText, boolean initialState, int style) {
+            String initialText, boolean initialState, CacheRelevance relevance, int style) {
+
         ToggleableTextElement element = new ToggleableTextElement(this, parentElement, labelString, initialText,
-                initialState, style | orientation);
+                initialState, relevance, style | orientation);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+    /**
+     * like {@link #createToggleableTextField(ICdmFormElement, String, String, boolean, CacheRelevance, int)}
+     * but with predefined cache relevance == 1
+     */
+    public ToggleableTextElement createToggleableTextField(ICdmFormElement parentElement, String labelString,
+            String initialText, boolean initialState, int style) {
+        return createToggleableTextField(parentElement, labelString, initialText, initialState, CacheRelevance.CACHE1, style);
+    }
+
+    /**
+     * like {@link #createToggleableTextField(ICdmFormElement, String, String, boolean, CacheRelevance, int)}
+     * but with predefined cache relevance == 1
+     */
+    public RemovableTextElement createRemovableTextField(ICdmFormElement parentElement, String labelString,
+            String initialText, int style) {
+        RemovableTextElement element = new RemovableTextElement(this, parentElement, labelString, initialText,
+                style | orientation);
 
         adapt(element);
         parentElement.addElement(element);
         return element;
     }
 
+
     /**
-     * <p>
      * createTimePeriodElement
-     * </p>
-     *
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     * @param labelString
-     *            a {@link java.lang.String} object.
-     * @param timePeriod
-     *            a {@link eu.etaxonomy.cdm.model.common.TimePeriod} object.
-     * @param style
-     *            a int.
-     * @return a {@link eu.etaxonomy.taxeditor.ui.element.TimePeriodElement}
-     *         object.
      */
     public TimePeriodElement createTimePeriodElement(ICdmFormElement parentElement, String labelString,
             TimePeriod timePeriod, int style) {
@@ -1330,21 +1410,7 @@ public class CdmFormFactory extends FormToolkit {
     }
 
     /**
-     * <p>
      * createVerbatimTimePeriodElement
-     * </p>
-     *
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     * @param labelString
-     *            a {@link java.lang.String} object.
-     * @param timePeriod
-     *            a {@link eu.etaxonomy.cdm.model.common.VerbatimTimePeriod} object.
-     * @param style
-     *            a int.
-     * @return a {@link eu.etaxonomy.taxeditor.ui.element.VerbatimTimePeriodElement}
-     *         object.
      */
     public VerbatimTimePeriodElement createVerbatimTimePeriodElement(ICdmFormElement parentElement, String labelString,
             VerbatimTimePeriod timePeriod, int style) {
@@ -1354,24 +1420,8 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
-
-
        /**
-        * <p>
         * createGatheringEventUnitElement
-        * </p>
-        *
-        * @param parentElement
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-        *            object.
-        * @param labelString
-        *            a {@link java.lang.String} object.
-        * @param timePeriod
-        *            a {@link eu.etaxonomy.cdm.model.common.GatheringEvent} object.
-        * @param style
-        *            a int.
-        * @return a {@link eu.etaxonomy.taxeditor.ui.element.GatheringEventUnitElement}
-        *         object.
         */
        public GatheringEventUnitElement createGatheringEventUnitElement(
                        ICdmFormElement parentElement,
@@ -1391,18 +1441,7 @@ public class CdmFormFactory extends FormToolkit {
        }
 
     /**
-     * <p>
      * createPointElement
-     * </p>
-     *
-     * @param style
-     *            a int.
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     * @param point
-     *            a {@link eu.etaxonomy.cdm.model.location.Point} object.
-     * @return a {@link eu.etaxonomy.taxeditor.ui.element.PointElement} object.
      */
     public PointElement createPointElement(ICdmFormElement parentElement, Point point, int style) {
         PointElement element = new PointElement(this, parentElement, point, style);
@@ -1767,7 +1806,7 @@ public class CdmFormFactory extends FormToolkit {
      * @return
      */
     public AbstractCdmDetailElement createDefinedTermDetailElement(Class definedTermClass,
-            AbstractCdmDetailSection parentElement, int style) {
+            ICdmFormElement parentElement, int style) {
         AbstractCdmDetailElement element = null;
 
         if (NamedArea.class.isAssignableFrom(definedTermClass)) {
@@ -1776,6 +1815,8 @@ public class CdmFormFactory extends FormToolkit {
             element = new FeatureDetailElement(this, parentElement);
         } else if(definedTermClass.equals(PresenceAbsenceTerm.class)){
             element = new PresenceAbsenceTermDetailElement(this, parentElement);
+        } else if(definedTermClass.equals(Language.class)){
+            element = new LanguageDetailElement(this, parentElement);
         } else {
             element = new DefinedTermDetailElement(this, parentElement);
         }
@@ -1792,26 +1833,48 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public CharacterNodeDtoDetailSection createCharacterNodeDtoDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        CharacterNodeDtoDetailSection section = new CharacterNodeDtoDetailSection(this, conversation, parentElement, selectionProvider, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public CharacterDetailSection createCharacterDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         CharacterDetailSection section = new CharacterDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
 
+    public CharacterDtoDetailSection createCharacterDtoDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        CharacterDtoDetailSection section = new CharacterDtoDetailSection(this, conversation, parentElement, selectionProvider, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public CharacterNodeDetailElement createCharacterNodeDetailElement(ICdmFormElement parentElement, int style){
         CharacterNodeDetailElement element = new CharacterNodeDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
+    public CharacterNodeDtoDetailElement createCharacterNodeDtoDetailElement(ICdmFormElement parentElement, int style){
+        CharacterNodeDtoDetailElement element = new CharacterNodeDtoDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
 
     public CharacterDetailElement createCharacterDetailElement(ICdmFormElement parentElement, int style){
         CharacterDetailElement element = new CharacterDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
+    public CharacterDtoDetailElement createCharacterDtoDetailElement(ICdmFormElement parentElement, int style){
+        CharacterDtoDetailElement element = new CharacterDtoDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
 
-    public FeatureTreeDetailElement createFeatureTreeDetailElement(ICdmFormElement parentElement, int style){
-        FeatureTreeDetailElement element = new FeatureTreeDetailElement(this, parentElement);
+    public TermTreeDetailElement createFeatureTreeDetailElement(ICdmFormElement parentElement, int style){
+        TermTreeDetailElement element = new TermTreeDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
@@ -1823,13 +1886,13 @@ public class CdmFormFactory extends FormToolkit {
      */
     public AbstractCdmDetailElement<TermTree> createFeatureTreeDetailElementForTree(
             AbstractCdmDetailSection<TermTree> parentElement, int style) {
-        FeatureTreeDetailElementForNode element = new FeatureTreeDetailElementForNode(this, parentElement);
+        TermTreeDetailElementForNode element = new TermTreeDetailElementForNode(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
 
-    public FeatureNodeDetailElement createFeatureNodeDetailElement(ICdmFormElement parentElement, int style){
-        FeatureNodeDetailElement element = new FeatureNodeDetailElement(this, parentElement);
+    public TermNodeDetailElement createFeatureNodeDetailElement(ICdmFormElement parentElement, int style){
+        TermNodeDetailElement element = new TermNodeDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
@@ -1842,19 +1905,19 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public FeatureNodeDetailSection createFeatureNodeDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        FeatureNodeDetailSection section = new FeatureNodeDetailSection(this, conversation, parentElement, selectionProvider, style);
+    public TermNodeDetailSection createFeatureNodeDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        TermNodeDetailSection section = new TermNodeDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
 
-    public FeatureTreeDetailSection createFeatureTreeDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        FeatureTreeDetailSection section = new FeatureTreeDetailSection(this, conversation, parentElement, selectionProvider, style);
+    public TermTreeDetailSection createFeatureTreeDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        TermTreeDetailSection section = new TermTreeDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
-    public FeatureTreeDetailSectionForNode createFeatureTreeDetailSectionForTree(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        FeatureTreeDetailSectionForNode section = new FeatureTreeDetailSectionForNode(this, conversation, parentElement, selectionProvider, style);
+    public TermTreeDetailSectionForNode createFeatureTreeDetailSectionForTree(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        TermTreeDetailSectionForNode section = new TermTreeDetailSectionForNode(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
@@ -1865,8 +1928,8 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public NomenclaturalReferenceDetailSection createNomenclaturalReferenceDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        NomenclaturalReferenceDetailSection section = new NomenclaturalReferenceDetailSection(this, conversation, parentElement, selectionProvider, style);
+    public NomenclaturalSourceDetailSection createNomenclaturalReferenceDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        NomenclaturalSourceDetailSection section = new NomenclaturalSourceDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
@@ -1877,6 +1940,18 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public AdvancedSourceElement createAdvancedSourceDetailElement(ICdmFormElement parentElement, int style){
+        AdvancedSourceElement element = new AdvancedSourceElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
+    public AdvancedSourceElement createAdvancedNomenclaturalSourceDetailElement(ICdmFormElement parentElement, int style){
+        AdvancedNomenclaturalSourceElement element = new AdvancedNomenclaturalSourceElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
     public SingleSourceSection createSingleSourceSection(ConversationHolder conversation, ICdmFormElement parentElement, CdmBase cdmEntity, ISelectionProvider selectionProvider, String label, int style){
         SingleSourceSection section = new SingleSourceSection(this, conversation, parentElement, cdmEntity, selectionProvider, style, label);
         addAndAdaptSection(parentElement, section);
@@ -1888,6 +1963,12 @@ public class CdmFormFactory extends FormToolkit {
         addAndAdaptSection(parentElement, section);
         return section;
     }
+    
+    public SecundumSourceSection createSecundumDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+       SecundumSourceSection section = new SecundumSourceSection(this, conversation, parentElement, selectionProvider, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
 
     public AuthorshipDetailSection createAuthorshipDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         AuthorshipDetailSection section = new AuthorshipDetailSection(this, conversation, parentElement, selectionProvider, style);
@@ -1945,8 +2026,8 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public FieldUnitDetailSection createFieldUnitDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        FieldUnitDetailSection section = new FieldUnitDetailSection(this, conversation, parentElement, selectionProvider, style);
+    public FieldUnitFacadeDetailSection createFieldUnitFacadeDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        FieldUnitFacadeDetailSection section = new FieldUnitFacadeDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
@@ -2023,8 +2104,8 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public FieldUnitGeneralDetailSection createFieldUnitGeneralDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        FieldUnitGeneralDetailSection section = new FieldUnitGeneralDetailSection(this, conversation, parentElement, selectionProvider, style);
+    public FieldUnitFacadeGeneralDetailSection createFieldUnitFacadeGeneralDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        FieldUnitFacadeGeneralDetailSection section = new FieldUnitFacadeGeneralDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
@@ -2233,6 +2314,23 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public SecundumSourceDetailElement createSecundumSourceDetailElement(ICdmFormElement parentElement){
+       SecundumSourceDetailElement element = new SecundumSourceDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+    
+    public SecundumSourceElement createSecundumSourceElement(ICdmFormElement parentElement, CdmBase cdmEntity, String label){
+        SecundumSourceElement element = new SecundumSourceElement(this, parentElement, cdmEntity, label);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+    public NomenclaturalSourceElement createNomenclaturalSourceElement(ICdmFormElement parentElement, CdmBase cdmEntity, String label){
+        NomenclaturalSourceElement element = new NomenclaturalSourceElement(this, parentElement, cdmEntity, label);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
     public TaxonRelationshipDetailElement createTaxonRelationshipDetailElement(ICdmFormElement parentElement){
         TaxonRelationshipDetailElement element = new TaxonRelationshipDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
@@ -2373,21 +2471,26 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
-    public ReferenceDetailElement createReferenceDetailElement(ICdmFormElement parentElement, int style, boolean isWizard){
-        ReferenceDetailElement element = new ReferenceDetailElement(this, parentElement, style, isWizard);
+    public ReferenceDetailElement createReferenceDetailElement(ICdmFormElement parentElement, int style){
+        ReferenceDetailElement element = new ReferenceDetailElement(this, parentElement, style);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+    public ReferenceDetailElement createNomenclaturalReferenceDetailElement(ICdmFormElement parentElement, int style){
+        ReferenceDetailElement element = new ReferenceDetailElement(this, parentElement, true, style);
         addAndAdaptElement(parentElement, element);
         return element;
     }
 
-    public NomenclaturalReferenceDetailElement createNomenclaturalReferenceDetailElement(ICdmFormElement parentElement, int style){
-        NomenclaturalReferenceDetailElement element = new NomenclaturalReferenceDetailElement(this, parentElement, style);
+    public NomenclaturalSourceDetailElement createNomenclaturalSourceDetailElement(ICdmFormElement parentElement, int style){
+        NomenclaturalSourceDetailElement element = new NomenclaturalSourceDetailElement(this, parentElement, style);
         addAndAdaptElement(parentElement, element);
         return element;
     }
 
 
-    public FieldUnitGeneralDetailElement createFieldUnitGeneralDetailElement(ICdmFormElement parentElement){
-        FieldUnitGeneralDetailElement element = new FieldUnitGeneralDetailElement(this, parentElement);
+    public FieldUnitFacadeGeneralDetailElement createFieldUnitFacadeGeneralDetailElement(ICdmFormElement parentElement){
+        FieldUnitFacadeGeneralDetailElement element = new FieldUnitFacadeGeneralDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
@@ -2494,8 +2597,8 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
-    public FieldUnitDetailElement createFieldUnitDetailElement(ICdmFormElement parentElement) {
-        FieldUnitDetailElement element = new FieldUnitDetailElement(this, parentElement);
+    public FieldUnitFacadeDetailElement createFieldUnitFacadeDetailElement(ICdmFormElement parentElement) {
+        FieldUnitFacadeDetailElement element = new FieldUnitFacadeDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
         return element;
     }
@@ -2646,13 +2749,25 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public ProtologueSection createProtologueSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
-        ProtologueSection section = new ProtologueSection(this, conversation, parentElement, style);
+//    public ProtologueSection createProtologueSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+//        ProtologueSection section = new ProtologueSection(this, conversation, parentElement, style);
+//        addAndAdaptSection(parentElement, section);
+//        return section;
+//    }
+    public ExternalLinksSection createExternalLinksSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        ExternalLinksSection section = new ExternalLinksSection(this, conversation, parentElement, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
-    public ExternalLinksSection createExternalLinksSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
-        ExternalLinksSection section = new ExternalLinksSection(this, conversation, parentElement, style);
+
+    public ExternalLinksSection createExternalLinksSection(ConversationHolder conversation, ICdmFormElement parentElement, String label, int style){
+        ExternalLinksSection section = new ExternalLinksSection(this, conversation, parentElement, true, label, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public ExternalLinksSection createExternalLinksSection(ConversationHolder conversation, ICdmFormElement parentElement, String label, boolean isWithTypeAndDesc, int style){
+        ExternalLinksSection section = new ExternalLinksSection(this, conversation, parentElement, isWithTypeAndDesc, label, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
@@ -2712,11 +2827,22 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public StateVocabularyDtoCollectionSection createStateVocabulariesDtoSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        StateVocabularyDtoCollectionSection section = new StateVocabularyDtoCollectionSection(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 RecommendedModifierVocabulariesDtoCollectionSection createRecommendedModifierVocabulariesDtoCollectionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        RecommendedModifierVocabulariesDtoCollectionSection section = new RecommendedModifierVocabulariesDtoCollectionSection(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);
@@ -2724,12 +2850,23 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public MeasurementUnitDtoCollectionSection createMeasurementUnitDtoCollectionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        MeasurementUnitDtoCollectionSection section = new MeasurementUnitDtoCollectionSection(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 StatisticalMeasureDtoCollectionSection createStatisticalMeasureDtoCollectionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        StatisticalMeasureDtoCollectionSection section = new StatisticalMeasureDtoCollectionSection(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);
@@ -2838,7 +2975,6 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-
     public AbstractEntityCollectionElement createEntityCollectionElement(AbstractFormSection parentElement,
             Object versionableEntity, SelectionListener removeListener, Color backgroundColor, int style) {
         AbstractEntityCollectionElement<?> element = null;
@@ -2852,13 +2988,21 @@ public class CdmFormFactory extends FormToolkit {
             if (parentElement instanceof TeamMemberSection){
                 isNomenclatural = ((TeamMemberSection) parentElement).isNomenclaturalTeam();
             }
-            element = new TeamMemberElement(this, parentElement, (Person) entity, removeListener, style, isNomenclatural);
+            if (isNomenclatural){
+               element = new NomenclaturalTeamMemberElement(this, parentElement, (Person) entity, removeListener, style);
+            }else{
+               element = new TeamMemberElement(this, parentElement, (Person) entity, removeListener, style);
+            }
         } else if (entity instanceof Credit) {
             element = new CreditElement(this, parentElement, (Credit) entity, removeListener, style);
         } else if (entity instanceof Extension) {
             element = new ExtensionElement(this, parentElement, (Extension) entity, removeListener, style);
         } else if (entity instanceof ExternalLink) {
-            element = new ExternalLinksElement(this, parentElement, (ExternalLink) entity, removeListener, style);
+            boolean isAdvanced = true;
+            if(parentElement instanceof ExternalLinksSection){
+                isAdvanced = ((ExternalLinksSection)parentElement).isAdvanced();
+            }
+            element = new ExternalLinksElement(this, parentElement, (ExternalLink) entity, isAdvanced, removeListener, style);
         } else if (entity instanceof Marker) {
             element = new MarkerElement(this, parentElement, (Marker) entity, removeListener, style);
         } else if (entity instanceof TaxonNodeAgentRelation) {
@@ -2896,7 +3040,7 @@ public class CdmFormFactory extends FormToolkit {
                     removeListener,backgroundColor, style);
         }else if (entity instanceof IdentifiableSource && parentElement.getEntity() instanceof DescriptionElementBase) {
             element = new IdentifiableSourceElement(this, parentElement, (IdentifiableSource) entity, removeListener,
-                    style, false);
+                    style, true);
         } else if (entity instanceof IdentifiableSource ) {
             element = new IdentifiableSourceElement(this, parentElement, (IdentifiableSource) entity, removeListener,
                     style, true);
@@ -2968,7 +3112,6 @@ public class CdmFormFactory extends FormToolkit {
                         removeListener,
                         style);
             }
-
         } else if (entity instanceof NamedArea) {
             element = new CollectingAreaDetailElement(this, parentElement, (NamedArea) entity, removeListener, style);
         } else if (entity instanceof DeterminationEvent) {
@@ -2986,12 +3129,12 @@ public class CdmFormFactory extends FormToolkit {
             // this is the special case for protologs, maybe we can do this
             // differently when API improves
             DescriptionElementBase descriptionElement = (DescriptionElementBase) entity;
-            if (descriptionElement.getFeature().equals(Feature.PROTOLOGUE())) {
-                element = new ProtologueElement(this, parentElement, descriptionElement, removeListener, style);
-            }
+//            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);
+                element = new SampleDesignationTextDetailElement(this, parentElement, (Identifier) entity, removeListener, backgroundColor, style);
             }
             else{
                 element = new IdentifierElement(this, parentElement, (Identifier) entity, removeListener, style);
@@ -3008,15 +3151,41 @@ public class CdmFormFactory extends FormToolkit {
             default:
                 break;
             }
-        } else if (entity instanceof MeasurementUnit) {
+        }else if (entity instanceof TermVocabularyDto) {
+            TermVocabularyDto termVocabulary = (TermVocabularyDto)entity;
+            switch (termVocabulary.getTermType()) {
+            case State:
+                element = new StateVocabularyDtoCollectionElement(this, parentElement, termVocabulary, removeListener, backgroundColor, style);
+                break;
+            case Modifier:
+                element = new RecommendedModifierDtoVocabulariesElement(this, parentElement, termVocabulary, 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) {
+        }else if (entity instanceof TermDto) {
+            if(((TermDto)entity).getTermType().equals(TermType.MeasurementUnit)){
+                element = new MeasurementUnitDtoCollectionElement(this, parentElement, (TermDto) entity, removeListener, backgroundColor, style);
+            }else if (((TermDto)entity).getTermType().equals(TermType.StatisticalMeasure)){
+                element = new StatisticalMeasureDtoCollectionElement(this, parentElement, (TermDto) entity, removeListener, backgroundColor, style);
+            }
+        }else if (entity instanceof StatisticalMeasure) {
             element = new StatisticalMeasureCollectionElement(this, parentElement, (StatisticalMeasure) entity, removeListener, backgroundColor, style);
         } else if (entity instanceof FeatureState && parentElement instanceof InapplicableIfEntityCollectionSection) {
             element = new InapplicableIfCollectionElement(this, parentElement, (FeatureState) entity, removeListener, backgroundColor, style);
         } else if (entity instanceof FeatureState && parentElement instanceof OnlyApplicableIfEntityCollectionSection) {
             element = new OnlyApplicableIfCollectionElement(this, parentElement, (FeatureState) entity, removeListener, backgroundColor, style);
-        }
+        } else if (entity instanceof FeatureState && parentElement instanceof InapplicableIfEntityCollectionSectionForNode) {
+            element = new InapplicableIfCollectionElement(this, parentElement, (FeatureState) entity, removeListener, backgroundColor, style);
+        } else if (entity instanceof FeatureState && parentElement instanceof OnlyApplicableIfEntityCollectionSectionForNode) {
+            element = new OnlyApplicableIfCollectionElement(this, parentElement, (FeatureState) entity, removeListener, backgroundColor, style);
+        } else if (entity instanceof FeatureStateDto && parentElement instanceof InapplicableIfEntityCollectionSection) {
+               element = new InapplicableIfCollectionElementForDto(this, parentElement, (FeatureStateDto) entity, removeListener, backgroundColor, style);
+           } else if (entity instanceof FeatureStateDto && parentElement instanceof OnlyApplicableIfEntityCollectionSection) {
+               element = new OnlyApplicableIfCollectionElementForDto(this, parentElement, (FeatureStateDto) entity, removeListener, backgroundColor, style);
+           }
 
         //check for parent section when entity is null
         //this happens when AbstractUnboundEntityCollectionSection is used
@@ -3124,6 +3293,14 @@ public class CdmFormFactory extends FormToolkit {
         parentElement.addElement(element);
         return element;
     }
+    public CollectorSelectionElement createCollectorSelectionElement(ICdmFormElement parentElement, String labelString, AgentBase selection, int mode,
+          int style) {
+       CollectorSelectionElement element = new CollectorSelectionElement(this, parentElement, 
+              labelString, selection, mode, style);
+      adapt(element);
+      parentElement.addElement(element);
+      return element;
+  }
 
     public CommonNameReferenceSelectionElement createCommonNameReferenceSelectionElement(ICdmFormElement parentElement, String labelString, Reference selection, int mode,
           int style) {
@@ -3271,10 +3448,9 @@ public class CdmFormFactory extends FormToolkit {
 
         if (entity instanceof CategoricalData) {
             detailedDescriptionElement = new CategoricalDataDetailElement(this, parentElement,
-                    (CategoricalData) entity, style);
+                    (CategoricalData) entity, enabled, style);
         } else if (entity instanceof CommonTaxonName) {
-            detailedDescriptionElement = new CommonNameDetailElement(this, parentElement, (CommonTaxonName) entity,
-                    style);
+            detailedDescriptionElement = new CommonNameDetailElement(this, parentElement, (CommonTaxonName) entity, enabled, style);
         } else if (entity instanceof Distribution && !enabled) {
             detailedDescriptionElement = new DistributionDetailElement(this, parentElement, (Distribution) entity,
                     enabled, style);
@@ -3283,21 +3459,22 @@ public class CdmFormFactory extends FormToolkit {
                     true, style);
         }else if (entity instanceof IndividualsAssociation) {
             detailedDescriptionElement = new IndividualsAssociationDetailElement(this, parentElement,
-                    (IndividualsAssociation) entity, style);
+                    (IndividualsAssociation) entity, enabled, style);
         } else if (entity instanceof QuantitativeData) {
             detailedDescriptionElement = new QuantitativeDataDetailElement(this, parentElement,
-                    (QuantitativeData) entity, style);
+                    (QuantitativeData) entity, enabled, style);
         } else if (entity instanceof TaxonInteraction) {
             detailedDescriptionElement = new TaxonInteractionDetailElement(this, parentElement,
-                    (TaxonInteraction) entity, style);
+                    (TaxonInteraction) entity, enabled, style);
         } else if (entity instanceof TemporalData) {
-            detailedDescriptionElement = new TemporalDataDetailElement(this, parentElement, (TemporalData) entity, style);
+            detailedDescriptionElement = new TemporalDataDetailElement(this, parentElement, (TemporalData) entity, enabled, style);
         } else if (entity instanceof TextData) {
-            detailedDescriptionElement = new TextDataDetailElement(this, parentElement, (TextData) entity, style);
+            detailedDescriptionElement = new TextDataDetailElement(this, parentElement, (TextData) entity, enabled, style);
         }
         else {
             throw new IllegalStateException("There is no interface for the given description element");
         }
+//        detailedDescriptionElement.setEnabled(enabled);
         adapt(detailedDescriptionElement);
         parentElement.addElement(detailedDescriptionElement);
         return detailedDescriptionElement;