AT: commiting recent merge from trunk
authora.theys <a.theys@localhost>
Thu, 2 Feb 2012 13:41:30 +0000 (13:41 +0000)
committera.theys <a.theys@localhost>
Thu, 2 Feb 2012 13:41:30 +0000 (13:41 +0000)
1  2 
.gitattributes
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/combo/TermComboElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/CdmFormFactory.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/description/DescriptionDetailElement.java
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/userecords/UseRecordDetailElement.java

diff --combined .gitattributes
index a7d93c0b4b88c6671d7e9dac5ec0a7b0d26a6cf0,2245934e3da2c6bb6ee167fc80c93cb2528154f4..22cbb0dfd694fe40cc5e20068258776ee00a71be
@@@ -30,7 -30,6 +30,7 @@@ eu.etaxonomy.taxeditor.application/src/
  eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/TaxonomicEditorPlugin.java -text
  eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/BulkEditing.java -text
  eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/Default.java -text
 +eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/PalmUses.java -text
  eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/PolytomousKey.java -text
  eu.etaxonomy.taxeditor.application/src/main/java/eu/etaxonomy/taxeditor/perspective/Taxonomic.java -text
  eu.etaxonomy.taxeditor.application/src/main/resources/log4j.properties -text
@@@ -475,16 -474,6 +475,16 @@@ eu.etaxonomy.taxeditor.editor/src/main/
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/operation/DeleteMediaOperation.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/operation/MoveMediaInListOperation.java -text
  eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/media/operation/RemoveImageFromDescriptionElementOperation.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesContentProvider.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesLabelProvider.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/UsesViewPart.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/CreateUseHandler.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/CreateUseRecordHandler.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/handler/DeleteUseHandler.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateTaxonUseOperation.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/CreateUseRecordOperation.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/DeleteTaxonUseOperation.java -text
 +eu.etaxonomy.taxeditor.editor/src/main/java/eu/etaxonomy/taxeditor/editor/view/uses/operation/DeleteUseRecordOperation.java -text
  eu.etaxonomy.taxeditor.editor/src/main/resources/TaonDescriptionEditor.screen -text
  eu.etaxonomy.taxeditor.editor/src/main/resources/log4j.properties -text
  eu.etaxonomy.taxeditor.editor/src/test/java/eu/etaxonomy/taxeditor/editor/Application.java -text
@@@ -967,7 -956,6 +967,7 @@@ eu.etaxonomy.taxeditor.store/icons/icon
  eu.etaxonomy.taxeditor.store/icons/icon.png -text
  eu.etaxonomy.taxeditor.store/icons/import_wiz.gif -text
  eu.etaxonomy.taxeditor.store/icons/large_image.gif -text
 +eu.etaxonomy.taxeditor.store/icons/leaf_detail.png -text
  eu.etaxonomy.taxeditor.store/icons/linkto_help.gif -text
  eu.etaxonomy.taxeditor.store/icons/lockedstate.gif -text
  eu.etaxonomy.taxeditor.store/icons/ma_12x12.gif -text
@@@ -1062,7 -1050,6 +1062,7 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/ExtensionTypeEditorInput.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/FeatureEditorInput.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/MarkerTypeEditorInput.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/ModifierEditorInput.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/NamedAreaEditorInput.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/NamedAreaLevelEditorInput.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/editor/definedterm/input/StateEditorInput.java -text
@@@ -1234,6 -1221,7 +1234,7 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/PersonSelectionDialog.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/PolytomousKeySelectionDialog.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/ReferenceSelectionDialog.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/SelectionDialogFactory.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/TaxonBaseSelectionDialog.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/TaxonNodeSelectionDialog.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/dialog/selection/TeamSelectionDialog.java -text
@@@ -1262,6 -1250,7 +1263,7 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/KeyValueViewerElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/LabelElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/LanguageStringWithLabelElement.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/LayoutConstants.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/MultilanguageTextElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/NumberWithLabelElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/element/PartialElement.java -text
@@@ -1425,6 -1414,8 +1427,8 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AbstractReferencedEntityElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AnnotationElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/AnnotationSection.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/CdmBaseElement.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/CdmBaseSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/CreditElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/CreditSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/supplemental/ExtensionElement.java -text
@@@ -1450,8 -1441,6 +1454,8 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/user/UserDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/user/UserDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/user/UserDetailWizardPage.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/userecords/UseRecordDetailElement.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/userecords/UseRecordDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/AbstractTermBaseDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/DefinedTermDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/DefinedTermDetailSection.java -text
@@@ -1460,30 -1449,10 +1464,10 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/NamedAreaLevelDetailSection.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/TermVocabularyDetailElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/vocabulary/TermVocabularyDetailSection.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/AbstractSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/AgentSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/ClassificationSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/CollectionSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/DerivedUnitBaseSelectionElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EditFromSelectionWizard.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/FeatureSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/FeatureTreeSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/FieldObservationSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/GroupSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/InstitutionSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/NameSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/NamedAreaSelectionElement.java -text
+ eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/EntitySelectionElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/NomenclaturalAuthorTeamSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/PersonSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/PolytomousKeyNodeSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/PolytomousKeySelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/ReferenceSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/SynonymSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/TaxonBaseSelectionElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/TaxonNodeSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/TaxonSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/TeamSelectionElement.java -text
- eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/selection/UserSelectionElement.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/translation/GoogleLanguageApiWrapper.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/translation/ITranslationServiceWrapper.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/translation/LanguageNotSupportedException.java -text
@@@ -1514,8 -1483,6 +1498,8 @@@ eu.etaxonomy.taxeditor.store/src/main/j
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/reporting/ReportingViewPart.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/supplementaldata/SupplementalDataViewPart.java -text
  eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/supplementaldata/SupplementalDataViewer.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewPart.java -text
 +eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/view/userecords/UseRecordsViewer.java -text
  eu.etaxonomy.taxeditor.store/src/main/resources/eu/etaxonomy/cdm/editorApplicationContext.xml -text
  eu.etaxonomy.taxeditor.store/src/main/resources/log4j.properties -text
  eu.etaxonomy.taxeditor.store/src/test/java/eu/etaxonomy/taxeditor/store/NameProtectTitleCacheTest.java -text
index 9f59f9668d1a54f1a7b36accd82e3bc48033c0e3,4dfee30e729057a255764ca43577a4e0d8724372..f9a87eaeaa8d0103c9516fb0ff4e84f0c3725856
@@@ -31,6 -31,7 +31,7 @@@ import eu.etaxonomy.taxeditor.ui.elemen
  import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.IEnableableFormElement;
  import eu.etaxonomy.taxeditor.ui.element.ISelectable;
+ import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
  
  /**
   * <p>
@@@ -62,6 -63,8 +63,8 @@@ public class TermComboElement<T extend
  
        private Class<T> termClass;
  
+       private List<T> customPreferredTerms;
  
        /**
         * <p>
                // create combo
                combo = new Combo(getLayoutComposite(), SWT.BORDER | SWT.READ_ONLY);
                addControl(combo);
-               combo.setLayoutData(CdmFormFactory.FILL_HORIZONTALLY());
+               combo.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
                combo.setVisibleItemCount(DEFAULT_VISIBLE_ITEMS);
  
                populateTerms(getPreferredTerms());
        }
  
        /**
-        * <p>
-        * Setter for the field <code>selection</code>.
-        * </p>
+        * <p>Sets the selection of the combo to the given T object.</p>
+        * <p>Passing <code>null</code> to this method will set the selection to 
+        * the empty element and effectively clear the selection</p>
         * 
         * @param selection
-        *            a T object.
+        *            a T object or <code>null</code> to clear the selection
         */
-       public void setSelection(T selection) {
+       public void setSelection(T selection) {                 
                Listener[] listeners = combo.getListeners(SWT.Selection);
  
                for (Listener listener : listeners) {
                        combo.removeListener(SWT.Selection, listener);
                }
-               int index = terms.indexOf(selection);
-               if (index == -1) {
-                       createTermNotInPreferredTerms(selection);
-                       index = terms.indexOf(selection);
+               int selectedIndex;
+               if(selection == null){
+                       // set selection to the emptyElement
+                       selectedIndex = 0;
+               }else{
+                       selectedIndex = terms.indexOf(selection);
+                       if (selectedIndex == -1) {
+                               createTermNotInPreferredTerms(selection);
+                               selectedIndex = terms.indexOf(selection);
+                       }
                }
-               combo.select(index);
+               combo.select(selectedIndex);
  
                for (Listener listener : listeners) {
                        combo.addListener(SWT.Selection, listener);
                }
        }
  
+       /**
+        * Fills the combo with elements and sets up the convenience functions
+        * for selection index
+        * 
+        * @param preferredTerms
+        */
        private void populateTerms(List<T> preferredTerms) {
  
                combo.removeAll();
                }
  
                if (selection != null && index == 0) {
--                      createTermNotInPreferredTerms(selection);
++                      //createTermNotInPreferredTerms(selection);
++                      selection = null;
                }
  
                combo.select(index);
         * @return a {@link java.util.List} object.
         */
        protected List<T> getPreferredTerms(){
+               if (customPreferredTerms != null){
+                       return customPreferredTerms;
+               }
                return getTermManager().getPreferredTerms(termClass);
        }
  
                return term.getLabel(CdmStore.getDefaultLanguage());
        }
  
+       /**
+        * 
+        * 
+        * @param term
+        */
        private void createTermNotInPreferredTerms(T term) {
                List<T> preferredTerms = getPreferredTerms();
  
                return CdmStore.getTermManager();
        }
        
+       /**
+        * 
+        * @return
+        */
        public int getVisibleItemCount(){
                return combo.getVisibleItemCount();
        }
        
+       /**
+        * 
+        * @param count
+        */
        public void setVisibleItemCount(int count){
                combo.setVisibleItemCount(count);
        }
  
+       /**
+        * <p>A {@link List} of term objects may be passed to this combo box. In this case, the default behaviour
+        * of displaying the preferred terms for the T type will be overridden and the combo will only display the 
+        * given terms. Also, any previous selection will be reseted.</p>
+        * 
+        * <p>To return to the default of displaying the preferred terms, simply pass <code>null</code>.</p>
+        * 
+        * @param terms a {@link List} of T objects or <code>null</code> for default preferred terms
+        */
        public void setTerms(List<T> terms) {
-               populateTerms(terms);
+               setSelection(null);
+               customPreferredTerms = terms;
+               populateTerms(customPreferredTerms);
        }
  }
