2 * Copyright (C) 2009 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.ui
.section
.taxon
;
11 import org
.eclipse
.jface
.util
.PropertyChangeEvent
;
12 import org
.eclipse
.swt
.SWT
;
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
;
38 public class TaxonRelationshipDetailElement
extends AbstractCdmDetailElement
<TaxonRelationship
> {
40 private TermComboElement
<TaxonRelationshipTypeInverseContainer
> combo_taxonRelationshipType
;
41 private MisappliedRelationshipComboElement combo_misappliedRelationshipType
;
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
;
51 private TextWithLabelElement text_secundum_microreference
;
53 private TextWithLabelElement text_appendedPhrase
;
55 private CheckboxElement checkbox_published
;
60 private TaxonDetailSection taxonElement
;
62 public TaxonDetailSection
getTaxonElement() {
66 public TaxonRelationshipDetailElement(CdmFormFactory formFactory
,
67 ICdmFormElement formElement
) {
68 super(formFactory
, formElement
);
72 protected void createControls(ICdmFormElement formElement
,
73 TaxonRelationship entity
, int style
) {
74 if ((entity
.getType().isMisappliedNameOrInvalidDesignation()) ){
76 taxon
= entity
.getFromTaxon();
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
);
83 if (entity
.getType().isAnyMisappliedName()) {
88 text_appendedPhrase
= formFactory
.createTextWithLabelElement(
89 this, "Appended Phrase", taxon
.getAppendedPhrase(),
92 checkbox_published
= formFactory
.createCheckbox(this,
93 "Published", taxon
.isPublish(), style
);
94 sensuReference
= formFactory
.createSelectionElement(Reference
.class,//getConversationHolder(),
96 taxon
.getSec(), EntitySelectionElement
.ALL
,
99 text_sensu_microreference
= formFactory
.createTextWithLabelElement(
100 formElement
, "Detail",
101 taxon
.getSecMicroReference(),null,
104 if (entity
.getType().isAnyMisappliedName()) {
105 label
= "Misapplication Type";
107 label
= "Relationship Type";
109 combo_misappliedRelationshipType
= formFactory
.createMisappliedRelationshipComboElement(formElement
, label
,
110 entity
.getType(), style
);
112 if (entity
.getType().isInvalidDesignation()){
113 combo_misappliedRelationshipType
.setEnabled(false);
115 combo_misappliedRelationshipType
.setEnabled(true);
117 if (entity
.getType().isAnyMisappliedName()) {
118 label
= "Misappl. Sec.";
122 secReference
= formFactory
.createSelectionElement(Reference
.class,//getConversationHolder(),
124 entity
.getCitation(), EntitySelectionElement
.ALL
,
127 text_secundum_microreference
= formFactory
.createTextWithLabelElement(
128 formElement
, "Detail",
129 entity
.getCitationMicroReference(),null,
131 if (entity
.getType().isAnyMisappliedName()) {
132 label
= "Misapplication Doubtful";
134 label
= "Relationship Doubtful";
136 checkBoxDoubtful
= formFactory
.createCheckbox(formElement
, label
, entity
.isDoubtful(), style
);
137 }else if (entity
.getType().isAnySynonym() ){
138 taxon
= entity
.getFromTaxon();
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
);
146 text_appendedPhrase
= formFactory
.createTextWithLabelElement(
147 this, "Appended Phrase", taxon
.getAppendedPhrase(),
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
,
157 text_secundum_microreference
= formFactory
.createTextWithLabelElement(
158 formElement
, "Detail",
159 entity
.getCitationMicroReference(),null,
161 sensuReference
= formFactory
.createSelectionElement(Reference
.class,//getConversationHolder(),
163 taxon
.getSec(), EntitySelectionElement
.ALL
,
166 text_sensu_microreference
= formFactory
.createTextWithLabelElement(
167 formElement
, "Detail",
168 taxon
.getSecMicroReference(),null,
171 combo_misappliedRelationshipType
= formFactory
.createMisappliedRelationshipComboElement(formElement
, "Synonym Type",
172 entity
.getType(), style
);
174 combo_misappliedRelationshipType
.setEnabled(true);
175 checkBoxDoubtful
= formFactory
.createCheckbox(formElement
, "Syn. Doubtful", entity
.isDoubtful(), style
);
178 combo_taxonRelationshipType
= formFactory
.createTermComboElement(
179 TaxonRelationshipTypeInverseContainer
.class,
180 formElement
, "Relationship Type",
181 getTaxonRelationshipTypeInverseContainer(), style
);
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
);
195 private Taxon
getRelatedTaxon() {
196 return TaxonRelationshipTypeInverseContainer
.RelatedTaxon(getSourceTaxon(), getEntity());
199 private TaxonRelationshipTypeInverseContainer
getTaxonRelationshipTypeInverseContainer(){
200 return TaxonRelationshipTypeInverseContainer
.CreateFromSource(getSourceTaxon(), getEntity());
203 private Taxon
getSourceTaxon(){
204 return EventUtility
.getCurrentTaxon();
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());
228 if (eventSource
== selection_relatedTaxon
){
229 boolean inverse
= getTaxonRelationshipTypeInverseContainer().isInverse();
230 Taxon relatedTaxon
= selection_relatedTaxon
.getEntity();
232 getEntity().setFromTaxon(relatedTaxon
);
234 getEntity().setToTaxon(relatedTaxon
);
238 if(eventSource
==checkBoxDoubtful
){
239 getEntity().setDoubtful(checkBoxDoubtful
.getSelection());
241 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
242 EventUtility
.postEvent(WorkbenchEventConstants
.REFRESH_NAME_EDITOR
, getEntity().getToTaxon());
243 taxonElement
.updateTitle();
247 protected void updateControlStates() {
248 super.updateControlStates();
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
);
261 public void refresh(){
267 public void setEntity(TaxonRelationship entity
) {
268 super.setEntity(entity
);
269 if (taxonElement
!=null) {
270 taxonElement
.setEntity(entity
.getFromTaxon());