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 045f2692df1f3ff78bbc17fdc927c7708c87d25a..e83696d8e87dab498be6a625deb22f4843fe77d6 100644 (file)
@@ -1,13 +1,16 @@
 /**
- *
- */
+* 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;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -53,13 +56,17 @@ 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;
+import eu.etaxonomy.cdm.model.common.ExtendedTimePeriod;
 import eu.etaxonomy.cdm.model.common.Extension;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
@@ -88,6 +95,7 @@ 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.TemporalData;
 import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
@@ -98,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;
@@ -120,8 +127,12 @@ import eu.etaxonomy.cdm.model.term.DefinedTermBase;
 import eu.etaxonomy.cdm.model.term.IEnumTerm;
 import eu.etaxonomy.cdm.model.term.Representation;
 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;
@@ -133,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;
@@ -144,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;
@@ -191,21 +204,32 @@ import eu.etaxonomy.taxeditor.ui.section.description.detail.DistributionDetailEl
 import eu.etaxonomy.taxeditor.ui.section.description.detail.IndividualsAssociationDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.description.detail.QuantitativeDataDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.description.detail.TaxonInteractionDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.description.detail.TemporalDataDetailElement;
 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.FeatureTreeDetailSection;
 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;
@@ -240,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;
@@ -254,15 +276,16 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailElement
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitMediaSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailElement;
 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;
@@ -314,10 +337,19 @@ 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;
 import eu.etaxonomy.taxeditor.ui.section.supplemental.CdmBaseElement;
