Project

General

Profile

Download (10.3 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.List;
14
import java.util.UUID;
15

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

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

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

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

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

    
68
    }
69

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

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

    
78
    protected TermType type;
79

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

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

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

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

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

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

    
119
        }else{
120
            useLocalOrAdmin.add(LocalOrDefaultEnum.Database.getLabel());
121
            useLocalOrAdmin.add(LocalOrDefaultEnum.AllowOverride.getLabel());
122
        }
123

    
124

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

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

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

    
149
        return container;
150

    
151
    }
152

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

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

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

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

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

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

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

    
214
        return termlist;
215
    }
216

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

    
224
        setVocabularies(vocs);
225
    }
226

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

    
229

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

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

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

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

    
259
    }
260

    
261
    @Override
262
    public boolean performOk() {
263
        if (!isApply()){
264
            return true;
265
        }
266
        Object[] checkedElements = treeComposite.getViewer().getCheckedElements();
267
        List<UUID> listUIIDChecked = new ArrayList<>();
268
        List<DefinedTermBase> preferredTerms = new ArrayList<>();
269
        for (Object o : checkedElements) {
270
            if(o instanceof TermDto){
271
                TermDto termDto = (TermDto) o;
272
                listUIIDChecked.add(termDto.getUuid());
273
                preferredTerms.add(CdmStore.getService(ITermService.class).load(termDto.getUuid()));
274
            }
275
        }
276
        String saveCheckedElements = StringUtils.join(listUIIDChecked, ";"); //$NON-NLS-1$
277

    
278
        PreferencesUtil.setStringValue(predicate.getKey(), saveCheckedElements);
279
        String text = this.useLocalOrAdmin.getText();
280
        if (text.equals(LocalOrDefaultEnum.Database.getLabel()) || text.equals(LocalOrDefaultEnum.Default.getLabel())){
281
            PreferencesUtil.setBooleanValue(PreferencesUtil.createOverridePreferenceString(predicate.getKey()), false);
282
        }else if (text.equals(LocalOrDefaultEnum.Local.getLabel())){
283
            PreferencesUtil.setBooleanValue(PreferencesUtil.createOverridePreferenceString(predicate.getKey()), true);
284
        }
285

    
286
        CdmStore.getTermManager().setPreferredTerms(preferredTerms, TermStore.getTerms(type, null));
287
        PreferencesUtil.firePreferencesChanged(this.getClass());
288
        return true;
289
    }
290
}
(15-15/48)