changing fromTaxon in editor fixed
[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.event.WorkbenchEventConstants;
20 import eu.etaxonomy.taxeditor.model.TaxonRelationshipTypeInverseContainer;
21 import eu.etaxonomy.taxeditor.ui.combo.MisappliedRelationshipComboElement;
22 import eu.etaxonomy.taxeditor.ui.combo.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 Taxon taxon;
56
57 private TaxonDetailSection taxonElement;
58
59 public TaxonDetailSection getTaxonElement() {
60 return taxonElement;
61 }
62
63 public TaxonRelationshipDetailElement(CdmFormFactory formFactory,
64 ICdmFormElement formElement) {
65 super(formFactory, formElement);
66 }
67
68 @Override
69 protected void createControls(ICdmFormElement formElement,
70 TaxonRelationship entity, int style) {
71 if (!(entity.getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR()) || entity.getType().equals(TaxonRelationshipType.PRO_PARTE_MISAPPLIED_NAME_FOR())) ){
72 combo_taxonRelationshipType = formFactory.createTermComboElement(
73 TaxonRelationshipTypeInverseContainer.class,
74 formElement, "Relationship Type",
75 getTaxonRelationshipTypeInverseContainer(), style);
76
77 combo_taxonRelationshipType.setEnabled(false);
78 selection_relatedTaxon = formFactory.createSelectionElement(
79 Taxon.class, //getConversationHolder(),
80 formElement, "Related Taxon", getRelatedTaxon(),
81 EntitySelectionElement.SELECTABLE, style);
82 checkBoxDoubtful = formFactory.createCheckbox(formElement, "Relation is doubtful", entity.isDoubtful(), style);
83 }else{
84 taxon = entity.getFromTaxon();
85
86 taxonElement = formFactory.createTaxonDetailSection(getConversationHolder(), formElement, null, style);
87 taxonElement.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
88 addControl(taxonElement);
89 addElement(taxonElement);
90 combo_misappliedRelationshipType = formFactory.createMisappliedRelationshipComboElement(formElement, "Relationship Type",
91 entity.getType(), style);
92
93 combo_misappliedRelationshipType.setEnabled(true);
94
95 sensuReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
96 formElement, "Sensu",
97 taxon.getSec(), EntitySelectionElement.ALL,
98 style);
99
100 text_sensu_microreference = formFactory.createTextWithLabelElement(
101 formElement, "Detail",
102 taxon.getSecMicroReference(),null,
103 SWT.WRAP);
104
105 secReference = formFactory.createSelectionElement(Reference.class,//getConversationHolder(),
106 formElement, "Misappl. Sec.",
107 entity.getCitation(), EntitySelectionElement.ALL,
108 style);
109
110 text_secundum_microreference = formFactory.createTextWithLabelElement(
111 formElement, "Detail",
112 entity.getCitationMicroReference(),null,
113 SWT.WRAP);
114 }
115 }
116
117 private Taxon getRelatedTaxon() {
118 return TaxonRelationshipTypeInverseContainer.RelatedTaxon(getSourceTaxon(), getEntity());
119 }
120
121 private TaxonRelationshipTypeInverseContainer getTaxonRelationshipTypeInverseContainer(){
122 return TaxonRelationshipTypeInverseContainer.CreateFromSource(getSourceTaxon(), getEntity());
123 }
124
125 private Taxon getSourceTaxon(){
126 return EventUtility.getCurrentTaxon();
127 }
128
129 @Override
130 public void handleEvent(Object eventSource) {
131 if (getEntity().getType().isAnyMisappliedName()){
132 if (eventSource == secReference) {
133 getEntity().setCitation(secReference.getSelection());
134 } else if (eventSource == text_secundum_microreference) {
135 getEntity().setCitationMicroReference(text_secundum_microreference.getText());
136 } else if (eventSource == text_sensu_microreference) {
137 taxon.setSecMicroReference(text_sensu_microreference.getText());
138 } else if (eventSource == sensuReference) {
139 taxon.setSec(sensuReference.getSelection());
140 } else if (eventSource == combo_taxonRelationshipType ) {
141 getEntity().setType(combo_taxonRelationshipType.getSelection().getType());
142 } else if ( eventSource == combo_misappliedRelationshipType) {
143 getEntity().setType(combo_misappliedRelationshipType.getSelection());
144 }
145 }else{
146 if (eventSource == selection_relatedTaxon){
147 boolean inverse = getTaxonRelationshipTypeInverseContainer().isInverse();
148 Taxon relatedTaxon = selection_relatedTaxon.getEntity();
149 if(inverse){
150 getEntity().setFromTaxon(relatedTaxon);
151 }else{
152 getEntity().setToTaxon(relatedTaxon);
153 }
154 }else if(eventSource==checkBoxDoubtful){
155 getEntity().setDoubtful(checkBoxDoubtful.getSelection());
156 }
157 }
158 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
159 EventUtility.postEvent(WorkbenchEventConstants.REFRESH_NAME_EDITOR, getEntity().getToTaxon());
160 }
161
162 @Override
163 protected void updateControlStates() {
164 super.updateControlStates();
165
166 }
167 @Override
168 protected void handleTitleCacheRelevantChange(PropertyChangeEvent event) {
169 if (getEntity().getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())){
170 String title = taxon.generateTitle();
171 taxon.setTitleCache(title);
172 super.handleTitleCacheRelevantChange(event);
173 }
174 }
175
176 @Override
177 public void refresh(){
178 updateContent();
179
180 }
181
182 @Override
183 public void setEntity(TaxonRelationship entity) {
184 super.setEntity(entity);
185 if (taxonElement!=null) {
186 taxonElement.setEntity(entity.getFromTaxon());
187 }
188
189 }
190
191
192
193 }