Project

General

Profile

Download (9.71 KB) Statistics
| Branch: | Tag: | Revision:
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.editor.view.checklist;
11

    
12
import java.util.ArrayList;
13
import java.util.Arrays;
14
import java.util.HashMap;
15
import java.util.HashSet;
16
import java.util.List;
17
import java.util.Set;
18
import java.util.SortedSet;
19
import java.util.TreeSet;
20
import java.util.UUID;
21

    
22
import org.eclipse.jface.preference.IPreferenceStore;
23
import org.eclipse.jface.viewers.ITableLabelProvider;
24
import org.eclipse.jface.viewers.LabelProvider;
25
import org.eclipse.swt.graphics.Image;
26

    
27
import eu.etaxonomy.cdm.api.service.IDescriptionService;
28
import eu.etaxonomy.cdm.api.service.IVocabularyService;
29
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
30
import eu.etaxonomy.cdm.model.common.DefinedTermBase;
31
import eu.etaxonomy.cdm.model.common.Language;
32
import eu.etaxonomy.cdm.model.common.OrderedTermBase;
33
import eu.etaxonomy.cdm.model.common.OrderedTermComparator;
34
import eu.etaxonomy.cdm.model.common.Representation;
35
import eu.etaxonomy.cdm.model.common.TermIdInVocabularyComparator;
36
import eu.etaxonomy.cdm.model.common.TermLanguageComparator;
37
import eu.etaxonomy.cdm.model.common.TermVocabulary;
38
import eu.etaxonomy.cdm.model.description.DescriptionElementBase;
39
import eu.etaxonomy.cdm.model.description.Distribution;
40
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
41
import eu.etaxonomy.cdm.model.description.TaxonDescription;
42
import eu.etaxonomy.cdm.model.name.TaxonName;
43
import eu.etaxonomy.cdm.model.taxon.Taxon;
44
import eu.etaxonomy.taxeditor.editor.view.checklist.e4.ChecklistEditorE4;
45
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
46
import eu.etaxonomy.taxeditor.store.CdmStore;
47

    
48
/**
49
 *
50
 * @author a.oppermann
51
 * @created 30.04.2014
52
 */
