- added section for associated taxa (IndividualsAssocation, TypeDesignation) to...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / detail / DetailsViewer.java
index a5df6cd3159d2602b3820e4cd3fa70aa25a506df..d21be346eec997c81abd91814396f2b8c5e15ead 100644 (file)
@@ -15,6 +15,7 @@ import java.util.Set;
 
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeNode;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.forms.widgets.ExpandableComposite;
@@ -22,6 +23,7 @@ import org.eclipse.ui.forms.widgets.ExpandableComposite;
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
 import eu.etaxonomy.cdm.api.service.ITermService;
+import eu.etaxonomy.cdm.ext.occurrence.gbif.GbifResponse;
 import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.Team;
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
@@ -34,21 +36,25 @@ import eu.etaxonomy.cdm.model.common.User;
 import eu.etaxonomy.cdm.model.description.CategoricalData;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
-import eu.etaxonomy.cdm.model.description.PolytomousKey;
 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
 import eu.etaxonomy.cdm.model.media.Media;
+import eu.etaxonomy.cdm.model.molecular.Amplification;
+import eu.etaxonomy.cdm.model.molecular.DnaSample;
+import eu.etaxonomy.cdm.model.molecular.Sequence;
+import eu.etaxonomy.cdm.model.molecular.SingleRead;
 import eu.etaxonomy.cdm.model.name.NonViralName;
 import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 import eu.etaxonomy.cdm.model.reference.Reference;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
 import eu.etaxonomy.taxeditor.editor.UsageTermCollection;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.FeatureNodeContainer;
 import eu.etaxonomy.taxeditor.model.PolytomousKeyRelationship;
+import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
@@ -81,11 +87,29 @@ import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.EmptySection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldUnitGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.OriginalLabelDataSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.association.TaxonAssociationDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationCloningDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationGelPhotoCollectionDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationGeneralDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.AmplificationPrimerDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaQualityDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.DnaSampleGeneralDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SampleDesignationDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceContigFileCollectionDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceGeneralDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SequenceReferenceCollectionDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadGeneralDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.SingleReadPherogramCollectionDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.dna.TissueSampleGeneralDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.occurrence.media.MediaSpecimenGeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
+import eu.etaxonomy.taxeditor.ui.section.supplemental.RightsSection;
 import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessagesSection;
 import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonBaseDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.taxon.TaxonRelationshipDetailSection;
