package eu.etaxonomy.taxeditor.editor.name.handler;
+import java.util.Set;
+
+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.cdm.persistence.dto.UuidAndTitleCache;
import eu.etaxonomy.taxeditor.editor.EditorUtil;
import eu.etaxonomy.taxeditor.editor.Page;
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
+import eu.etaxonomy.taxeditor.store.CdmStore;
/**
* <p>NameEditorMenuPropertyTester class.</p>
* @created Jun 22, 2010
* @version 1.0
*/
-public class NameEditorMenuPropertyTester extends org.eclipse.core.expressions.PropertyTester {
+public class NameEditorMenuPropertyTester extends PropertyTester {
private static final String ACCEPTED = "isAcceptedTaxon";
private static final String SYNONYM = "isSynonym";
private static final String CONCEPT = "isConceptRelation";
private static final String EMPTY_NAMES = "hasEmptyNames";
private static final String ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS = "isAcceptedAndHasNoHomotypicSynonyms";
+ private static final String NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED = "isNotHomotypicSynonymOfAcceptedTaxon";
+ private static final String SYNONYM_WITH_HOMOTYPIC_SYNONYMS = "isSynonymInHomotypicalGroupWithMoreSynonyms";
+ private static final String IS_ORPHANED = "isOrphaned";
/**
* <p>Constructor for NameEditorMenuPropertyTester.</p>
IStructuredSelection selection = (IStructuredSelection) receiver;
Object selectedElement = selection.getFirstElement();
+ 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(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;
return false;
}
+ private boolean isSynonymInHomotypicalGroupWithMoreSynonyms(Object selectedElement) {
+ if (isSynonym(selectedElement)){
+ Synonym synonym = (Synonym) selectedElement;
+ return synonym.getHomotypicGroup().getTypifiedNames().size()>1;
+ }
+ return false;
+ }
+
+
+ private boolean isNotHomotypicSynonymOfAcceptedTaxon(Object selectedElement) {
+ if (isSynonym(selectedElement)){
+ Synonym synonym = (Synonym) selectedElement;
+ for (Taxon taxon:synonym.getAcceptedTaxa()){
+ if (taxon.getHomotypicGroup().equals(synonym.getHomotypicGroup())){
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+
/**
* @param receiver
* @return
private boolean isAccepted(Object selectedElement) {
return (selectedElement instanceof Taxon && ! ((Taxon) selectedElement).isMisapplication()) ? true : false;
}
+
+ private boolean isOrphaned(Object selectedElement) {
+ if(selectedElement instanceof Taxon){
+ return ((Taxon) selectedElement).isOrphaned();
+ }
+ else if(selectedElement instanceof Synonym){
+ Set<Taxon> acceptedTaxa = ((Synonym) selectedElement).getAcceptedTaxa();
+ for (Taxon taxon : acceptedTaxa) {
+ if(!taxon.isOrphaned()){
+ return false;
+ }
+ }
+ }
+ return false;
+ }
}