Merge branch 'release/5.11.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / combo / EnumComboElement.java
index 7841fb7c9151e18983c835516d593b9e77ebd32c..601e9c226f5726835718dcd80e6024121ca8c34e 100644 (file)
@@ -19,21 +19,28 @@ import java.util.List;
 import java.util.Map.Entry;
 
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.ui.forms.widgets.TableWrapData;
 
-import eu.etaxonomy.cdm.model.common.IEnumTerm;
-import eu.etaxonomy.cdm.model.common.OriginalSourceType;
+import eu.etaxonomy.cdm.model.media.ExternalLinkType;
+import eu.etaxonomy.cdm.model.name.NameRelationship;
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCodeEdition;
+import eu.etaxonomy.cdm.model.name.TaxonName;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
+import eu.etaxonomy.cdm.model.reference.OriginalSourceType;
 import eu.etaxonomy.cdm.model.reference.ReferenceType;
+import eu.etaxonomy.cdm.model.term.IEnumTerm;
 import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
 import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
+import eu.etaxonomy.taxeditor.ui.section.name.NameRelationshipDetailElement;
+import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusElement;
+import eu.etaxonomy.taxeditor.ui.section.name.NomenclaturalStatusSection;
 
 /**
  * @author n.hoffmann
  * @created Mar 16, 2010
- * @version 1.0
  */
 public class EnumComboElement<T extends IEnumTerm<T>> extends
                AbstractComboElement<T>  {
@@ -44,7 +51,7 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
        }
 
 
-       private static CdmEnumDataHolder[] cdmEnumDataHolders = {
+        private  static  CdmEnumDataHolder[] cdmEnumDataHolders = {
                new CdmEnumDataHolder<NomenclaturalCode>(){
 
                        @Override
@@ -54,7 +61,10 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
 
                        @Override
                        public Collection<NomenclaturalCode> getElements() {
-                               return  Arrays.asList(NomenclaturalCode.values());
+                               Collection<NomenclaturalCode> result = new ArrayList<>(Arrays.asList(NomenclaturalCode.values()));
+               result.remove(NomenclaturalCode.ICVCN);
+                return  result;
+
                        }
 
                        @Override
@@ -99,6 +109,24 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
                        }
 
                },
+               new CdmEnumDataHolder<ExternalLinkType>(){
+
+            @Override
+            public String getName() {
+                return "Type";
+            }
+
+            @Override
+            public Collection<ExternalLinkType> getElements() {
+                return Arrays.asList(ExternalLinkType.values());
+            }
+
+            @Override
+            public Class<ExternalLinkType> getClazz() {
+                return ExternalLinkType.class;
+            }
+
+        },
                new CdmEnumDataHolder<OriginalSourceType>(){
 
                        @Override
@@ -116,11 +144,29 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
                                return OriginalSourceType.class;
                        }
 
-               }
+               },
+        new CdmEnumDataHolder<NomenclaturalCodeEdition>(){
+
+            @Override
+            public String getName() {
+                return "Nomenclatural Code Edition";
+            }
+
+            @Override
+            public Collection<NomenclaturalCodeEdition> getElements() {
+                return Arrays.asList(NomenclaturalCodeEdition.values());
+            }
+
+            @Override
+            public Class<NomenclaturalCodeEdition> getClazz() {
+                return NomenclaturalCodeEdition.class;
+            }
+
+        }
 
        };
 
-       protected List<T> elementTypeList = new ArrayList<T>();
+       protected List<T> elementTypeList = new ArrayList<>();
 
        private final Class<T> enumType;
 
@@ -129,12 +175,17 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
                super(formFactory, parentElement);
                this.enumType = enumType;
                label.setText(getDefaultLabelString());
-
                populateTypes(comparator);
-
                combo.addSelectionListener(this);
        }
 
+       public void setIndent(int indent) {
+       TableWrapData layoutData = new TableWrapData();
+        layoutData.indent = indent;
+        label.setLayoutData(layoutData);
+
+        getLayoutComposite().layout();
+       }
 
 
        private String getDefaultLabelString() {
@@ -146,7 +197,11 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
                        return "Orig. Source Type";
                } else if(enumType.equals(SpecimenOrObservationType.class)) {
                        return "Spec./Obs. Type";
-               }
+               } else if(enumType.equals(ExternalLinkType.class)) {
+            return "Type";
+        } else if(enumType.equals(NomenclaturalCodeEdition.class)) {
+            return "Code Edition";
+        }
                return "No Label";
        }
 
@@ -162,12 +217,34 @@ public class EnumComboElement<T extends IEnumTerm<T>> extends
                 elementTypeList.add(keyLabelPair.getKey());
                 combo.add(keyLabelPair.getValue());
             }
+        }else if(enumType.equals(NomenclaturalCodeEdition.class)){
+            NomenclaturalCode code = null;
+
+            ICdmFormElement parentElement = getParentElement();
+            if (parentElement instanceof NameRelationshipDetailElement){
+                NameRelationship rel = ((NameRelationshipDetailElement)parentElement).getEntity();
+                code = rel.getToName().getNomenclaturalCode();
+            }else if (parentElement instanceof NomenclaturalStatusElement){
+                ICdmFormElement parent = ((NomenclaturalStatusElement)parentElement).getParentElement();
+                TaxonName name = ((NomenclaturalStatusSection)parent).getEntity();
+                code = name.getNomenclaturalCode();
+            }
+            List<NomenclaturalCodeEdition> elements = NomenclaturalCodeEdition.forCode(code);
+            LinkedHashMap<NomenclaturalCodeEdition, String> orderedTerms = AbstractUtility.orderTerms(elements);
+            for (NomenclaturalCodeEdition codeEdition: elements){
+                    elementTypeList.add((T)codeEdition);
+                    combo.add(codeEdition.getMessage());
+            }
         }
         // default order
         else{
             for(T enumElement : elementsForClass){
                 elementTypeList.add(enumElement);
-                combo.add(((Enum) enumElement).name());
+                if (enumElement instanceof IEnumTerm)  {
+                    combo.add(((IEnumTerm) enumElement).getMessage());
+                }else{
+                    combo.add(((Enum) enumElement).name());
+                }
             }
         }
        }