@@ -109,98 +133,108 @@ import eu.etaxonomy.taxeditor.view.AbstractCdmViewPart;
  */
 public class DetailsViewer extends AbstractCdmDataViewer {
 
-       private ISelection selection;
-
-       /**
-        * <p>
-        * Constructor for DetailsViewer.
-        * </p>
-        *
-        * @param parent
-        *            a {@link org.eclipse.swt.widgets.Composite} object.
-        * @param viewPart
-        *            a {@link eu.etaxonomy.taxeditor.view.AbstractCdmViewPart}
-        *            object.
-        */
-       public DetailsViewer(Composite parent, AbstractCdmViewPart viewPart) {
-               super(parent, viewPart);
-       }
-
-       // START HACK TO MAKE THE DERIVED UNIT FACADE WORK
-       // since we are getting implementations of DerivedUnitBase from the bulk
-       // editor
-       // and not derived unit facade objects,
-
-       /*
-        * (non-Javadoc)
-        *
-        * @see
-        * eu.etaxonomy.taxeditor.editor.view.AbstractCdmDataViewer#setInput(java
-        * .lang.Object)
-        */
-       @Override
-       public void setInput(Object input) {
-               if (input instanceof DerivedUnit) {
-                       try {
-                               input = DerivedUnitFacade.NewInstance((DerivedUnit) input,
-                                               PreferencesUtil.getDerivedUnitConfigurator());
-                       } catch (DerivedUnitFacadeNotSupportedException e) {
-                AbstractUtility.error(getClass(), e);
-                       }
-               }
-               else if(input instanceof FieldUnit){
-                   input = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) input);
-               }
-               super.setInput(input);
-       }
-
-       @Override
-       protected void markViewPartDirty() {
-               if (getInput() instanceof DerivedUnitFacade) {
-                   DerivedUnitFacade facade = (DerivedUnitFacade) getInput();
-                   if(facade.innerDerivedUnit()!=null){
-                       getViewPart().changed(facade.innerDerivedUnit());
-                   }
-                   else if(facade.innerFieldUnit()!=null){
-                       getViewPart().changed(facade.innerFieldUnit());
-                   }
-               }
-
-               super.markViewPartDirty();
-       }
-
-       // END HACK TO MAKE THE DERIVED UNIT FACADE WORK
-
-       /*
-        * (non-Javadoc)
-        *
-        * @see org.eclipse.jface.viewers.Viewer#refresh()
-        */
-       /** {@inheritDoc} */
-       @Override
-       protected void showParts() {
-           // FIXME (CM) : Need to clean out this code.
-           // Too much type checking to decide which detail view to display.
-           // Need to build in a mechanism where navigators / editors are 'aware'
-           // of the corresponding detail viewer.
+    private ISelection selection;
+
+    /**
+     * <p>
+     * Constructor for DetailsViewer.
+     * </p>
+     *
+     * @param parent
+     *            a {@link org.eclipse.swt.widgets.Composite} object.
+     * @param viewPart
+     *            a {@link eu.etaxonomy.taxeditor.view.AbstractCdmViewPart}
+     *            object.
+     */
+    public DetailsViewer(Composite parent, AbstractCdmViewPart viewPart) {
+        super(parent, viewPart);
+    }
+
+    // START HACK TO MAKE THE DERIVED UNIT FACADE WORK
+    // since we are getting implementations of DerivedUnitBase from the bulk
+    // editor
+    // and not derived unit facade objects,
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * eu.etaxonomy.taxeditor.editor.view.AbstractCdmDataViewer#setInput(java
+     * .lang.Object)
+     */
+    @Override
+    public void setInput(Object input) {
+        if(input instanceof TreeNode){
+            input = ((TreeNode) input).getValue();
+        }
+        if(input instanceof GbifResponse){
+            input = ((GbifResponse) input).getDerivedUnitFacade();
+        }
+        if (input.getClass().equals(DerivedUnit.class)) {
+            DerivedUnit derivedUnit = (DerivedUnit)input;
+            try {
+                input = DerivedUnitFacade.NewInstance(derivedUnit,
+                        PreferencesUtil.getDerivedUnitConfigurator());
+            } catch (DerivedUnitFacadeNotSupportedException e) {
+//                MessagingUtils.error(getClass(), e); //nothing should happen, later on the Details View will show an according information that it is not possible to open this data
+            }
+        }
+        else if(input instanceof FieldUnit){
+            input = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, (FieldUnit) input);
+        }
+        super.setInput(input);
+    }
+
+    @Override
+    protected void markViewPartDirty() {
+        if (getInput() instanceof DerivedUnitFacade) {
+            DerivedUnitFacade facade = (DerivedUnitFacade) getInput();
+            if(facade.innerDerivedUnit()!=null){
+                getViewPart().changed(facade.innerDerivedUnit());
+            }
+            else if(facade.innerFieldUnit()!=null){
+                getViewPart().changed(facade.innerFieldUnit());
+            }
+        }
+        else{
+            super.markViewPartDirty();
+        }
+    }
+
+    // END HACK TO MAKE THE DERIVED UNIT FACADE WORK
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.eclipse.jface.viewers.Viewer#refresh()
+     */
+    /** {@inheritDoc} */
+    @Override
+    protected void showParts() {
+        // FIXME (CM) : Need to clean out this code.
+        // Too much type checking to decide which detail view to display.
+        // Need to build in a mechanism where navigators / editors are 'aware'
+        // of the corresponding detail viewer.
         Object input = getInput();
+
+        destroySections();
         if (input instanceof TaxonBase) {
-                       createTaxonSections(rootElement);
+            createTaxonSections(rootElement);
 
         } else if (input instanceof NonViralName) {
-                       createNameSections(rootElement);
+            createNameSections(rootElement);
 
         } else if (input instanceof Reference) {
-                       createReferenceSections(rootElement);
+            createReferenceSections(rootElement);
 
         } else if (input instanceof Team) {
-                       createTeamDetailSection(rootElement);
+            createTeamDetailSection(rootElement);
 
         } else if (input instanceof Person) {
-                       createPersonDetailSection(rootElement);
+            createPersonDetailSection(rootElement);
 
         } else if (input instanceof TeamOrPersonBase) {
-                       createTeamOrPersonBaseDetailSection(rootElement);
+            createTeamOrPersonBaseDetailSection(rootElement);
 
         } else if (input instanceof DescriptionBase) {
             if(input instanceof SpecimenDescription){
@@ -231,426 +265,587 @@ public class DetailsViewer extends AbstractCdmDataViewer {
             Set<Marker> descriptionMarkers = ((DescriptionElementBase) input).getInDescription().getMarkers();
             MarkerType useMarkertype = (MarkerType) CdmStore.getService(ITermService.class).find(
                     UsageTermCollection.uuidUseMarkerType);
-                       Boolean isUseDescription = false;
-                       for (Marker marker : descriptionMarkers) {
-                               if (marker.getMarkerType().equals(useMarkertype)) {
-                                       isUseDescription = true;
-                               }
-                       }
+            Boolean isUseDescription = false;
+            for (Marker marker : descriptionMarkers) {
+                if (marker.getMarkerType().equals(useMarkertype)) {
+                    isUseDescription = true;
+                }
+            }
 
             if (isUseDescription == true && input instanceof CategoricalData) {
-                               createUseRecordSection(rootElement);
+                createUseRecordSection(rootElement);
             } else {
-                               createDescriptionElementSection(rootElement);
-                       }
+                createDescriptionElementSection(rootElement);
+            }
 
         } else if (input instanceof Media) {
-                       createMediaElementSection(rootElement);
+            createMediaElementSection(rootElement);
 
         } else if (input instanceof DerivedUnitFacade) {
             if(((DerivedUnitFacade) input).getType()==SpecimenOrObservationType.FieldUnit){
                 createFieldUnitSection(rootElement);
             }
+            else if(((DerivedUnitFacade) input).getType()==SpecimenOrObservationType.PreservedSpecimen){
+                createDerivedUnitBaseElementSection(rootElement);
+            }
+            else if(((DerivedUnitFacade) input).getType()==SpecimenOrObservationType.TissueSample){
+                //TissueSample should only be created by using it's own class
+                //in future using only one class with different SpecimenOrObservationTypes is desired
+//                createTissueSampleSection(rootElement);
+            }
             else{
                 createDerivedUnitBaseElementSection(rootElement);
             }
-
-        } else if (input instanceof FieldUnit) {
-            createFieldUnitSection(rootElement);
-
-        } else if (input instanceof FeatureNodeContainer) {
-                       createFeatureDistributionSection(rootElement);
-
-        } else if (input instanceof PolytomousKey) {
-                       //createPolytomousKeySection(rootElement);
-
-        } else if ((input instanceof PolytomousKeyNode) || (input instanceof PolytomousKeyRelationship)) {
-                       createPolytomousKeyNodeSection(rootElement);
+        } else if (input instanceof DnaSample){
+            DnaSample dnaSample = (DnaSample)input;
+            if(dnaSample.getRecordBasis()==SpecimenOrObservationType.TissueSample){
+                createTissueSampleSection(rootElement);
+            }
+            else if(dnaSample.getRecordBasis()==SpecimenOrObservationType.DnaSample){
+                createDnaSampleSection(rootElement);
+            }
+        } else if (input instanceof MediaSpecimen){
+            createMediaSpecimenSection(rootElement);
+        }
+        else if(input instanceof Amplification){
+            createAmplificationSection(rootElement);
+        }
+        else if(input instanceof Sequence){
+            createSequenceSection(rootElement);
+        }
+        else if(input instanceof SingleRead){
+            createSingleReadSection(rootElement);
+        }
+        else if (input instanceof FeatureNodeContainer) {
+            createFeatureDistributionSection(rootElement);
+
+        }else if ((input instanceof PolytomousKeyNode) || (input instanceof PolytomousKeyRelationship)) {
+            createPolytomousKeyNodeSection(rootElement);
         } else if (input instanceof User) {
-                       createUserSection(rootElement);
+            createUserSection(rootElement);
         } else if (input instanceof Group) {
-                       createGroupSection(rootElement);
+            createGroupSection(rootElement);
         } else if (input instanceof TaxonRelationship) {
-                       createTaxonRelationshipSection(rootElement);
+            createTaxonRelationshipSection(rootElement);
         } else if (input instanceof TermVocabulary) {
-                       createTermVocabularySection(rootElement);
+            createTermVocabularySection(rootElement);
         } else if (input instanceof DefinedTermBase) {
-                       createDefinedTermSection(rootElement);
-               } else {
-                       destroySections();
-               }
-               layout();
-       }
+            createDefinedTermSection(rootElement);
+        }
+        else {
+            createEmptySection(rootElement);
+        }
+        layout();
+    }
 
 
-       /**
-        * @param rootElement
-        */
-       private void createGroupSection(RootElement parent) {
-               destroySections();
-
-        GroupDetailSection groupDetailSection = formFactory.createGroupDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE| ExpandableComposite.EXPANDED);
-        MemberDetailSection memberDetailSection = formFactory.createMemberDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
-        GrantedAuthorityDetailSection grantedAuthorityDetailSection = formFactory.createGrantedAuthorityDetailSection(getConversationHolder(), parent,ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+    /**
+     * @param rootElement
+     */
+    private void createEmptySection(RootElement parent) {
+        destroySections();
 
-               addPart(groupDetailSection);
-               addPart(memberDetailSection);
-               addPart(grantedAuthorityDetailSection);
-       }
-
-       /*
-        * (non-Javadoc)
-        *
-        * @see org.eclipse.jface.viewers.Viewer#getSelection()
-        */
-       /** {@inheritDoc} */
-       @Override
-       public ISelection getSelection() {
-               return selection;
-       }
-
-       /*
-        * (non-Javadoc)
-        *
-        * @see
-        * org.eclipse.jface.viewers.Viewer#setSelection(org.eclipse.jface.viewers
-        * .ISelection, boolean)
-        */
-       /** {@inheritDoc} */
-       @Override
-       public void setSelection(ISelection selection, boolean reveal) {
-               this.selection = selection;
-        SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(this, selection);
-               fireSelectionChanged(selectionChangedEvent);
-       }
-
-       /**
-        * createTaxonSections(RootElement parent)
-     *
-        * @param parent
-        */
-       private void createTaxonSections(RootElement parent) {
-               destroySections();
+        EmptySection emptySection = formFactory.createEmptySection(formFactory, parent, SWT.NONE);
 
-        TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+        addPart(emptySection);
+    }
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+    /**
+     * @param rootElement
+     */
+    private void createGroupSection(RootElement parent) {
+        destroySections();
 
-        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE
-                        | ExpandableComposite.EXPANDED);
+        GroupDetailSection groupDetailSection = formFactory.createGroupDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE| ExpandableComposite.EXPANDED);
+        MemberDetailSection memberDetailSection = formFactory.createMemberDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        GrantedAuthorityDetailSection grantedAuthorityDetailSection = formFactory.createGrantedAuthorityDetailSection(getConversationHolder(), parent,ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        addPart(groupDetailSection);
+        addPart(memberDetailSection);
+        addPart(grantedAuthorityDetailSection);
+    }
 
