layout issues for create taxonnode wizard
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / CdmFormFactory.java
index 8f45d3cf5c7946891338b28a13a00d961aa64c32..e579110253ba00e409eabf05a2faf74994399b10 100644 (file)
@@ -38,6 +38,8 @@ import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.ui.forms.IFormColors;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
 import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import org.eclipse.ui.forms.widgets.FormToolkit;
 import org.eclipse.ui.forms.widgets.Section;
@@ -49,31 +51,24 @@ 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.hibernate.HibernateProxyHelper;
+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.common.Annotation;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.Credit;
-import eu.etaxonomy.cdm.model.common.DefinedTerm;
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.Extension;
-import eu.etaxonomy.cdm.model.common.GrantedAuthorityImpl;
-import eu.etaxonomy.cdm.model.common.Group;
 import eu.etaxonomy.cdm.model.common.ICdmBase;
-import eu.etaxonomy.cdm.model.common.IEnumTerm;
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;
 import eu.etaxonomy.cdm.model.common.Identifier;
 import eu.etaxonomy.cdm.model.common.LSID;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.LanguageString;
 import eu.etaxonomy.cdm.model.common.Marker;
-import eu.etaxonomy.cdm.model.common.Representation;
-import eu.etaxonomy.cdm.model.common.TermBase;
-import eu.etaxonomy.cdm.model.common.TermType;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.common.TimePeriod;
-import eu.etaxonomy.cdm.model.common.User;
+import eu.etaxonomy.cdm.model.common.VerbatimTimePeriod;
 import eu.etaxonomy.cdm.model.common.VersionableEntity;
 import eu.etaxonomy.cdm.model.description.CategoricalData;
 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
@@ -81,6 +76,7 @@ import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
 import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureState;
 import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
 import eu.etaxonomy.cdm.model.description.KeyStatement;
 import eu.etaxonomy.cdm.model.description.MeasurementUnit;
@@ -95,6 +91,7 @@ import eu.etaxonomy.cdm.model.description.TextData;
 import eu.etaxonomy.cdm.model.location.NamedArea;
 import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
 import eu.etaxonomy.cdm.model.location.Point;
+import eu.etaxonomy.cdm.model.media.ExternalLink;
 import eu.etaxonomy.cdm.model.media.ImageFile;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
@@ -102,21 +99,38 @@ 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;
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
+import eu.etaxonomy.cdm.model.name.TextualTypeDesignation;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
+import eu.etaxonomy.cdm.model.permission.GrantedAuthorityImpl;
+import eu.etaxonomy.cdm.model.permission.Group;
+import eu.etaxonomy.cdm.model.permission.User;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
 import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
+import eu.etaxonomy.cdm.model.term.DefinedTerm;
+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.TermType;
+import eu.etaxonomy.cdm.model.term.TermVocabulary;
 import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
-import eu.etaxonomy.taxeditor.editor.IDistributionEditor;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
+import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
+import eu.etaxonomy.taxeditor.store.StoreUtil;
 import eu.etaxonomy.taxeditor.ui.combo.EnumComboElement;
-import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
+import eu.etaxonomy.taxeditor.ui.combo.InverseTermWrapper;
+import eu.etaxonomy.taxeditor.ui.combo.MisappliedRelationshipComboElement;
+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.element.MinMaxTextSection.UnitType;
 import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
@@ -142,8 +156,11 @@ import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeAgentRelationCo
 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeAgentRelationCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.classification.TaxonNodeDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.common.ExternalLinksElement;
+import eu.etaxonomy.taxeditor.ui.section.common.ExternalLinksSection;
 import eu.etaxonomy.taxeditor.ui.section.common.ReferenceEntityDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.common.ReferencedEntityDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.description.CommonNameSourceElement;
 import eu.etaxonomy.taxeditor.ui.section.description.DerivedUnitElement;
 import eu.etaxonomy.taxeditor.ui.section.description.DescribedSpecimenSection;
 import eu.etaxonomy.taxeditor.ui.section.description.DescriptionDetailElement;
@@ -176,8 +193,18 @@ import eu.etaxonomy.taxeditor.ui.section.description.detail.TaxonInteractionDeta
 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.CharacterNodeDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.feature.CharacterNodeDetailSection;
 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.InapplicableIfEntityCollectionSection;
