merging in latest changes from trunk, up to r15854 (editor starts without issues)
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / name / ProtologueSection.java
index 4f4e24f5f651787624160966e96b9ab3cbc62f35..f9401eeee53caef77e05d91de846df7f47641399 100644 (file)
@@ -10,7 +10,9 @@
 
 package eu.etaxonomy.taxeditor.ui.section.name;
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
@@ -58,9 +60,14 @@ public class ProtologueSection extends AbstractEntityCollectionSection<TaxonName
 
        /** {@inheritDoc} */
        @Override
-       public Collection<DescriptionElementBase> getCollection(
-                       TaxonNameBase entity) {
-               return getTaxonNameDescription(entity).getElements();
+       public Collection<DescriptionElementBase> getCollection(TaxonNameBase entity) {
+               Collection<DescriptionElementBase> result = new ArrayList<DescriptionElementBase>();
+               List<TaxonNameDescription> descriptions = getTaxonNameDescriptions(entity);
+               for (TaxonNameDescription desc : descriptions){
+                       result.addAll(desc.getElements());
+               }
+               return result;
+//OLD: return getTaxonNameDescription(entity).getElements();
        }
 
 
@@ -80,13 +87,17 @@ public class ProtologueSection extends AbstractEntityCollectionSection<TaxonName
        /** {@inheritDoc} */
        @Override
        public void addElement(DescriptionElementBase element) {
+               //for simplification we always use the first description to add elements here
                getTaxonNameDescription(getEntity()).addElement(element);
        }
 
        /** {@inheritDoc} */
        @Override
        public void removeElement(DescriptionElementBase element) {
-               getTaxonNameDescription(getEntity()).removeElement(element);
+               List<TaxonNameDescription> descriptions = getTaxonNameDescriptions(getEntity());
+               for (TaxonNameDescription desc : descriptions){
+                       desc.removeElement(element);
+               } 
        }
 
        /** {@inheritDoc} */
@@ -96,13 +107,33 @@ public class ProtologueSection extends AbstractEntityCollectionSection<TaxonName
                setEntity(name);
        }
        
+       /**
+        * NOTE: returns first description
+        * @param name
+        * @return
+        */
        private TaxonNameDescription getTaxonNameDescription(TaxonNameBase name){
-               // FIXME does not handle multiple name descriptions at the moment
                if(name.getDescriptions().size() == 0){
                        name.addDescription(TaxonNameDescription.NewInstance(name));
                }
                return (TaxonNameDescription) name.getDescriptions().iterator().next();
        }
+       
+       /**
+        * Try to fix FIXME in {@link #getTaxonNameDescription(TaxonNameBase)}
+        * @param name
+        * @return
+        */
+       private List<TaxonNameDescription> getTaxonNameDescriptions(TaxonNameBase<?,?> name){
+               List<TaxonNameDescription> result = new ArrayList<TaxonNameDescription>();
+               if(name.getDescriptions().size() == 0){
+                       name.addDescription(TaxonNameDescription.NewInstance(name));
+               }
+               for (TaxonNameDescription desc : name.getDescriptions()){
+                       result.add(desc);
+               }
+               return result;
+       }
 
        /* (non-Javadoc)
         * @see eu.etaxonomy.taxeditor.section.ITaxonDetailSection#getTaxon(eu.etaxonomy.cdm.model.taxon.TaxonBase)