@@ -356,30 +388,39 @@ 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;
+import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElementWithIdInVocabulary;
 import eu.etaxonomy.taxeditor.ui.selection.NomenclaturalAuthorTeamSelectionElement;
 import eu.etaxonomy.taxeditor.ui.selection.TaxonNodeSelectionElement;
 import eu.etaxonomy.taxeditor.view.detail.CdmSectionPart;
 
 /**
- * <p>
  * CdmFormFactory class.
- * </p>
  *
  * @author n.hoffmann
  * @created Feb 24, 2010
@@ -393,9 +434,9 @@ public class CdmFormFactory extends FormToolkit {
     @Inject
     private IEclipseContext context;
 
-    private final Set<SelectionListener> selectionListenerList = new HashSet<SelectionListener>();
+    private final Set<SelectionListener> selectionListenerList = new HashSet<>();
 
-    private final List<IPropertyChangeListener> propertyChangeListeners = new ArrayList<IPropertyChangeListener>();
+    private final List<IPropertyChangeListener> propertyChangeListeners = new ArrayList<>();
 
     private final int orientation = Window.getDefaultOrientation();
     private ISelectionProvider selectionProvider;
@@ -409,10 +450,8 @@ public class CdmFormFactory extends FormToolkit {
     };
 
     /**
-     *
      * @author n.hoffmann
      * @date Jan 25, 2010
-     *
      */
     private class SelectionMouseHandler extends MouseAdapter {
         @Override
@@ -422,10 +461,8 @@ public class CdmFormFactory extends FormToolkit {
     }
 
     /**
-     *
      * @author n.hoffmann
      * @date Jan 25, 2010
-     *
      */
     private class SelectionFocusHandler extends FocusAdapter {
         @Override
@@ -522,7 +559,6 @@ public class CdmFormFactory extends FormToolkit {
         formElement.setPropertyChangeListeners(propertyChangeListeners);
     }
 
-    /** {@inheritDoc} */
     @Override
     public void adapt(Control control, boolean trackFocus, boolean trackKeyboard) {
         if (trackFocus) {
@@ -531,7 +567,6 @@ public class CdmFormFactory extends FormToolkit {
         super.adapt(control, trackFocus, trackKeyboard);
     }
 
-    /** {@inheritDoc} */
     @Override
     public void adapt(Composite composite) {
         composite.addMouseListener(selectionMouseHandler);
@@ -540,9 +575,7 @@ public class CdmFormFactory extends FormToolkit {
     }
 
     /**
-     * <p>
      * destroyElement
-     * </p>
      *
      * @param formElement
      *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
@@ -564,10 +597,9 @@ public class CdmFormFactory extends FormToolkit {
         // }
         // call destroy on child elements recursively
 
-        Iterator<ICdmFormElement> formElementIterator = formElement.getElements().iterator();
-        ICdmFormElement childElement;
-        while (formElementIterator.hasNext()) {
-            childElement = formElementIterator.next();
+        Set<ICdmFormElement> tempFormElements = new HashSet<>();
+        tempFormElements.addAll(formElement.getElements());
+        for(ICdmFormElement childElement: tempFormElements) {
             destroyElement(childElement);
         }
         // dispose of the controls
@@ -578,18 +610,16 @@ public class CdmFormFactory extends FormToolkit {
             if (control.equals(formElement.getLayoutComposite())) {
                 continue;
             } else {
-                if (control != null && !control.isDisposed()){
+                if (!control.isDisposed()){
                     control.dispose();
                 }
-                control = null;
+                control = null; //needed?
             }
         }
     }
 
     /**
-     * <p>
      * createEmptyCell
-     * </p>
      *
      * @param parent
      *            a {@link org.eclipse.swt.widgets.Composite} object.
@@ -600,9 +630,7 @@ public class CdmFormFactory extends FormToolkit {
     }
 
     /**
-     * <p>
      * createMultiLanguageTextElement
-     * </p>
      *
      * @param parentElement
      *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
@@ -629,9 +657,7 @@ public class CdmFormFactory extends FormToolkit {
     }
 
     /**
-     * <p>
      * createMultiLanguageTextElement
-     * </p>
      *
      * @param parentElement
      *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
@@ -655,9 +681,7 @@ public class CdmFormFactory extends FormToolkit {
     }
 
     /**
-     * <p>
      * createMultiLanguageTextElement
-     * </p>
      *
      * @param parentElement
      *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
@@ -680,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,
@@ -725,10 +757,9 @@ public class CdmFormFactory extends FormToolkit {
             String initialText, int style) {
         return createTextWithLabelElement(parentElement, labelString, initialText, null, style);
     }
+
     /**
-     * <p>
      * createTextWithLabelElement
-     * </p>
      *
      * @param parentElement
      *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
@@ -869,16 +900,26 @@ public class CdmFormFactory extends FormToolkit {
      *         {@link eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement}
      *         object.
      */
-       public NumberWithLabelElement createNumberTextWithLabelElement(
+       public FloatWithLabelElement createFloatTextWithLabelElement(
                        ICdmFormElement parentElement, String labelString,
                        Number initialNumber, int style) {
-               NumberWithLabelElement element = new NumberWithLabelElement(this,
+               FloatWithLabelElement element = new FloatWithLabelElement(this,
                                parentElement, labelString, initialNumber, style);
                adapt(element);
                parentElement.addElement(element);
                return element;
        }
 
+       public BigDecimalWithLabelElement createBigDecimalTextWithLabelElement(
+            ICdmFormElement parentElement, String labelString,
+            Number initialNumber, int style) {
+           BigDecimalWithLabelElement element = new BigDecimalWithLabelElement(this,
+                parentElement, labelString, initialNumber, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
     public LanguageStringWithLabelElement createLanguageStringWithLabelElement(ICdmFormElement parentElement,
             String labelString, LanguageString languageString, int style) {
         return createLanguageStringWithLabelElement(parentElement, labelString, languageString, null, false, style);
@@ -917,6 +958,7 @@ public class CdmFormFactory extends FormToolkit {
         parentElement.addElement(element);
         return element;
     }
+
     /**
      * @deprecated Use {@link #createDefinedTermComboElement(TermType, ICdmFormElement, String, DefinedTermBase, int)} instead
      */
@@ -938,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,
@@ -957,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,
@@ -966,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,
@@ -975,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,
@@ -1018,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);
@@ -1026,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;
@@ -1048,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,
@@ -1073,14 +1157,19 @@ public class CdmFormFactory extends FormToolkit {
 
        public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
                Class<T> enumComboType, ICdmFormElement parentElement,
-               int style) {
-           return createEnumComboElement(enumComboType, parentElement, null, style);
+               int style, boolean hasNullValue) {
+           return createEnumComboElement(enumComboType, parentElement, null, style, hasNullValue);
        }
+       public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
+            Class<T> enumComboType, ICdmFormElement parentElement,
+            int style) {
+        return createEnumComboElement(enumComboType, parentElement, null, style, false);
+    }
 
        public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
                        Class<T> enumComboType, ICdmFormElement parentElement, Comparator<T> comparator,
-                       int style) {
-        EnumComboElement<T> element = new EnumComboElement<T>(this, parentElement, enumComboType, comparator, style);
+                       int style, boolean hasNullValue) {
+        EnumComboElement<T> element = new EnumComboElement<T>(this, parentElement, enumComboType, comparator, style, hasNullValue);
         adapt(element);
         parentElement.addElement(element);
         return element;
@@ -1094,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
@@ -1125,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.
@@ -1196,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());
@@ -1269,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) {
@@ -1323,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) {
@@ -1347,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,
@@ -1384,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);
@@ -1501,6 +1547,14 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public PartialElement createPartialElement(ICdmFormElement parentElement, String labelString, Partial partial, boolean showYear,
+            int style) {
+        PartialElement element = new PartialElement(this, parentElement, labelString, style, showYear);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
     /**
      * <p>
      * addSelectionListener
@@ -1736,6 +1790,15 @@ public class CdmFormFactory extends FormToolkit {
 
     }
 
+    public DerivedUnitMediaSection createDerivedUnitMediaSection(ConversationHolder conversation,
+            ICdmFormElement parentElement, int style) {
+        DerivedUnitMediaSection section = new DerivedUnitMediaSection(this, conversation, parentElement, style);
+        parentElement.addElement(section);
+        adapt(section);
+        return section;
+
+    }
+
     /**
      * @param definedTermClass
      * @param formElement
@@ -1743,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)) {
@@ -1752,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);
         }
@@ -1768,32 +1833,66 @@ 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 TermTreeDetailElement createFeatureTreeDetailElement(ICdmFormElement parentElement, int style){
+        TermTreeDetailElement element = new TermTreeDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
 
-    public FeatureTreeDetailElement createFeatureTreeDetailElement(ICdmFormElement parentElement, int style){
-        FeatureTreeDetailElement element = new FeatureTreeDetailElement(this, parentElement);
+    /**
+     * @param parentElement
+     * @param style
+     * @return
+     */
+    public AbstractCdmDetailElement<TermTree> createFeatureTreeDetailElementForTree(
+            AbstractCdmDetailSection<TermTree> parentElement, int style) {
+        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;
     }
@@ -1806,14 +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 TermTreeDetailSectionForNode createFeatureTreeDetailSectionForTree(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        TermTreeDetailSectionForNode section = new TermTreeDetailSectionForNode(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
@@ -1824,8 +1928,32 @@ 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;
+    }
+
+    public OriginalSourceAdvancedSection createOriginalSourceAdvancedSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        OriginalSourceAdvancedSection section = new OriginalSourceAdvancedSection(this, conversation, parentElement, selectionProvider, style);
+        addAndAdaptSection(parentElement, section);
+        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);
         return section;
     }
@@ -1835,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);
@@ -1892,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;
     }
@@ -1970,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;
     }
@@ -2174,6 +2308,28 @@ public class CdmFormFactory extends FormToolkit {
         addAndAdaptElement(parentElement, element);
         return element;
     }
+    public OriginalSourceElement createOriginalSourceElement(ICdmFormElement parentElement, CdmBase cdmEntity, String label){
+        OriginalSourceElement element = new OriginalSourceElement(this, parentElement, cdmEntity, label);
+        addAndAdaptElement(parentElement, element);
+        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);
@@ -2315,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;
     }
@@ -2436,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;
     }
@@ -2500,6 +2661,18 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public InapplicableIfEntityCollectionSectionForNode createInapplicableIfEntityCollectionSectionForNode(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        InapplicableIfEntityCollectionSectionForNode section = new InapplicableIfEntityCollectionSectionForNode(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public OnlyApplicableIfEntityCollectionSectionForNode createOnlyApplicableIfEntityCollectionSectionForNode(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        OnlyApplicableIfEntityCollectionSectionForNode section = new OnlyApplicableIfEntityCollectionSectionForNode(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public AnnotationSection createAnnotationSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
         AnnotationSection section = new AnnotationSection(this, conversation, parentElement, style);
         addAndAdaptSection(parentElement, section);
@@ -2576,19 +2749,32 @@ 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, 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, int style){
-        ExternalLinksSection section = new ExternalLinksSection(this, conversation, parentElement, style);
+
+    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;
     }
 
     public RightsSection createRightsSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
         RightsSection section = new RightsSection(this, conversation, parentElement, style);
+
         addAndAdaptSection(parentElement, section);
         return section;
     }
@@ -2641,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);
@@ -2653,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);
@@ -2767,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;
@@ -2781,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) {
@@ -2815,9 +3030,6 @@ public class CdmFormFactory extends FormToolkit {
             if (parentElement instanceof DescriptionElementSourceSection){
                parent = ((DescriptionElementSourceSection)parentElement).getParent();
             }
-            if(parent != null){
-                Composite grandParent = parent.getParent();
-            }
             element = new DescriptionElementSourceElement(this, parentElement, (DescriptionElementSource) entity,
                     removeListener, style, false);
         } else if (entity instanceof DescriptionElementSource) {
@@ -2826,10 +3038,12 @@ public class CdmFormFactory extends FormToolkit {
         }else if (entity instanceof TaxonNodeAgentRelation) {
             element = new TaxonNodeAgentRelationCollectionElement(this, parentElement, (TaxonNodeAgentRelation) entity,
                     removeListener,backgroundColor, style);
-        }
-        else if (entity instanceof IdentifiableSource) {
+        }else if (entity instanceof IdentifiableSource && parentElement.getEntity() instanceof DescriptionElementBase) {
             element = new IdentifiableSourceElement(this, parentElement, (IdentifiableSource) entity, removeListener,
-                    style);
+                    style, true);
+        } else if (entity instanceof IdentifiableSource ) {
+            element = new IdentifiableSourceElement(this, parentElement, (IdentifiableSource) entity, removeListener,
+                    style, true);
         } else if (entity instanceof DefinedTerm) {
             switch(((DefinedTerm)entity).getTermType()) {
             case Scope:
@@ -2898,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) {
@@ -2916,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);
@@ -2938,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
@@ -3054,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) {
@@ -3201,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);
@@ -3213,18 +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, enabled, style);
         } else if (entity instanceof TextData) {
-            detailedDescriptionElement = new TextDataDetailElement(this, parentElement, (TextData) entity, style);
-        } else {
+            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;
@@ -3313,6 +3563,46 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    /**
+     * @param class1
+     * @param formElement
+     * @param string
+     * @param area
+     * @param nothing
+     * @param style
+     * @return
+     */
+    public EntitySelectionElementWithIdInVocabulary createSelectionElementWithIdInVocabulary(Class<NamedArea> clazz,
+            ICdmFormElement formElement, String labelString, NamedArea area, int mode, int style) {
+        EntitySelectionElementWithIdInVocabulary element = new EntitySelectionElementWithIdInVocabulary(this,
+                formElement, clazz, labelString, area, mode, style);
+        adapt(element);
+        formElement.addElement(element);
+        return element;
+    }
+
+    /**
+     * @param extendedTimePeriodElement
+     * @param twistie
+     * @return
+     */
+    public ExtendedTimeDetailSection createExtendedTimeDetailSection(
+            ExtendedTimePeriodElement parentElement, int style) {
+        ExtendedTimeDetailSection section = new ExtendedTimeDetailSection(this, parentElement,  style);
+        parentElement.addElement(section);
+        adapt(section);
+        return section;
+    }
+    public ExtendedTimePeriodElement createExtendedTimePeriodElement(
+            ICdmFormElement parentElement, String labelString, ExtendedTimePeriod timePeriod, int style) {
+        ExtendedTimePeriodElement section = new ExtendedTimePeriodElement(this, parentElement, labelString, timePeriod, style);
+        parentElement.addElement(section);
+        adapt(section);
+        return section;
+    }
+
+
+
 
 //     public RichTextWithLabelElement createRichTextLabelElement(ICdmFormElement parentElement, String labelString, String initialText, int textHeight, int style) {
 //              RichTextWithLabelElement element = new RichTextWithLabelElement(this, parentElement, labelString,