378499793f1db35a1578cd814ead77467f83c4b8
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / description / ModifierElement.java
1 /**
2 * Copyright (C) 2007 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
10 package eu.etaxonomy.taxeditor.ui.section.description;
11
12 import java.util.ArrayList;
13 import java.util.HashSet;
14 import java.util.List;
15 import java.util.Set;
16
17 import org.eclipse.swt.events.SelectionListener;
18
19 import eu.etaxonomy.cdm.api.service.IVocabularyService;
20 import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
21 import eu.etaxonomy.cdm.model.description.StateData;
22 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;
23 import eu.etaxonomy.cdm.model.term.DefinedTerm;
24 import eu.etaxonomy.cdm.model.term.TermType;
25 import eu.etaxonomy.cdm.model.term.TermVocabulary;
26 import eu.etaxonomy.cdm.model.term.VocabularyEnum;
27 import eu.etaxonomy.taxeditor.store.CdmStore;
28 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
29 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
30 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
31 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
32 import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
33
34 /**
35 * <p>ModifierElement class.</p>
36 *
37 * @author n.hoffmann
38 * @created Sep 15, 2010
39 * @version 1.0
40 */
41 public class ModifierElement extends AbstractEntityCollectionElement<DefinedTerm> {
42
43 private TermComboElement<DefinedTerm> combo_modifier;
44
45 /**
46 * <p>Constructor for ModifierElement.</p>
47 *
48 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
49 * @param section a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection} object.
50 * @param entity a {@link eu.etaxonomy.cdm.model.description.Modifier} object.
51 * @param removeListener a {@link org.eclipse.swt.events.SelectionListener} object.
52 * @param style a int.
53 */
54 public ModifierElement(CdmFormFactory formFactory,
55 AbstractFormSection<?> section, DefinedTerm entity,
56 SelectionListener removeListener, int style) {
57 super(formFactory, section, entity, removeListener, null, style);
58 }
59
60 /** {@inheritDoc} */
61 @Override
62 public void setEntity(DefinedTerm entity) {
63 this.entity = entity;
64 if(getParentElement() instanceof ModifierSection){
65 ModifierSection parentSection = (ModifierSection) getParentElement();
66 List<DefinedTerm> modifierTerms = new ArrayList<DefinedTerm>();
67 Set<TermVocabulary<DefinedTerm>> recommendedModifierEnumeration = new HashSet<TermVocabulary<DefinedTerm>>();
68 if(parentSection.getEntity() instanceof StateData){
69 StateData stateData = (StateData) parentSection.getEntity();
70 recommendedModifierEnumeration = stateData.getCategoricalData().getFeature().getRecommendedModifierEnumeration();
71 }
72 if(parentSection.getEntity() instanceof StatisticalMeasurementValue){
73 StatisticalMeasurementValue statisticalMeasurementValue = (StatisticalMeasurementValue)parentSection.getEntity();
74 recommendedModifierEnumeration = statisticalMeasurementValue.getQuantitativeData().getFeature().getRecommendedModifierEnumeration();
75 }
76 if (!(parentSection.getParentElement() instanceof StateDataElement || parentSection.getParentElement() instanceof StatisticalMeasurementValueElement)){
77 recommendedModifierEnumeration.add(CdmStore.getService(IVocabularyService.class).load(VocabularyEnum.Modifier.getUuid()));
78 }
79 for (TermVocabulary<DefinedTerm> termVocabulary : recommendedModifierEnumeration) {
80 modifierTerms.addAll(termVocabulary.getTerms());
81 }
82 combo_modifier.setTerms(modifierTerms);
83 }
84 if(entity!=null && entity.getId()>0){
85 combo_modifier.setSelection(entity);
86 combo_modifier.removeEmptyElement();
87 }
88 }
89
90 /** {@inheritDoc} */
91 @Override
92 public void createControls(ICdmFormElement element, int style) {
93 combo_modifier = formFactory.createDefinedTermComboElement(TermType.Modifier, element, "Modifier", getEntity(), style);
94 }
95
96 /** {@inheritDoc} */
97 @Override
98 public void handleEvent(Object eventSource) {
99 if(eventSource==combo_modifier && combo_modifier.getSelection()!=null){
100 combo_modifier.removeEmptyElement();
101 if(getParentElement() instanceof AbstractFormSection){
102 AbstractFormSection<?> parentSection = (AbstractFormSection<?>) getParentElement();
103 if(parentSection.getEntity() instanceof StateData){
104 StateData stateData = (StateData) parentSection.getEntity();
105 stateData.removeModifier(entity);
106 DefinedTerm term = combo_modifier.getSelection();
107 stateData.addModifier(term);
108 entity = term;
109 }
110 else if(parentSection.getEntity() instanceof StatisticalMeasurementValue){
111 StatisticalMeasurementValue parentEntity = (StatisticalMeasurementValue) parentSection.getEntity();
112 parentEntity.removeModifier(entity);
113 DefinedTerm term = combo_modifier.getSelection();
114 parentEntity.addModifier(term);
115 entity = term;
116 }else {
117 ((DescriptionElementBase)parentSection.getEntity()).removeModifier(entity);
118 DefinedTerm term = combo_modifier.getSelection();
119 ((DescriptionElementBase)parentSection.getEntity()).addModifier(term);
120 entity = term;
121 }
122 }
123 }
124 }
125 }