Project

General

Profile

Download (10.9 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2019 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.preference;
10

    
11
import java.util.ArrayList;
12
import java.util.Arrays;
13
import java.util.Collection;
14
import java.util.List;
15
import java.util.UUID;
16

    
17
import org.apache.commons.lang.StringUtils;
18
import org.eclipse.jface.viewers.ISelectionChangedListener;
19
import org.eclipse.jface.viewers.SelectionChangedEvent;
20
import org.eclipse.swt.SWT;
21
import org.eclipse.swt.custom.CLabel;
22
import org.eclipse.swt.events.SelectionEvent;
23
import org.eclipse.swt.events.SelectionListener;
24
import org.eclipse.swt.layout.GridData;
25
import org.eclipse.swt.layout.GridLayout;
26
import org.eclipse.swt.widgets.Combo;
27
import org.eclipse.swt.widgets.Composite;
28
import org.eclipse.swt.widgets.Control;
29

    
30
import eu.etaxonomy.cdm.api.service.ITermService;
31
import eu.etaxonomy.cdm.api.service.IVocabularyService;
32
import eu.etaxonomy.cdm.model.metadata.CdmPreference;
33
import eu.etaxonomy.cdm.model.metadata.IPreferencePredicate;
34
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
35
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
36
import eu.etaxonomy.cdm.model.term.TermType;
37
import eu.etaxonomy.cdm.model.term.TermVocabulary;
38
import eu.etaxonomy.cdm.persistence.dto.AbstractTermDto;
39
import eu.etaxonomy.cdm.persistence.dto.TermDto;
40
import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
41
import eu.etaxonomy.taxeditor.editor.definedterm.DefinedTermSorter;
42
import eu.etaxonomy.taxeditor.editor.definedterm.TermDtoContentProvider;
43
import eu.etaxonomy.taxeditor.editor.definedterm.TermDtoLabelProvider;
44
import eu.etaxonomy.taxeditor.l10n.Messages;
45
import eu.etaxonomy.taxeditor.preference.menu.CdmPreferencePage;
46
import eu.etaxonomy.taxeditor.preference.wizard.CheckBoxTreeComposite;
47
import eu.etaxonomy.taxeditor.store.CdmStore;
48
import eu.etaxonomy.taxeditor.store.TermStore;
49

    
50
/**
51
 * @author k.luther
52
 * @since 05.06.2019
53
 *
54
 */
55
abstract public class GeneralTermPreference extends CdmPreferencePage implements ISelectionChangedListener, SelectionListener{
56
    protected CheckBoxTreeComposite treeComposite;
57
    private List<TermVocabularyDto> vocabularies = new ArrayList<>();
58
    protected Combo useLocalOrAdmin ;
59

    
60
    protected boolean isOverride;
61
    protected boolean allowOverride;
62
    protected CdmPreference pref;
63
    protected IPreferencePredicate predicate;
64
    private boolean localPref;
65

    
66
    public GeneralTermPreference(){
67
        super();
68

    
69
    }
70

    
71
    public boolean isLocalPref() {
72
        return localPref;
73
    }
74

    
75
    public void setLocalPref(boolean localPref) {
76
        this.localPref = localPref;
77
    }
78

    
79
    protected TermType type;
80

    
81
    public List<TermVocabularyDto> getVocabularies() {
82
        return vocabularies;
83
    }
84

    
85
    public void setVocabularies(List<TermVocabularyDto> vocabularies) {
86
        this.vocabularies = vocabularies;
87
    }
88

    
89
    public IPreferencePredicate getPredicate() {
90
        return predicate;
91
    }
92

    
93
    public void setPredicate(PreferencePredicate predicate) {
94
        this.predicate = predicate;
95
    }
96

    
97
    /**
98
     * {@inheritDoc}
99
     */
100
    @Override
101
    protected Control createContents(Composite parent) {
102
        Composite container = new Composite(parent, SWT.NULL);
103
        getPreferenceValues();
104
        if (isLocalPref() && !allowOverride){
105
            final CLabel description = new CLabel(parent, SWT.NULL);
106
            description.setText(Messages.NameDetailsViewConfiguration_description_not_available);
107
            this.setDefaultButtonActivated(false);
108
            return parent;
109

    
110
        }
111
        final GridLayout gridLayout = new GridLayout();
112
        gridLayout.numColumns = 2;
113
        container.setLayout(gridLayout);
114
        parent.setLayout(new GridLayout());
115
        useLocalOrAdmin = new Combo(parent, SWT.BORDER | SWT.READ_ONLY);
116
        if (localPref){
117
            useLocalOrAdmin.add(LocalOrDefaultEnum.Default.getLabel(), 0);
118
            useLocalOrAdmin.add(LocalOrDefaultEnum.Local.getLabel(), 1);
119

    
120
        }else{
121
            useLocalOrAdmin.add(LocalOrDefaultEnum.AllowOverride.getLabel(), 0);
122
            useLocalOrAdmin.add(LocalOrDefaultEnum.Database.getLabel(), 1);
123
        }
124

    
125

    
126
        treeComposite = new CheckBoxTreeComposite(container, new TermDtoContentProvider(), new TermDtoLabelProvider(), SWT.NONE);
127
        treeComposite.getViewer().setComparator(new DefinedTermSorter());
128
        rememberCheckedValues(getCheckedValuesFromPreferences());
129

    
130
        if (isLocalPref()){
131
            if (isOverride){
132
                useLocalOrAdmin.select(1);
133
            }else{
134
                useLocalOrAdmin.select(0);
135
            }
136
        }else{
137
            if (allowOverride){
138
                useLocalOrAdmin.select(0);
139
            }else{
140
                useLocalOrAdmin.select(1);
141
            }
142
        }
143
        useLocalOrAdmin.addSelectionListener(this);
144

    
145
        GridData data = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
146
        data.heightHint = 300;
147
        treeComposite.setLayoutData(data);
148
        treeComposite.getViewer().addSelectionChangedListener(this);
149

    
150
        return container;
151

    
152
    }
153

    
154
    public String getCheckedValuesFromPreferences(){
155
        String values;
156
        if (localPref){
157
            values = PreferencesUtil.getStringValue(predicate.getKey(), this.localPref);
158
        }else{
159
            values = pref != null ?pref.getValue(): null;
160
        }
161
        return values;
162
    }
163

    
164
    protected void rememberCheckedValues(String checkedValues) {
165
        initialiseVocabularies();
166

    
167
        treeComposite.getViewer().setInput(getVocabularies());
168

    
169
        if (checkedValues != null && checkedValues != "") { //$NON-NLS-1$
170
            String[] listChecked = checkedValues.split(";"); //$NON-NLS-1$
171
            String[] listCheckedComma = checkedValues.split(","); //$NON-NLS-1$
172
            List<String> checked = new ArrayList<>();
173
            if (listChecked != null ){
174
                checked = Arrays.asList(listChecked);
175
            }
176
            if (listCheckedComma != null && checkedValues.contains(",")){ //$NON-NLS-1$
177
                checked = Arrays.asList(listCheckedComma);
178
            }
179
            List<AbstractTermDto> termsFromStringValues = getTermsFromStringValues(checked);
180
            treeComposite.setCheckedElements(termsFromStringValues.toArray());
181

    
182
        }else{
183
            List<AbstractTermDto> termsFromStringValues = getTermsFromStringValues(new ArrayList<String>());
184
            treeComposite.setCheckedElements(termsFromStringValues.toArray());
185
            pref = null;
186
        }
187
    }
188

    
189
    protected List<AbstractTermDto> getTermsFromStringValues(List<String> listValue) {
190
        List<AbstractTermDto> termlist = new ArrayList<>();
191
        ITermService termService = CdmStore.getService(ITermService.class);
192
        for (String s : listValue) {
193
            if (!StringUtils.isBlank(s)){
194
                UUID uuid = UUID.fromString(s);
195

    
196
                DefinedTermBase definedTermBase = termService.load(uuid);
197
                if(definedTermBase != null){
198
                    termlist.add(TermDto.fromTerm(definedTermBase, true));
199
                }else{
200
                    IVocabularyService vocabularyService = CdmStore.getService(IVocabularyService.class);
201
                    TermVocabulary termVocabulary = vocabularyService.load(uuid);
202
                    if (termVocabulary != null){
203
                        termlist.add(new TermVocabularyDto(uuid, termVocabulary.getRepresentations(), termVocabulary.getTermType()));
204
                    }
205
                }
206
            }
207
        }
208
        if (listValue.isEmpty()){
209
            List<DefinedTermBase> terms = CdmStore.getTermManager().getAllTerms(type, null);
210
            for (DefinedTermBase term: terms){
211
                termlist.add(TermDto.fromTerm(term, true));
212
            }
213
        }
214

    
215
        return termlist;
216
    }
217

    
218
    protected void initialiseVocabularies() {
219
        if (getVocabularies() != null) {
220
            getVocabularies().clear();
221
        }
222
        List<TermVocabularyDto> vocs = new ArrayList<>();
223
        vocs = CdmStore.getService(IVocabularyService.class).findVocabularyDtoByTermType(type);
224

    
225
        setVocabularies(vocs);
226
    }
227

    
228
    protected abstract List<TermVocabularyDto> getVocabulariesFromPreference();
229

    
230

    
231
    protected void getPreferenceValues(){
232
        pref = PreferencesUtil.getPreferenceFromDB(predicate);
233
        this.allowOverride = pref!= null?pref.isAllowOverride():true;
234
        this.isOverride = PreferencesUtil.getBooleanValue(PreferencesUtil.createOverridePreferenceString(predicate.getKey()));
235
    }
236

    
237
    /**
238
     * {@inheritDoc}
239
     */
240
    @Override
241
    public void selectionChanged(SelectionChangedEvent event) {
242
        this.setApply(true);
243
    }
244

    
245
    /**
246
     * {@inheritDoc}
247
     */
248
    @Override
249
    public void widgetSelected(SelectionEvent e) {
250
        this.setApply(true);
251
    }
252

    
253
    /**
254
     * {@inheritDoc}
255
     */
256
    @Override
257
    public void widgetDefaultSelected(SelectionEvent e) {
258
        // TODO Auto-generated method stub
259

    
260
    }
261

    
262
    @Override
263
    protected void performDefaults(){
264
        rememberCheckedValues("");
265

    
266
       useLocalOrAdmin.select(0);
267
       setApply(true);
268

    
269
    }
270

    
271
    @Override
272
    public boolean performOk() {
273
        if (!isApply()){
274
            return true;
275
        }
276
        Object[] checkedElements = treeComposite.getViewer().getCheckedElements();
277
        List<UUID> listUIIDChecked = new ArrayList<>();
278
        Collection<TermDto> preferredTermDtos = new ArrayList<>();
279
        List<DefinedTermBase> preferredTerms = new ArrayList<>();
280
        for (Object o : checkedElements) {
281
            if(o instanceof TermDto){
282
                TermDto termDto = (TermDto) o;
283
                listUIIDChecked.add(termDto.getUuid());
284
                preferredTermDtos.add(termDto);
285
                if (vocabularies.size() > 1){
286
                    preferredTerms.add(CdmStore.getService(ITermService.class).load(termDto.getUuid()));
287
                }
288

    
289
            }
290
        }
291
        String saveCheckedElements = StringUtils.join(listUIIDChecked, ";"); //$NON-NLS-1$
292

    
293
        PreferencesUtil.setStringValue(predicate.getKey(), saveCheckedElements);
294
        String text = this.useLocalOrAdmin.getText();
295
        if (text.equals(LocalOrDefaultEnum.Database.getLabel()) || text.equals(LocalOrDefaultEnum.Default.getLabel())){
296
            PreferencesUtil.setBooleanValue(PreferencesUtil.createOverridePreferenceString(predicate.getKey()), false);
297
        }else if (text.equals(LocalOrDefaultEnum.Local.getLabel())){
298
            PreferencesUtil.setBooleanValue(PreferencesUtil.createOverridePreferenceString(predicate.getKey()), true);
299
        }
300
        if (vocabularies.size() == 1){
301
            CdmStore.getTermManager().setPreferredTermsByDto(preferredTermDtos, vocabularies.get(0));
302
        }else{
303
            CdmStore.getTermManager().setPreferredTerms(preferredTerms, TermStore.getTerms(type, null));
304
        }
305
        PreferencesUtil.firePreferencesChanged(this.getClass());
306
        return true;
307
    }
308
}
(17-17/52)