-        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+    /*
+     * (non-Javadoc)
+     *
+     * @see org.eclipse.jface.viewers.Viewer#getSelection()
+     */
+    /** {@inheritDoc} */
+    @Override
+    public ISelection getSelection() {
+        return selection;
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.eclipse.jface.viewers.Viewer#setSelection(org.eclipse.jface.viewers
+     * .ISelection, boolean)
+     */
+    /** {@inheritDoc} */
+    @Override
+    public void setSelection(ISelection selection, boolean reveal) {
+        this.selection = selection;
+        if(this.selection!=null){
+            SelectionChangedEvent selectionChangedEvent = new SelectionChangedEvent(this, selection);
+            fireSelectionChanged(selectionChangedEvent);
+        }
+    }
+
+    /**
+     * createTaxonSections(RootElement parent)
+     *
+     * @param parent
+     */
+    private void createTaxonSections(RootElement parent) {
+        destroySections();
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        ParsingMessagesSection parsingMessagesSection = formFactory.createParsingMessagesSection(getConversationHolder(), parent, this,
+                ExpandableComposite.EXPANDED | ExpandableComposite.EXPANDED);
 
-        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,ExpandableComposite.TWISTIE);
+        TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this,
+                       ExpandableComposite.TWISTIE     | ExpandableComposite.EXPANDED);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(getConversationHolder(), parent, this,
+                       ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-        ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
+                       ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
+                       ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+        //TODO RL
+        if(!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.IS_RL)){
+               ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+               TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+               NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+                       addPart(protologSection);
+                       addPart(typeDesignationSection);
+                       addPart(nameRelationshipSection);
+        }
 
