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 7ac4541eb5708fb8195f8ea309220bfdabf70457..e83696d8e87dab498be6a625deb22f4843fe77d6 100644 (file)
@@ -58,9 +58,11 @@ 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;
@@ -104,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;
@@ -129,6 +130,7 @@ 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;
@@ -142,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;
@@ -153,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;
@@ -212,18 +216,20 @@ 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.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.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;
@@ -276,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;
@@ -333,14 +339,16 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDe
 import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.reference.AdvancedNomenclaturalSourceElement;
 import eu.etaxonomy.taxeditor.ui.section.reference.AdvancedSourceElement;
-import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
+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;
@@ -380,6 +388,7 @@ 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;
@@ -401,6 +410,7 @@ import eu.etaxonomy.taxeditor.ui.section.vocabulary.StatisticalMeasureDtoCollect
 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;
@@ -970,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,
@@ -1069,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;
@@ -1276,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());
@@ -1353,9 +1366,9 @@ public class CdmFormFactory extends FormToolkit {
      */
     public ToggleableTextElement createToggleableTextField(ICdmFormElement parentElement, String labelString,
             String initialText, boolean initialState, CacheRelevance relevance, int style) {
+
         ToggleableTextElement element = new ToggleableTextElement(this, parentElement, labelString, initialText,
                 initialState, relevance, style | orientation);
-
         adapt(element);
         parentElement.addElement(element);
         return element;
@@ -1370,6 +1383,20 @@ public class CdmFormFactory extends FormToolkit {
         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;
+    }
+
 
     /**
      * createTimePeriodElement
@@ -1779,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)) {
@@ -1788,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);
         }
@@ -1899,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;
     }
@@ -1934,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);
@@ -1991,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;
     }
@@ -2069,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;
     }
@@ -2279,6 +2314,12 @@ 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);
@@ -2435,16 +2476,21 @@ public class CdmFormFactory extends FormToolkit {
         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;
     }
@@ -2551,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;
     }
@@ -2942,7 +2988,11 @@ 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) {
@@ -2990,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);
@@ -3062,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) {
@@ -3085,7 +3134,7 @@ public class CdmFormFactory extends FormToolkit {
 //            }
         } 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);
@@ -3128,7 +3177,15 @@ public class CdmFormFactory extends FormToolkit {
             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
@@ -3236,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) {
@@ -3383,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);
@@ -3395,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;