Project

General

Profile

Download (13.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.HashMap;
13
import java.util.Iterator;
14
import java.util.List;
15
import java.util.Map;
16
import java.util.UUID;
17

    
18
import javax.inject.Inject;
19

    
20
import org.eclipse.e4.core.di.annotations.Optional;
21
import org.eclipse.e4.ui.di.UIEventTopic;
22
import org.eclipse.jface.util.IPropertyChangeListener;
23
import org.eclipse.jface.util.PropertyChangeEvent;
24
import org.eclipse.swt.SWT;
25
import org.eclipse.swt.custom.CLabel;
26
import org.eclipse.swt.custom.TableEditor;
27
import org.eclipse.swt.events.SelectionAdapter;
28
import org.eclipse.swt.events.SelectionEvent;
29
import org.eclipse.swt.layout.GridData;
30
import org.eclipse.swt.layout.GridLayout;
31
import org.eclipse.swt.widgets.Button;
32
import org.eclipse.swt.widgets.Composite;
33
import org.eclipse.swt.widgets.Control;
34
import org.eclipse.swt.widgets.Event;
35
import org.eclipse.swt.widgets.Listener;
36
import org.eclipse.swt.widgets.Table;
37
import org.eclipse.swt.widgets.TableColumn;
38
import org.eclipse.swt.widgets.TableItem;
39

    
40
import eu.etaxonomy.cdm.model.location.NamedArea;
41
import eu.etaxonomy.cdm.model.metadata.CdmPreference;
42
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
43
import eu.etaxonomy.cdm.model.metadata.PreferenceResolver;
44
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
45
import eu.etaxonomy.taxeditor.l10n.Messages;
46
import eu.etaxonomy.taxeditor.model.ImageResources;
47
import eu.etaxonomy.taxeditor.preference.menu.CdmPreferencePage;
48
import eu.etaxonomy.taxeditor.store.CdmStore;
49
import eu.etaxonomy.taxeditor.ui.element.CommandHandlerButton;
50

    
51
/**
52
 * @author k.luther
53
 * @since 02.07.2019
54
 *
55
 */
56
public class DistributionStatusAndNamedAreaVocabularies extends CdmPreferencePage implements IPropertyChangeListener{
57

    
58
    protected String commandHandlerString;
59
    protected String commandHandlerStringStatus;
60

    
61
    protected List<CdmPreference> prefStatus;
62
    protected List<CdmPreference> prefStatusToDelete = new ArrayList<>();
63

    
64
    protected CdmPreference prefAreaVoc;
65

    
66
    private CommandHandlerButton button_openSelectAreaVocabularies;
67

    
68
    private CommandHandlerButton button_openStatusWizard;
69

    
70
    private Map<UUID, NamedArea> namedAreaUUIDMap = new HashMap();
71

    
72
    private Table table;
73

    
74
    /**
75
     * {@inheritDoc}
76
     */
77
    @Override
78
    protected Control createContents(Composite parent) {
79
        getValues();
80
        Composite composite = new Composite(parent, SWT.NULL);
81
        composite.setLayout(new GridLayout());
82
        GridData textGrid = createTextGridData();
83
        textGrid.verticalSpan = 2;
84

    
85

    
86
        if (isAdminPreference){
87
            final CLabel labelPerAreaStatus = new CLabel(composite, SWT.NULL);
88
            labelPerAreaStatus.setText(Messages.DistributionAdminPreferences_PER_AREA_STATUS);
89
            labelPerAreaStatus.setLayoutData(textGrid);
90
            createTable(composite);
91
        }
92

    
93
        final CLabel labelStatus = new CLabel(composite, SWT.NULL);
94
        labelStatus.setText(Messages.DistributionAdminPreferences_SELECT_STATUS);
95
        labelStatus.setLayoutData(textGrid);
96
        composite.pack ();
97
        button_openStatusWizard = new CommandHandlerButton(composite, SWT.PUSH, commandHandlerStringStatus);
98

    
99
        button_openStatusWizard.setText(Messages.Distribution_status_selection);
100
        button_openStatusWizard.addListener(SWT.Selection, new Listener() {
101
            @Override
102
            public void handleEvent(Event e) {
103
                switch (e.type) {
104
                case SWT.Selection:
105
                    setApply(true);
106
                    break;
107
                }
108
            }
109
        });
110

    
111
        final CLabel label = new CLabel(composite, SWT.NULL);
112
        label.setText(Messages.ChecklistEditorGeneralPreference_open_wizard);
113
        label.setLayoutData(textGrid);
114

    
115
        button_openSelectAreaVocabularies = new CommandHandlerButton(composite, SWT.PUSH, commandHandlerString);
116
        button_openSelectAreaVocabularies
117
                .setText(Messages.ChecklistEditorGeneralPreference_open_distribution_selection);
118

    
119
        if (!isAdminPreference){
120
            if (prefAreaVoc != null && !prefAreaVoc.isAllowOverride()) {
121
                button_openSelectAreaVocabularies.setButtonEnabled(false);
122
            }
123
//            if (prefStatus != null && !prefStatus.isAllowOverride()) {
124
//                button_openStatusWizard.setButtonEnabled(false);
125
//            }
126
        }
127
        return composite;
128
    }
129

    
130
    public void createTable(Composite composite) {
131
        table = new Table(
132
                composite, SWT.BORDER /*| SWT.CHECK */| SWT.FULL_SELECTION | SWT.SINGLE
133
        );
134

    
135
        table.setLinesVisible(true);
136
        table.setHeaderVisible(true);
137
        GridData tableGrid = createTextGridData();
138
        table.setLayoutData(tableGrid);
139
        Iterator<CdmPreference> prefIterator = prefStatus.iterator();
140
        CdmPreference pref;
141
        TableColumn column = new TableColumn(table, SWT.NONE);
142
        column.setText("Predicate/Subject");
143
        column.setWidth(500);
144
        column = new TableColumn(table, SWT.NONE);
145
        if (isAdminPreference){
146
            column.setText("Allow Override");
147
        }else{
148
            column.setText("Use Default");
149
        }
150
        column.setWidth(100);
151
        column = new TableColumn(table, SWT.NONE);
152
        column.setText("Delete");
153
        column.setWidth(100);
154

    
155

    
156

    
157
        while (prefIterator.hasNext()){
158
            pref = prefIterator.next();
159
            createTableRow(pref);
160

    
161
        }
162
    }
163

    
164
    public void createTableRow(CdmPreference pref) {
165
        TableItem item = new TableItem(table, SWT.NONE);
166
        for (int col = 0; col < 3; col ++) {
167
            String namedAreaString = null;
168
            if (col == 0){
169
               String uuidString = getUUIDFromSubject(pref);
170
               if (uuidString != null){
171
                   try{
172
                   UUID uuid = UUID.fromString(uuidString);
173
                   namedAreaString = namedAreaUUIDMap.get(UUID.fromString(uuidString)).getLabel();
174
                   }catch(IllegalArgumentException e){
175
                       // no UUID
176
                   }
177
               }
178
               if (namedAreaString != null){
179
                   String subjectString = pref.getSubjectString().replace(pref.getSubject().getLastPart(), namedAreaString);
180
                   item.setText(col, pref.getPredicate() +subjectString);
181
               }else{
182
                   item.setText(col, pref.getPredicate() +pref.getSubjectString());
183
               }
184

    
185
            }else if (col == 1) {
186
                Button allowOverrideButton = new Button(table, SWT.CHECK);
187
                allowOverrideButton.setData(pref);
188
                TableEditor editor = new TableEditor(table);
189
                editor.horizontalAlignment = SWT.LEFT;
190
                editor.grabHorizontal = true;
191
                editor.setEditor(allowOverrideButton, item, col);
192
                allowOverrideButton.setSelection(pref.isAllowOverride());
193
                allowOverrideButton.addSelectionListener(new SelectionAdapter(){
194
                    @Override
195
                    public void widgetSelected(SelectionEvent e){
196
                        setApply(true);
197
                        Button thisButton= (Button) e.widget;
198
                        CdmPreference preference=(CdmPreference)thisButton.getData();
199
                        preference = PreferenceResolver.resolve(prefStatus, preference.getKey());
200
                        if (isAdminPreference){
201
                            preference.setAllowOverride(!preference.isAllowOverride());
202
                        }else{
203

    
204
                        }
205
                    }
206
                  });
207
            } else if (col == 2){
208
                Button delButton = new Button(table, SWT.PUSH);
209
                delButton.setImage(ImageResources
210
                        .getImage(ImageResources.TRASH_ICON));
211
                delButton.setData(pref);
212
                delButton.pack();
213
                delButton.addSelectionListener(new SelectionAdapter(){
214
                    @Override
215
                    public void widgetSelected(SelectionEvent e){
216
                        Button thisButton= (Button) e.widget;
217
                        CdmPreference preference=(CdmPreference)thisButton.getData();
218
                        int index = prefStatus.indexOf(preference);
219
                        table.getItem(index).setText("Deleted");
220
                        //prefStatus.remove(preference);
221
                        prefStatusToDelete.add(preference);
222
                        setApply(true);
223

    
224
                    }
225
                  });
226
                TableEditor editor = new TableEditor(table);
227
                editor.horizontalAlignment = SWT.LEFT;
228
                editor.grabHorizontal = true;
229
                editor.setEditor(delButton, item, col);
230

    
231
            }
232
        }
233
    }
234

    
235
    @Override
236
    public void getValues() {
237
        isAdminPreference = false;
238
        CdmPreferenceCache cache = CdmPreferenceCache.instance();
239
        cache.getAllTaxEditorDBPreferences();
240
        prefAreaVoc = PreferencesUtil.getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies);
241
        if (prefAreaVoc == null){
242
            prefAreaVoc = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionAreaVocabularies, PreferencePredicate.AvailableDistributionAreaVocabularies.getDefaultValue() != null ?  PreferencePredicate.AvailableDistributionAreaVocabularies.getDefaultValue().toString(): null);
243
        }
244

    
245

    
246
        prefStatus = cache.getAllForPredicate(PreferencePredicate.AvailableDistributionStatus.getKey());
247
        if (prefStatus == null){
248
            prefStatus = new ArrayList();
249
            CdmPreference statusPref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, PreferencePredicate.AvailableDistributionStatus.getDefaultValue() != null ?  PreferencePredicate.AvailableDistributionStatus.getDefaultValue().toString(): null);
250
            prefStatus.add(statusPref);
251
        }
