Merge branch 'release/5.18.0'
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / handler / NameEditorMenuPropertyTester.java
old mode 100644 (file)
new mode 100755 (executable)
index 7fb6c13..7618aa9
@@ -26,21 +26,24 @@ import eu.etaxonomy.taxeditor.store.CdmStore;
  *
  * @author n.hoffmann
  * @created Jun 22, 2010
- * @version 1.0
  */
 public class NameEditorMenuPropertyTester extends PropertyTester {
 
        private static final String ACCEPTED = "isAcceptedTaxon"; //$NON-NLS-1$
        private static final String NOT_ACCEPTED = "isNotAcceptedTaxon"; //$NON-NLS-1$
        private static final String SYNONYM = "isSynonym"; //$NON-NLS-1$
+       private static final String NOT_SYNONYM = "isNotSynonym"; //$NON-NLS-1$
        private static final String MISAPPLICATION = "isMisapplication"; //$NON-NLS-1$
+       private static final String NOT_MISAPPLICATION = "isNotMisapplication"; //$NON-NLS-1$
+       private static final String PROPARTE_SYNONYM = "isProparteSynonym";//$NON-NLS-1$
+       private static final String NOT_PROPARTE_SYNONYM = "isNotProparteSynonym"; //$NON-NLS-1$
        private static final String TAXONBASE = "isTaxonBase"; //$NON-NLS-1$
        private static final String CONCEPT = "isConceptRelation"; //$NON-NLS-1$
        private static final String EMPTY_NAMES = "hasEmptyNames"; //$NON-NLS-1$
        private static final String ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS = "isAcceptedAndHasNoHomotypicSynonyms"; //$NON-NLS-1$
        private static final String NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED = "isNotHomotypicSynonymOfAcceptedTaxon"; //$NON-NLS-1$
        private static final String SYNONYM_WITH_HOMOTYPIC_SYNONYMS = "isSynonymInHomotypicalGroupWithMoreSynonyms"; //$NON-NLS-1$
-       private static final String IS_ORPHANED = "isOrphaned"; //$NON-NLS-1$
+       private static final String IS_ORPHANED = "isOrphaned";
 
        /**
         * <p>Constructor for NameEditorMenuPropertyTester.</p>
@@ -48,7 +51,6 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
        public NameEditorMenuPropertyTester() {
        }
 
-       /** {@inheritDoc} */
        @Override
     public boolean test(Object receiver, String property, Object[] args,
                        Object expectedValue) {
@@ -63,27 +65,42 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
                            CdmBase cdmBase = CdmStore.getCommonService().find(uuidAndTitleCache.getType(), uuidAndTitleCache.getUuid());
                            selectedElement = cdmBase;
                        }
-                       if(NOT_ACCEPTED.equals(property)){
+            if(EMPTY_NAMES.equals(property)){
+                return hasEmptyNames(receiver);
+            }
+            else if(!(selectedElement instanceof TaxonBase)){
+                return false;
+            }
+            else if(NOT_ACCEPTED.equals(property)){
                 return !isAccepted(selectedElement);
             }
-                       if(ACCEPTED.equals(property)){
+                       else if(ACCEPTED.equals(property)){
                                return isAccepted(selectedElement);
                        }
                        else if(SYNONYM.equals(property)){
                                return isSynonym(selectedElement);
                        }
+                       else if(NOT_SYNONYM.equals(property)){
+                return isNotSynonym(selectedElement);
+            }
                        else if(MISAPPLICATION.equals(property)){
                                return isMisapplication(selectedElement);
                        }
+                       else if(PROPARTE_SYNONYM.equals(property)){
+                return isProparteSynonym(selectedElement);
+            }
+                       else if(NOT_PROPARTE_SYNONYM.equals(property)){
+                return isNotProparteSynonym(selectedElement);
+            }
+                       else if(NOT_MISAPPLICATION.equals(property)){
+                return isNotMisapplication(selectedElement);
+            }
                        else if(TAXONBASE.equals(property)){
                                return isTaxonBase(selectedElement);
                        }
                        else if(CONCEPT.equals(property)){
                                return isRelatedConcept(selectedElement);
                        }
-                       else if(EMPTY_NAMES.equals(property)){
-                               return hasEmptyNames(receiver);
-                       }
                        else if(ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS.equals(property)){
                                return isAcceptedAndHasNoHomotypicSynonyms(selectedElement);
                        }
@@ -91,14 +108,12 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
                                return isNotHomotypicSynonymOfAcceptedTaxon(selectedElement);
                        }
                        else if (SYNONYM_WITH_HOMOTYPIC_SYNONYMS.equals(property)){
-                               return isSynonymInHomotypicalGroupWithMoreSynonyms(selectedElement);
+                               return isSynonymOrTaxonInHomotypicalGroupWithMoreSynonyms(selectedElement);
                        }
                        else if (IS_ORPHANED.equals(property)){
                            return isOrphaned(selectedElement);
                        }
-
                }
-
                return false;
 
        }