+import eu.etaxonomy.taxeditor.ui.section.feature.OnlyApplicableIfCollectionElement;
+import eu.etaxonomy.taxeditor.ui.section.feature.OnlyApplicableIfEntityCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityCollectionElement;
 import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.grantedAuthority.GrantedAuthorityDetailSection;
@@ -214,8 +241,11 @@ 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;
 import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectingAreaDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectingAreasDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.CollectionDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.CurrentDeterminationDetailSection;
@@ -236,13 +266,10 @@ import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GeoScopeDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GeoScopePolyKeyDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.NamedAreaDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.OriginalLabelDataSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.SourceCollectionDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenCollectionDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenCollectionDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenHierarchyDetailElement;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.SpecimenHierarchyDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.association.DerivedUnitTypeDesignationElement;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.association.DerivedUnitTypeDesignationSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.association.TaxonAssociationDetailElement;
@@ -338,12 +365,15 @@ import eu.etaxonomy.taxeditor.ui.section.vocabulary.StateVocabularyCollectionEle
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.StateVocabularyCollectionSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.StatisticalMeasureCollectionElement;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.StatisticalMeasureCollectionSection;
+import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermMediaSection;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailElement;
 import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
+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.NomenclaturalAuthorTeamSelectionElement;
 import eu.etaxonomy.taxeditor.ui.selection.TaxonNodeSelectionElement;