252
        createNamedAreaUUIDMap();
253

    
254
        commandHandlerString = "eu.etaxonomy.taxeditor.store.open.OpenDistributionEditorWizardHandler";
255
        commandHandlerStringStatus = "eu.etaxonomy.taxeditor.store.open.OpenDistributionStatusWizardHandler";
256
        setApply(true);
257
    }
258

    
259
    /**
260
     *
261
     */
262
    private void createNamedAreaUUIDMap() {
263
        List<UUID> uuids = new ArrayList();
264
        for (CdmPreference pref: prefStatus){
265
            try{
266
                String lastPart = getUUIDFromSubject(pref);
267
                UUID uuid = UUID.fromString(lastPart);
268
                uuids.add(uuid);
269
            }catch (IllegalArgumentException e){
270
                // no uuid in subject
271
            }
272

    
273
        }
274
        if (!uuids.isEmpty()){
275
            List<NamedArea> areas =CdmStore.getTermManager().getTerms(uuids, NamedArea.class);
276
            for (NamedArea area: areas){
277
                namedAreaUUIDMap.put(area.getUuid(), area);
278
            }
279
        }
280

    
281
    }
282

    
283
    public String getUUIDFromSubject(CdmPreference pref) {
284
        String lastPart = pref.getSubject().getLastPart();
285
        lastPart = lastPart.replace("NamedArea[", "");
286
        lastPart = lastPart.replace("]", "");
287
        return lastPart;
288
    }
