merged/implemented cdm3.3 model adaptations
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / detail / DetailsViewer.java
index 813e6b782a55fc4a030867fa9f06d268865dc00a..f3ec3fd814bc9f70696523fc1c5741306907e394 100644 (file)
@@ -1,10 +1,9 @@
-
 // $Id$
 /**
  * Copyright (C) 2011 EDIT
- * European Distributed Institute of Taxonomy 
+ * European Distributed Institute of Taxonomy
  * http://www.e-taxonomy.eu
- * 
+ *
  * The contents of this file are subject to the Mozilla Public License Version 1.1
  * See LICENSE.TXT at the top of this package for the full license terms.
  */
@@ -42,13 +41,14 @@ import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
 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.PreferencesUtil;
 import eu.etaxonomy.taxeditor.store.CdmStore;
+import eu.etaxonomy.taxeditor.ui.campanula.detailViews.fieldObservation.FieldObservationSection;
+import eu.etaxonomy.taxeditor.ui.campanula.detailViews.specimen.SpecimenSection;
 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
 import eu.etaxonomy.taxeditor.ui.element.RootElement;
 import eu.etaxonomy.taxeditor.ui.section.agent.PersonDetailSection;
@@ -76,11 +76,8 @@ import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;
 import eu.etaxonomy.taxeditor.ui.section.name.NonViralNameDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.name.ProtologueSection;
 import eu.etaxonomy.taxeditor.ui.section.name.TypeDesignationSection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.DerivedUnitBaseDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.DeterminationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.FieldObservationDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.occurrence.GatheringEventDetailSection;
-import eu.etaxonomy.taxeditor.ui.section.occurrence.GeneralDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.reference.NomenclaturalReferenceDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
 import eu.etaxonomy.taxeditor.ui.section.taxon.ParsingMessagesSection;
@@ -94,7 +91,7 @@ import eu.etaxonomy.taxeditor.view.AbstractCdmDataViewer;
 import eu.etaxonomy.taxeditor.view.AbstractCdmViewPart;
 
 /**
- * 
+ *
  * The DetailsViewer handles the content of the details view (
  * {@link DetailsViewPart}).<br>
  * Depending on the type of the selected element the section of the details view
@@ -106,593 +103,575 @@ 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) {
+    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 {
+            try {
                                input = DerivedUnitFacade.NewInstance((DerivedUnit) input,
-                                               PreferencesUtil.getDerivedUnitConfigurator());
-                       } catch (DerivedUnitFacadeNotSupportedException e) {
+                        PreferencesUtil.getDerivedUnitConfigurator());
+            } catch (DerivedUnitFacadeNotSupportedException e) {
                 AbstractUtility.error(getClass(), e);
-                       }
-               }
-               super.setInput(input);
-       }
-
-       @Override
-       protected void markViewPartDirty() {
-               if (getInput() instanceof DerivedUnitFacade) {
+            }
+        }
+        super.setInput(input);
+    }
+
+    @Override
+    protected void markViewPartDirty() {
+        if (getInput() instanceof DerivedUnitFacade) {
             getViewPart().changed(((DerivedUnitFacade) getInput()).innerDerivedUnit());
-               }
-
-               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.
+        }
+
+        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();
         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) {
             Set<Marker> descriptionMarkers = ((DescriptionBase) input).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 (((DescriptionBase) input).isImageGallery()) {
-                               createImageGallerySection(rootElement);
+                createImageGallerySection(rootElement);
 
-                       } else if (isUseDescription) { 
-                               createUseDescriptionSection(rootElement);
-                       } else {
-                               createDescriptionSection(rootElement);
+            } else if (isUseDescription) {
+                createUseDescriptionSection(rootElement);
+            } else {
+                createDescriptionSection(rootElement);
 
-                       }
+            }
         } else if (input instanceof DescriptionElementBase) {
             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) {
-                       createDerivedUnitBaseElementSection(rootElement);
+            createDerivedUnitBaseElementSection(rootElement);
 
         } else if (input instanceof FeatureNodeContainer) {
-                       createFeatureDistributionSection(rootElement);
+            createFeatureDistributionSection(rootElement);
 
         } else if (input instanceof PolytomousKey) {
-                       //createPolytomousKeySection(rootElement);
+            // createPolytomousKeySection(rootElement);
 
         } else if ((input instanceof PolytomousKeyNode) || (input instanceof PolytomousKeyRelationship)) {
-                       createPolytomousKeyNodeSection(rootElement);
+            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();
-       }
-
-       
-       /**
-        * @param rootElement
-        */
-       private void createGroupSection(RootElement parent) {
-               destroySections();
+            createDefinedTermSection(rootElement);
+        } else {
+            destroySections();
+        }
+        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);
 
-               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;
+        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);
-       }
+        fireSelectionChanged(selectionChangedEvent);
+    }
 
-       /**
-        * createTaxonSections(RootElement parent)
+    /**
+     * createTaxonSections(RootElement parent)
      *
-        * @param parent
-        */
-       private void createTaxonSections(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createTaxonSections(RootElement parent) {
+        destroySections();
 
         TaxonBaseDetailSection taxonBaseDetailSection = formFactory.createTaxonBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-               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);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         NomenclaturalReferenceDetailSection referenceDetailSection = formFactory.createNomenclaturalReferenceDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent,ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         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);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         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);
