Project

General

Profile

Download (8.72 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
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.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.editor.name.handler;
11

    
12
import org.eclipse.core.expressions.PropertyTester;
13
import org.eclipse.jface.viewers.IStructuredSelection;
14

    
15
import eu.etaxonomy.cdm.model.common.CdmBase;
16
import eu.etaxonomy.cdm.model.taxon.Synonym;
17
import eu.etaxonomy.cdm.model.taxon.Taxon;
18
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
19
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
20
import eu.etaxonomy.taxeditor.editor.name.e4.TaxonNameEditorE4;
21
import eu.etaxonomy.taxeditor.event.EventUtility;
22
import eu.etaxonomy.taxeditor.store.CdmStore;
23

    
24
/**
25
 * <p>NameEditorMenuPropertyTester class.</p>
26
 *
27
 * @author n.hoffmann
28
 * @created Jun 22, 2010
29
 */
30
public class NameEditorMenuPropertyTester extends PropertyTester {
31

    
32
	private static final String ACCEPTED = "isAcceptedTaxon"; //$NON-NLS-1$
33
	private static final String NOT_ACCEPTED = "isNotAcceptedTaxon"; //$NON-NLS-1$
34
	private static final String SYNONYM = "isSynonym"; //$NON-NLS-1$
35
	private static final String NOT_SYNONYM = "isNotSynonym"; //$NON-NLS-1$
36
	private static final String MISAPPLICATION = "isMisapplication"; //$NON-NLS-1$
37
	private static final String NOT_MISAPPLICATION = "isNotMisapplication"; //$NON-NLS-1$
38
	private static final String PROPARTE_SYNONYM = "isProparteSynonym";//$NON-NLS-1$
39
	private static final String NOT_PROPARTE_SYNONYM = "isNotProparteSynonym"; //$NON-NLS-1$
40
	private static final String TAXONBASE = "isTaxonBase"; //$NON-NLS-1$
41
	private static final String CONCEPT = "isConceptRelation"; //$NON-NLS-1$
42
	private static final String EMPTY_NAMES = "hasEmptyNames"; //$NON-NLS-1$
43
	private static final String ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS = "isAcceptedAndHasNoHomotypicSynonyms"; //$NON-NLS-1$
44
	private static final String NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED = "isNotHomotypicSynonymOfAcceptedTaxon"; //$NON-NLS-1$
45
	private static final String SYNONYM_WITH_HOMOTYPIC_SYNONYMS = "isSynonymInHomotypicalGroupWithMoreSynonyms"; //$NON-NLS-1$
46
	private static final String IS_ORPHANED = "isOrphaned";
47

    
48
	/**
49
	 * <p>Constructor for NameEditorMenuPropertyTester.</p>
50
	 */
51
	public NameEditorMenuPropertyTester() {
52
	}
53

    
54
	@Override
55
    public boolean test(Object receiver, String property, Object[] args,
56
			Object expectedValue) {
57

    
58
		if(receiver instanceof IStructuredSelection){
59

    
60
			IStructuredSelection selection = (IStructuredSelection) receiver;
61

    
62
			Object selectedElement = selection.getFirstElement();
63
			Class<?> type = selectedElement.getClass();
64
			if(selectedElement instanceof UuidAndTitleCache){
65
			    UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache<?>)selectedElement;
66
			    type = uuidAndTitleCache.getType();
67
			}
68
            if(EMPTY_NAMES.equals(property)){
69
                return hasEmptyNames(receiver);
70
            }
71
            else if(!(TaxonBase.class.isAssignableFrom(type))){
72
                return false;
73
            }
74
            if(selectedElement instanceof UuidAndTitleCache){
75
                UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache<?>)selectedElement;
76
                CdmBase cdmBase = CdmStore.getCommonService().find(uuidAndTitleCache.getType(), uuidAndTitleCache.getUuid());
77
                selectedElement = cdmBase;
78
            }
79
            if(NOT_ACCEPTED.equals(property)){
80
                return !isAccepted(selectedElement);
81
            }
82
			else if(ACCEPTED.equals(property)){
83
				return isAccepted(selectedElement);
84
			}
85
			else if(SYNONYM.equals(property)){
86
				return isSynonym(selectedElement);
87
			}
88
			else if(NOT_SYNONYM.equals(property)){
89
                return isNotSynonym(selectedElement);
90
            }
91
			else if(MISAPPLICATION.equals(property)){
92
				return isMisapplication(selectedElement);
93
			}
94
			else if(PROPARTE_SYNONYM.equals(property)){
95
                return isProparteSynonym(selectedElement);
96
            }
97
			else if(NOT_PROPARTE_SYNONYM.equals(property)){
98
                return isNotProparteSynonym(selectedElement);
99
            }
100
			else if(NOT_MISAPPLICATION.equals(property)){
101
                return isNotMisapplication(selectedElement);
102
            }
103
			else if(TAXONBASE.equals(property)){
104
				return isTaxonBase(selectedElement);
105
			}
106
			else if(CONCEPT.equals(property)){
107
				return isRelatedConcept(selectedElement);
108
			}
109
			else if(ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS.equals(property)){
110
				return isAcceptedAndHasNoHomotypicSynonyms(selectedElement);
111
			}
112
			else if (NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED.equals(property)){
113
				return isNotHomotypicSynonymOfAcceptedTaxon(selectedElement);
114
			}
115
			else if (SYNONYM_WITH_HOMOTYPIC_SYNONYMS.equals(property)){
116
				return isSynonymOrTaxonInHomotypicalGroupWithMoreSynonyms(selectedElement);
117
			}
118
			else if (IS_ORPHANED.equals(property)){
119
			    return isOrphaned(selectedElement);
120
			}
121
		}
122
		return false;
123

    
124
	}