53
public class ChecklistLabelProvider extends LabelProvider implements ITableLabelProvider {
54

    
55
    public static final String DEFAULT_ENTRY = ""; //$NON-NLS-1$
56
    private IDescriptionService descriptionService;
57
    private SortedSet<DefinedTermBase> namedAreas;
58
    private ChecklistEditorE4 editor= null;
59

    
60
    /**
61
     *
62
     */
63
    public ChecklistLabelProvider() {
64
        namedAreas = loadNamedAreas();
65
    }
66

    
67
    public ChecklistLabelProvider(ChecklistEditorE4 editor) {
68
        namedAreas = loadNamedAreas();
69
        this.editor = editor;
70
    }
71

    
72
    /*
73
     * (non-Javadoc)
74
     *
75
     * @see
76
     * org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang
77
     * .Object, int)
78
     */
79
    /** {@inheritDoc} */
80
    @Override
81
    public Image getColumnImage(Object element, int columnIndex) {
82
        // TODO
83
        return null;
84
    }
85

    
86
    /** {@inheritDoc} */
87
	@Override
88
    public String getColumnText(Object element, int columnIndex) {
89
       // descriptionService = CdmStore.getService(IDescriptionService.class);
90
        Taxon taxon = (Taxon) element;
91

    
92
        Set<TaxonDescription> listTaxonDescriptions = taxon.getDescriptions();
93
        TaxonName nonViralName = HibernateProxyHelper.deproxy(taxon.getName());
94

    
95
        switch (columnIndex) {
96
        case 0:
97
            String taxonName = null;
98
            taxonName = (nonViralName != null) ? nonViralName.getNameCache() : null;
99
            return (taxonName != null) ? taxonName : DEFAULT_ENTRY;
100

    
101
        case 1:
102
            if (PreferencesUtil.isShowRankInChecklistEditor()){
103
                String rank = null;
104

    
105
                if (taxon.getName().getRank() != null) {
106
                    rank = taxon.getName().getRank().toString();
107
                }
108
                return (rank != null) ? rank : DEFAULT_ENTRY;
109
            }
110
        }
111

    
112
        if(columnIndex >1 || (!PreferencesUtil.isShowRankInChecklistEditor() && columnIndex > 0)){
113

    
114
            for (TaxonDescription td : listTaxonDescriptions) {
115
                for (DescriptionElementBase deb : td.getElements()) {
116
                    if (deb instanceof Distribution) {
117
                        Distribution distribution = HibernateProxyHelper.deproxy(deb, Distribution.class);
118
                        if (distribution.getArea() != null){
119
                            if ( editor.getAreaPosition().get(distribution.getArea().getUuid()) != null && columnIndex == editor.getAreaPosition().get(distribution.getArea().getUuid())){
120
                                if (distribution.getStatus() == null){
121
                                    return DEFAULT_ENTRY;
122
                                }
123
                                PresenceAbsenceTerm term = distribution.getStatus();
124
                                Representation rep = distribution.getStatus().getPreferredRepresentation(CdmStore.getDefaultLanguage());
125
                                String label = rep.getLabel();
126

    
127
                                if (label == null){
128
                                    distribution.getStatus().getTitleCache();
129
                                }
130
                                if (PreferencesUtil.isShowSymbolInChecklistEditor()){
131
                                    return (distribution.getStatus().getSymbol() != null)?distribution.getStatus().getSymbol():label;
132
                                }else{
133
                                    return (label != null)?label:DEFAULT_ENTRY;
134
                                }
135
                            }
136
                        }
137
                    }
138
                }
139
            }
140
        }
141
        return DEFAULT_ENTRY;
142

    
143
    }
144

    
145
    private static final List<String> DESC_INIT_STRATEGY = Arrays.asList(new String[] { "descriptions", //$NON-NLS-1$
146
            "descriptions.*", "description.state" }); //$NON-NLS-1$ //$NON-NLS-2$
147

    
148

    
149
    private SortedSet<DefinedTermBase> loadNamedAreas() {
150
        IPreferenceStore preferenceStore = PreferencesUtil.getPreferenceStore();
151

    
152
        String valuesAreas = preferenceStore.getString(PreferencesUtil.DISTRIBUTION_AREA_OCCURENCE_STATUS);
153
        String values = preferenceStore.getString(PreferencesUtil.DISTRIBUTION_VOCABULARIES);
154
        if (values != null && values != "") { //$NON-NLS-1$
155
            String[] split = values.split(";"); //$NON-NLS-1$
156
            List<String> listValue = Arrays.asList(split);
157
            List<DefinedTermBase> termlist = new ArrayList<DefinedTermBase>();
158
            Set<UUID> uuidList = new HashSet<UUID>();
159
            UUID uuid;
160
            for(String s : listValue){
161
                uuid = UUID.fromString(s);
162
                uuidList.add(uuid);
163

    
164
            }
165
            IVocabularyService service =  CdmStore.getService(IVocabularyService.class);
166
            List<TermVocabulary> vocs = service.find(uuidList);
167
            split = valuesAreas.split(";");
168
            listValue = Arrays.asList(split);
169
            for (TermVocabulary voc: vocs){
170
                termlist.addAll(service.getTerms(voc, null, null, null, null).getRecords());
171
            }
172
            List<DefinedTermBase> filteredList = new ArrayList();
173
            for (DefinedTermBase area: termlist){
174
                if (listValue.contains(area.getUuid().toString())) {
175
                    filteredList.add(area);
176
                }
177

    
178
            }
179

    
180
            if (PreferencesUtil.isSortNamedAreaByOrderInVocabulary()){
181
                return getTermsOrderedByVocabularyOrder(filteredList);
182
            } else if (PreferencesUtil.isShowIdInVocabularyInChecklistEditor()){
183
                return getTermsOrderedByIdInVocabulary(filteredList);
184
            }else{
185
                return getTermsOrderedByLabels(filteredList, CdmStore.getDefaultLanguage());
186
            }
187
        }
188
        return null;
189
    }
190

    
191
    public SortedSet<DefinedTermBase> getTermsOrderedByLabels(List<DefinedTermBase> listTerm,Language language){
192
        TermLanguageComparator<?> comp = new TermLanguageComparator<>();
193
        comp.setCompareLanguage(language);
194
        SortedSet<DefinedTermBase> result = new TreeSet(comp);
195
        if(listTerm != null){
196
            result.addAll(listTerm);
197
        }
198
        return result;
199
    }
200

    
201
    public SortedSet<DefinedTermBase> getTermsOrderedByVocabularyOrder(List<DefinedTermBase> listAreas){
202
        HashMap<TermVocabulary<DefinedTermBase>, List<DefinedTermBase>> vocs = new HashMap<>();
203
        OrderedTermComparator<?> comp = new OrderedTermComparator<>();
204
        boolean allOrderedTerms = true;
205
        List<TermVocabulary> alreadyOrderIndexNull = new ArrayList<>();
206
        for (DefinedTermBase term: listAreas){
207
            if (!(term instanceof OrderedTermBase)){
208
                allOrderedTerms = false;
209
                break;
210
            }else if (((OrderedTermBase)term).getOrderIndex() == 0){
211
                if(alreadyOrderIndexNull.contains(term.getVocabulary())) {
212
                    allOrderedTerms = false;
213
                    break;
214
                }else{
215
                    alreadyOrderIndexNull.add(term.getVocabulary());
216
                }
217

    
218

    
219
            }
220
        }
221
        if (allOrderedTerms){
222
            SortedSet<DefinedTermBase> result = new TreeSet(comp.reversed());
223
            result.addAll(listAreas);
224
            return result;
225
        }else{
226
            return getTermsOrderedByLabels(listAreas, PreferencesUtil.getGlobalLanguage());
227
        }
228

    
229

    
230
    }
231

    
232
    /**
233
     * @return the namedAreas
234
     */
235
    public SortedSet<DefinedTermBase> getNamedAreas(boolean load) {
236
        if (load){
237
            namedAreas = loadNamedAreas();
238
        }
239
        return namedAreas;
240
    }
241

    
242
    /**
243
     * @param namedAreas
244
     * @param defaultLanguage
245
     * @return
246
     */
247
    public SortedSet<DefinedTermBase> getTermsOrderedByIdInVocabulary(List<DefinedTermBase> namedAreas) {
248
        TermIdInVocabularyComparator<?> comp = new TermIdInVocabularyComparator<>();
249

    
250
        SortedSet<DefinedTermBase> result = new TreeSet(comp);
251
        if(namedAreas != null){
252
            result.addAll(namedAreas);
253
        }
254
        return result;
255
    }
256
}
(4-4/4)