index 1b93de00c0eab19d94a497886d3928204cab128e,ab220662eb99323a7b54f9e3126a5b20645157d0..091dd7ee82ef577b09db3565542f9b8b8a846d8f
@@@ -35,25 -35,21 +35,21 @@@ import org.eclipse.swt.widgets.Label
  import org.eclipse.ui.forms.IFormColors;
  import org.eclipse.ui.forms.widgets.FormToolkit;
  import org.eclipse.ui.forms.widgets.Section;
- import org.eclipse.ui.forms.widgets.TableWrapData;
- import org.eclipse.ui.forms.widgets.TableWrapLayout;
  import org.eclipse.ui.internal.forms.widgets.FormFonts;
  import org.joda.time.Partial;
  import org.springframework.security.core.GrantedAuthority;
  
  import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
  import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
- import eu.etaxonomy.cdm.model.agent.Institution;
  import eu.etaxonomy.cdm.model.agent.Person;
  import eu.etaxonomy.cdm.model.agent.Team;
- import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
  import eu.etaxonomy.cdm.model.common.Annotation;
+ import eu.etaxonomy.cdm.model.common.CdmBase;
  import eu.etaxonomy.cdm.model.common.Credit;
  import eu.etaxonomy.cdm.model.common.DefinedTermBase;
  import eu.etaxonomy.cdm.model.common.DescriptionElementSource;
  import eu.etaxonomy.cdm.model.common.Extension;
  import eu.etaxonomy.cdm.model.common.Group;
- import eu.etaxonomy.cdm.model.common.IAnnotatableEntity;
  import eu.etaxonomy.cdm.model.common.ICdmBase;
  import eu.etaxonomy.cdm.model.common.IDefinedTerm;
  import eu.etaxonomy.cdm.model.common.IdentifiableSource;
@@@ -68,12 -64,9 +64,9 @@@ import eu.etaxonomy.cdm.model.descripti
  import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
  import eu.etaxonomy.cdm.model.description.Distribution;
  import eu.etaxonomy.cdm.model.description.Feature;
- import eu.etaxonomy.cdm.model.description.FeatureTree;
  import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
  import eu.etaxonomy.cdm.model.description.KeyStatement;
  import eu.etaxonomy.cdm.model.description.Modifier;
- import eu.etaxonomy.cdm.model.description.PolytomousKey;
- import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
  import eu.etaxonomy.cdm.model.description.QuantitativeData;
  import eu.etaxonomy.cdm.model.description.Scope;
  import eu.etaxonomy.cdm.model.description.StateData;
@@@ -92,18 -85,11 +85,11 @@@ import eu.etaxonomy.cdm.model.name.Name
  import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
  import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
  import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
- import eu.etaxonomy.cdm.model.name.TaxonNameBase;
- import eu.etaxonomy.cdm.model.occurrence.Collection;
  import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
- import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
  import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
- import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
  import eu.etaxonomy.cdm.model.occurrence.Specimen;
  import eu.etaxonomy.cdm.model.reference.Reference;
- import eu.etaxonomy.cdm.model.taxon.Classification;
- import eu.etaxonomy.cdm.model.taxon.Synonym;
  import eu.etaxonomy.cdm.model.taxon.Taxon;
- import eu.etaxonomy.cdm.model.taxon.TaxonBase;
  import eu.etaxonomy.cdm.model.taxon.TaxonNode;
  import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
  import eu.etaxonomy.taxeditor.store.StoreUtil;
@@@ -226,6 -212,8 +212,8 @@@ import eu.etaxonomy.taxeditor.ui.sectio
  import eu.etaxonomy.taxeditor.ui.section.reference.ReferenceDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.supplemental.AnnotationElement;
  import eu.etaxonomy.taxeditor.ui.section.supplemental.AnnotationSection;
+ import eu.etaxonomy.taxeditor.ui.section.supplemental.CdmBaseElement;
+ import eu.etaxonomy.taxeditor.ui.section.supplemental.CdmBaseSection;
  import eu.etaxonomy.taxeditor.ui.section.supplemental.CreditElement;
  import eu.etaxonomy.taxeditor.ui.section.supplemental.CreditSection;
  import eu.etaxonomy.taxeditor.ui.section.supplemental.ExtensionElement;
@@@ -250,36 -238,14 +238,16 @@@ import eu.etaxonomy.taxeditor.ui.sectio
  import eu.etaxonomy.taxeditor.ui.section.user.GroupsByUserDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.user.UserDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.user.UserDetailSection;
 +import eu.etaxonomy.taxeditor.ui.section.userecords.UseRecordDetailElement;
 +import eu.etaxonomy.taxeditor.ui.section.userecords.UseRecordDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.DefinedTermDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.NamedAreaDetailSection;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailElement;
  import eu.etaxonomy.taxeditor.ui.section.vocabulary.TermVocabularyDetailSection;
- import eu.etaxonomy.taxeditor.ui.selection.AbstractSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.AgentSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.ClassificationSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.CollectionSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.DerivedUnitBaseSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.FeatureSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.FeatureTreeSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.FieldObservationSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.GroupSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.InstitutionSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.NameSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.NamedAreaSelectionElement;
+ import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
  import eu.etaxonomy.taxeditor.ui.selection.NomenclaturalAuthorTeamSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.PersonSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.PolytomousKeyNodeSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.PolytomousKeySelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.ReferenceSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.SynonymSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.TaxonBaseSelectionElement;
  import eu.etaxonomy.taxeditor.ui.selection.TaxonNodeSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.TaxonSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.TeamSelectionElement;
- import eu.etaxonomy.taxeditor.ui.selection.UserSelectionElement;
  
  /**
   * <p>
@@@ -303,124 -269,6 +271,6 @@@ public class CdmFormFactory extends For
        private final int orientation = Window.getDefaultOrientation();
        private ISelectionProvider selectionProvider;
  
-       /**
-        * <p>
-        * LAYOUT
-        * </p>
-        * 
-        * @return a {@link org.eclipse.ui.forms.widgets.TableWrapLayout} object.
-        */
-       public static final TableWrapLayout LAYOUT() {
-               return LAYOUT(1, false);
-       }
-       /**
-        * <p>
-        * LAYOUT
-        * </p>
-        * 
-        * @param columns
-        *            a int.
-        * @param equalWidth
-        *            a boolean.
-        * @return a {@link org.eclipse.ui.forms.widgets.TableWrapLayout} object.
-        */
-       public static final TableWrapLayout LAYOUT(int columns, boolean equalWidth) {
-               TableWrapLayout layout = new TableWrapLayout();
-               layout.topMargin = 0;
-               layout.rightMargin = 0;
-               layout.bottomMargin = 0;
-               layout.leftMargin = 0;
-               layout.numColumns = columns;
-               layout.makeColumnsEqualWidth = equalWidth;
-               layout.verticalSpacing = 0;
-               layout.horizontalSpacing = 0;
-               return layout;
-       }
-       /**
-        * <p>
-        * FILL
-        * </p>
-        * 
-        * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
-        */
-       public static final TableWrapData FILL() {
-               return FILL(1, 1);
-       }
-       /**
-        * <p>
-        * FILL
-        * </p>
-        * 
-        * @param horizontalSpan
-        *            a int.
-        * @param verticalSpan
-        *            a int.
-        * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
-        */
-       public static final TableWrapData FILL(int horizontalSpan, int verticalSpan) {
-               TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB,
-                               TableWrapData.FILL_GRAB);
-               layoutData.colspan = horizontalSpan;
-               layoutData.rowspan = verticalSpan;
-               return layoutData;
-       }
-       /**
-        * <p>
-        * LEFT
-        * </p>
-        * 
-        * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
-        */
-       public static final TableWrapData LEFT() {
-               return new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP);
-       }
-       /**
-        * <p>
-        * RIGHT
-        * </p>
-        * 
-        * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
-        */
-       public static final TableWrapData RIGHT() {
-               return new TableWrapData(TableWrapData.RIGHT, TableWrapData.TOP);
-       }
-       /**
-        * <p>
-        * FILL_HORIZONTALLY
-        * </p>
-        * 
-        * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
-        */
-       public static final TableWrapData FILL_HORIZONTALLY() {
-               return FILL_HORIZONTALLY(1, 1);
-       }
-       /**
-        * <p>
-        * FILL_HORIZONTALLY
-        * </p>
-        * 
-        * @param horizontalSpan
-        *            a int.
-        * @param verticalSpan
-        *            a int.
-        * @return a {@link org.eclipse.ui.forms.widgets.TableWrapData} object.
-        */
-       public static final TableWrapData FILL_HORIZONTALLY(int horizontalSpan,
-                       int verticalSpan) {
-               TableWrapData layoutData = new TableWrapData(TableWrapData.FILL_GRAB,
-                               TableWrapData.TOP);
-               layoutData.colspan = horizontalSpan;
-               layoutData.rowspan = verticalSpan;
-               return layoutData;
-       }
        /** Constant <code>EMPTY_SELECTION</code> */
        public static ISelection EMPTY_SELECTION = new ISelection() {
                @Override
                }
        };
        
+       /**
+        * 
+        * @author n.hoffmann
+        * @date Jan 25, 2010
+        *
+        */
        private class SelectionMouseHandler extends MouseAdapter {
                @Override
                public void mouseDown(MouseEvent e) {
                }
        }
  