@@ -115,9 +130,14 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
         return !isAccepted(selectedElement);
     }
 
-       public static boolean isSynonymInHomotypicalGroupWithMoreSynonyms(Object selectedElement) {
-               if (isSynonym(selectedElement)){
-                       Synonym synonym = (Synonym) selectedElement;
+       public static boolean isNotMisapplication(Object selectedElement) {
+
+        return !isMisapplication(selectedElement);
+    }
+
+       public static boolean isSynonymOrTaxonInHomotypicalGroupWithMoreSynonyms(Object selectedElement) {
+               if (isSynonym(selectedElement) || isAccepted(selectedElement)){
+                       TaxonBase<?> synonym = (TaxonBase<?>) selectedElement;
                        return synonym.getHomotypicGroup().getTypifiedNames().size()>1;
                }
                return false;
@@ -147,7 +167,7 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
        }
 
        public static boolean isRelatedConcept(Object selectedElement) {
-               if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isRelatedConcept()){
+               if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isRelatedConcept() && !((TaxonNameEditorE4) EventUtility.getTaxonEditor()).getTaxon().equals(selectedElement)){
                        return true;
                }
                return false;
@@ -158,18 +178,39 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
        }
 
        public static boolean isMisapplication(Object selectedElement) {
-               if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isMisapplication()){
+               if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isMisapplication() && !((TaxonNameEditorE4) EventUtility.getTaxonEditor()).getTaxon().equals(selectedElement)){
                        return true;
                }
                return false;
        }
 
+       public static boolean isProparteSynonym(Object selectedElement) {
+        if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isProparteSynonym() && !((TaxonNameEditorE4) EventUtility.getTaxonEditor()).getTaxon().equals(selectedElement)){
+            return true;
+        }
+        return false;
+    }
+       public static boolean isNotProparteSynonym(Object selectedElement) {
+           if (selectedElement instanceof Synonym){
+               return true;
+           }
+        if(((Taxon) selectedElement).isProparteSynonym() && !((TaxonNameEditorE4) EventUtility.getTaxonEditor()).getTaxon().equals(selectedElement)){
+            return false;
+        }
+        return true;
+    }
+
        public static boolean isSynonym(Object selectedElement) {
                return (selectedElement instanceof Synonym) ? true : false;
        }
+       public static boolean isNotSynonym(Object selectedElement) {
+        return !isSynonym(selectedElement);
+    }
 
        public static boolean isAccepted(Object selectedElement) {
-               return (selectedElement instanceof Taxon  && ! ((Taxon) selectedElement).isMisapplication()) ? true : false;
+           TaxonNameEditorE4 editor = (TaxonNameEditorE4) EventUtility.getTaxonEditor();
+           Taxon accepted = editor.getTaxon();
+               return (selectedElement instanceof Taxon  && accepted.equals(selectedElement)) ? true : false;
        }
 
        public static boolean isOrphaned(Object selectedElement) {
@@ -181,4 +222,16 @@ public class NameEditorMenuPropertyTester extends PropertyTester {
            }
            return false;
        }
+
+    /**
+     * @param selectedElement
+     * @return
+     */
+    public static boolean isProParteSynonym(Object selectedElement) {
+        if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isProparteSynonym()){
+            return true;
+        }
+        return false;
+    }
+
 }