3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.editor
.name
.handler
;
15 import org
.eclipse
.core
.expressions
.PropertyTester
;
16 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
18 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
19 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
20 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
21 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
22 import eu
.etaxonomy
.cdm
.persistence
.dto
.UuidAndTitleCache
;
23 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
24 import eu
.etaxonomy
.taxeditor
.editor
.Page
;
25 import eu
.etaxonomy
.taxeditor
.editor
.name
.TaxonNameEditor
;
26 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
29 * <p>NameEditorMenuPropertyTester class.</p>
32 * @created Jun 22, 2010
35 public class NameEditorMenuPropertyTester
extends PropertyTester
{
37 private static final String ACCEPTED
= "isAcceptedTaxon";
38 private static final String SYNONYM
= "isSynonym";
39 private static final String MISAPPLICATION
= "isMisapplication";
40 private static final String TAXONBASE
= "isTaxonBase";
41 private static final String CONCEPT
= "isConceptRelation";
42 private static final String EMPTY_NAMES
= "hasEmptyNames";
43 private static final String ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS
= "isAcceptedAndHasNoHomotypicSynonyms";
44 private static final String NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED
= "isNotHomotypicSynonymOfAcceptedTaxon";
45 private static final String SYNONYM_WITH_HOMOTYPIC_SYNONYMS
= "isSynonymInHomotypicalGroupWithMoreSynonyms";
46 private static final String IS_ORPHANED
= "isOrphaned";
49 * <p>Constructor for NameEditorMenuPropertyTester.</p>
51 public NameEditorMenuPropertyTester() {
55 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
59 public boolean test(Object receiver
, String property
, Object
[] args
,
60 Object expectedValue
) {
62 if(receiver
instanceof IStructuredSelection
){
64 IStructuredSelection selection
= (IStructuredSelection
) receiver
;
66 Object selectedElement
= selection
.getFirstElement();
67 if(selectedElement
instanceof UuidAndTitleCache
){
68 UuidAndTitleCache uuidAndTitleCache
= (UuidAndTitleCache
<?
>)selectedElement
;
69 CdmBase cdmBase
= CdmStore
.getCommonService().find(uuidAndTitleCache
.getType(), uuidAndTitleCache
.getUuid());
70 selectedElement
= cdmBase
;
73 if(ACCEPTED
.equals(property
)){
74 return isAccepted(selectedElement
);
76 else if(SYNONYM
.equals(property
)){
77 return isSynonym(selectedElement
);
79 else if(MISAPPLICATION
.equals(property
)){
80 return isMisapplication(selectedElement
);
82 else if(TAXONBASE
.equals(property
)){
83 return isTaxonBase(selectedElement
);
85 else if(CONCEPT
.equals(property
)){
86 return isRelatedConcept(selectedElement
);
88 else if(EMPTY_NAMES
.equals(property
)){
89 return hasEmptyNames(receiver
);
91 else if(ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS
.equals(property
)){
92 return isAcceptedAndHasNoHomotypicSynonyms(selectedElement
);
94 else if (NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED
.equals(property
)){
95 return isNotHomotypicSynonymOfAcceptedTaxon(selectedElement
);
97 else if (SYNONYM_WITH_HOMOTYPIC_SYNONYMS
.equals(property
)){
98 return isSynonymInHomotypicalGroupWithMoreSynonyms(selectedElement
);
100 else if (IS_ORPHANED
.equals(property
)){
101 return isOrphaned(selectedElement
);
110 private boolean isAcceptedAndHasNoHomotypicSynonyms(Object selectedElement
) {
111 if (isAccepted(selectedElement
)){
112 Taxon taxon
= (Taxon
) selectedElement
;
113 return taxon
.getSynonymsInGroup(taxon
.getHomotypicGroup()).isEmpty();
118 private boolean isSynonymInHomotypicalGroupWithMoreSynonyms(Object selectedElement
) {
119 if (isSynonym(selectedElement
)){
120 Synonym synonym
= (Synonym
) selectedElement
;
121 return synonym
.getHomotypicGroup().getTypifiedNames().size()>1;
127 private boolean isNotHomotypicSynonymOfAcceptedTaxon(Object selectedElement
) {
128 if (isSynonym(selectedElement
)){
129 Synonym synonym
= (Synonym
) selectedElement
;
130 for (Taxon taxon
:synonym
.getAcceptedTaxa()){
131 if (taxon
.getHomotypicGroup().equals(synonym
.getHomotypicGroup())){
144 private boolean hasEmptyNames(Object receiver
) {
145 TaxonNameEditor editor
= (TaxonNameEditor
) EditorUtil
.getActiveEditorPage(Page
.NAME
);
146 return editor
== null ?
false : editor
.checkForEmptyNames();
149 private boolean isRelatedConcept(Object selectedElement
) {
150 if(selectedElement
instanceof Taxon
&& ((Taxon
) selectedElement
).isRelatedConcept()){
156 private boolean isTaxonBase(Object selectedElement
) {
157 return (selectedElement
instanceof TaxonBase
) ?
true : false;
160 private boolean isMisapplication(Object selectedElement
) {
161 if(selectedElement
instanceof Taxon
&& ((Taxon
) selectedElement
).isMisapplication()){
167 private boolean isSynonym(Object selectedElement
) {
168 return (selectedElement
instanceof Synonym
) ?
true : false;
171 private boolean isAccepted(Object selectedElement
) {
172 return (selectedElement
instanceof Taxon
&& ! ((Taxon
) selectedElement
).isMisapplication()) ?
true : false;
175 private boolean isOrphaned(Object selectedElement
) {
176 if(selectedElement
instanceof Taxon
){
177 return ((Taxon
) selectedElement
).isOrphaned();
179 else if(selectedElement
instanceof Synonym
){
180 Set
<Taxon
> acceptedTaxa
= ((Synonym
) selectedElement
).getAcceptedTaxa();
181 for (Taxon taxon
: acceptedTaxa
) {
182 if(!taxon
.isOrphaned()){