2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.editor
.name
.handler
;
12 import org
.eclipse
.core
.expressions
.PropertyTester
;
13 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
15 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
16 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
17 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
18 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
19 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
20 import eu
.etaxonomy
.cdm
.persistence
.dto
.UuidAndTitleCache
;
21 import eu
.etaxonomy
.taxeditor
.editor
.name
.e4
.TaxonNameEditorE4
;
22 import eu
.etaxonomy
.taxeditor
.event
.EventUtility
;
23 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
26 * <p>NameEditorMenuPropertyTester class.</p>
29 * @created Jun 22, 2010
31 public class NameEditorMenuPropertyTester
extends PropertyTester
{
33 private static final String ACCEPTED
= "isAcceptedTaxon"; //$NON-NLS-1$
34 private static final String NOT_ACCEPTED
= "isNotAcceptedTaxon"; //$NON-NLS-1$
35 private static final String SYNONYM
= "isSynonym"; //$NON-NLS-1$
36 private static final String NOT_SYNONYM
= "isNotSynonym"; //$NON-NLS-1$
37 private static final String MISAPPLICATION
= "isMisapplication"; //$NON-NLS-1$
38 private static final String NOT_MISAPPLICATION
= "isNotMisapplication"; //$NON-NLS-1$
39 private static final String PROPARTE_SYNONYM
= "isProparteSynonym";//$NON-NLS-1$
40 private static final String NOT_PROPARTE_SYNONYM
= "isNotProparteSynonym"; //$NON-NLS-1$
41 private static final String TAXONBASE
= "isTaxonBase"; //$NON-NLS-1$
42 private static final String CONCEPT
= "isConceptRelation"; //$NON-NLS-1$
43 private static final String EMPTY_NAMES
= "hasEmptyNames"; //$NON-NLS-1$
44 private static final String ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS
= "isAcceptedAndHasNoHomotypicSynonyms"; //$NON-NLS-1$
45 private static final String NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED
= "isNotHomotypicSynonymOfAcceptedTaxon"; //$NON-NLS-1$
46 private static final String SYNONYM_WITH_HOMOTYPIC_SYNONYMS
= "isSynonymInHomotypicalGroupWithMoreSynonyms"; //$NON-NLS-1$
47 private static final String IS_ORPHANED
= "isOrphaned";
50 * <p>Constructor for NameEditorMenuPropertyTester.</p>
52 public NameEditorMenuPropertyTester() {
56 public boolean test(Object receiver
, String property
, Object
[] args
,
57 Object expectedValue
) {
59 if(receiver
instanceof IStructuredSelection
){
61 IStructuredSelection selection
= (IStructuredSelection
) receiver
;
63 Object selectedElement
= selection
.getFirstElement();
64 Class
<?
> type
= selectedElement
.getClass();
65 if(selectedElement
instanceof UuidAndTitleCache
){
66 UuidAndTitleCache uuidAndTitleCache
= (UuidAndTitleCache
<?
>)selectedElement
;
67 type
= uuidAndTitleCache
.getType();
69 if(EMPTY_NAMES
.equals(property
)){
70 return hasEmptyNames(receiver
);
72 else if(!(TaxonBase
.class.isAssignableFrom(type
))){
75 if(selectedElement
instanceof UuidAndTitleCache
){
76 UuidAndTitleCache uuidAndTitleCache
= (UuidAndTitleCache
<?
>)selectedElement
;
77 CdmBase cdmBase
= CdmStore
.getCommonService().find(uuidAndTitleCache
.getType(), uuidAndTitleCache
.getUuid());
78 selectedElement
= cdmBase
;
80 if(NOT_ACCEPTED
.equals(property
)){
81 return !isAccepted(selectedElement
);
83 else if(ACCEPTED
.equals(property
)){
84 return isAccepted(selectedElement
);
86 else if(SYNONYM
.equals(property
)){
87 return isSynonym(selectedElement
);
89 else if(NOT_SYNONYM
.equals(property
)){
90 return isNotSynonym(selectedElement
);
92 else if(MISAPPLICATION
.equals(property
)){
93 return isMisapplication(selectedElement
);
95 else if(PROPARTE_SYNONYM
.equals(property
)){
96 return isProparteSynonym(selectedElement
);
98 else if(NOT_PROPARTE_SYNONYM
.equals(property
)){
99 return isNotProparteSynonym(selectedElement
);
101 else if(NOT_MISAPPLICATION
.equals(property
)){
102 return isNotMisapplication(selectedElement
);
104 else if(TAXONBASE
.equals(property
)){
105 return isTaxonBase(selectedElement
);
107 else if(CONCEPT
.equals(property
)){
108 return isRelatedConcept(selectedElement
);
110 else if(ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS
.equals(property
)){
111 return isAcceptedAndHasNoHomotypicSynonyms(selectedElement
);
113 else if (NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED
.equals(property
)){
114 return isNotHomotypicSynonymOfAcceptedTaxon(selectedElement
);
116 else if (SYNONYM_WITH_HOMOTYPIC_SYNONYMS
.equals(property
)){
117 return isSynonymOrTaxonInHomotypicalGroupWithMoreSynonyms(selectedElement
);
119 else if (IS_ORPHANED
.equals(property
)){
120 return isOrphaned(selectedElement
);
127 public static boolean isAcceptedAndHasNoHomotypicSynonyms(Object selectedElement
) {
128 if (isAccepted(selectedElement
)){
129 Taxon taxon
= (Taxon
) selectedElement
;
130 return taxon
.getSynonymsInGroup(taxon
.getHomotypicGroup()).isEmpty();
134 public static boolean isNotAcceptedTaxon(Object selectedElement
) {
136 return !isAccepted(selectedElement
);
139 public static boolean isNotMisapplication(Object selectedElement
) {
141 return !isMisapplication(selectedElement
);
144 public static boolean isSynonymOrTaxonInHomotypicalGroupWithMoreSynonyms(Object selectedElement
) {
145 if (isSynonym(selectedElement
) || isAccepted(selectedElement
)){
146 TaxonBase
<?
> synonym
= HibernateProxyHelper
.deproxy(selectedElement
, TaxonBase
.class);
147 return synonym
.getHomotypicGroup().getTypifiedNames().size()>1;
153 public static boolean isNotHomotypicSynonymOfAcceptedTaxon(Object selectedElement
) {
154 if (isSynonym(selectedElement
)){
155 Synonym synonym
= (Synonym
) selectedElement
;
156 Taxon taxon
= synonym
.getAcceptedTaxon();
158 taxon
.getHomotypicGroup().equals(synonym
.getHomotypicGroup())){
170 public static boolean hasEmptyNames(Object receiver
) {
171 TaxonNameEditorE4 editor
= (TaxonNameEditorE4
) EventUtility
.getTaxonEditor();
172 return editor
== null ?
false : editor
.checkForEmptyNames();
175 public static boolean isRelatedConcept(Object selectedElement
) {
176 if(selectedElement
instanceof Taxon
&& ((Taxon
) selectedElement
).isRelatedConcept() && !((TaxonNameEditorE4
) EventUtility
.getTaxonEditor()).getTaxon().equals(selectedElement
)){
182 public static boolean isTaxonBase(Object selectedElement
) {
183 return (selectedElement
instanceof TaxonBase
) ?
true : false;
186 public static boolean isMisapplication(Object selectedElement
) {
187 if(selectedElement
instanceof Taxon
&& ((Taxon
) selectedElement
).isMisapplication() && !((TaxonNameEditorE4
) EventUtility
.getTaxonEditor()).getTaxon().equals(selectedElement
)){
193 public static boolean isProparteSynonym(Object selectedElement
) {
194 if(selectedElement
instanceof Taxon
&& ((Taxon
) selectedElement
).isProparteSynonym() && !((TaxonNameEditorE4
) EventUtility
.getTaxonEditor()).getTaxon().equals(selectedElement
)){
199 public static boolean isNotProparteSynonym(Object selectedElement
) {
200 if (selectedElement
instanceof Synonym
){
203 if(((Taxon
) selectedElement
).isProparteSynonym() && !((TaxonNameEditorE4
) EventUtility
.getTaxonEditor()).getTaxon().equals(selectedElement
)){
209 public static boolean isSynonym(Object selectedElement
) {
210 return (selectedElement
instanceof Synonym
) ?
true : false;
212 public static boolean isNotSynonym(Object selectedElement
) {
213 return !isSynonym(selectedElement
);
216 public static boolean isAccepted(Object selectedElement
) {
217 TaxonNameEditorE4 editor
= (TaxonNameEditorE4
) EventUtility
.getTaxonEditor();
218 Taxon accepted
= editor
.getTaxon();
219 return (selectedElement
instanceof Taxon
&& accepted
.equals(selectedElement
)) ?
true : false;
222 public static boolean isOrphaned(Object selectedElement
) {
223 if(selectedElement
instanceof Taxon
){
224 return ((Taxon
) selectedElement
).isOrphaned();
226 else if(selectedElement
instanceof Synonym
){
227 return ((Synonym
) selectedElement
).isOrphaned();
233 * @param selectedElement
236 public static boolean isProParteSynonym(Object selectedElement
) {
237 if(selectedElement
instanceof Taxon
&& ((Taxon
) selectedElement
).isProparteSynonym()){