-        ParsingMessagesSection parsingMessagesSection = formFactory.createParsingMessagesSection(getConversationHolder(), parent, this, ExpandableComposite.EXPANDED);
 
-               addPart(taxonBaseDetailSection);
-               addPart(nonViralNameSection);
-               addPart(nomenclaturalStatusSection);
-               addPart(protologSection);
-               addPart(referenceDetailSection);
-               addPart(typeDesignationSection);
-               addPart(nameRelationshipSection);
-               addPart(parsingMessagesSection);
-       }
+        addPart(parsingMessagesSection);
+        addPart(taxonBaseDetailSection);
+        addPart(nonViralNameSection);
+        addPart(nomenclaturalStatusSection);
+        addPart(referenceDetailSection);
+    }
 
-       /**
-        * createNameSections
+    /**
+     * createNameSections
      *
-        * @param parent
-        */
-       private void createNameSections(RootElement parent) {
-               destroySections();
-        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
-
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
-        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
-
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
-        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
-
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
-        ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
-
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
-        TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
-
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
-        NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+     * @param parent
+     */
+    private void createNameSections(RootElement parent) {
+        destroySections();
+        NonViralNameDetailSection nonViralNameSection = formFactory.createNonViralNameDetailSection(getConversationHolder(), parent, this,
+                       ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this,
+                       ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               addPart(nonViralNameSection);
-               addPart(nomenclaturalStatusSection);
-               addPart(protologSection);
-               addPart(referenceDetailSection);
-               addPart(typeDesignationSection);
-               addPart(nameRelationshipSection);
-       }
+        NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,
+                       ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-       /**
-        * createReferenceSections
+        addPart(nonViralNameSection);
+        addPart(nomenclaturalStatusSection);
+        addPart(referenceDetailSection);
+//TODO RL
+        if(!PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.IS_RL)){
+                       ProtologueSection protologSection = formFactory.createProtologueSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+               TypeDesignationSection typeDesignationSection = formFactory.createTypeDesignationSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+               NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+               addPart(protologSection);
+               addPart(typeDesignationSection);
+               addPart(nameRelationshipSection);
+        }
+    }
+
+    /**
+     * createReferenceSections
      *
-        * @param parent
-        */
-       private void createReferenceSections(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createReferenceSections(RootElement parent) {
+        destroySections();
 
-        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        ReferenceDetailSection referenceDetailSection = formFactory.createReferenceDetailSection(getConversationHolder(), parent, this,
+                       ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               addPart(referenceDetailSection);
-       }
+        addPart(referenceDetailSection);
+    }
 
-       /**
-        * createTeamOrPersonBaseDetailSection
+    /**
+     * createTeamOrPersonBaseDetailSection
      *
-        * @param parent
-        */
-       private void createTeamOrPersonBaseDetailSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createTeamOrPersonBaseDetailSection(RootElement parent) {
+        destroySections();
         TeamOrPersonBaseDetailSection teamOrPersonBaseDetailSection = formFactory.createTeamOrPersonBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               addPart(teamOrPersonBaseDetailSection);
-       }
+        addPart(teamOrPersonBaseDetailSection);
+    }
 
-       /**
-        * createTeamDetailSection
+    /**
+     * createTeamDetailSection
      *
-        * @param parent
-        */
-       private void createTeamDetailSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createTeamDetailSection(RootElement parent) {
+        destroySections();
         TeamDetailSection teamDetailSection = formFactory.createTeamDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               addPart(teamDetailSection);
-       }
+        addPart(teamDetailSection);
+    }
 
-       /**
-        * createPersonDetailSection
+    /**
+     * createPersonDetailSection
      *
-        * @param parent
-        */
-       private void createPersonDetailSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createPersonDetailSection(RootElement parent) {
+        destroySections();
         PersonDetailSection personDetailSection = formFactory.createPersonDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
-               addPart(personDetailSection);
-       }
+        addPart(personDetailSection);
+    }
 
