Project

General

Profile

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

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

    
13
import org.eclipse.jface.viewers.IStructuredSelection;
14

    
15
import eu.etaxonomy.cdm.model.taxon.Synonym;
16
import eu.etaxonomy.cdm.model.taxon.Taxon;
17
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
18
import eu.etaxonomy.taxeditor.editor.EditorUtil;
19
import eu.etaxonomy.taxeditor.editor.Page;
20
import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
21

    
22
/**
23
 * <p>NameEditorMenuPropertyTester class.</p>
24
 *
25
 * @author n.hoffmann
26
 * @created Jun 22, 2010
27
 * @version 1.0
28
 */
29
public class NameEditorMenuPropertyTester extends org.eclipse.core.expressions.PropertyTester {
30

    
31
	private static final String ACCEPTED = "isAcceptedTaxon";
32
	private static final String SYNONYM = "isSynonym";
33
	private static final String MISAPPLICATION = "isMisapplication";
34
	private static final String TAXONBASE = "isTaxonBase";
35
	private static final String CONCEPT = "isConceptRelation";
36
	private static final String EMPTY_NAMES = "hasEmptyNames";
37
	private static final String ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS = "isAcceptedAndHasNoHomotypicSynonyms";
38
	private static final String NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED = "isNotHomotypicSynonymOfAcceptedTaxon";
39
	private static final String SYNONYM_WITH_HOMOTYPIC_SYNONYMS = "isSynonymInHomotypicalGroupWithMoreSynonyms";
40

    
41
	/**
42
	 * <p>Constructor for NameEditorMenuPropertyTester.</p>
43
	 */
44
	public NameEditorMenuPropertyTester() {
45
	}
46

    
47
	/* (non-Javadoc)
48
	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
49
	 */
50
	/** {@inheritDoc} */
51
	@Override
52
    public boolean test(Object receiver, String property, Object[] args,
53
			Object expectedValue) {
54

    
55
		if(receiver instanceof IStructuredSelection){
56

    
57
			IStructuredSelection selection = (IStructuredSelection) receiver;
58

    
59
			Object selectedElement = selection.getFirstElement();
60

    
61
			if(ACCEPTED.equals(property)){
62
				return isAccepted(selectedElement);
63
			}
64
			else if(SYNONYM.equals(property)){
65
				return isSynonym(selectedElement);
66
			}
67
			else if(MISAPPLICATION.equals(property)){
68
				return isMisapplication(selectedElement);
69
			}
70
			else if(TAXONBASE.equals(property)){
71
				return isTaxonBase(selectedElement);
72
			}
73
			else if(CONCEPT.equals(property)){
74
				return isRelatedConcept(selectedElement);
75
			}
76
			else if(EMPTY_NAMES.equals(property)){
77
				return hasEmptyNames(receiver);
78
			}
79
			else if(ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS.equals(property)){
80
				return isAcceptedAndHasNoHomotypicSynonyms(selectedElement);
81
			}
82
			else if (NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED.equals(property)){
83
				return isNotHomotypicSynonymOfAcceptedTaxon(selectedElement);
84
			}
85
			else if (SYNONYM_WITH_HOMOTYPIC_SYNONYMS.equals(property)){
86
				return isSynonymInHomotypicalGroupWithMoreSynonyms(selectedElement);
87
			}
88

    
89
		}
90

    
91
		return false;
92

    
93
	}
94

    
95
	private boolean isAcceptedAndHasNoHomotypicSynonyms(Object selectedElement) {
96
		if (isAccepted(selectedElement)){
97
			Taxon taxon = (Taxon) selectedElement;
98
			return taxon.getSynonymsInGroup(taxon.getHomotypicGroup()).isEmpty();
99
		}
100
		return false;
101
	}
102
	
103
	private boolean isSynonymInHomotypicalGroupWithMoreSynonyms(Object selectedElement) {
104
		if (isSynonym(selectedElement)){
105
			Synonym synonym = (Synonym) selectedElement;
106
			return synonym.getHomotypicGroup().getTypifiedNames().size()>1;
107
		}
108
		return false;
109
	}
110

    
111

    
112
	private boolean isNotHomotypicSynonymOfAcceptedTaxon(Object selectedElement) {
113
		if (isSynonym(selectedElement)){
114
			Synonym synonym = (Synonym) selectedElement;
115
			for (Taxon taxon:synonym.getAcceptedTaxa()){
116
				if (taxon.getHomotypicGroup().equals(synonym.getHomotypicGroup())){
117
					return false;
118
				}
119
			}
120
		}
121
		return true;
122
	}
123

    
124

    
125
	/**
126
	 * @param receiver
127
	 * @return
128
	 */
129
	private boolean hasEmptyNames(Object receiver) {
130
		TaxonNameEditor editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
131
		return editor == null ? false : editor.checkForEmptyNames();
132
	}
133

    
134
	private boolean isRelatedConcept(Object selectedElement) {
135
		if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isRelatedConcept()){
136
			return true;
137
		}
138
		return false;
139
	}
140

    
141
	private boolean isTaxonBase(Object selectedElement) {
142
		return (selectedElement instanceof TaxonBase) ? true : false;
143
	}
144

    
145
	private boolean isMisapplication(Object selectedElement) {
146
		if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isMisapplication()){
147
			return true;
148
		}
149
		return false;
150
	}
151

    
152
	private boolean isSynonym(Object selectedElement) {
153
		return (selectedElement instanceof Synonym) ? true : false;
154
	}
155

    
156
	private boolean isAccepted(Object selectedElement) {
157
		return (selectedElement instanceof Taxon  && ! ((Taxon) selectedElement).isMisapplication()) ? true : false;
158
	}
159
}
(12-12/15)