Project

General

Profile

Download (5.94 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

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

    
39

    
40

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

    
47
    }
48

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

    
63
                }else if (elements.size() == 1){
64
                    DescriptionElementBase base = elements.iterator().next();
65
                    Distribution distr = (Distribution) base;
66
                    editor.descriptionsToSave.add( (TaxonDistributionDTO) rowWrapper);
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

    
73
                        }else{
74
                            super.setCanonicalValue(distr.getStatus().getLabel());
75
                        }
76
                    }
77
                }
78
            }
79
        }else if (canonicalValue != null){
80
            super.setCanonicalValue(canonicalValue);
81
        }else{
82
            Object rowWrapper = editor.getBodyDataProvider().getRowObject(this.getRowIndex());
83
            Distribution newDistribution = Distribution.NewInstance();
84
            NamedArea area = editor.getAreaToColumnIndexMap().get(getColumnIndex());
85
            newDistribution.setArea(area);
86
            if (editor.getDefaultSource() != null){
87
                newDistribution.addSource(DescriptionElementSource.NewPrimarySourceInstance(editor.getDefaultSource(), null));
88
            }
89
            Map<NamedArea, Set<DescriptionElementBase>> distributionMap = editor.taxonDistributionMap.get(((TaxonDistributionDTO) rowWrapper).getTaxonUuid());
90
            if (distributionMap == null){
91
                distributionMap = new HashMap();
92
                editor.taxonDistributionMap.put(((TaxonDistributionDTO) rowWrapper).getTaxonUuid(),distributionMap);
93
            }
94
            Set<DescriptionElementBase> elements = distributionMap.get(area);
95
            if (elements == null){
96
                elements = new HashSet<DescriptionElementBase>();
97
                distributionMap.put(area, elements);
98
            }
99
            elements.add(newDistribution);
100
            Set<TaxonDescription> descriptionSet = ((TaxonDistributionDTO) rowWrapper).getDescriptionsWrapper().getDescriptions();
101
            Iterator<TaxonDescription> iterator = descriptionSet.iterator();
102
            if (iterator.hasNext()){
103
                TaxonDescription desc = iterator.next();
104
                desc.addElement(newDistribution);
105
                editor.descriptionsToSave.add((TaxonDistributionDTO) rowWrapper);
106
            }else{
107

    
108
                TaxonDescription desc = TaxonDescription.NewInstance();
109
                desc.addElement(newDistribution);
110
                ((TaxonDistributionDTO) rowWrapper).getDescriptionsWrapper().getDescriptions().add(desc);
111
                editor.descriptionsToSave.add((TaxonDistributionDTO) rowWrapper);
112
             }
113
        }
114
    }
115

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

    
134

    
135
    }
136
}
(16-16/19)