-       /**
-        * createDescriptionElementSection
+    /**
+     * createDescriptionElementSection
      *
-        * @param parent
-        */
-       private void createDescriptionElementSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createDescriptionElementSection(RootElement parent) {
+        destroySections();
 
         DescriptionElementDetailSection descriptionElementDetailSection = formFactory.createDescriptionElementDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         DescriptionElementSourceSection descriptionElementSourceSection = formFactory.createDescriptionElementSourceSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         DescriptionElementMediaSection descriptionElementMediaSection = formFactory.createDescriptionElementMediaSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               addPart(descriptionElementDetailSection);
-               addPart(descriptionElementSourceSection);
-               addPart(descriptionElementMediaSection);
-       }
+        addPart(descriptionElementDetailSection);
+        addPart(descriptionElementSourceSection);
+        addPart(descriptionElementMediaSection);
+    }
 
-       /**
-        * createDescriptionSection
+    /**
+     * createDescriptionSection
      *
-        * @param parent
-        */
-       private void createDescriptionSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createDescriptionSection(RootElement parent) {
+        destroySections();
         DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         NaturalLanguageSection naturalLanguageSection = formFactory.createNaturalLanguageSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         DescribedSpecimenSection describedSpecimenSection = formFactory.createDescribedSpecimenSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-//             DescriptionSourceSection descriptionSourceSection = (DescriptionSourceSection) formFactory
-//                             .createEntityDetailSection(EntityDetailType.DESCRIPTIONSOURCE,
-//                                             getConversationHolder(), parent, Section.TWISTIE);
-//
-//             formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        //             DescriptionSourceSection descriptionSourceSection = (DescriptionSourceSection) formFactory
+        //                             .createEntityDetailSection(EntityDetailType.DESCRIPTIONSOURCE,
+        //                                             getConversationHolder(), parent, Section.TWISTIE);
+        //
+        //             formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         ScopeSection scopeSection = formFactory.createScopeSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
-               addPart(descriptionDetailSection);
-               addPart(naturalLanguageSection);
-               addPart(describedSpecimenSection);
-//             addPart(descriptionSourceSection);
-               addPart(scopeSection);
-       }
-
-       /**
-        * createDescriptionSection
-        *
-        * @param parent
-        */
-       private void createSpecimenDescriptionSection(RootElement parent) {
-           destroySections();
-           DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
-           addPart(descriptionDetailSection);
-       }
-
-       /**
-        * Creates the use Description section
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        addPart(descriptionDetailSection);
+        addPart(naturalLanguageSection);
+        addPart(describedSpecimenSection);
+        //             addPart(descriptionSourceSection);
+        addPart(scopeSection);
+    }
+
+    /**
+     * createDescriptionSection
      *
-        * @param parent
-        */
-       private void createUseDescriptionSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createSpecimenDescriptionSection(RootElement parent) {
+        destroySections();
         DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        addPart(descriptionDetailSection);
+    }
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+    /**
+     * Creates the use Description section
+     *
+     * @param parent
+     */
+    private void createUseDescriptionSection(RootElement parent) {
+        destroySections();
+        DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               addPart(descriptionDetailSection);
-               addPart(descriptionSourceSection);
+        addPart(descriptionDetailSection);
+        addPart(descriptionSourceSection);
 
-       }
+    }
 
 
-       /**
-        * @param rootElement
-        */
-       private void createImageGallerySection(RootElement parent) {
-               destroySections();
+    /**
+     * @param rootElement
+     */
+    private void createImageGallerySection(RootElement parent) {
+        destroySections();
         DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               addPart(descriptionDetailSection);
-       }
+        addPart(descriptionDetailSection);
+    }
 
