5eb1e17849f34c50a5222c53bef2bd1ee0d20b26
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / name / handler / NameEditorMenuPropertyTester.java
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.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.EditorUtil;
21 import eu.etaxonomy.taxeditor.editor.Page;
22 import eu.etaxonomy.taxeditor.editor.name.TaxonNameEditor;
23 import eu.etaxonomy.taxeditor.store.CdmStore;
24
25 /**
26 * <p>NameEditorMenuPropertyTester class.</p>
27 *
28 * @author n.hoffmann
29 * @created Jun 22, 2010
30 * @version 1.0
31 */
32 public class NameEditorMenuPropertyTester extends org.eclipse.core.expressions.PropertyTester {
33
34 private static final String ACCEPTED = "isAcceptedTaxon";
35 private static final String SYNONYM = "isSynonym";
36 private static final String MISAPPLICATION = "isMisapplication";
37 private static final String TAXONBASE = "isTaxonBase";
38 private static final String CONCEPT = "isConceptRelation";
39 private static final String EMPTY_NAMES = "hasEmptyNames";
40 private static final String ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS = "isAcceptedAndHasNoHomotypicSynonyms";
41 private static final String NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED = "isNotHomotypicSynonymOfAcceptedTaxon";
42 private static final String SYNONYM_WITH_HOMOTYPIC_SYNONYMS = "isSynonymInHomotypicalGroupWithMoreSynonyms";
43 private static final String IS_ORPHANED = "isOrphaned";
44
45 /**
46 * <p>Constructor for NameEditorMenuPropertyTester.</p>
47 */
48 public NameEditorMenuPropertyTester() {
49 }
50
51 /* (non-Javadoc)
52 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object, java.lang.String, java.lang.Object[], java.lang.Object)
53 */
54 /** {@inheritDoc} */
55 @Override
56 public boolean test(Object receiver, String property, Object[] args,
57 Object expectedValue) {
58
59 if(receiver instanceof IStructuredSelection){
60
61 IStructuredSelection selection = (IStructuredSelection) receiver;
62
63 Object selectedElement = selection.getFirstElement();
64 if(selectedElement instanceof UuidAndTitleCache){
65 UuidAndTitleCache uuidAndTitleCache = (UuidAndTitleCache<?>)selectedElement;
66 CdmBase cdmBase = CdmStore.getCommonService().find(uuidAndTitleCache.getType(), uuidAndTitleCache.getUuid());
67 selectedElement = cdmBase;
68 }
69
70 if(ACCEPTED.equals(property)){
71 return isAccepted(selectedElement);
72 }
73 else if(SYNONYM.equals(property)){
74 return isSynonym(selectedElement);
75 }
76 else if(MISAPPLICATION.equals(property)){
77 return isMisapplication(selectedElement);
78 }
79 else if(TAXONBASE.equals(property)){
80 return isTaxonBase(selectedElement);
81 }
82 else if(CONCEPT.equals(property)){
83 return isRelatedConcept(selectedElement);
84 }
85 else if(EMPTY_NAMES.equals(property)){
86 return hasEmptyNames(receiver);
87 }
88 else if(ACCEPTED_AND_NO_HOMOTYPIC_SYNONYMS.equals(property)){
89 return isAcceptedAndHasNoHomotypicSynonyms(selectedElement);
90 }
91 else if (NOT_HOMOTYPIC_SYNONYM_OF_ACCEPTED.equals(property)){
92 return isNotHomotypicSynonymOfAcceptedTaxon(selectedElement);
93 }
94 else if (SYNONYM_WITH_HOMOTYPIC_SYNONYMS.equals(property)){
95 return isSynonymInHomotypicalGroupWithMoreSynonyms(selectedElement);
96 }
97 else if (IS_ORPHANED.equals(property)){
98 return isOrphaned(selectedElement);
99 }
100
101 }
102
103 return false;
104
105 }
106
107 private boolean isAcceptedAndHasNoHomotypicSynonyms(Object selectedElement) {
108 if (isAccepted(selectedElement)){
109 Taxon taxon = (Taxon) selectedElement;
110 return taxon.getSynonymsInGroup(taxon.getHomotypicGroup()).isEmpty();
111 }
112 return false;
113 }
114
115 private boolean isSynonymInHomotypicalGroupWithMoreSynonyms(Object selectedElement) {
116 if (isSynonym(selectedElement)){
117 Synonym synonym = (Synonym) selectedElement;
118 return synonym.getHomotypicGroup().getTypifiedNames().size()>1;
119 }
120 return false;
121 }
122
123
124 private boolean isNotHomotypicSynonymOfAcceptedTaxon(Object selectedElement) {
125 if (isSynonym(selectedElement)){
126 Synonym synonym = (Synonym) selectedElement;
127 for (Taxon taxon:synonym.getAcceptedTaxa()){
128 if (taxon.getHomotypicGroup().equals(synonym.getHomotypicGroup())){
129 return false;
130 }
131 }
132 }
133 return true;
134 }
135
136
137 /**
138 * @param receiver
139 * @return
140 */
141 private boolean hasEmptyNames(Object receiver) {
142 TaxonNameEditor editor = (TaxonNameEditor) EditorUtil.getActiveEditorPage(Page.NAME);
143 return editor == null ? false : editor.checkForEmptyNames();
144 }
145
146 private boolean isRelatedConcept(Object selectedElement) {
147 if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isRelatedConcept()){
148 return true;
149 }
150 return false;
151 }
152
153 private boolean isTaxonBase(Object selectedElement) {
154 return (selectedElement instanceof TaxonBase) ? true : false;
155 }
156
157 private boolean isMisapplication(Object selectedElement) {
158 if(selectedElement instanceof Taxon && ((Taxon) selectedElement).isMisapplication()){
159 return true;
160 }
161 return false;
162 }
163
164 private boolean isSynonym(Object selectedElement) {
165 return (selectedElement instanceof Synonym) ? true : false;
166 }
167
168 private boolean isAccepted(Object selectedElement) {
169 return (selectedElement instanceof Taxon && ! ((Taxon) selectedElement).isMisapplication()) ? true : false;
170 }
171
172 private boolean isOrphaned(Object selectedElement) {
173 return selectedElement instanceof Taxon && ((Taxon) selectedElement).isOrphaned();
174 }
175 }