-       }
-
-       /**
-        * createNameSections
+        addPart(taxonBaseDetailSection);
+        addPart(nonViralNameSection);
+        addPart(nomenclaturalStatusSection);
+        addPart(protologSection);
+        addPart(referenceDetailSection);
+        addPart(typeDesignationSection);
+        addPart(nameRelationshipSection);
+        addPart(parsingMessagesSection);
+    }
+
+    /**
+     * createNameSections
      *
-        * @param parent
-        */
-       private void createNameSections(RootElement parent) {
-               destroySections();
+     * @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);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         NomenclaturalStatusSection nomenclaturalStatusSection = formFactory.createNomenclaturalStatusSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         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);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         NameRelationshipDetailSection nameRelationshipSection = formFactory.createNameRelationshipDetailSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-               addPart(nonViralNameSection);
-               addPart(nomenclaturalStatusSection);
-               addPart(protologSection);
-               addPart(referenceDetailSection);
-               addPart(typeDesignationSection);
-               addPart(nameRelationshipSection);
-       }
+        addPart(nonViralNameSection);
+        addPart(nomenclaturalStatusSection);
+        addPart(protologSection);
+        addPart(referenceDetailSection);
+        addPart(typeDesignationSection);
+        addPart(nameRelationshipSection);
+    }
 
-       /**
-        * createReferenceSections
+    /**
+     * 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);
 
-               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);
-       }
-       
-       /**
-        * createPersonDetailSection
+        addPart(teamDetailSection);
+    }
+
+    /**
+     * 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);
+//        DescriptionSourceSection descriptionSourceSection = formFactory.createDescriptionSourceSection(getConversationHolder(), parent, ExpandableComposite.TWISTIE);
 //
-//             formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+//        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);
-       }
-       
-       /**
-        * Creates the use Description section
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        addPart(descriptionDetailSection);
+        addPart(naturalLanguageSection);
+        addPart(describedSpecimenSection);
+//        addPart(descriptionSourceSection);
+        addPart(scopeSection);
+    }
+
+    /**
+     * Creates the use Description section
      *
-        * @param parent
-        */
-       private void createUseDescriptionSection(RootElement parent) {
-               destroySections();
+     * @param parent
+     */
+    private void createUseDescriptionSection(RootElement parent) {
+        destroySections();
         DescriptionDetailSection descriptionDetailSection = formFactory.createDescriptionDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        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);
-       }
-       
-       /**
-        * createMediaElementSection
+        addPart(descriptionDetailSection);
+    }
+
+    /**
+     * 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();
 
-        GeneralDetailSection generalDetailSection = formFactory.createGeneralDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        FieldObservationSection fieldObservationSection = formFactory.createFieldObservationSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringEventDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         FieldObservationDetailSection fieldObservationDetailSection = formFactory.createFieldObservationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+        SpecimenSection specimenSection = formFactory.createSpecimenSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
-               formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
-        DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-               addPart(generalDetailSection);
-               addPart(gatheringEventDetailSection);
-               addPart(fieldObservationDetailSection);
-               addPart(derivedUnitBaseDetailSection);
-               addPart(determinationDetailSection);
+//        DerivedUnitBaseDetailSection derivedUnitBaseDetailSection = formFactory.createDerivedUnitBaseDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
+//
+//        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+//
+//        DeterminationDetailSection determinationDetailSection = formFactory.createDeterminationDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
 
-       }
+        addPart(fieldObservationSection);
+        addPart(gatheringEventDetailSection);
+        addPart(fieldObservationDetailSection);
+        addPart(specimenSection);
+//        addPart(derivedUnitBaseDetailSection);
+//        addPart(determinationDetailSection);
+    }
 
-       /**
-        * @param rootElement
-        */
-       private void createFeatureDistributionSection(RootElement parent) {
-               destroySections();
+    /**
+     * @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);
-        
+
         formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-        
+
         PolytomousKeyNodeDetailSection polytomousKeyNodeDetailSection = formFactory.createPolytomousKeyNodeDetailSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
 
         formFactory.createHorizontalSeparator(parent, SWT.BORDER);
 
         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);
-               
-               addPart(descriptionUseRecordSection);
-               
-               
-       }
+        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
+
+        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();
-
-        AbstractFormSection definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
-               addPart(definedTermDetailSection);
-       }
-
-    private void createFODetailsView(RootElement parent) {
+     * @param parent
+     */
+    private void createDefinedTermSection(RootElement parent) {
         destroySections();
 
-        GeneralDetailSection generalDetailSection = formFactory.createFOSection(getConversationHolder(), parent, this,ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
-
-        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
-        GatheringEventDetailSection gatheringEventDetailSection = formFactory.createGatheringSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
-
-        formFactory.createHorizontalSeparator(parent, SWT.BORDER);
-
-        FieldObservationDetailSection fieldObservationDetailSection = formFactory.createFODetailsSection(getConversationHolder(), parent, this, ExpandableComposite.TWISTIE);
-
-        addPart(generalDetailSection);
-        addPart(gatheringEventDetailSection);
-        addPart(fieldObservationDetailSection);
+        AbstractFormSection definedTermDetailSection = formFactory.createDefinedTermDetailSection(getInput().getClass(), getConversationHolder(), parent, this, ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
+        addPart(definedTermDetailSection);
     }
 }