Project

General

Profile

Download (5.86 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2018 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.editor.view.checklist.e4;
10

    
11
import java.util.HashMap;
12
import java.util.HashSet;
13
import java.util.Iterator;
14
import java.util.Map;
15
import java.util.Set;
16

    
17
import org.eclipse.nebula.widgets.nattable.edit.editor.ComboBoxCellEditor;
18
import org.eclipse.nebula.widgets.nattable.widget.NatCombo;
19
import org.eclipse.swt.events.SelectionEvent;
20
import org.eclipse.swt.events.SelectionListener;
21
import org.eclipse.swt.widgets.Composite;
22
import org.eclipse.swt.widgets.Control;
23

    
24
import eu.etaxonomy.cdm.api.service.dto.TaxonDistributionDTO;
25
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
26
import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
27
import eu.etaxonomy.cdm.model.description.Distribution;
28
import eu.etaxonomy.cdm.model.description.TaxonDescription;
29
import eu.etaxonomy.cdm.model.location.NamedArea;
30
import eu.etaxonomy.cdm.model.taxon.Taxon;
31

    
32
/**
33
 * @author k.luther
34
 * @since 05.12.2018
35
 *
36
 */
37
public class StatusDataCellEditor extends ComboBoxCellEditor {
38
    private DistributionEditor editor;
39

    
40

    
41

    
42
    public StatusDataCellEditor(DistributionEditor editor, StatusComboBoxDataProvider statusComboBoxDataProvider) {
43
        super(statusComboBoxDataProvider, statusComboBoxDataProvider.getMaxVisibleItems());
44
        this.editor = editor;
45
        setUseCheckbox(true);
46
        setMultiselect(false);
47

    
48
    }
49

    
50
    @Override
51
    public void setCanonicalValue(Object canonicalValue) {
52
        if(canonicalValue instanceof Distribution){
53
            Object rowWrapper = editor.getBodyDataProvider().getRowObject(this.getRowIndex());
54
            if(rowWrapper instanceof TaxonDistributionDTO){
55
                NamedArea area = editor.getAreaToColumnIndexMap().get(getColumnIndex());
56
                Map<NamedArea, Set<DescriptionElementBase>> distributionMap = editor.taxonDistributionMap.get(((TaxonDistributionDTO) rowWrapper).getTaxonUuid());
57
                if (distributionMap == null){
58
                    distributionMap = new HashMap();
59
                    editor.taxonDistributionMap.put(((TaxonDistributionDTO) rowWrapper).getTaxonUuid(),distributionMap);
60
                }
61
                Set<DescriptionElementBase> elements = distributionMap.get(area);
62
                if (elements == null){
63

    
64
                }else if (elements.size() == 1){
65
                    DescriptionElementBase base = elements.iterator().next();
66
                    Distribution distr = (Distribution) base;
67
                    //TODO set value corresponding to preference
68
                    if (distr.getStatus() != null){
69
                        if (distr.getStatus().getLabel() == ""){
70
                            distr.setStatus(null);
71
                            super.setCanonicalValue("");
72
                        }else{
73
                            super.setCanonicalValue(distr.getStatus().getLabel());
74
                        }
75
                    }
76
                }
77
            }
78
        }else if (canonicalValue != null){
79
            super.setCanonicalValue(canonicalValue);
80
        }else{
81
            Object rowWrapper = editor.getBodyDataProvider().getRowObject(this.getRowIndex());
82
            Distribution newDistribution = Distribution.NewInstance();
83
            NamedArea area = editor.getAreaToColumnIndexMap().get(getColumnIndex());
84
            newDistribution.setArea(area);
85
            if (editor.getDefaultSource() != null){
86
                newDistribution.addSource(DescriptionElementSource.NewPrimarySourceInstance(editor.getDefaultSource(), null));
87
            }
88
            Map<NamedArea, Set<DescriptionElementBase>> distributionMap = editor.taxonDistributionMap.get(((TaxonDistributionDTO) rowWrapper).getTaxonUuid());
89
            if (distributionMap == null){
90
                distributionMap = new HashMap();
91
                editor.taxonDistributionMap.put(((TaxonDistributionDTO) rowWrapper).getTaxonUuid(),distributionMap);
92
            }
93
            Set<DescriptionElementBase> elements = distributionMap.get(area);
94
            if (elements == null){
95
                elements = new HashSet<DescriptionElementBase>();
96
                distributionMap.put(area, elements);
97
            }
98
            elements.add(newDistribution);
99
          //  ((TaxonDistributionDTO) rowWrapper).getDistributionMap().put(area, elements);
100
            Set<TaxonDescription> descriptionSet = ((TaxonDistributionDTO) rowWrapper).getDescriptionsWrapper().getDescriptions();
101
            Iterator<TaxonDescription> iterator = descriptionSet.iterator();
102
            if (iterator.hasNext()){
103
                iterator.next().addElement(newDistribution);
104
            }else{
105
                Taxon taxon = ((TaxonDistributionDTO) rowWrapper).getTaxon();
106
                TaxonDescription desc = TaxonDescription.NewInstance(taxon);
107
                desc.addElement(newDistribution);
108
                ((TaxonDistributionDTO) rowWrapper).getDescriptionsWrapper().getDescriptions().add(desc);
109
             }
110
        }
111
    }
112

    
113
    @Override
114
    protected Control activateCell(Composite parent, Object originalCanonicalValue) {
115
            if (originalCanonicalValue instanceof Distribution || originalCanonicalValue == null){
116
                NatCombo natCombo = (NatCombo) super.activateCell(parent, originalCanonicalValue);
117
                natCombo.addSelectionListener(new SelectionListener() {
118
                    @Override
119
                    public void widgetSelected(SelectionEvent e) {
120
                        editor.setDirty();
121
                    }
122
                    @Override
123
                    public void widgetDefaultSelected(SelectionEvent e) {
124
                    }
125
                });
126
                return natCombo;
127
            }else{
128
                return null;
129
            }
130

    
131

    
132
    }
133
}
(16-16/19)