+       /**
+        * 
+        * @author n.hoffmann
+        * @date Jan 25, 2010
+        *
+        */
        private class SelectionFocusHandler extends FocusAdapter {
                @Override
                public void focusGained(FocusEvent e) {
                return element;
        }
  
-       /**
-        * 
-        * @author n.hoffmann
-        * @created Mar 5, 2010
-        * @version 1.0
-        */
-       public static enum SelectionType {
-               AGENT, INSTITUTION, NAME, REFERENCE, TAXON_BASE, TAXON, SYNONYM, TEAM, AUTHOR_TEAM, PERSON, DERIVED_UNIT, FIELD_OBSERVATION, FEATURE_TREE, CLASSIFICATION, TAXON_NODE, COLLECTION, FEATURE, POLYTOMOUS_KEY, POLYTOMOUS_KEY_NODE, USER, GROUP
-       }
        /**
         * <p>
         * createCheckbox
                        int style) {
                Label separator = this.createSeparator(
                                parentElement.getLayoutComposite(), SWT.HORIZONTAL | style);
-               separator.setLayoutData(FILL_HORIZONTALLY());
+               separator.setLayoutData(LayoutConstants.FILL_HORIZONTALLY());
                return separator;
        }
  
                parentElement.addElement(element);
                return element;
        }
+       
+       /**
+        * @param cdmBaseSection
+        * @param object
+        * @param style
+        * @return
+        */
+       public CdmBaseElement createCdmBaseElement(ICdmFormElement parentElement,
+                       CdmBase entity, int style) {
+               CdmBaseElement element = new CdmBaseElement(this, parentElement,
+                               entity, style);
+               adapt(element);
+               parentElement.addElement(element);
+               return element;
+       }
  
        /**
         * <p>
                adapt(section);
                return section;
        }
+       
+       /**
+        * @param parent
+        * @param i
+        * @return
+        */
+       public CdmBaseSection createCdmBaseSection(ICdmFormElement parentElement, int style) {
+               CdmBaseSection section = new CdmBaseSection(this, parentElement, style);
+               parentElement.addElement(section);
+               adapt(section);
+               return section;
+       }
  
        /**
         * <p>
                REFERENCED_ENTITY, 
                TERM_VOCABULARY,
                NAMED_AREA, 
 -              NAMED_AREA_LEVEL
 +              NAMED_AREA_LEVEL, 
 +              USE_RECORD
        }
        
        public AbstractFormSection createDefinedTermDetailSection(Class definedTermClass,
                        section = new NamedAreaDetailSection(this, conversation, parentElement, 
                                        selectionProvider, style);
                        break;
 +              case USE_RECORD:
 +                      section = new UseRecordDetailSection(this, conversation, parentElement,
 +                                      selectionProvider, style);
 +                      break;
                }
 +              
  
                if (section == null) {
                        throw new RuntimeException(
                case NAMED_AREA_LEVEL:
                        element = new DefinedTermDetailElement<NamedAreaLevel>(this, parentElement);
                        break;
 +              case USE_RECORD:
 +                      //element = new UseRecordDetailElement(this, parentElement, style);
 +                      element = new UseRecordDetailElement(this, parentElement);
 +                      break;
                }
  
                if (element == null) {
  
        /**
         * <p>
-        * createSelectionElement
+        * Creates a selection element for the given type T.
+        * </p>
+        * <p>
+        *      <strong>Selection elements not handled by this method:</strong>
+        *      <ul>
+        *              <li>{@link TaxonNodeSelectionElement} see {@link #createTaxonNodeSelectionElement(ConversationHolder, ICdmFormElement, String, TaxonNode, int, int)}</li>
+        *              <li>{@link NomenclaturalAuthorTeamSelectionElement} see {@link #createNomenclaturalAuthorTeamSelectionElement(ConversationHolder, ICdmFormElement, String, Team, int, int)}</li>
+        *      </ul>   
         * </p>
         * 
-        * @param selectionType
-        *            a
-        *            {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.SelectionType}
-        *            object.
+        * @param clazz
+        *                        a {@link Class} object of the type that you want the selection element to handle
         * @param parentElement
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
+        *            a {@link ICdmFormElement}
         *            object.
         * @param labelString
-        *            a {@link java.lang.String} object.
+        *            a {@link String} object.
         * @param selectionType
         * @param selection
-        *            a {@link eu.etaxonomy.cdm.model.common.IAnnotatableEntity}
-        *            object.
+        *            a {@link ICdmBase} object.
         * @param style
         *            a int.
         * @param conversation
-        *            a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
-        *            object.
+        *            a {@link ConversationHolder} object.
         * @return a
-        *         {@link eu.etaxonomy.taxeditor.ui.selection.AbstractSelectionElement}
+        *         {@link EntitySelectionElement}
         *         object.
         */
-       public AbstractSelectionElement createSelectionElement(
-                       SelectionType selectionType, ConversationHolder conversation,
+       public <T extends ICdmBase> EntitySelectionElement<T> createSelectionElement(
+                       Class<T> clazz, ConversationHolder conversation,
                        ICdmFormElement parentElement, String labelString,
-                       ICdmBase selection, int mode, int style) {
-               AbstractSelectionElement element = null;
-               IAnnotatableEntity entity = (IAnnotatableEntity) HibernateProxyHelper
-                               .deproxy(selection);
-               switch (selectionType) {
-               case AGENT:
-                       element = new AgentSelectionElement(this, conversation,
-                                       parentElement, labelString, (TeamOrPersonBase) entity,
-                                       mode, style);
-                       break;
-               case PERSON:
-                       element = new PersonSelectionElement(this, conversation,
-                                       parentElement, labelString, (Person) entity, mode, style);
-                       break;
-               case TEAM:
-                       element = new TeamSelectionElement(this, conversation,
-                                       parentElement, labelString, (Team) entity, mode, style);
-                       break;
-               case AUTHOR_TEAM:
-                       element = new NomenclaturalAuthorTeamSelectionElement(this,
-                                       conversation, parentElement, labelString, (Team) entity,
-                                       mode, style);
-                       break;
-               case INSTITUTION:
-                       element = new InstitutionSelectionElement(this, conversation,
-                                       parentElement, labelString, (Institution) entity, mode,
-                                       style);
-                       break;
-               case NAME:
-                       element = new NameSelectionElement(this, conversation,
-                                       parentElement, labelString, (TaxonNameBase) entity, mode,
-                                       style);
-                       break;
-               case REFERENCE:
-                       element = new ReferenceSelectionElement(this, conversation,
-                                       parentElement, labelString, (Reference) entity, mode, style);
-                       break;
-               case TAXON_BASE:
-                       element = new TaxonBaseSelectionElement(this, conversation,
-                                       parentElement, labelString, (TaxonBase) entity, mode, style);
-                       break;
-               case TAXON:
-                       element = new TaxonSelectionElement(this, conversation,
-                                       parentElement, labelString, (Taxon) entity, mode, style);
-                       break;
-               case SYNONYM:
-                       element = new SynonymSelectionElement(this, conversation,
-                                       parentElement, labelString, (Synonym) entity, mode, style);
-                       break;
-               case DERIVED_UNIT:
-                       element = new DerivedUnitBaseSelectionElement(this, conversation,
-                                       parentElement, labelString, (DerivedUnitBase) entity, mode,
-                                       style);
-                       break;
-               case FIELD_OBSERVATION:
-                       element = new FieldObservationSelectionElement(this, conversation,
-                                       parentElement, labelString, (FieldObservation) entity,
-                                       mode, style);
-                       break;
-               case FEATURE_TREE:
-                       element = new FeatureTreeSelectionElement(this, conversation,
-                                       parentElement, labelString, (FeatureTree) entity, mode,
-                                       style);
-                       break;
-               case CLASSIFICATION:
-                       element = new ClassificationSelectionElement(this, conversation,
-                                       parentElement, labelString, (Classification) entity, mode,
-                                       style);
-                       break;
-               case TAXON_NODE:
-                       element = new TaxonNodeSelectionElement(this, conversation,
-                                       parentElement, labelString, (TaxonNode) entity, mode, style);
-                       break;
-               case COLLECTION:
-                       element = new CollectionSelectionElement(this, conversation,
-                                       parentElement, labelString, (Collection) entity, mode,
-                                       style);
-                       break;
-               case FEATURE:
-                       element = new FeatureSelectionElement(this, conversation,
-                                       parentElement, labelString, (Feature) entity, mode, style);
-                       break;
-               case POLYTOMOUS_KEY:
-                       element = new PolytomousKeySelectionElement(this, conversation,
-                                       parentElement, labelString, (PolytomousKey) entity, mode,
-                                       style);
-                       break;
-               case POLYTOMOUS_KEY_NODE:
-                       element = new PolytomousKeyNodeSelectionElement(this, conversation,
-                                       parentElement, labelString, (PolytomousKeyNode) entity,
-                                       mode, style);
-                       break;
-               case USER:
-                       element = new UserSelectionElement(this, conversation,
-                                       parentElement, labelString, (User) entity, mode, style);
-                       break;
-               case GROUP:
-                       element = new GroupSelectionElement(this, conversation,
-                                       parentElement, labelString, (Group) entity, mode, style);
-                       break;
-               default:
-                       new RuntimeException(
-                                       "There is no selection composite for the desired selection type.");
-                       break;
-               }
+                       T selection, int mode, int style) {
+               EntitySelectionElement<T> element = new EntitySelectionElement<T>(this, conversation, parentElement, clazz, labelString, selection, mode, style);
                adapt(element);
                parentElement.addElement(element);
                return element;
        }
-       /**
-        * <p>
-        * createNamedAreaSelectionElement
-        * </p>
-        * 
-        * @param parentElement
-        *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
-        *            object.
-        * @param conversation
-        *            a {@link eu.etaxonomy.cdm.api.conversation.ConversationHolder}
-        *            object.
-        * @param labelString
-        *            a {@link java.lang.String} object.
-        * @param selection
-        *            a {@link eu.etaxonomy.cdm.model.location.NamedArea} object.
-        * @param style
-        *            a int.
-        * @return a
-        *         {@link eu.etaxonomy.taxeditor.ui.selection.NamedAreaSelectionElement}
-        *         object.
-        */
-       public NamedAreaSelectionElement createNamedAreaSelectionElement(
-                       ICdmFormElement parentElement, ConversationHolder conversation,
-                       String labelString, NamedArea selection, int style) {
-               NamedAreaSelectionElement element = new NamedAreaSelectionElement(this,
-                               conversation, parentElement, labelString, selection,
-                               AbstractSelectionElement.NOTHING, style);
+       
+       public TaxonNodeSelectionElement createTaxonNodeSelectionElement(
+                       ConversationHolder conversation,
+                       ICdmFormElement parentElement, String labelString,
+                       TaxonNode selection, int mode, int style) {
+               TaxonNodeSelectionElement element = new TaxonNodeSelectionElement(this, conversation, parentElement, labelString, selection, mode, style);
                adapt(element);
                parentElement.addElement(element);
                return element;
        }
+       
+       public NomenclaturalAuthorTeamSelectionElement createNomenclaturalAuthorTeamSelectionElement(
+                       ConversationHolder conversation,
+                       ICdmFormElement parentElement, String labelString,
+                       Team selection, int mode, int style) {
+               NomenclaturalAuthorTeamSelectionElement element = new NomenclaturalAuthorTeamSelectionElement(this, conversation, parentElement, labelString, selection, mode, style);
+               adapt(element);
+               parentElement.addElement(element);
+               return element;
+       }
+       
+       
        /** {@inheritDoc} */
        public LabelElement createLabel(ICdmFormElement parentElement, String text) {
                LabelElement labelElement = new LabelElement(this, parentElement, text);
  
  
  
  }
index 754660a8d5b883a14e8aeb585c76381c7d728d09,5029bfa385f6bcb857faa9080fa2e7e230e4d251..669a80f441a19832b0eee334b0b4d770f537dcb6
@@@ -17,9 -17,8 +17,8 @@@ import eu.etaxonomy.cdm.model.descripti
  import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
  import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
  import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
- import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.SelectionType;
  import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
- import eu.etaxonomy.taxeditor.ui.selection.FeatureTreeSelectionElement;
+ import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
  
  /**
   * <p>DescriptionDetailElement class.</p>
@@@ -31,7 -30,7 +30,7 @@@
  public class DescriptionDetailElement extends AbstractCdmDetailElement<DescriptionBase> {
  
        private TextWithLabelElement detailDescription;
-       private FeatureTreeSelectionElement selection_featureTree;
+       private EntitySelectionElement<FeatureTree> selection_featureTree;
  
        /**
         * <p>Constructor for DescriptionDetailElement.</p>
@@@ -51,7 -50,7 +50,9 @@@
                detailDescription = formFactory.createMultilineTextWithLabel(this, "Label", 50, SWT.WRAP);
                detailDescription.setText(entity.getTitleCache());
                
-               selection_featureTree = (FeatureTreeSelectionElement) formFactory.createSelectionElement(SelectionType.FEATURE_TREE, getConversationHolder(), formElement, "Feature Tree", null, style, 1);
 -//            selection_featureTree = (FeatureTreeSelectionElement) formFactory.createSelectionElement(SelectionType.FEATURE_TREE, getConversationHolder(), formElement, "Feature Tree", null, style);
++              //selection_featureTree = (EntitySelectionElement<FeatureTree>) formFactory.createSelectionElement(FeatureTree.class, getConversationHolder(), formElement, "Feature Tree", null, style, 1);
++              selection_featureTree = formFactory.createSelectionElement(FeatureTree.class, getConversationHolder(), formElement, "Feature Tree", null, EntitySelectionElement.ALL, style);
++                              
        }
        
        /** {@inheritDoc} */
index 67a3101dc7d6e954d3652893b34789af8fea89ff,0000000000000000000000000000000000000000..b2235424fd0e035619e582ba3e494c9737bb1d5a
mode 100644,000000..100644
--- /dev/null
@@@ -1,943 -1,0 +1,943 @@@
-                                       State emptyState = State.NewInstance();\r
 +package eu.etaxonomy.taxeditor.ui.section.userecords;\r
 +\r
 +import java.util.ArrayList;\r
 +import java.util.List;\r
 +import java.util.Map;\r
 +import java.util.Set;\r
 +import java.util.UUID;\r
 +\r
 +import org.apache.log4j.Logger;\r
 +import org.eclipse.swt.events.SelectionEvent;\r
 +import org.eclipse.swt.events.SelectionListener;\r
 +import org.eclipse.ui.forms.widgets.Section;\r
 +\r
 +import eu.etaxonomy.cdm.api.service.IService;\r
 +import eu.etaxonomy.cdm.api.service.IVocabularyService;\r
 +import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
 +import eu.etaxonomy.cdm.model.common.Language;\r
 +import eu.etaxonomy.cdm.model.common.LanguageString;\r
 +import eu.etaxonomy.cdm.model.common.Marker;\r
 +import eu.etaxonomy.cdm.model.common.MarkerType;\r
 +import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 +import eu.etaxonomy.cdm.model.description.CategoricalData;\r
 +import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
 +import eu.etaxonomy.cdm.model.description.Modifier;\r
 +import eu.etaxonomy.cdm.model.description.State;\r
 +import eu.etaxonomy.cdm.model.description.StateData;\r
 +import eu.etaxonomy.cdm.remote.controller.VocabularyController;\r
 +import eu.etaxonomy.taxeditor.store.CdmStore;\r
 +import eu.etaxonomy.taxeditor.store.TermManager;\r
 +import eu.etaxonomy.taxeditor.store.TermStore;\r
 +import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;\r
 +import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;\r
 +import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;\r
 +import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;\r
 +import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.EntityDetailType;\r
 +import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;\r
 +import eu.etaxonomy.taxeditor.ui.section.description.DescriptionElementDetailElement;\r
 +import eu.etaxonomy.taxeditor.ui.section.description.StateDataSection;\r
 +import eu.etaxonomy.taxeditor.ui.section.description.detail.AbstractDetailedDescriptionDetailElement;\r
 +\r
 +//public class UseRecordDetailElement extends AbstractDetailedDescriptionDetailElement<CategoricalData> {\r
 +public class UseRecordDetailElement extends\r
 +              AbstractCdmDetailElement<CategoricalData> implements SelectionListener {\r
 +\r
 +      private static final Logger logger = Logger\r
 +                      .getLogger(DescriptionElementDetailElement.class);\r
 +\r
 +      // private CheckboxElement checkbox_orderRelevant;\r
 +      private TermComboElement<State> combo_UseCategory;\r
 +      private TermComboElement<State> combo_UseSubCategory;\r
 +      private TermComboElement<Modifier> combo_PlantPart;\r
 +      private TermComboElement<Modifier> combo_Country;\r
 +      private TermComboElement<Modifier> combo_HumanGroup;\r
 +      private TermComboElement<Modifier> combo_EthnicGroup;\r
 +      // private AbstractDetailedDescriptionDetailElement detailElement;\r
 +\r
 +      /*\r
 +       * public UseRecordDetailElement(CdmFormFactory formFactory, ICdmFormElement\r
 +       * formElement, CategoricalData entity, int style) { super(formFactory,\r
 +       * formElement, entity, style); }\r
 +       */\r
 +      /*\r
 +       * public UseRecordDetailElement(CdmFormFactory formFactory, ICdmFormElement\r
 +       * formElement, int style) {\r
 +       */\r
 +      public UseRecordDetailElement(CdmFormFactory formFactory,\r
 +                      ICdmFormElement formElement) {\r
 +              super(formFactory, formElement);\r
 +      }\r
 +\r
 +      /** {@inheritDoc} */\r
 +      @Override\r
 +      protected void createControls(ICdmFormElement formElement,\r
 +                      CategoricalData entity, int style) {\r
 +\r
 +              // State state = State.NewInstance("Tato", "Toto", "Titi");\r
 +              // checkbox_orderRelevant = formFactory.createCheckbox(formElement,\r
 +              // "Order Relevant", entity.getOrderRelevant(), style);\r
 +              combo_UseCategory = formFactory.createTermComboElement(State.class,     this, "Use Category", null, style);\r
 +              combo_UseCategory.addSelectionListener(this);\r
 +              combo_UseSubCategory = formFactory.createTermComboElement(State.class, this, "Use SubCategory", null, style);\r
 +              combo_Country   = formFactory.createTermComboElement(Modifier.class, this, "Country", null, style);\r
 +              combo_PlantPart = formFactory.createTermComboElement(Modifier.class, this, "Plant Part", null, style);\r
 +              combo_HumanGroup = formFactory.createTermComboElement(Modifier.class, this, "Human Group", null, style);\r
 +              combo_HumanGroup.addSelectionListener(this);\r
 +              combo_EthnicGroup = formFactory.createTermComboElement(Modifier.class, this, "Ethnic Group", null, style);\r
 +              \r
 +\r
 +              List<State> termsUseCategory = setUseCategoryComboTerms(TermStore.getTerms(State.class, null, false));\r
 +              combo_UseCategory.setTerms(termsUseCategory);\r
 +              combo_UseCategory.setSelection(stateSelection("Use Category"));\r
 +              \r
 +              List<State> termsSubCategory = setUseCategoryComboTerms(TermStore.getTerms(State.class, null, false), combo_UseCategory.getSelection());\r
 +              \r
 +              if (termsSubCategory != null) {\r
 +                      \r
 +                      combo_UseSubCategory.setTerms(termsSubCategory);\r
 +                      combo_UseSubCategory.setSelection(stateSelection("Use SubCategory"));\r
 +                      combo_UseSubCategory.setEnabled(true);\r
 +              }\r
 +              else {\r
 +                      combo_UseSubCategory.setEnabled(false);\r
 +              }\r
 +              \r
 +              List<Modifier> plantPartsToAdd = setModifierComboTerms(TermStore.getTerms(Modifier.class, null, false), "Plant Part");\r
 +              combo_PlantPart.setTerms(plantPartsToAdd);\r
 +              combo_PlantPart.setSelection(modifierSelection("Plant Part"));\r
 +              \r
 +              List<Modifier> countriesToAdd = setModifierComboTerms(TermStore.getTerms(Modifier.class, null, false), "Country");\r
 +              combo_Country.setTerms(countriesToAdd);\r
 +              combo_Country.setSelection(modifierSelection("Country"));\r
 +              \r
 +              List<Modifier> humanGroupToAdd = setModifierComboTerms(TermStore.getTerms(Modifier.class, null, false), "Human Group");\r
 +              combo_HumanGroup.setTerms(humanGroupToAdd);\r
 +              combo_HumanGroup.setSelection(modifierSelection("Human Group"));\r
 +              \r
 +              List<Modifier> ethnicGroupToAdd = setEthnicGroupComboTerms(TermStore.getTerms(Modifier.class, null, false), combo_HumanGroup.getSelection());\r
 +              if (ethnicGroupToAdd != null) {\r
 +                      combo_EthnicGroup.setTerms(ethnicGroupToAdd);\r
 +                      combo_EthnicGroup.setSelection(modifierSelection("Ethnic Group"));\r
 +                      combo_EthnicGroup.setEnabled(true);\r
 +              } else {\r
 +                      combo_EthnicGroup.setEnabled(false);\r
 +              }\r
 +\r
 +      }\r
 +\r
 +      private Modifier modifierSelection(String comboCategory) {\r
 +              if(!getEntity().getModifiers().isEmpty()) {\r
 +                      for (Modifier modifier : getEntity().getModifiers()) {\r
 +                              if (modifier.getMarkers() != null) {\r
 +                                      for (Marker marker : modifier.getMarkers()) {\r
 +                                              if(marker.getMarkerType().getTitleCache().equals(comboCategory)) {\r
 +                                                      return modifier;\r
 +                                              }\r
 +                                              else {\r
 +                                                      return null;\r
 +                                              }\r
 +                                      }\r
 +                              }\r
 +                              else {\r
 +                                      return null;\r
 +                              }\r
 +                                      \r
 +                      }\r
 +              } else {\r
 +                      return null;\r
 +              }\r
 +              return null;\r
 +              \r
 +      }\r
 +      \r
 +      private State stateSelection(String comboCategory) {\r
 +              if (!getEntity().getStates().isEmpty()) {\r
 +                      for (StateData statedata : getEntity().getStates()) {\r
 +                              if (statedata.getModifyingText().get(CdmStore.getDefaultLanguage()) != null) {\r
 +                                      if(statedata.getModifyingText().get(CdmStore.getDefaultLanguage()).getText() == comboCategory) {\r
 +                                              if(statedata.getState() !=null) {\r
 +                                                      return statedata.getState();\r
 +                                              }\r
 +                                      }\r
 +                              }                               \r
 +                      }\r
 +              }\r
 +              else {\r
 +                      return null;\r
 +              }\r
 +              return null;\r
 +              \r
 +      }\r
 +      \r
 +      private List<Modifier> setModifierComboTerms(List<Modifier> listOfTerms, String modType) {\r
 +              List<Modifier> termsToAdd = new ArrayList<Modifier>();\r
 +              for (Modifier term : listOfTerms) {\r
 +\r
 +                      if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals(modType))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +                      else if ((term.getVocabulary() != null) && (term.getVocabulary().getTitleCache().equals(modType))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +              }\r
 +              \r
 +              return termsToAdd;\r
 +      }\r
 +      \r
 +      private Modifier plantPartSelection() {\r
 +              /*if(!getEntity().getModifiers().isEmpty()) {\r
 +                      for (Modifier modifier : getEntity().getModifiers()) {\r
 +                              if (modifier.getMarkers() != null) {\r
 +                                      for (Marker marker : modifier.getMarkers()) {\r
 +                                              if(marker.getMarkerType().getTitleCache().equals("Plant Part")) {\r
 +                                                      return modifier;\r
 +                                              }\r
 +                                              else {\r
 +                                                      return null;\r
 +                                              }\r
 +                                      }\r
 +                              }\r
 +                              else {\r
 +                                      return null;\r
 +                              }\r
 +                                      \r
 +                      }\r
 +              } else {\r
 +                      return null;\r
 +              }\r
 +              return null;*/\r
 +              //for testing purposes\r
 +              int countMods = 0;\r
 +              Modifier modiftoreturn = Modifier.NewInstance();\r
 +              if (!getEntity().getModifiers().isEmpty()) {\r
 +                      for (Modifier modifier : getEntity().getModifiers()){\r
 +                              if(countMods == 0) {\r
 +                                      modiftoreturn = modifier;\r
 +                              }\r
 +                              countMods++;\r
 +                      }\r
 +                      return modiftoreturn;\r
 +              }\r
 +              return null;\r
 +              \r
 +      }\r
 +      \r
 +      private Modifier countrySelection() {\r
 +              /*if(!getEntity().getModifiers().isEmpty()) {\r
 +              for (Modifier modifier : getEntity().getModifiers()) {\r
 +                      if (modifier.getMarkers() != null) {\r
 +                              for (Marker marker : modifier.getMarkers()) {\r
 +                                      if(marker.getMarkerType().getTitleCache().equals("Country")) {\r
 +                                              return modifier;\r
 +                                      }\r
 +                                      else {\r
 +                                              return null;\r
 +                                      }\r
 +                              }\r
 +                      }\r
 +                      else {\r
 +                              return null;\r
 +                      }\r
 +                              \r
 +              }\r
 +      } else {\r
 +              return null;\r
 +      }\r
 +      return null;*/\r
 +      //for testing purposes\r
 +      int countMods = 0;\r
 +      Modifier modiftoreturn = Modifier.NewInstance();\r
 +      if (!getEntity().getModifiers().isEmpty()) {\r
 +              for (Modifier modifier : getEntity().getModifiers()){\r
 +                      if(countMods == 1) {\r
 +                              modiftoreturn = modifier;\r
 +                      }\r
 +                      countMods++;\r
 +              }\r
 +              return modiftoreturn;\r
 +      }\r
 +      return null;\r
 +      }\r
 +      \r
 +      private Modifier humanGroupSelection() {\r
 +              /*if(!getEntity().getModifiers().isEmpty()) {\r
 +              for (Modifier modifier : getEntity().getModifiers()) {\r
 +                      if (modifier.getMarkers() != null) {\r
 +                              for (Marker marker : modifier.getMarkers()) {\r
 +                                      if(marker.getMarkerType().getTitleCache().equals("Human Group")) {\r
 +                                              return modifier;\r
 +                                      }\r
 +                                      else {\r
 +                                              return null;\r
 +                                      }\r
 +                              }\r
 +                      }\r
 +                      else {\r
 +                              return null;\r
 +                      }\r
 +                              \r
 +              }\r
 +      } else {\r
 +              return null;\r
 +      }\r
 +      return null;*/\r
 +      //for testing purposes\r
 +      int countMods =0;\r
 +      Modifier modiftoreturn = Modifier.NewInstance();\r
 +      if (!getEntity().getModifiers().isEmpty()) {\r
 +              for (Modifier modifier : getEntity().getModifiers()){\r
 +                      if (countMods == 2) {\r
 +                              modiftoreturn = modifier;\r
 +                      }\r
 +                      countMods++;\r
 +              }\r
 +              return modiftoreturn;\r
 +      }\r
 +      return null;\r
 +      }\r
 +      \r
 +      private Modifier ethnicGroupSelection() {\r
 +              /*if(!getEntity().getModifiers().isEmpty()) {\r
 +              for (Modifier modifier : getEntity().getModifiers()) {\r
 +                      if (modifier.getMarkers() != null) {\r
 +                              for (Marker marker : modifier.getMarkers()) {\r
 +                                      if(marker.getMarkerType().getTitleCache().equals("Human Group")) {\r
 +                                              return modifier;\r
 +                                      }\r
 +                                      else {\r
 +                                              return null;\r
 +                                      }\r
 +                              }\r
 +                      }\r
 +                      else {\r
 +                              return null;\r
 +                      }\r
 +                              \r
 +              }\r
 +      } else {\r
 +              return null;\r
 +      }\r
 +      return null;*/\r
 +      //for testing purposes\r
 +      int countMods =0;\r
 +      Modifier modiftoreturn = Modifier.NewInstance();\r
 +      if (!getEntity().getModifiers().isEmpty()) {\r
 +              for (Modifier modifier : getEntity().getModifiers()){\r
 +                      if (countMods == 3) {\r
 +                              modiftoreturn = modifier;\r
 +                      }\r
 +                      countMods++;\r
 +              }\r
 +              return modiftoreturn;\r
 +      }\r
 +      return null;\r
 +      }\r
 +\r
 +      private State useCategorySelection() {\r
 +              /*if (!getEntity().getStates().isEmpty()) {\r
 +                      for (StateData statedata : getEntity().getStates()) {\r
 +                              if (statedata.getModifyingText().get(CdmStore.getDefaultLanguage()) != null) {\r
 +                                      if(statedata.getModifyingText().get(CdmStore.getDefaultLanguage()).getText() == "Use Category") {\r
 +                                              if(statedata.getState() !=null) {\r
 +                                                      return statedata.getState();\r
 +                                              }\r
 +                                      }\r
 +                              }                               \r
 +                      }\r
 +              }\r
 +              else {\r
 +                      return null;\r
 +              }\r
 +              return null;*/\r
 +              //for testing purposes\r
 +              int countStates =0;\r
 +              for (StateData state : getEntity().getStates()) {\r
 +                      if (countStates == 0) {\r
 +                              return state.getState();\r
 +                      }\r
 +                      countStates++;\r
 +              }\r
 +              return null;\r
 +      }\r
 +      \r
 +\r
 +      \r
 +      private State useSubCategorySelection() {\r
 +              /*if (!getEntity().getStates().isEmpty() && combo_UseCategory.getSelection() != null) {\r
 +                      for (StateData statedata : getEntity().getStates()) {\r
 +                              if (stateData.getModifyingText().get(CdmStore.getDefaultLanguage()) != null) {\r
 +                                      if(statedata.getModifyingText().get(CdmStore.getDefaultLanguage()).getText() == "Use SubCategory") {\r
 +                                              if(statedata.getState() !=null) {\r
 +                                                      return statedata.getState();\r
 +                                              }\r
 +                                              \r
 +                                      }\r
 +                              }                               \r
 +                      }\r
 +              }\r
 +              else {\r
 +                      return null;\r
 +              }\r
 +              return null;*/\r
 +              //for testing purposes\r
 +              int countStates =0;\r
 +              for (StateData state : getEntity().getStates()) {\r
 +                      if ((countStates == 1)) {\r
 +                              return state.getState();\r
 +                      }\r
 +                      countStates++;\r
 +              }\r
 +              return null;\r
 +              \r
 +      }\r
 +\r
 +      \r
 +      \r
 +      \r
 +      private List<Modifier> setPlantPartsComboTerms(List<Modifier> listOfTerms) {\r
 +              List<Modifier> termsToAdd = new ArrayList<Modifier>();\r
 +              for (Modifier term : listOfTerms) {\r
 +\r
 +                      if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals("Plant Part"))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +                      else if ((term.getVocabulary() != null) && (term.getVocabulary().getTitleCache().equals("Plant Part"))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +              }\r
 +              \r
 +              return termsToAdd;\r
 +      }\r
 +      \r
 +      private List<Modifier> setCountryComboTerms(List <Modifier> listOfTerms) {\r
 +              List<Modifier> termsToAdd = new ArrayList<Modifier>();\r
 +              for (Modifier term : listOfTerms) {\r
 +\r
 +                      if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals("Country"))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +                      else if ((term.getVocabulary() != null) && (term.getVocabulary().getTitleCache().equals("Country"))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +              }\r
 +              \r
 +              return termsToAdd;\r
 +      }\r
 +\r
 +\r
 +      private List<State> setUseCategoryComboTerms(List<State> listOfTerms) {\r
 +              List<State> termsToAdd = new ArrayList<State>();\r
 +              for (State term : listOfTerms) {\r
 +\r
 +                      if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals("Use Category"))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +                      else if ((term.getVocabulary() !=null) && (term.getPartOf() == null) && (term.getVocabulary().getTitleCache().equals("Use Category"))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +              }\r
 +              return termsToAdd;\r
 +\r
 +      }\r
 +\r
 +      private List<State> setUseCategoryComboTerms(List<State> listOfTerms,\r
 +                      State selectedUseCategory) {\r
 +              List<State> termsToAdd = new ArrayList<State>();\r
 +              if (combo_UseCategory.getSelection() != null) {\r
 +                      \r
 +                      for (State term : listOfTerms) {\r
 +                              if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals(selectedUseCategory.getTitleCache()))) {\r
 +                                      termsToAdd.add(term);\r
 +                              }\r
 +                              else if ((term.getVocabulary() !=null) && (term.getVocabulary().getTitleCache().equals(selectedUseCategory.getTitleCache()))) {\r
 +                                      termsToAdd.add(term);\r
 +                              }\r
 +      \r
 +                      }\r
 +              }\r
 +              else if (!getEntity().getStates().isEmpty()) {\r
 +                      for (StateData stateData : getEntity().getStates()) {\r
 +                              if (stateData.getModifyingText().get(CdmStore.getDefaultLanguage()) != null) {\r
 +                                      if ((stateData.getState() != null) && (stateData.getModifyingText().get(CdmStore.getDefaultLanguage()).getText() == "Use Category")) {\r
 +                                              for (State term : listOfTerms) {\r
 +                                                      if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals(stateData.getState().getTitleCache()))) {\r
 +                                                              termsToAdd.add(term);\r
 +                                                      } else if ((term.getVocabulary() != null) && (term.getVocabulary().getTitleCache().equals(stateData.getState().getTitleCache()))) {\r
 +                                                              termsToAdd.add(term);\r
 +                                                      }\r
 +                                              }\r
 +                                              \r
 +                                      }\r
 +                              }\r
 +                      }\r
 +                      \r
 +              }\r
 +                      \r
 +              else {\r
 +                      return null;\r
 +              }\r
 +\r
 +              return termsToAdd;\r
 +      }\r
 +      \r
 +      private List<Modifier> setEthnicGroupComboTerms(List<Modifier> listOfTerms,\r
 +                      Modifier selectedHumangroup) {\r
 +              List<Modifier> termsToAdd = new ArrayList<Modifier>();\r
 +              if (combo_HumanGroup.getSelection() != null) {\r
 +                      for (Modifier term : listOfTerms) {\r
 +      \r
 +                              if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals(selectedHumangroup.getTitleCache()))) {\r
 +                                      termsToAdd.add(term);\r
 +                              }\r
 +                              else if ((term.getVocabulary() != null) && (term.getVocabulary().getTitleCache().equals(selectedHumangroup.getTitleCache()))) {\r
 +                                      termsToAdd.add(term);\r
 +                              }\r
 +                      }\r
 +              }\r
 +              else if (!getEntity().getModifiers().isEmpty()) {\r
 +                      for (Modifier modifier : getEntity().getModifiers()) {\r
 +                              if (modifier.getMarkers() != null) {\r
 +                                      for (Marker marker : modifier.getMarkers()) {\r
 +                                              if(marker.getMarkerType().getTitleCache().equals("Human Group")) {\r
 +                                                      for (Modifier term : listOfTerms) {\r
 +                                                              if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals(modifier.getTitleCache()))) {\r
 +                                                                      termsToAdd.add(modifier);\r
 +                                                              } else if ((term.getVocabulary() != null) && (term.getVocabulary().getTitleCache().equals(modifier.getTitleCache()))) {\r
 +                                                                      termsToAdd.add(modifier);\r
 +                                                              }\r
 +                                                      }\r
 +                                                      \r
 +                                              }\r
 +                                      }\r
 +                              }\r
 +                      }\r
 +              } else {\r
 +                      return null;\r
 +              }\r
 +              \r
 +              return termsToAdd;\r
 +      }\r
 +\r
 +      \r
 +      private List<Modifier> setHumanGroupComboTerms(List<Modifier> listOfTerms) {\r
 +              List<Modifier> termsToAdd = new ArrayList<Modifier>();\r
 +              for (Modifier term : listOfTerms) {\r
 +\r
 +                      if ((term.getPartOf() != null) && (term.getPartOf().getTitleCache().equals("Human Group"))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +                      else if ((term.getVocabulary() != null) && (term.getPartOf() == null) && (term.getVocabulary().getTitleCache().equals("Human Group"))) {\r
 +                              termsToAdd.add(term);\r
 +                      }\r
 +              }\r
 +              \r
 +              return termsToAdd;\r
 +      }\r
 +\r
 +\r
 +      /** {@inheritDoc} */\r
 +      @Override\r
 +      public void handleEvent(Object eventSource) {\r
 +              /*\r
 +               * if(eventSource == checkbox_orderRelevant){\r
 +               * getEntity().setOrderRelevant(checkbox_orderRelevant.getSelection());\r
 +               * }\r
 +               */\r
 +              if (eventSource == combo_UseCategory) {\r
 +                      if (combo_UseCategory.getSelection() != null) {\r
 +                              boolean isChanged = false;\r
 +                              if (!getEntity().getStates().isEmpty()) {\r
 +                                      for (StateData existingStateData : getEntity().getStates()) {\r
 +                                              Map<Language, LanguageString> modifyingText = existingStateData\r
 +                                                              .getModifyingText();\r
 +      \r
 +                                              if (modifyingText.get(CdmStore.getDefaultLanguage()) != null) {\r
 +                                                      if (modifyingText.get(CdmStore.getDefaultLanguage())\r
 +                                                                      .getText() == "Use Category") {\r
 +                                                              getEntity().removeState(existingStateData);\r
 +                                                              StateData stateData = StateData.NewInstance(combo_UseCategory.getSelection());\r
 +                                                              stateData.setState(combo_UseCategory.getSelection());\r
 +                                                              //stateData.addModifyingText("Use Category", CdmStore.getDefaultLanguage());\r
 +                                                              stateData.putModifyingText(CdmStore.getDefaultLanguage(),"Use Category");\r
 +                                                              getEntity().addState(stateData);\r
 +                                                              isChanged = true;\r
 +                                                      } \r
 +                                                      /*else {\r
 +                                                              StateData stateData = StateData\r
 +                                                                              .NewInstance(combo_UseCategory.getSelection());\r
 +                                                              stateData.setState(combo_UseCategory.getSelection());\r
 +                                                              //stateData.addModifyingText("Use Category", CdmStore.getDefaultLanguage());\r
 +                                                              stateData.putModifyingText(CdmStore.getDefaultLanguage(),"Use Category");\r
 +                                                              getEntity().addState(stateData);\r
 +                                                      }\r
 +      \r
 +                                              } else {\r
 +                                                      StateData stateData = StateData\r
 +                                                                      .NewInstance(combo_UseCategory.getSelection());\r
 +                                                      stateData.setState(combo_UseCategory.getSelection());\r
 +                                                      //stateData.addModifyingText("Use Category", CdmStore.getDefaultLanguage());\r
 +                                                      stateData.putModifyingText(CdmStore.getDefaultLanguage(), "Use Category");\r
 +                                                      getEntity().addState(stateData);\r
 +                                              }*/\r
 +                                              }\r
 +                                      }\r
 +                              }\r
 +                              \r
 +                              \r
 +                              if (isChanged == false) {\r
 +                                      StateData stateData = StateData\r
 +                                                      .NewInstance(combo_UseCategory.getSelection());\r
 +                                      stateData.setState(combo_UseCategory.getSelection());\r
 +                                      //stateData.addModifyingText("Use Category", CdmStore.getDefaultLanguage());\r
 +                                      //LanguageString languageString = LanguageString.NewInstance("Use Category", CdmStore.getDefaultLanguage());\r
 +                                      //IService object = (IService) CdmStore.getCurrentApplicationConfiguration().getBean(IService.class.getName());\r
 +                                      //object.save(languageString);\r
 +                                      stateData.putModifyingText(CdmStore.getDefaultLanguage(), "Use Category");\r
 +                                      getEntity().addState(stateData);\r
 +                              }\r
 +                              combo_UseSubCategory.setEnabled(true);\r
 +      \r
 +                      }\r
 +              }\r
 +              if (eventSource == combo_UseSubCategory) {\r
 +                      if (combo_UseSubCategory.getSelection() != null) {\r
 +                              boolean isChanged = false;\r
 +                              if (!getEntity().getStates().isEmpty()) {\r
 +                                      for (StateData existingStateData : getEntity().getStates()) {\r
 +                                              Map<Language, LanguageString> modifyingText = existingStateData\r
 +                                                              .getModifyingText();\r
 +      \r
 +                                              if (modifyingText.get(CdmStore.getDefaultLanguage()) != null) {\r
 +                                                      if (modifyingText.get(CdmStore.getDefaultLanguage())\r
 +                                                                      .getText() == "Use SubCategory") {\r
 +                                                              getEntity().removeState(existingStateData);\r
 +                                                              StateData stateData = StateData.NewInstance(combo_UseSubCategory.getSelection());\r
 +                                                              stateData.setState(combo_UseSubCategory.getSelection());\r
 +                                                              //stateData.addModifyingText("Use SubCategory", CdmStore.getDefaultLanguage());\r
 +                                                              stateData.putModifyingText(CdmStore.getDefaultLanguage(),"Use SubCategory");\r
 +                                                              getEntity().addState(stateData);\r
 +                                                              isChanged = true;\r
 +                                                      } \r
 +                                                      /*else {\r
 +                                                              StateData stateData = StateData\r
 +                                                                              .NewInstance(combo_UseSubCategory.getSelection());\r
 +                                                              stateData.setState(combo_UseSubCategory.getSelection());\r
 +                                                              //stateData.addModifyingText("Use SubCategory", CdmStore.getDefaultLanguage());\r
 +                                                              stateData.putModifyingText(CdmStore.getDefaultLanguage(),"Use SubCategory");\r
 +                                                              getEntity().addState(stateData);\r
 +                                                      }\r
 +      \r
 +                                              } else {\r
 +                                                      StateData stateData = StateData\r
 +                                                                      .NewInstance(combo_UseSubCategory.getSelection());\r
 +                                                      stateData.setState(combo_UseSubCategory.getSelection());\r
 +                                                      //stateData.addModifyingText("Use SubCategory", CdmStore.getDefaultLanguage());\r
 +                                                      stateData.putModifyingText(CdmStore.getDefaultLanguage(), "Use SubCategory");\r
 +                                                      getEntity().addState(stateData);\r
 +                                              }*/\r
 +                                              }\r
 +                                      }\r
 +                              }\r
 +                              \r
 +                              if (isChanged == false){\r
 +                                      StateData stateData = StateData\r
 +                                                      .NewInstance(combo_UseSubCategory.getSelection());\r
 +                                      stateData.setState(combo_UseSubCategory.getSelection());\r
 +                                      //stateData.addModifyingText("Use SubCategory", CdmStore.getDefaultLanguage());\r
 +                                      //LanguageString languageString = LanguageString.NewInstance("Use SubCategory", CdmStore.getDefaultLanguage());\r
 +                                      //IService object = (IService) CdmStore.getCurrentApplicationConfiguration().getBean(IService.class.getName());\r
 +                                      //object.save(languageString);\r
 +                                      //stateData.putModifyingText(languageString);\r
 +                                      stateData.putModifyingText(CdmStore.getDefaultLanguage(), "Use SubCategory");\r
 +                                      getEntity().addState(stateData);\r
 +                              }\r
 +      \r
 +                      }\r
 +              }\r
 +              if (eventSource == combo_PlantPart) {\r
 +                      if (combo_PlantPart.getSelection() != null) {\r
 +                              boolean isChanged = false;\r
 +                              MarkerType markerType = MarkerType.NewInstance("Plant Part", "Plant Part", null);\r
 +                              Set<Modifier> modifiers = getEntity().getModifiers();\r
 +                              if(!modifiers.isEmpty()) {\r
 +                                      for (Modifier modifier : modifiers) {\r
 +                                              if (modifier.getMarkers() != null) {\r
 +                                                      for (Marker marker : modifier.getMarkers()) {\r
 +                                                              if (marker.getMarkerType().getTitleCache().equals("Plant Part")) {\r
 +                                                                      getEntity().removeModifier(modifier);\r
 +                                                                      Modifier plantPart = combo_PlantPart.getSelection();\r
 +                                                                      plantPart.addMarker(marker);\r
 +                                                                      getEntity().addModifier(plantPart);\r
 +                                                                      isChanged = true;\r
 +                                                                      //getEntity().addModifier(combo_PlantPart.getSelection());\r
 +                                                              } \r
 +                                                              /*else {\r
 +                                                                      \r
 +                                                                      Marker markerPlantPart = Marker.NewInstance(markerType, false);\r
 +                                                                      Modifier plantPart = combo_PlantPart.getSelection();\r
 +                                                                      plantPart.addMarker(markerPlantPart);\r
 +                                                                      getEntity().addModifier(plantPart);\r
 +                                                                      //getEntity().addModifier(combo_PlantPart.getSelection());\r
 +                                                              }*/\r
 +                                                                      \r
 +                                                                      \r
 +                                                      }\r
 +                                                              \r
 +                                              }\r
 +                                              /*else {\r
 +                                                      //MarkerType markerType = MarkerType.NewInstance("Plant Part", "Plant Part", null);\r
 +                                                      Marker marker = Marker.NewInstance(markerType, false);\r
 +                                                      Modifier plantPart = combo_PlantPart.getSelection();\r
 +                                                      plantPart.addMarker(marker);\r
 +                                                      getEntity().addModifier(plantPart);\r
 +                                                      //getEntity().addModifier(combo_PlantPart.getSelection());\r
 +                                              }*/\r
 +                                                      \r
 +                                      }       \r
 +                              }\r
 +                              if(isChanged == false) {\r
 +                                      //MarkerType markerType = MarkerType.NewInstance("Plant Part", "Plant Part", null);\r
 +                                      Marker marker = Marker.NewInstance(markerType, false);\r
 +                                      Modifier plantPart = combo_PlantPart.getSelection();\r
 +                                      plantPart.addMarker(marker);\r
 +                                      getEntity().addModifier(plantPart);\r
 +                                      //getEntity().addModifier(combo_PlantPart.getSelection());\r
 +                              }\r
 +                      }\r
 +              }\r
 +              if (eventSource == combo_Country) {\r
 +                      if (combo_Country.getSelection() != null) {\r
 +                              boolean isChanged = false;\r
 +                              MarkerType markerType = MarkerType.NewInstance("Country", "Country", null);\r
 +                              Set<Modifier> modifiers = getEntity().getModifiers();\r
 +                              if(!modifiers.isEmpty()) {\r
 +                                      for (Modifier modifier : modifiers) {\r
 +                                              if (modifier.getMarkers() != null) {\r
 +                                                      for (Marker marker : modifier.getMarkers()) {\r
 +                                                              if (marker.getMarkerType().getTitleCache().equals("Country")) {\r
 +                                                                      getEntity().removeModifier(modifier);\r
 +                                                                      Modifier country = combo_Country.getSelection();\r
 +                                                                      country.addMarker(marker);\r
 +                                                                      getEntity().addModifier(country);\r
 +                                                                      isChanged = true;\r
 +                                                                      //getEntity().addModifier(combo_Country.getSelection());\r
 +                                                              } \r
 +                                                              /*else {\r
 +                                                                      \r
 +                                                                      Marker markerCountry = Marker.NewInstance(markerType, false);\r
 +                                                                      Modifier country = combo_Country.getSelection();\r
 +                                                                      country.addMarker(markerCountry);\r
 +                                                                      getEntity().addModifier(country);\r
 +                                                                      //getEntity().addModifier(combo_Country.getSelection());\r
 +                                                              }*/\r
 +                                                                      \r
 +                                                                      \r
 +                                                      }\r
 +                                                              \r
 +                                              }\r
 +                                              /*else {\r
 +                                                      //MarkerType markerType = MarkerType.NewInstance("Country", "Country", null);\r
 +                                                      Marker marker = Marker.NewInstance(markerType, false);\r
 +                                                      Modifier country = combo_Country.getSelection();\r
 +                                                      country.addMarker(marker);\r
 +                                                      getEntity().addModifier(country);\r
 +                                                      //getEntity().addModifier(combo_Country.getSelection());\r
 +                                              }*/\r
 +                                                      \r
 +                                      }       \r
 +                              }\r
 +                              if (isChanged == false) {\r
 +                                      //MarkerType markerType = MarkerType.NewInstance("Country", "Country", null);\r
 +                                      Marker marker = Marker.NewInstance(markerType, false);\r
 +                                      Modifier country = combo_Country.getSelection();\r
 +                                      country.addMarker(marker);\r
 +                                      getEntity().addModifier(country);\r
 +                                      //getEntity().addModifier(combo_Country.getSelection());\r
 +                              }\r
 +                      }\r
 +              }\r
 +              if (eventSource == combo_HumanGroup) {\r
 +                      if (combo_HumanGroup.getSelection() != null) {\r
 +                              boolean isChanged = false;\r
 +                              MarkerType markerType = MarkerType.NewInstance("Human Group", "Human Group", null);\r
 +                              Set<Modifier> modifiers = getEntity().getModifiers();\r
 +                              if(!modifiers.isEmpty()) {\r
 +                                      for (Modifier modifier : modifiers) {\r
 +                                              if (modifier.getMarkers() != null) {\r
 +                                                      for (Marker marker : modifier.getMarkers()) {\r
 +                                                              if (marker.getMarkerType().getTitleCache().equals("Human Group")) {\r
 +                                                                      getEntity().removeModifier(modifier);\r
 +                                                                      Modifier humanGroup = combo_HumanGroup.getSelection();\r
 +                                                                      humanGroup.addMarker(marker);\r
 +                                                                      getEntity().addModifier(humanGroup);\r
 +                                                                      isChanged = true;\r
 +                                                                      //getEntity().addModifier(combo_HumanGroup.getSelection());\r
 +                                                              } \r
 +                                                              /*else {\r
 +                                                                      \r
 +                                                                      Marker markerHumanGroup = Marker.NewInstance(markerType, false);\r
 +                                                                      Modifier humanGroup = combo_HumanGroup.getSelection();\r
 +                                                                      humanGroup.addMarker(markerHumanGroup);\r
 +                                                                      getEntity().addModifier(humanGroup);\r
 +                                                                      //getEntity().addModifier(combo_HumanGroup.getSelection());\r
 +                                                              }*/\r
 +                                                                      \r
 +                                                                      \r
 +                                                      }\r
 +                                                              \r
 +                                              }\r
 +                                              /*else {\r
 +                                                      //MarkerType markerType = MarkerType.NewInstance("Human Group", "Human Group", null);\r
 +                                                      Marker marker = Marker.NewInstance(markerType, false);\r
 +                                                      Modifier humanGroup = combo_HumanGroup.getSelection();\r
 +                                                      humanGroup.addMarker(marker);\r
 +                                                      getEntity().addModifier(humanGroup);\r
 +                                                      //getEntity().addModifier(combo_HumanGroup.getSelection());\r
 +                                              }*/\r
 +                                                      \r
 +                                      }       \r
 +                              }\r
 +                              if(isChanged == false){\r
 +                                      //MarkerType markerType = MarkerType.NewInstance("Human Group", "Human Group", null);\r
 +                                      Marker marker = Marker.NewInstance(markerType, false);\r
 +                                      Modifier humanGroup = combo_HumanGroup.getSelection();\r
 +                                      humanGroup.addMarker(marker);\r
 +                                      getEntity().addModifier(humanGroup);\r
 +                                      //getEntity().addModifier(combo_HumanGroup.getSelection());\r
 +                              }\r
 +                      }\r
 +                      combo_EthnicGroup.setEnabled(true);\r
 +              }\r
 +              if (eventSource == combo_EthnicGroup) {\r
 +                      if (combo_EthnicGroup.getSelection() != null) {\r
 +                              boolean isChanged = false;\r
 +                              MarkerType markerType = MarkerType.NewInstance("Ethnic Group", "Ethnic Group", null);\r
 +                              Set<Modifier> modifiers = getEntity().getModifiers();\r
 +                              if(!modifiers.isEmpty()) {\r
 +                                      for (Modifier modifier : modifiers) {\r
 +                                              if (modifier.getMarkers() != null) {\r
 +                                                      for (Marker marker : modifier.getMarkers()) {\r
 +                                                              if (marker.getMarkerType().getTitleCache().equals("Ethnic Group")) {\r
 +                                                                      getEntity().removeModifier(modifier);\r
 +                                                                      Modifier ethnicGroup = combo_EthnicGroup.getSelection();\r
 +                                                                      ethnicGroup.addMarker(marker);\r
 +                                                                      getEntity().addModifier(ethnicGroup);\r
 +                                                                      isChanged = true;\r
 +                                                                      //getEntity().addModifier(combo_EthnicGroup.getSelection());\r
 +                                                              } \r
 +                                                              /*else {\r
 +                                                                      \r
 +                                                                      Marker markerEthnicGroup = Marker.NewInstance(markerType, false);\r
 +                                                                      Modifier ethnicGroup = combo_EthnicGroup.getSelection();\r
 +                                                                      ethnicGroup.addMarker(markerEthnicGroup);\r
 +                                                                      getEntity().addModifier(ethnicGroup);\r
 +                                                                      //getEntity().addModifier(combo_EthnicGroup.getSelection());\r
 +                                                              }*/\r
 +                                                                      \r
 +                                                                      \r
 +                                                      }\r
 +                                                              \r
 +                                              }\r
 +                                              /*else {\r
 +                                                      //MarkerType markerType = MarkerType.NewInstance("Ethnic Group", "Ethnic Group", null);\r
 +                                                      Marker marker = Marker.NewInstance(markerType, false);\r
 +                                                      Modifier ethnicGroup = combo_EthnicGroup.getSelection();\r
 +                                                      ethnicGroup.addMarker(marker);\r
 +                                                      getEntity().addModifier(ethnicGroup);\r
 +                                                      //getEntity().addModifier(combo_EthnicGroup.getSelection());\r
 +                                              }*/\r
 +                                                      \r
 +                                      }       \r
 +                              }\r
 +                              if(isChanged == false) {\r
 +                                      //MarkerType markerType = MarkerType.NewInstance("Ethnic Group", "Ethnic Group", null);\r
 +                                      Marker marker = Marker.NewInstance(markerType, false);\r
 +                                      Modifier ethnicGroup = combo_EthnicGroup.getSelection();\r
 +                                      ethnicGroup.addMarker(marker);\r
 +                                      getEntity().addModifier(ethnicGroup);\r
 +                                      //getEntity().addModifier(combo_EthnicGroup.getSelection());\r
 +                              }\r
 +                      }\r
 +              }\r
 +      }\r
 +      \r
 +      \r
 +\r
 +      /** {@inheritDoc} */\r
 +      @Override\r
 +      public void setEntity(CategoricalData entity) {\r
 +              // section_stateData.setEntity(entity);\r
 +              super.setEntity(entity);\r
 +      }\r
 +\r
 +      @Override\r
 +      public void widgetSelected(SelectionEvent e) {\r
 +              Object eventSource = e.getSource();\r
 +              //This is causing an error on purpose fix the if statement below\r
 +              \r
 +              //e.getselection();\r
 +              //if(eventSource == combo_UseCategory.getControls()) {\r
 +              for (Object object: combo_UseCategory.getControls()) {\r
 +                      if (object == eventSource) {\r
 +                              State selectedUseCategory = combo_UseCategory.getSelection();\r
 +                              if (selectedUseCategory != null) {\r
 +                                      if (!getEntity().getStates().isEmpty()) {\r
 +                                              for (StateData existingStateData : getEntity().getStates()) {\r
 +                                                      Map<Language, LanguageString> modifyingText = existingStateData\r
 +                                                                      .getModifyingText();\r
 +              \r
 +                                                      if (modifyingText.get(CdmStore.getDefaultLanguage()) != null) {\r
 +                                                              if (modifyingText.get(CdmStore.getDefaultLanguage())\r
 +                                                                              .getText() == "Use SubCategory") {\r
 +                                                                      getEntity().removeState(existingStateData);\r
 +                                                                      combo_UseSubCategory.setSelected(false);\r
 +                                                                      combo_UseSubCategory.getSelection();\r
 +                                                              }\r
 +                                                      }\r
 +                                              }\r
 +                                      }\r
 +                                      \r
 +                                      List<State> newSubCategories = setUseCategoryComboTerms(TermStore.getTerms(State.class, null, false),selectedUseCategory);\r
 +                                      combo_UseSubCategory.setTerms(newSubCategories);\r
-                                       combo_UseSubCategory.setSelection(null);\r
++                                      /*State emptyState = State.NewInstance();\r
 +                                      combo_UseSubCategory.setSelection(emptyState);\r
 +                                      combo_UseSubCategory.setSelection(newSubCategories.get(0));\r
-                                       combo_UseSubCategory.setTerms(newSubCategories);\r
++                                      combo_UseSubCategory.setSelection(null);*/\r
 +                                      \r
++                                      //combo_UseSubCategory.setTerms(newSubCategories);\r
 +                                      \r
 +                              }\r
 +                      }\r
 +              }\r
 +              for (Object object: combo_HumanGroup.getControls()) {\r
 +                      if (object == eventSource) {\r
 +                              Modifier selectedHumanGroup = combo_HumanGroup.getSelection();\r
 +                              if (selectedHumanGroup != null) {\r
 +                                      combo_EthnicGroup.setTerms(setEthnicGroupComboTerms(TermStore.getTerms(Modifier.class, null, false), selectedHumanGroup));\r
 +                              }\r
 +                      }\r
 +              }\r
 +              /*      \r
 +                      State selectedUseCategory = combo_UseCategory.getSelection();\r
 +                      if (selectedUseCategory != null) {\r
 +                      combo_UseSubCategory.setTerms(setUseCategoryComboTerms(TermStore.getTerms(State.class, null, false),selectedUseCategory));\r
 +\r
 +                      }\r
 +              //}\r
 +              if (eventSource == combo_HumanGroup) {\r
 +                      Modifier selectedHumanGroup = combo_HumanGroup.getSelection();\r
 +                      if (selectedHumanGroup != null) {\r
 +                              combo_EthnicGroup.setTerms(setEthnicGroupComboTerms(TermStore.getTerms(Modifier.class, null, false), selectedHumanGroup));\r
 +                      }\r
 +              }\r
 +              */\r
 +\r
 +      }\r
 +\r
 +      @Override\r
 +      public void widgetDefaultSelected(SelectionEvent e) {\r
 +              // TODO Auto-generated method stub\r
 +\r
 +      }\r
 +\r
 +}\r