-       /**
-        * createMediaElementSection
+    /**
+     * createMediaElementSection
      *
-        * @param parent
-        */
+     * @param parent
+     */
+
+    private void createMediaElementSection(RootElement parent) {
+        destroySections();
 
-       private void createMediaElementSection(RootElement parent) {
-               destroySections();
         MediaDetailsSection mediaDetailSection = formFactory.createMediaDetailsSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               addPart(mediaDetailSection);
-       }
+        addPart(mediaDetailSection);
+    }
 
-       /**
-        * createDerivedUnitBaseElementSection
+    /**
+     * createDerivedUnitBaseElementSection
      *
-        * @param parent
-        */
-       private void createDerivedUnitBaseElementSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createDerivedUnitBaseElementSection(RootElement parent) {
+        destroySections();
+
+        //different order of sections (Specimen Details as second section and expanded)
+        if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.DETERMINATION_ONLY_FOR_FIELD_UNITS)){
+            DerivedUnitGeneralDetailSection derivedUnitGeneralDetailSection = formFactory.createDerivedUnitGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+            addPart(derivedUnitGeneralDetailSection);
+
+            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+            DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+            addPart(derivedUnitBaseDetailSection);
+
+            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+            OriginalLabelDataSection originalLabelDataSection = formFactory.createOriginalLabelDataSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+            addPart(originalLabelDataSection);
+
+            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+            TaxonAssociationDetailSection taxonAssociationDetailSection = formFactory.createTaxonAssociationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+            addPart(taxonAssociationDetailSection);
+        }
+        else{
+            DerivedUnitGeneralDetailSection derivedUnitGeneralDetailSection = formFactory.createDerivedUnitGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+            addPart(derivedUnitGeneralDetailSection);
+
+            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+            GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+            addPart(gatheringEventDetailSection);
+
+            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+            FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+            addPart(fieldUnitDetailSection);
+
+            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+            DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+            addPart(derivedUnitBaseDetailSection);
+
+            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-        DerivedUnitGeneralDetailSection derivedUnitGeneralDetailSection = formFactory.createDerivedUnitGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+            addPart(determinationDetailSection);
+        }
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+    }
+
+    private void createFieldUnitSection(RootElement parent) {
+        destroySections();
+
+        FieldUnitGeneralDetailSection fielUnitGeneralDetailSection = formFactory.createFieldUnitGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        addPart(fielUnitGeneralDetailSection);
+        addPart(gatheringEventDetailSection);
+        addPart(fieldUnitDetailSection);
+
+        if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.DETERMINATION_ONLY_FOR_FIELD_UNITS)){
+            formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+            DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+            addPart(determinationDetailSection);
+        }
+    }
+
+    private void createTissueSampleSection(RootElement parent) {
+        destroySections();
+
+        TissueSampleGeneralDetailSection section = formFactory.createTissueSampleGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        SampleDesignationDetailSection sampleDesignationDetailSection = formFactory.createSampleDesignationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        addPart(section);
+        addPart(sampleDesignationDetailSection);
+    }
+
+    private void createDnaSampleSection(RootElement parent) {
+        destroySections();
+
+        DnaSampleGeneralDetailSection section = formFactory.createDnaSampleGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        DnaQualityDetailSection qualitySection = formFactory.createDnaQualityDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        SampleDesignationDetailSection sampleDesignationDetailSection = formFactory.createSampleDesignationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        addPart(section);
+        addPart(qualitySection);
+        addPart(sampleDesignationDetailSection);
+    }
+
+    private void createAmplificationSection(RootElement parent) {
+        destroySections();
+        AmplificationGeneralDetailSection generalSection = formFactory.createAmplificationGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        AmplificationPrimerDetailSection primerSection = formFactory.createAmplificationPrimerDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+        AmplificationCloningDetailSection cloningSection = formFactory.createAmplificationCloningDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        AmplificationGelPhotoCollectionDetailSection gelPhotoSection = formFactory.createAmplificationGelPhotoCollectionDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-        DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-               addPart(derivedUnitGeneralDetailSection);
-               addPart(gatheringEventDetailSection);
-               addPart(fieldUnitDetailSection);
-               addPart(derivedUnitBaseDetailSection);
-               addPart(determinationDetailSection);
+        addPart(generalSection);
+        addPart(primerSection);
+        addPart(cloningSection);
+        addPart(gelPhotoSection);
+    }
 