125

    
126
	public static boolean isAcceptedAndHasNoHomotypicSynonyms(Object selectedElement) {
127
		if (isAccepted(selectedElement)){
128
			Taxon taxon = (Taxon) selectedElement;
129
			return taxon.getSynonymsInGroup(taxon.getHomotypicGroup()).isEmpty();
130
		}
131
		return false;
132
	}
133
	public static boolean isNotAcceptedTaxon(Object selectedElement) {
134

    
135
        return !isAccepted(selectedElement);
136
    }
137

    
138
	public static boolean isNotMisapplication(Object selectedElement) {
139

    
140
        return !isMisapplication(selectedElement);
141
    }
142

    
143
	public static boolean isSynonymOrTaxonInHomotypicalGroupWithMoreSynonyms(Object selectedElement) {
144
		if (isSynonym(selectedElement) || isAccepted(selectedElement)){
145
			TaxonBase<?> synonym = (TaxonBase<?>) selectedElement;
146
			return synonym.getHomotypicGroup().getTypifiedNames().size()>1;
147
		}
148
		return false;
149
	}
150

    
151

    
152
	public static boolean isNotHomotypicSynonymOfAcceptedTaxon(Object selectedElement) {
153
		if (isSynonym(selectedElement)){
154
			Synonym synonym = (Synonym) selectedElement;
155
			Taxon taxon = synonym.getAcceptedTaxon();
156
			if (taxon != null &&
157
					taxon.getHomotypicGroup().equals(synonym.getHomotypicGroup())){
158
				return false;
159
			}
160
		}
161
		return true;
162
	}
163

    
164

    
165
	/**
166
	 * @param receiver
167
	 * @return
168
	 */
169
	public static boolean hasEmptyNames(Object receiver) {
170
		TaxonNameEditorE4 editor = (TaxonNameEditorE4) EventUtility.getTaxonEditor();
171
		return editor == null ? false : editor.checkForEmptyNames();
172
	}
173

    
174
	public static boolean isRelatedConcept(Object selectedElement) {
175
		if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isRelatedConcept() && !((TaxonNameEditorE4) EventUtility.getTaxonEditor()).getTaxon().equals(selectedElement)){
176
			return true;
177
		}
178
		return false;
179
	}
180

    
181
	public static boolean isTaxonBase(Object selectedElement) {
182
		return (selectedElement instanceof TaxonBase) ? true : false;
183
	}
184

    
185
	public static boolean isMisapplication(Object selectedElement) {
186
		if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isMisapplication() && !((TaxonNameEditorE4) EventUtility.getTaxonEditor()).getTaxon().equals(selectedElement)){
187
			return true;
188
		}
189
		return false;
190
	}
191

    
192
	public static boolean isProparteSynonym(Object selectedElement) {
193
        if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isProparteSynonym() && !((TaxonNameEditorE4) EventUtility.getTaxonEditor()).getTaxon().equals(selectedElement)){
194
            return true;
195
        }
196
        return false;
197
    }
198
	public static boolean isNotProparteSynonym(Object selectedElement) {
199
	    if (selectedElement instanceof Synonym){
200
	        return true;
201
	    }
202
        if(((Taxon) selectedElement).isProparteSynonym() && !((TaxonNameEditorE4) EventUtility.getTaxonEditor()).getTaxon().equals(selectedElement)){
203
            return false;
204
        }
205
        return true;
206
    }
207

    
208
	public static boolean isSynonym(Object selectedElement) {
209
		return (selectedElement instanceof Synonym) ? true : false;
210
	}
211
	public static boolean isNotSynonym(Object selectedElement) {
212
        return !isSynonym(selectedElement);
213
    }
214

    
215
	public static boolean isAccepted(Object selectedElement) {
216
	    TaxonNameEditorE4 editor = (TaxonNameEditorE4) EventUtility.getTaxonEditor();
217
	    Taxon accepted = editor.getTaxon();
218
		return (selectedElement instanceof Taxon  && accepted.equals(selectedElement)) ? true : false;
219
	}
220

    
221
	public static boolean isOrphaned(Object selectedElement) {
222
	    if(selectedElement instanceof Taxon){
223
	        return ((Taxon) selectedElement).isOrphaned();
224
	    }
225
	    else if(selectedElement instanceof Synonym){
226
	        return ((Synonym) selectedElement).isOrphaned();
227
	    }
228
	    return false;
229
	}
230

    
231
    /**
232
     * @param selectedElement
233
     * @return
234
     */
235
    public static boolean isProParteSynonym(Object selectedElement) {
236
        if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isProparteSynonym()){
237
            return true;
238
        }
239
        return false;
240
    }
241

    
242
}
    (1-1/1)