+import eu.etaxonomy.taxeditor.view.detail.CdmSectionPart;
 
 /**
  * <p>
@@ -352,7 +382,6 @@ import eu.etaxonomy.taxeditor.ui.selection.TaxonNodeSelectionElement;
  *
  * @author n.hoffmann
  * @created Feb 24, 2010
- * @version 1.0
  */
 public class CdmFormFactory extends FormToolkit {
 
@@ -465,6 +494,9 @@ public class CdmFormFactory extends FormToolkit {
      *            object.
      */
     public void destroySelectionArbitrator(SelectionArbitrator selectionArbitrator) {
+        if(selectionArbitrator==null){
+            return;
+        }
         removeSelectionListener(selectionArbitrator);
         if (selectionProvider != null) {
             selectionProvider.removeSelectionChangedListener(selectionArbitrator);
@@ -601,7 +633,7 @@ public class CdmFormFactory extends FormToolkit {
      *            object.
      *
      * @param Representation
-     *            a {@link eu.etaxonomy.cdm.model.common.Representation} object.
+     *            a {@link eu.etaxonomy.cdm.model.term.Representation} object.
      * @param textHeight
      *            a int.
      * @param style
@@ -627,7 +659,7 @@ public class CdmFormFactory extends FormToolkit {
      *            object.
      *
      * @param Representation
-     *            a {@link eu.etaxonomy.cdm.model.common.Representation} object.
+     *            a {@link eu.etaxonomy.cdm.model.term.Representation} object.
      * @param textHeight
      *            a int.
      * @param style
@@ -643,58 +675,6 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
-    /**
-     * <p>
-     * createMultiLanguageTextElement
-     * </p>
-     *
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     *
-     * @param term
-     *            a {@link eu.etaxonomy.cdm.model.common.Representation} object.
-     * @param textHeight
-     *            a int.
-     * @param style
-     *            a int.
-     * @return a
-     *         {@link eu.etaxonomy.taxeditor.ui.element.RepresentationElement}
-     *         object.
-     */
-    public RepresentationElement createRepresentationElement(ICdmFormElement parentElement, TermBase term, int textHeight, int style, boolean fillDetails) {
-        RepresentationElement element = new RepresentationElement(this, parentElement, term, textHeight, style, fillDetails);
-        adapt(element);
-        parentElement.addElement(element);
-        return element;
-    }
-
-    /**
-     * <p>
-     * createMultiLanguageTextElement
-     * </p>
-     *
-     * @param parentElement
-     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-     *            object.
-     *
-     * @param term
-     *            a {@link eu.etaxonomy.cdm.model.common.Representation} object.
-     * @param textHeight
-     *            a int.
-     * @param style
-     *            a int.
-     * @return a
-     *         {@link eu.etaxonomy.taxeditor.ui.element.RepresentationElement}
-     *         object.
-     */
-    public TranslatableRepresentationElement createTranslatableRepresentationElement(ICdmFormElement parentElement, TermBase term, int textHeight, int style, boolean fillDetails) {
-        TranslatableRepresentationElement element = new TranslatableRepresentationElement(this, parentElement, 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,
@@ -794,6 +774,44 @@ public class CdmFormFactory extends FormToolkit {
         parentElement.addElement(element);
         return element;
     }
+    public UriWithLabelElement createUriWithLabelElement(ICdmFormElement parentElement, String labelString,
+            URI initialUri,Integer textHeight, int style) {
+        UriWithLabelElement element = new UriWithLabelElement(this, parentElement, labelString, initialUri, textHeight, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+
+    public DoiWithLabelElement createDoiWithLabelElement(ICdmFormElement parentElement, String labelString,
+            DOI initialDoi, int style) {
+        DoiWithLabelElement element = new DoiWithLabelElement(this, parentElement, labelString, initialDoi, null, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+    public DoiWithLabelElement createDoiWithLabelElement(ICdmFormElement parentElement, String labelString,
+            DOI initialDoi,Integer textHeight, int style) {
+        DoiWithLabelElement element = new DoiWithLabelElement(this, parentElement, labelString, initialDoi, textHeight, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+    public OrcidWithLabelElement createOrcidWithLabelElement(ICdmFormElement parentElement, String labelString,
+            ORCID initialDoi, int style) {
+        OrcidWithLabelElement element = new OrcidWithLabelElement(this, parentElement, labelString, initialDoi, null, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+    public OrcidWithLabelElement createDoiWithLabelElement(ICdmFormElement parentElement, String labelString,
+            ORCID initialDoi,Integer textHeight, int style) {
+        OrcidWithLabelElement element = new OrcidWithLabelElement(this, parentElement, labelString, initialDoi, textHeight, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
 
     /**
      * @param element
@@ -913,7 +931,7 @@ public class CdmFormFactory extends FormToolkit {
             T selection,
             int style,
             Comparator<T> comparator) {
-        return this.createDefinedTermComboElement(termType, null, parentElement, labelString, selection, true, style, false, comparator);
+        return this.createDefinedTermComboElement(termType, null, null, parentElement, labelString, selection, true, style, false, comparator);
     }
 
     public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
@@ -923,7 +941,7 @@ public class CdmFormFactory extends FormToolkit {
                        T selection,
                        boolean addEmptyElement,
                        int style) {
-        return this.createDefinedTermComboElement(termType, null, parentElement, labelString, selection, addEmptyElement, style, false, null);
+        return this.createDefinedTermComboElement(termType, null, null, parentElement, labelString, selection, addEmptyElement, style, false, null);
        }
 
        public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
@@ -932,7 +950,25 @@ public class CdmFormFactory extends FormToolkit {
                        String labelString,
                        T selection,
                        int style) {
-               return  this.createDefinedTermComboElement(termType, null, parentElement, labelString, selection, true, style, false, null);
+               return  this.createDefinedTermComboElement(termType, null, null, parentElement, labelString, selection, true, style, false, null);
+       }
+
+       public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
+            List<T> terms,
+            ICdmFormElement parentElement,
+            String labelString,
+            T selection,
+            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,
+               String labelString,
+               T selection,
+               boolean addEmptyElement,
+               int style) {
+           return  this.createDefinedTermComboElement(null, null, terms, parentElement, labelString, selection, addEmptyElement, style, false, null);
        }
     public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
                        TermType termType,
@@ -942,7 +978,7 @@ public class CdmFormFactory extends FormToolkit {
                        boolean addEmptyElement,
                        int style,
                        boolean useAbbrevLabel) {
-               return createDefinedTermComboElement(termType, null, parentElement, labelString, selection, addEmptyElement, style, useAbbrevLabel, null);
+               return createDefinedTermComboElement(termType, null, null, parentElement, labelString, selection, addEmptyElement, style, useAbbrevLabel, null);
        }
 
 
@@ -952,7 +988,7 @@ public class CdmFormFactory extends FormToolkit {
             String labelString,
             T selection,
             int style) {
-        return this.createDefinedTermComboElement(null, termVocabulary, parentElement, labelString, selection, true, style, false, null);
+        return this.createDefinedTermComboElement(null, termVocabulary, null, parentElement, labelString, selection, true, style, false, null);
     }
 
        public <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
@@ -963,12 +999,13 @@ public class CdmFormFactory extends FormToolkit {
                boolean addEmptyElement,
                int style,
                boolean useAbbrevLabel) {
-           return createDefinedTermComboElement(null, termVocabulary, parentElement, labelString, selection, addEmptyElement, style, useAbbrevLabel, null);
+           return createDefinedTermComboElement(null, termVocabulary, null, parentElement, labelString, selection, addEmptyElement, style, useAbbrevLabel, null);
        }
 
        private <T extends DefinedTermBase> TermComboElement<T> createDefinedTermComboElement(
                TermType termType,
                TermVocabulary<?> termVocabulary,
+               List<T> terms,
                ICdmFormElement parentElement,
                String labelString,
                T selection,
@@ -990,13 +1027,45 @@ public class CdmFormFactory extends FormToolkit {
                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);
+            }
+            adapt(element);
+            parentElement.addElement(element);
+            return element;
            }
-           else{
+           else {
                //this should never happen
                return null;
            }
        }
 
+       public NameRelationshipTypeCombo createNameRelationshipTypeCombo(ICdmFormElement parentElement,
+            String labelString,
+            int style,
+            boolean useAbbrevLabel,
+            Comparator<NameRelationshipType> comparator) {
+
+        NameRelationshipTypeCombo<InverseTermWrapper> element = new NameRelationshipTypeCombo(this, parentElement, labelString, true, style, useAbbrevLabel, comparator);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+       public MisappliedRelationshipComboElement createMisappliedRelationshipComboElement(
+               ICdmFormElement parentElement,
+            String labelString,
+            TaxonRelationshipType selection,
+            int style) {
+           MisappliedRelationshipComboElement combo = new MisappliedRelationshipComboElement(this, parentElement, labelString, selection, false, style, false);
+           adapt(combo);
+        parentElement.addElement(combo);
+        return combo;
+    }
+
        public <T extends IEnumTerm<T>> EnumComboElement<T> createEnumComboElement(
                Class<T> enumComboType, ICdmFormElement parentElement,
                int style) {
@@ -1135,6 +1204,16 @@ public class CdmFormFactory extends FormToolkit {
         section.addFocusListener(selectionFocusHandler);
         section.setPropertyChangeListeners(propertyChangeListeners);
 
+        section.addExpansionListener(new ExpansionAdapter(){
+            @Override
+            public void expansionStateChanged(ExpansionEvent e) {
+                super.expansionStateChanged(e);
+                if(section.getEntity()!=null){
+                    PreferencesUtil.setStringValue(StoreUtil.getPrefKey(section.getClass(), section.getEntity().getClass().getCanonicalName()), e.getState()?CdmSectionPart.EXPANDED:CdmSectionPart.COLLAPSED);
+                }
+            }
+        });
+
         if (section.getToggle() != null) {
             section.getToggle().setHoverDecorationColor(getColors().getColor(IFormColors.TB_TOGGLE_HOVER));
             section.getToggle().setDecorationColor(getColors().getColor(IFormColors.TB_TOGGLE));
@@ -1207,6 +1286,7 @@ public class CdmFormFactory extends FormToolkit {
             String initialText, boolean initialState, int style) {
         ToggleableTextElement element = new ToggleableTextElement(this, parentElement, labelString, initialText,
                 initialState, style | orientation);
+
         adapt(element);
         parentElement.addElement(element);
         return element;
@@ -1237,6 +1317,33 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    /**
+     * <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) {
+        VerbatimTimePeriodElement element = new VerbatimTimePeriodElement(this, parentElement, labelString, timePeriod, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+
+
        /**
         * <p>
         * createGatheringEventUnitElement
@@ -1292,17 +1399,12 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
-
-
     /**
-     * @param conversationHolder
-     * @param parent
-     * @param detailsViewer
-     * @param i
-     * @return
+     * Creates an empty section with the given message.<br>
+     * If message is <code>null</code> a default message will be displayed.
      */
-    public EmptySection createEmptySection(CdmFormFactory formFactory, ICdmFormElement parentElement, int style) {
-        EmptySection section = new EmptySection(formFactory, parentElement, style);
+    public EmptySection createEmptySection(String message, CdmFormFactory formFactory, ICdmFormElement parentElement, int style) {
+        EmptySection section = new EmptySection(message, formFactory, parentElement, style);
         parentElement.addElement(section);
         adapt(section);
         return section;
@@ -1321,8 +1423,29 @@ public class CdmFormFactory extends FormToolkit {
      * @return a {@link eu.etaxonomy.taxeditor.ui.element.DateDetailSection}
      *         object.
      */
-    public DateDetailSection createDateDetailSection(ICdmFormElement parentElement, int style) {
-        DateDetailSection section = new DateDetailSection(this, parentElement, style);
+    public DateDetailSection<TimePeriod> createDateDetailSection(ICdmFormElement parentElement, int style) {
+        DateDetailSection<TimePeriod> section = new DateDetailSection<TimePeriod>(this, parentElement, false, style);
+        parentElement.addElement(section);
+        adapt(section);
+        return section;
+    }
+
+    /**
+     * <p>
+     * createVerbatimDateDetailSection
+     * </p>
+     *
+     * @param parentElement
+     *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+     *            object.
+     * @param style
+     *            a int.
+     * @return a {@link eu.etaxonomy.taxeditor.ui.element.VerbatimDateDetailSection}
+     *         object.
+     */
+    public DateDetailSection<VerbatimTimePeriod> createVerbatimDateDetailSection(ICdmFormElement parentElement, int style) {
+        DateDetailSection<VerbatimTimePeriod> section
+               = new DateDetailSection<VerbatimTimePeriod>(this, parentElement, true, style);
         parentElement.addElement(section);
         adapt(section);
         return section;
@@ -1587,10 +1710,10 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
-    public AbstractFormSection createDefinedTermDetailSection(Class definedTermClass, ConversationHolder conversation,
+    public DefinedTermDetailSection createDefinedTermDetailSection(Class definedTermClass, ConversationHolder conversation,
             ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style) {
 
-        AbstractFormSection section = new DefinedTermDetailSection(this, definedTermClass, conversation, parentElement,
+        DefinedTermDetailSection section = new DefinedTermDetailSection(this, definedTermClass, conversation, parentElement,
                 selectionProvider, style);
 
         parentElement.addElement(section);
@@ -1599,6 +1722,15 @@ public class CdmFormFactory extends FormToolkit {
 
     }
 
+    public TermMediaSection createTermMediaSection(ConversationHolder conversation,
+            ICdmFormElement parentElement, int style) {
+        TermMediaSection section = new TermMediaSection(this, conversation, parentElement, style);
+        parentElement.addElement(section);
+        adapt(section);
+        return section;
+
+    }
+
     /**
      * @param definedTermClass
      * @param formElement
@@ -1625,18 +1757,42 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public CharacterNodeDetailSection createCharacterNodeDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
+        CharacterNodeDetailSection section = new CharacterNodeDetailSection(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 CharacterNodeDetailElement createCharacterNodeDetailElement(ICdmFormElement parentElement, int style){
+        CharacterNodeDetailElement element = new CharacterNodeDetailElement(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 FeatureTreeDetailElement createFeatureTreeDetailElement(ICdmFormElement parentElement, int style){
+        FeatureTreeDetailElement element = new FeatureTreeDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
+    public FeatureNodeDetailElement createFeatureNodeDetailElement(ICdmFormElement parentElement, int style){
+        FeatureNodeDetailElement element = new FeatureNodeDetailElement(this, parentElement);
+        addAndAdaptElement(parentElement, element);
+        return element;
+    }
+
 
     //--------DetailSections---------
     public NameDetailSection createNameDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
@@ -1645,6 +1801,18 @@ 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);
+        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);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
     public ReferenceDetailSection createReferenceDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         ReferenceDetailSection section = new ReferenceDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
@@ -1731,12 +1899,6 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
-    public SpecimenHierarchyDetailSection createSpecimenHierarchyDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
-        SpecimenHierarchyDetailSection section = new SpecimenHierarchyDetailSection(this, conversation, parentElement, selectionProvider, style);
-        addAndAdaptSection(parentElement, section);
-        return section;
-    }
-
     public DerivedUnitBaseDetailSection createDerivedUnitBaseDetailSection(ConversationHolder conversation, ICdmFormElement parentElement, ISelectionProvider selectionProvider, int style){
         DerivedUnitBaseDetailSection section = new DerivedUnitBaseDetailSection(this, conversation, parentElement, selectionProvider, style);
         addAndAdaptSection(parentElement, section);
@@ -2275,12 +2437,6 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
-    public SpecimenHierarchyDetailElement createSpecimenHierarchyDetailElement(ICdmFormElement parentElement) {
-        SpecimenHierarchyDetailElement element = new SpecimenHierarchyDetailElement(this, parentElement);
-        addAndAdaptElement(parentElement, element);
-        return element;
-    }
-
     public DerivedUnitBaseDetailElement createDerivedUnitBaseDetailElement(ICdmFormElement parentElement) {
         DerivedUnitBaseDetailElement element = new DerivedUnitBaseDetailElement(this, parentElement);
         addAndAdaptElement(parentElement, element);
@@ -2327,6 +2483,18 @@ public class CdmFormFactory extends FormToolkit {
         return section;
     }
 
+    public InapplicableIfEntityCollectionSection createInapplicableIfEntityCollectionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        InapplicableIfEntityCollectionSection section = new InapplicableIfEntityCollectionSection(this, conversation, parentElement, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
+
+    public OnlyApplicableIfEntityCollectionSection createOnlyApplicableIfEntityCollectionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
+        OnlyApplicableIfEntityCollectionSection section = new OnlyApplicableIfEntityCollectionSection(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);
@@ -2338,12 +2506,16 @@ public class CdmFormFactory extends FormToolkit {
         addAndAdaptSection(parentElement, section);
         return section;
     }
-
     public DescriptionElementSourceSection createDescriptionElementSourceSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
         DescriptionElementSourceSection section = new DescriptionElementSourceSection(this, conversation, parentElement, style);
         addAndAdaptSection(parentElement, section);
         return section;
     }
+    public DescriptionElementSourceSection createDescriptionElementSourceSection(ConversationHolder conversation, ICdmFormElement parentElement, Reference defaultSource, int style){
+        DescriptionElementSourceSection section = new DescriptionElementSourceSection(this, conversation, parentElement, defaultSource, style);
+        addAndAdaptSection(parentElement, section);
+        return section;
+    }
 
     public ExtensionSection createExtensionSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
         ExtensionSection section = new ExtensionSection(this, conversation, parentElement, style);
@@ -2404,6 +2576,11 @@ public class CdmFormFactory extends FormToolkit {
         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 RightsSection createRightsSection(ConversationHolder conversation, ICdmFormElement parentElement, int style){
         RightsSection section = new RightsSection(this, conversation, parentElement, style);
@@ -2588,7 +2765,7 @@ public class CdmFormFactory extends FormToolkit {
 
     public AbstractEntityCollectionElement createEntityCollectionElement(AbstractFormSection parentElement,
             Object versionableEntity, SelectionListener removeListener, Color backgroundColor, int style) {
-        AbstractEntityCollectionElement element = null;
+        AbstractEntityCollectionElement<?> element = null;
 
         Object entity = HibernateProxyHelper.deproxy(versionableEntity);
 
@@ -2604,6 +2781,8 @@ public class CdmFormFactory extends FormToolkit {
             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);
         } else if (entity instanceof Marker) {
             element = new MarkerElement(this, parentElement, (Marker) entity, removeListener, style);
         } else if (entity instanceof TaxonNodeAgentRelation) {
@@ -2623,10 +2802,23 @@ public class CdmFormFactory extends FormToolkit {
                     style);
         } else if (entity instanceof Rights) {
             element = new RightsElement(this, parentElement, (Rights) entity, removeListener, style);
+        } else if (entity instanceof DescriptionElementSource && parentElement.getEntity() instanceof CommonTaxonName) {
+            element = new CommonNameSourceElement(this, parentElement, (DescriptionElementSource) entity,
+                    removeListener, style);
+        } else if (entity instanceof DescriptionElementSource  && parentElement.getEntity() instanceof Distribution) {
+            Composite parent = null;
+            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) {
             element = new DescriptionElementSourceElement(this, parentElement, (DescriptionElementSource) entity,
-                    removeListener, style);
-        } else if (entity instanceof TaxonNodeAgentRelation) {
+                    removeListener, style, false);
+        }else if (entity instanceof TaxonNodeAgentRelation) {
             element = new TaxonNodeAgentRelationCollectionElement(this, parentElement, (TaxonNodeAgentRelation) entity,
                     removeListener,backgroundColor, style);
         }
@@ -2663,6 +2855,9 @@ public class CdmFormFactory extends FormToolkit {
         } else if (entity instanceof NameTypeDesignation) {
             element = new NameTypeDesignationElement(this, parentElement, (NameTypeDesignation) entity, removeListener,
                     style);
+        } else if (entity instanceof TextualTypeDesignation) {
+            element = new TextTypeDesignationElement(this, parentElement, (TextualTypeDesignation) entity, removeListener,
+                    style);
         } else if (entity instanceof NameRelationship) {
             element = new NameRelationshipDetailElement(this, parentElement, (NameRelationship) entity, removeListener,
                     style);
@@ -2700,7 +2895,7 @@ public class CdmFormFactory extends FormToolkit {
             }
 
         } else if (entity instanceof NamedArea) {
-            element = new NamedAreaDetailElement(this, parentElement, (NamedArea) entity, removeListener, style);
+            element = new CollectingAreaDetailElement(this, parentElement, (NamedArea) entity, removeListener, style);
         } else if (entity instanceof DeterminationEvent) {
             element = new DeterminationEventDetailElement(this, parentElement, (DeterminationEvent) entity, removeListener, style);
         } else if (entity instanceof User) {
@@ -2742,11 +2937,15 @@ public class CdmFormFactory extends FormToolkit {
             element = new MeasurementUnitCollectionElement(this, parentElement, (MeasurementUnit) entity, removeListener, backgroundColor, style);
         } else if (entity instanceof StatisticalMeasure) {
             element = new StatisticalMeasureCollectionElement(this, parentElement, (StatisticalMeasure) entity, removeListener, backgroundColor, style);
+        } 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);
         }
 
         //check for parent section when entity is null
         //this happens when AbstractUnboundEntityCollectionSection is used
-        if(entity==null){
+        if(element==null){
             if(parentElement instanceof ScopeSection || parentElement instanceof ScopeRestrictionSection){
                 element = new ScopeElement(this,
                         parentElement,
@@ -2765,9 +2964,13 @@ public class CdmFormFactory extends FormToolkit {
 
 
         if (element == null) {
-            MessagingUtils.messageDialog("No element for entity", this,
-                    "Could not generate element for entity. Looks like the case is not handled already. Check implementation. Entity: "
-                            + entity, null);
+            MessagingUtils.messageDialog(
+                    String.format("Error when creating section %s",
+                            parentElement.getClass().getSimpleName()),
+                    this,
+                    String.format("Could not generate collection element for entity of class %s."
+                            + " Looks like the case is not yet handled. Check implementation.\n"
+                            + "Entity: %s", entity.getClass(), entity.toString()), null);
         }
 
         else{
@@ -2814,7 +3017,18 @@ public class CdmFormFactory extends FormToolkit {
      * @return a {@link EntitySelectionElement} object.
      */
     public <T extends CdmBase> EntitySelectionElement<T> createSelectionElement(Class<T> clazz,
-            ConversationHolder conversation, ICdmFormElement parentElement, String labelString, T selection, int mode,
+            ICdmFormElement parentElement, String labelString, T selection, int mode,
+            int style, Integer limit) {
+        EntitySelectionElement<T> element = new EntitySelectionElement<T>(this,
+                parentElement, clazz,
+                labelString, selection, mode, style, limit);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
+    public <T extends CdmBase> EntitySelectionElement<T> createSelectionElement(Class<T> clazz,
+            ICdmFormElement parentElement, String labelString, T selection, int mode,
             int style, boolean filterElement) {
         EntitySelectionElement<T> element = new EntitySelectionElement<T>(this, //conversation,
                 parentElement, clazz,
@@ -2828,7 +3042,7 @@ public class CdmFormFactory extends FormToolkit {
 //            ConversationHolder conversation,
             ICdmFormElement parentElement, String labelString, T selection, int mode,
             int style) {
-        EntitySelectionElement<T> element = new EntitySelectionElement<T>(this, //conversation,
+        EntitySelectionElement<T> element = new EntitySelectionElement<T>(this,
                 parentElement, clazz,
                 labelString, selection, mode, style);
         adapt(element);
@@ -2836,6 +3050,15 @@ public class CdmFormFactory extends FormToolkit {
         return element;
     }
 
+    public CommonNameReferenceSelectionElement createCommonNameReferenceSelectionElement(ICdmFormElement parentElement, String labelString, Reference selection, int mode,
+          int style) {
+        CommonNameReferenceSelectionElement element = new CommonNameReferenceSelectionElement(this,
+              parentElement, labelString, selection, mode, style);
+      adapt(element);
+      parentElement.addElement(element);
+      return element;
+  }
+
     /**
      * <p>
      * Creates a selection element for the given type T which shows only the <b>abbreviated</b> title as the label.
@@ -2883,11 +3106,21 @@ public class CdmFormFactory extends FormToolkit {
             ICdmFormElement parentElement, String labelString, TaxonNode selection, int mode, int style) {
         TaxonNodeSelectionElement element = new TaxonNodeSelectionElement(this, //conversation,
                 parentElement,
-                labelString, selection, mode, style);
+                labelString, selection, mode, style, null);
         adapt(element);
         parentElement.addElement(element);
         return element;
     }
+    public TaxonNodeSelectionElement createTaxonNodeSelectionElement(ConversationHolder conversation,
+            ICdmFormElement parentElement, String labelString, TaxonNode selection, int mode, int style, Integer limit) {
+        TaxonNodeSelectionElement element = new TaxonNodeSelectionElement(this, //conversation,
+                parentElement,
+                labelString, selection, mode, style, limit);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
 
 //    public NomenclaturalAuthorTeamSelectionElement createNomenclaturalAuthorTeamSelectionElement(
 //            ConversationHolder conversation, ICdmFormElement parentElement, String labelString, Team selection,
@@ -2907,6 +3140,8 @@ public class CdmFormFactory extends FormToolkit {
         return labelElement;
     }
 
+
+
 //    public DateElementFormElement createDateElementForm(ICdmFormElement formElement, String labelText, DateTime dateTime, int style){
 //        Label label = new Label(formElement.getLayoutComposite(), style);
 //        label.setText(labelText+" (yyyy-MM-dd)");
@@ -2920,7 +3155,7 @@ public class CdmFormFactory extends FormToolkit {
         Label label = new Label(formElement.getLayoutComposite(), style);
          label.setText(labelText);
          label.setLayoutData(new TableWrapData(TableWrapData.LEFT, TableWrapData.MIDDLE, 1, 1));
-         DateElement dateElement = new DateElement(this, formElement.getLayoutComposite(), dateTime, labelText, style, editableText);
+         DateElement dateElement = new DateElement(formElement.getLayoutComposite(), dateTime, labelText, style, editableText);
          dateElement.initController(this, formElement);
          dateElement.setLayoutData(new TableWrapData(TableWrapData.LEFT, TableWrapData.MIDDLE, 1, 1));
          return dateElement;
@@ -2967,11 +3202,10 @@ public class CdmFormFactory extends FormToolkit {
                     style);
         } else if (entity instanceof Distribution && !enabled) {
             detailedDescriptionElement = new DistributionDetailElement(this, parentElement, (Distribution) entity,
-                    style);
-            detailedDescriptionElement.setEnabled(enabled);
+                    enabled, style);
         } else if (entity instanceof Distribution) {
             detailedDescriptionElement = new DistributionDetailElement(this, parentElement, (Distribution) entity,
-                    style);
+                    true, style);
         }else if (entity instanceof IndividualsAssociation) {
             detailedDescriptionElement = new IndividualsAssociationDetailElement(this, parentElement,
                     (IndividualsAssociation) entity, style);
@@ -3049,6 +3283,31 @@ public class CdmFormFactory extends FormToolkit {
        }
 
 
+    /**
+     * <p>
+     * createTextWithLabelElement
+     * </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 textLimit maximal number of characters allowed
+     * @param style
+     *            a int.
+     * @return a {@link eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement}
+     *         object.
+     */
+    public RuleConsideredElement createRuleConsideredElement(ICdmFormElement parentElement, String labelString, boolean isShowCodeEdition, int style) {
+        RuleConsideredElement element = new RuleConsideredElement(this, parentElement, labelString, isShowCodeEdition, style);
+        adapt(element);
+        parentElement.addElement(element);
+        return element;
+    }
+
 
 //     public RichTextWithLabelElement createRichTextLabelElement(ICdmFormElement parentElement, String labelString, String initialText, int textHeight, int style) {
 //              RichTextWithLabelElement element = new RichTextWithLabelElement(this, parentElement, labelString,