-       }
+    private void createSequenceSection(RootElement parent) {
+        destroySections();
 
-       /**
-        * createDerivedUnitBaseElementSection
-        *
-        * @param parent
-        */
-       private void createFieldUnitSection(RootElement parent) {
-           destroySections();
+        SequenceGeneralDetailSection section = formFactory.createSequenceGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-           FieldUnitGeneralDetailSection fielUnitGeneralDetailSection = formFactory.createFieldUnitGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-           formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        SequenceReferenceCollectionDetailSection referenceSection = formFactory.createSequenceReferenceCollectionDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-           GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-           formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        SequenceContigFileCollectionDetailSection contigFileSection = formFactory.createSequenceContigFileCollectionDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-           FieldUnitDetailSection fieldUnitDetailSection = formFactory.createFieldUnitDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-           addPart(fielUnitGeneralDetailSection);
-           addPart(gatheringEventDetailSection);
-           addPart(fieldUnitDetailSection);
-       }
+        addPart(section);
+        addPart(referenceSection);
+        addPart(contigFileSection);
+    }
 
-       /**
-        * @param rootElement
-        */
-       private void createFeatureDistributionSection(RootElement parent) {
-               destroySections();
+    private void createSingleReadSection(RootElement parent) {
+        destroySections();
+
+        SingleReadGeneralDetailSection section = formFactory.createSingleReadGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        SingleReadPherogramCollectionDetailSection pherogramSection = formFactory.createSingleReadPherogramCollectionDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+
+        addPart(section);
+        addPart(pherogramSection);
+    }
+
+    private void createMediaSpecimenSection(RootElement parent) {
+        destroySections();
+
+        MediaSpecimenGeneralDetailSection generalSection = formFactory.createMediaSpecimenGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        addPart(generalSection);
+
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        RightsSection rightsSection = formFactory.createRightsSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
+        addPart(rightsSection);
+
+    }
+
+
+
+    /**
+     * @param rootElement
+     */
+    private void createFeatureDistributionSection(RootElement parent) {
+        destroySections();
 
         FeatureDistributionDetailSection featureDistributionSection = formFactory.createFeatureDistributionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               addPart(featureDistributionSection);
-       }
+        addPart(featureDistributionSection);
+    }
 
