ref #8810: check for taxonnode permission and whether the user has taxon node granted...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / taxon / TaxonRelationshipDetailElement.java
1 /**
2 * Copyright (C) 2009 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 package eu.etaxonomy.taxeditor.ui.section.taxon;
10
11 import org.eclipse.jface.util.PropertyChangeEvent;
12 import org.eclipse.swt.SWT;
13
14 import eu.etaxonomy.cdm.model.reference.Reference;
15 import eu.etaxonomy.cdm.model.taxon.Taxon;
16 import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
17 import eu.etaxonomy.taxeditor.event.EventUtility;
18 import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
19 import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
20 import eu.etaxonomy.taxeditor.store.StoreUtil;
21 import eu.etaxonomy.taxeditor.ui.combo.MisappliedRelationshipComboElement;
22 import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
23 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
24 import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
25 import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
26 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
27 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
28 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
29 import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
30 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
31 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
32
33 /**
34 * @author n.hoffmann
35 * @date Dec 1, 2011
36 *
37 */
38 public class TaxonRelationshipDetailElement extends AbstractCdmDetailElement<TaxonRelationship> {
39
40 private TermComboElement<TaxonRelationshipTypeInverseContainer> combo_taxonRelationshipType;
41 private MisappliedRelationshipComboElement combo_misappliedRelationshipType;
42
43 private EntitySelectionElement<Taxon> selection_relatedTaxon;
44 private CheckboxElement checkBoxDoubtful;
45 protected ToggleableTextElement toggleable_cache;
46 private EntitySelectionElement<Reference> secReference;
47 private EntitySelectionElement<Reference> sensuReference;
48 private TextWithLabelElement text_sensu_microreference;
49
50
51 private TextWithLabelElement text_secundum_microreference;
52
53 private TextWithLabelElement text_appendedPhrase;
54
55 private CheckboxElement checkbox_published;
56
57
58 private Taxon taxon;
59
60 private TaxonDetailSection taxonElement;
61
62 public TaxonDetailSection getTaxonElement() {
63 return taxonElement;
64 }
65
66 public TaxonRelationshipDetailElement(CdmFormFactory formFactory,
67 ICdmFormElement formElement) {
68 super(formFactory, formElement);
69 }
70
71 @Override
72 protected void createControls(ICdmFormElement formElement,
73 TaxonRelationship entity, int style) {
74 if ((entity.getType().isMisappliedNameOrInvalidDesignation()) ){
75
76 taxon = entity.getFromTaxon();
77
78 taxonElement = formFactory.createTaxonDetailSection(getConversationHolder(), formElement, null, StoreUtil.getSectionStyle(TaxonDetailSection.class, Taxon.class.getCanonicalName()));
79 taxonElement.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
80 addControl(taxonElement);
81 addElement(taxonElement);
82 String label;
83 if (entity.getType().isAnyMisappliedName()) {
84 label = "Sensu";
85 }else{
86 label = "Sec.";
87 }
88 text_appendedPhrase = formFactory.createTextWithLabelElement(
89 this, "Appended Phrase", taxon.getAppendedPhrase(),
90 SWT.WRAP);
91
92 checkbox_published = formFactory.createCheckbox(this,
93 "Published", taxon.isPublish(), style);
94 sensuReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
95 formElement, label,
96 taxon.getSec(), EntitySelectionElement.ALL,
97 style);
98
99 text_sensu_microreference = formFactory.createTextWithLabelElement(
100 formElement, "Detail",
101 taxon.getSecMicroReference(),null,
102 SWT.WRAP);
103
104 if (entity.getType().isAnyMisappliedName()) {
105 label = "Misapplication Type";
106 }else{
107 label = "Relationship Type";
108 }
109 combo_misappliedRelationshipType = formFactory.createMisappliedRelationshipComboElement(formElement, label,
110 entity.getType(), style);
111
112 if (entity.getType().isInvalidDesignation()){
113 combo_misappliedRelationshipType.setEnabled(false);
114 }else{
115 combo_misappliedRelationshipType.setEnabled(true);
116 }
117 if (entity.getType().isAnyMisappliedName()) {
118 label = "Misappl. Sec.";
119 }else{
120 label = "Err. Sec.";
121 }
122 secReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
123 formElement, label,
124 entity.getCitation(), EntitySelectionElement.ALL,
125 style);
126
127 text_secundum_microreference = formFactory.createTextWithLabelElement(
128 formElement, "Detail",
129 entity.getCitationMicroReference(),null,
130 SWT.WRAP);
131 if (entity.getType().isAnyMisappliedName()) {
132 label = "Misapplication Doubtful";
133 }else{
134 label = "Relationship Doubtful";
135 }
136 checkBoxDoubtful = formFactory.createCheckbox(formElement, label, entity.isDoubtful(), style);
137 }else if (entity.getType().isAnySynonym() ){
138 taxon = entity.getFromTaxon();
139
140 taxonElement = formFactory.createTaxonDetailSection(getConversationHolder(), formElement, null, StoreUtil.getSectionStyle(TaxonDetailSection.class, Taxon.class.getCanonicalName()));
141 taxonElement.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
142 addControl(taxonElement);
143 addElement(taxonElement);
144
145
146 text_appendedPhrase = formFactory.createTextWithLabelElement(
147 this, "Appended Phrase", taxon.getAppendedPhrase(),
148 SWT.WRAP);
149
150 checkbox_published = formFactory.createCheckbox(this,
151 "Published", taxon.isPublish(), style);
152 secReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
153 formElement, "Syn. Sec.",
154 entity.getCitation(), EntitySelectionElement.ALL,
155 style);
156
157 text_secundum_microreference = formFactory.createTextWithLabelElement(
158 formElement, "Detail",
159 entity.getCitationMicroReference(),null,
160 SWT.WRAP);
161 sensuReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
162 formElement, "Sec",
163 taxon.getSec(), EntitySelectionElement.ALL,
164 style);
165
166 text_sensu_microreference = formFactory.createTextWithLabelElement(
167 formElement, "Detail",
168 taxon.getSecMicroReference(),null,
169 SWT.WRAP);
170
171 combo_misappliedRelationshipType = formFactory.createMisappliedRelationshipComboElement(formElement, "Synonym Type",
172 entity.getType(), style);
173
174 combo_misappliedRelationshipType.setEnabled(true);
175 checkBoxDoubtful = formFactory.createCheckbox(formElement, "Syn. Doubtful", entity.isDoubtful(), style);
176
177 }else{
178 combo_taxonRelationshipType = formFactory.createTermComboElement(
179 TaxonRelationshipTypeInverseContainer.class,
180 formElement, "Relationship Type",
181 getTaxonRelationshipTypeInverseContainer(), style);
182
183 combo_taxonRelationshipType.setEnabled(false);
184 selection_relatedTaxon = formFactory.createSelectionElement(
185 Taxon.class, //getConversationHolder(),
186 formElement, "Related Taxon", getRelatedTaxon(),
187 EntitySelectionElement.SELECTABLE, style);
188 checkBoxDoubtful = formFactory.createCheckbox(formElement, "Relation Doubtful", entity.isDoubtful(), style);
189
190
191 }
192
193 }
194
195 private Taxon getRelatedTaxon() {
196 return TaxonRelationshipTypeInverseContainer.RelatedTaxon(getSourceTaxon(), getEntity());
197 }
198
199 private TaxonRelationshipTypeInverseContainer getTaxonRelationshipTypeInverseContainer(){
200 return TaxonRelationshipTypeInverseContainer.CreateFromSource(getSourceTaxon(), getEntity());
201 }
202
203 private Taxon getSourceTaxon(){
204 return EventUtility.getCurrentTaxon();
205 }
206
207 @Override
208 public void handleEvent(Object eventSource) {
209 if (getEntity().getType().isMisappliedNameOrInvalidDesignation() || getEntity().getType().isAnySynonym()){
210 if (eventSource == secReference) {
211 getEntity().setCitation(secReference.getSelection());
212 } else if (eventSource == text_secundum_microreference) {
213 getEntity().setCitationMicroReference(text_secundum_microreference.getText());
214 } else if (eventSource == text_sensu_microreference) {
215 taxon.setSecMicroReference(text_sensu_microreference.getText());
216 } else if (eventSource == sensuReference) {
217 taxon.setSec(sensuReference.getSelection());
218 } else if (eventSource == combo_taxonRelationshipType ) {
219 getEntity().setType(combo_taxonRelationshipType.getSelection().getType());
220 } else if ( eventSource == combo_misappliedRelationshipType) {
221 getEntity().setType(combo_misappliedRelationshipType.getSelection());
222 } else if (eventSource == text_appendedPhrase) {
223 taxon.setAppendedPhrase(text_appendedPhrase.getText());
224 } else if (eventSource == checkbox_published) {
225 taxon.setPublish(checkbox_published.getSelection());
226 }
227 }else{
228 if (eventSource == selection_relatedTaxon){
229 boolean inverse = getTaxonRelationshipTypeInverseContainer().isInverse();
230 Taxon relatedTaxon = selection_relatedTaxon.getEntity();
231 if(inverse){
232 getEntity().setFromTaxon(relatedTaxon);
233 }else{
234 getEntity().setToTaxon(relatedTaxon);
235 }
236 }
237 }
238 if(eventSource==checkBoxDoubtful){
239 getEntity().setDoubtful(checkBoxDoubtful.getSelection());
240 }
241 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
242 EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAME_EDITOR, getEntity().getToTaxon());
243 taxonElement.updateTitle();
244 }
245
246 @Override
247 protected void updateControlStates() {
248 super.updateControlStates();
249
250 }
251 @Override
252 protected void handleTitleCacheRelevantChange(PropertyChangeEvent event) {
253 if (getEntity().getType().isAnyMisappliedName() || getEntity().getType().isAnySynonym()){
254 String title = taxon.generateTitle();
255 taxon.setTitleCache(title);
256 super.handleTitleCacheRelevantChange(event);
257 }
258 }
259
260 @Override
261 public void refresh(){
262 updateContent();
263
264 }
265
266 @Override
267 public void setEntity(TaxonRelationship entity) {
268 super.setEntity(entity);
269 if (taxonElement!=null) {
270 taxonElement.setEntity(entity.getFromTaxon());
271 }
272
273 }
274
275
276
277 }