Merge branch 'develop' into bulkEditorE4
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / handler / NameEditorMenuPropertyTester.java
index 6a6b02d78322af9444edf4069af0a2f00b854ed4..bbb0fd5d36f1f20bdbbe25a03dca304ed2a48104 100644 (file)
@@ -1,23 +1,25 @@
-// $Id$
 /**
 * Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy 
+* European Distributed Institute of Taxonomy
 * http://www.e-taxonomy.eu
-* 
+*
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
 
 package eu.etaxonomy.taxeditor.editor.name.handler;
 
+import org.eclipse.core.expressions.PropertyTester;
 import org.eclipse.jface.viewers.IStructuredSelection;
 
+import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.taxon.Synonym;
 import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
-import eu.etaxonomy.taxeditor.editor.EditorUtil;
-import eu.etaxonomy.taxeditor.editor.Page;
-import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
+import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
+import eu.etaxonomy.taxeditor.event.EventUtility;
+import eu.etaxonomy.taxeditor.store.CdmStore;
 
 /**
  * <p>NameEditorMenuPropertyTester class.</p>
@@ -26,42 +28,45 @@ import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
  * @created Jun 22, 2010
  * @version 1.0
  */
-public class NameEditorMenuPropertyTester extends org.eclipse.core.expressions.PropertyTester {
-
-       private static final String ACCEPTED = "isAcceptedTaxon";
-       private static final String SYNONYM = "isSynonym";
-       private static final String MISAPPLICATION = "isMisapplication";
-       private static final String TAXONBASE = "isTaxonBase";
-       private static final String CONCEPT = "isConceptRelation";
-       private static final String EMPTY_NAMES = "hasEmptyNames";
-       private static final String ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS = "isAcceptedAndHasNoHomotypicSynonyms";
-       
+public class NameEditorMenuPropertyTester extends PropertyTester {
+
+       private static final String ACCEPTED = "isAcceptedTaxon"; //$NON-NLS-1$
+       private static final String SYNONYM = "isSynonym"; //$NON-NLS-1$
+       private static final String MISAPPLICATION = "isMisapplication"; //$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$
+
        /**
         * <p>Constructor for NameEditorMenuPropertyTester.</p>
         */
        public NameEditorMenuPropertyTester() {
        }
 
-       /* (non-Javadoc)
-        * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
-        */
        /** {@inheritDoc} */
-       public boolean test(Object receiver, String property, Object[] args,
+       @Override
+    public boolean test(Object receiver, String property, Object[] args,
                        Object expectedValue) {
-               
+
                if(receiver instanceof IStructuredSelection){
-                       
+
                        IStructuredSelection selection = (IStructuredSelection) receiver;
-                       
+
                        Object selectedElement = selection.getFirstElement();
-                       
-                       System.out.println(selectedElement);
-                       System.out.println(property);
+                       if(selectedElement instanceof UuidAndTitleCache){
+                           UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache<?>)selectedElement;
+                           CdmBase cdmBase = CdmStore.getCommonService().find(uuidAndTitleCache.getType(), uuidAndTitleCache.getUuid());
+                           selectedElement = cdmBase;
+                       }
+
                        if(ACCEPTED.equals(property)){
                                return isAccepted(selectedElement);
                        }
                        else if(SYNONYM.equals(property)){
-                               System.out.println(isSynonym(selectedElement));
                                return isSynonym(selectedElement);
                        }
                        else if(MISAPPLICATION.equals(property)){
@@ -79,13 +84,23 @@ public class NameEditorMenuPropertyTester extends org.eclipse.core.expressions.P
                        else if(ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS.equals(property)){
                                return isAcceptedAndHasNoHomotypicSynonyms(selectedElement);
                        }
+                       else if (NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED.equals(property)){
+                               return isNotHomotypicSynonymOfAcceptedTaxon(selectedElement);
+                       }
+                       else if (SYNONYM_WITH_HOMOTYPIC_SYNONYMS.equals(property)){
+                               return isSynonymInHomotypicalGroupWithMoreSynonyms(selectedElement);
+                       }
+                       else if (IS_ORPHANED.equals(property)){
+                           return isOrphaned(selectedElement);
+                       }
+
                }
-               
+
                return false;
-               
+
        }
 
-       private boolean isAcceptedAndHasNoHomotypicSynonyms(Object selectedElement) {
+       public static boolean isAcceptedAndHasNoHomotypicSynonyms(Object selectedElement) {
                if (isAccepted(selectedElement)){
                        Taxon taxon = (Taxon) selectedElement;
                        return taxon.getSynonymsInGroup(taxon.getHomotypicGroup()).isEmpty();
@@ -93,39 +108,70 @@ public class NameEditorMenuPropertyTester extends org.eclipse.core.expressions.P
                return false;
        }
 
+       public static boolean isSynonymInHomotypicalGroupWithMoreSynonyms(Object selectedElement) {
+               if (isSynonym(selectedElement)){
+                       Synonym synonym = (Synonym) selectedElement;
+                       return synonym.getHomotypicGroup().getTypifiedNames().size()>1;
+               }
+               return false;
+       }
+
+
+       public static boolean isNotHomotypicSynonymOfAcceptedTaxon(Object selectedElement) {
+               if (isSynonym(selectedElement)){
+                       Synonym synonym = (Synonym) selectedElement;
+                       Taxon taxon = synonym.getAcceptedTaxon();
+                       if (taxon != null &&
+                                       taxon.getHomotypicGroup().equals(synonym.getHomotypicGroup())){
+                               return false;
+                       }
+               }
+               return true;
+       }
+
+
        /**
         * @param receiver
         * @return
         */
-       private boolean hasEmptyNames(Object receiver) {
-               TaxonNameEditor editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
+       public static boolean hasEmptyNames(Object receiver) {
+               TaxonNameEditorE4 editor = (TaxonNameEditorE4) EventUtility.getEditor();
                return editor == null ? false : editor.checkForEmptyNames();
        }
 
-       private boolean isRelatedConcept(Object selectedElement) {
+       public static boolean isRelatedConcept(Object selectedElement) {
                if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isRelatedConcept()){
                        return true;
                }
                return false;
        }
 
-       private boolean isTaxonBase(Object selectedElement) {
+       public static boolean isTaxonBase(Object selectedElement) {
                return (selectedElement instanceof TaxonBase) ? true : false;
        }
 
-       private boolean isMisapplication(Object selectedElement) {
+       public static boolean isMisapplication(Object selectedElement) {
                if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isMisapplication()){
                        return true;
                }
                return false;
        }
 
-       private boolean isSynonym(Object selectedElement) {
-               System.out.println("isSynonym...." + selectedElement);
+       public static boolean isSynonym(Object selectedElement) {
                return (selectedElement instanceof Synonym) ? true : false;
        }
 
-       private boolean isAccepted(Object selectedElement) {
+       public static boolean isAccepted(Object selectedElement) {
                return (selectedElement instanceof Taxon  && ! ((Taxon) selectedElement).isMisapplication()) ? true : false;
        }
+
+       public static boolean isOrphaned(Object selectedElement) {
+           if(selectedElement instanceof Taxon){
+               return ((Taxon) selectedElement).isOrphaned();
+           }
+           else if(selectedElement instanceof Synonym){
+               return ((Synonym) selectedElement).isOrphaned();
+           }
+           return false;
+       }
 }