smaller changes for updating editor when changing taxon in misapplied name relationship
[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.cdm.model.taxon.TaxonRelationshipType;
18 import eu.etaxonomy.taxeditor.event.EventUtility;
19 import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
20 import eu.etaxonomy.taxeditor.ui.combo.MisappliedRelationshipComboElement;
21 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
22 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
23 import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
24 import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
25 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
26 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
27 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
28 import eu.etaxonomy.taxeditor.ui.element.ToggleableTextElement;
29 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailElement;
30 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
31
32 /**
33 * @author n.hoffmann
34 * @date Dec 1, 2011
35 *
36 */
37 public class TaxonRelationshipDetailElement extends AbstractCdmDetailElement<TaxonRelationship> {
38
39 private TermComboElement<TaxonRelationshipTypeInverseContainer> combo_taxonRelationshipType;
40 private MisappliedRelationshipComboElement combo_misappliedRelationshipType;
41
42 private EntitySelectionElement<Taxon> selection_relatedTaxon;
43 private CheckboxElement checkBoxDoubtful;
44 protected ToggleableTextElement toggleable_cache;
45 private EntitySelectionElement<Reference> secReference;
46 private EntitySelectionElement<Reference> sensuReference;
47 private TextWithLabelElement text_sensu_microreference;
48
49
50 private TextWithLabelElement text_secundum_microreference;
51
52 private TextWithLabelElement text_appendedPhrase;
53
54 private Taxon taxon;
55
56 private TaxonDetailSection taxonElement;
57
58 public TaxonDetailSection getTaxonElement() {
59 return taxonElement;
60 }
61
62 public TaxonRelationshipDetailElement(CdmFormFactory formFactory,
63 ICdmFormElement formElement) {
64 super(formFactory, formElement);
65 }
66
67 @Override
68 protected void createControls(ICdmFormElement formElement,
69 TaxonRelationship entity, int style) {
70 if (!(entity.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR()) || entity.getType().equals(TaxonRelationshipType.PRO_PARTE_MISAPPLIED_NAME_FOR())) ){
71 combo_taxonRelationshipType = formFactory.createTermComboElement(
72 TaxonRelationshipTypeInverseContainer.class,
73 formElement, "Relationship Type",
74 getTaxonRelationshipTypeInverseContainer(), style);
75
76 combo_taxonRelationshipType.setEnabled(false);
77 selection_relatedTaxon = formFactory.createSelectionElement(
78 Taxon.class, //getConversationHolder(),
79 formElement, "Related Taxon", getRelatedTaxon(),
80 EntitySelectionElement.SELECTABLE, style);
81 checkBoxDoubtful = formFactory.createCheckbox(formElement, "Relation is doubtful", entity.isDoubtful(), style);
82 }else{
83 taxon = entity.getFromTaxon();
84
85 taxonElement = formFactory.createTaxonDetailSection(getConversationHolder(), formElement, null, style);
86 taxonElement.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
87 addControl(taxonElement);
88 addElement(taxonElement);
89 combo_misappliedRelationshipType = formFactory.createMisappliedRelationshipComboElement(formElement, "Relationship Type",
90 entity.getType(), style);
91
92 combo_misappliedRelationshipType.setEnabled(true);
93
94 sensuReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
95 formElement, "Sensu",
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 secReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
105 formElement, "Misappl. Sec.",
106 entity.getCitation(), EntitySelectionElement.ALL,
107 style);
108
109 text_secundum_microreference = formFactory.createTextWithLabelElement(
110 formElement, "Detail",
111 entity.getCitationMicroReference(),null,
112 SWT.WRAP);
113 }
114 }
115
116 private Taxon getRelatedTaxon() {
117 return TaxonRelationshipTypeInverseContainer.RelatedTaxon(getSourceTaxon(), getEntity());
118 }
119
120 private TaxonRelationshipTypeInverseContainer getTaxonRelationshipTypeInverseContainer(){
121 return TaxonRelationshipTypeInverseContainer.CreateFromSource(getSourceTaxon(), getEntity());
122 }
123
124 private Taxon getSourceTaxon(){
125 return EventUtility.getCurrentTaxon();
126 }
127
128 @Override
129 public void handleEvent(Object eventSource) {
130 if (getEntity().getType().isAnyMisappliedName()){
131 if (eventSource == secReference) {
132 getEntity().setCitation(secReference.getSelection());
133 } else if (eventSource == text_secundum_microreference) {
134 getEntity().setCitationMicroReference(text_secundum_microreference.getText());
135 } else if (eventSource == text_sensu_microreference) {
136 taxon.setSecMicroReference(text_sensu_microreference.getText());
137 } else if (eventSource == sensuReference) {
138 taxon.setSec(sensuReference.getSelection());
139 } else if (eventSource == combo_taxonRelationshipType ) {
140 getEntity().setType(combo_taxonRelationshipType.getSelection().getType());
141 } else if ( eventSource == combo_misappliedRelationshipType) {
142 getEntity().setType(combo_misappliedRelationshipType.getSelection());
143 }
144 }else{
145 if (eventSource == selection_relatedTaxon){
146 boolean inverse = getTaxonRelationshipTypeInverseContainer().isInverse();
147 Taxon relatedTaxon = selection_relatedTaxon.getEntity();
148 if(inverse){
149 getEntity().setFromTaxon(relatedTaxon);
150 }else{
151 getEntity().setToTaxon(relatedTaxon);
152 }
153 }else if(eventSource==checkBoxDoubtful){
154 getEntity().setDoubtful(checkBoxDoubtful.getSelection());
155 }
156 }
157 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
158 }
159
160 @Override
161 protected void updateControlStates() {
162 super.updateControlStates();
163
164 }
165 @Override
166 protected void handleTitleCacheRelevantChange(PropertyChangeEvent event) {
167 if (getEntity().getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())){
168 String title = taxon.generateTitle();
169 taxon.setTitleCache(title);
170 super.handleTitleCacheRelevantChange(event);
171 }
172 }
173
174 @Override
175 public void refresh(){
176 updateContent();
177
178 }
179
180 @Override
181 public void setEntity(TaxonRelationship entity) {
182 super.setEntity(entity);
183 if (taxonElement!=null) {
184 taxonElement.setEntity(entity.getFromTaxon());
185 }
186
187 }
188
189
190
191 }