289

    
290
    @Override
291
    protected void performDefaults() {
292
        if (!isAdminPreference){
293
            if (!prefAreaVoc.isAllowOverride()) {
294
                button_openSelectAreaVocabularies.setButtonEnabled(false);
295
            }
296

    
297
        }
298
        prefStatus = null;
299
        prefAreaVoc = null;
300
        setApply(true);
301
        refresh();
302
    }
303

    
304
    @Override
305
    public boolean performOk(){
306
        if (!isApply()){
307
            return true;
308
        }
309

    
310
        if (prefStatus == null){
311
            List<CdmPreference> prefsToDelete =PreferencesUtil.getPreference(PreferencePredicate.AvailableDistributionStatus);
312
            PreferencesUtil.removeFromDB(prefsToDelete);
313
        }
314
        if (prefAreaVoc == null){
315
            List<CdmPreference> prefsToDelete =PreferencesUtil.getPreference(PreferencePredicate.AvailableDistributionAreaVocabularies);
316
            PreferencesUtil.removeFromDB(prefsToDelete);
317
        }
318
        List<CdmPreference> toDelete = new ArrayList<>();
319
        for (CdmPreference pref:prefStatusToDelete){
320
            CdmPreference prefToDelete = CdmPreference.NewInstance(pref.getKey(), null);
321
            toDelete.add(prefToDelete);
322
        }
323
        prefStatus.addAll(toDelete);
324
        PreferencesUtil.setPreferencesToDB(prefStatus);
325

    
326

    
327
        return true;
328
    }
329

    
330

    
331
    @Inject
332
    @Optional
333
    public void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DATASOURCE)boolean refresh){
334
        if(refresh){
335
            refresh();
336
        }
337
    }
338

    
339
    @Override
340
    public void propertyChange(PropertyChangeEvent event) {
341

    
342
        if (event != null
343
                && PreferencesUtil.PREFERRED_TERMS_CHANGE.equals(event
344
                        .getProperty())) {
345
            refresh();
346
        }
347
    }
348

    
349
    /**
350
     *
351
     */
352
    private void refresh() {
353
        getValues();
354
        table.removeAll();
355
        Iterator<CdmPreference> prefIterator = prefStatus.iterator();
356
        CdmPreference pref;
357
        while (prefIterator.hasNext()){
358
            pref = prefIterator.next();
359
            createTableRow(pref);
360

    
361
        }
362
        table.redraw();
363
        table.pack();
364

    
365
    }
366
}
(11-11/51)