-       /**
-        * createPolytomousKeyNodeSection
+    /**
+     * createPolytomousKeyNodeSection
      *
-        * @param parent
-        */
-       private void createPolytomousKeyNodeSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createPolytomousKeyNodeSection(RootElement parent) {
+        destroySections();
 
         PolytomousKeyDetailSection polytomousKeyDetailSection = formFactory.createPolytomousKeyDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.COMPACT);
 
@@ -662,80 +857,80 @@ public class DetailsViewer extends AbstractCdmDataViewer {
 
         TaxonomicScopeSection taxonomicScopeSection = formFactory.createTaxonomicScopeSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.COMPACT);
 
-           addPart(polytomousKeyDetailSection);
-           addPart(polytomousKeyNodeDetailSection);
-           addPart(taxonomicScopeSection);
+        addPart(polytomousKeyDetailSection);
+        addPart(polytomousKeyNodeDetailSection);
+        addPart(taxonomicScopeSection);
 
-       }
+    }
 
-       /**
-        * create the UseRecordSection
+    /**
+     * create the UseRecordSection
      *
-        * @param parent
-        */
-       private void createUseRecordSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createUseRecordSection(RootElement parent) {
+        destroySections();
 
         UseRecordDetailSection descriptionUseRecordSection = formFactory.createUseRecordDetailSection(getConversationHolder(), parent, this,ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               addPart(descriptionUseRecordSection);
+        addPart(descriptionUseRecordSection);
 
 
-       }
+    }
 
-       /**
-        * createUserSection
+    /**
+     * createUserSection
      *
-        * @param parent
-        */
-       private void createUserSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createUserSection(RootElement parent) {
+        destroySections();
 
         UserDetailSection userDetailSection = formFactory.createUserDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
         GroupsByUserDetailSection groupByUserDetailSection = formFactory.createGroupsByUserDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               addPart(userDetailSection);
-               addPart(groupByUserDetailSection);
-       }
+        addPart(userDetailSection);
+        addPart(groupByUserDetailSection);
+    }
 
-       /**
-        * createTaxonRelationshipSection
+    /**
+     * createTaxonRelationshipSection
      *
-        * @param parent
-        */
-       private void createTaxonRelationshipSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createTaxonRelationshipSection(RootElement parent) {
+        destroySections();
 
         TaxonRelationshipDetailSection taxonRelationshipDetailSection = formFactory.createTaxonRelationshipDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
         ReferencedEntityDetailSection referencedEntityBaseDetailSection = formFactory.createReferencedEntityDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
-               addPart(taxonRelationshipDetailSection);
-               addPart(referencedEntityBaseDetailSection);
-       }
+        addPart(taxonRelationshipDetailSection);
+        addPart(referencedEntityBaseDetailSection);
+    }
 
-       /**
-        * @param rootElement
-        */
-       private void createTermVocabularySection(RootElement parent) {
-               destroySections();
+    /**
+     * @param rootElement
+     */
+    private void createTermVocabularySection(RootElement parent) {
+        destroySections();
 
         TermVocabularyDetailSection termVocabularyDetailSection = formFactory.createTermVocabularyDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
-               addPart(termVocabularyDetailSection);
-       }
+        addPart(termVocabularyDetailSection);
+    }
 
-       /**
-        * createDefinedTermSection
+    /**
+     * createDefinedTermSection
      *
-        * @param parent
-        */
-       private void createDefinedTermSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createDefinedTermSection(RootElement parent) {
+        destroySections();
 
         AbstractFormSection definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
-               addPart(definedTermDetailSection);
-       }
+        addPart(definedTermDetailSection);
+    }
 
 }