Project

General

Profile

Download (12.6 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.preference.wizard;
10

    
11
import java.util.ArrayList;
12
import java.util.List;
13
import java.util.UUID;
14

    
15
import org.apache.commons.lang3.StringUtils;
16
import org.eclipse.jface.util.IPropertyChangeListener;
17
import org.eclipse.jface.util.PropertyChangeEvent;
18
import org.eclipse.swt.SWT;
19
import org.eclipse.swt.events.SelectionAdapter;
20
import org.eclipse.swt.events.SelectionEvent;
21
import org.eclipse.swt.events.SelectionListener;
22
import org.eclipse.swt.layout.GridData;
23
import org.eclipse.swt.layout.GridLayout;
24
import org.eclipse.swt.widgets.Button;
25
import org.eclipse.swt.widgets.Composite;
26
import org.eclipse.swt.widgets.Label;
27
import org.eclipse.swt.widgets.Text;
28

    
29
import eu.etaxonomy.cdm.api.service.ITermService;
30
import eu.etaxonomy.cdm.api.service.IVocabularyService;
31
import eu.etaxonomy.cdm.model.location.NamedArea;
32
import eu.etaxonomy.cdm.model.metadata.CdmPreference;
33
import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
34
import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
35
import eu.etaxonomy.cdm.model.metadata.PreferenceResolver;
36
import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
37
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
38
import eu.etaxonomy.cdm.persistence.dto.TermDto;
39
import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
40
import eu.etaxonomy.taxeditor.l10n.Messages;
41
import eu.etaxonomy.taxeditor.model.ImageResources;
42
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
43
import eu.etaxonomy.taxeditor.preference.Resources;
44
import eu.etaxonomy.taxeditor.store.CdmStore;
45
import eu.etaxonomy.taxeditor.store.StoreUtil;
46
import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
47

    
48
/**
49
 * @author k.luther
50
 * @since 05.10.2018
51
 *
52
 */
53
public class AvailableDistributionPerAreaStatusPage extends AvailableDistributionStatusPage implements IPropertyChangeListener{
54

    
55
    List<CdmPreference> perAreaPreferences = new ArrayList();
56
    List<CdmPreference> perAreaPreferencesDeleteList = new ArrayList();
57
    List<TermVocabularyDto> vocs;
58
    NamedArea actualArea;
59
    CdmPreference actualPref;
60
    Text areaText;
61
    String namedAreaString;
62

    
63

    
64

    
65
    Button btnSelectArea;
66
    Button btnRemove;
67
    Label status;
68
    int countTerms;
69

    
70

    
71
    public AvailableDistributionPerAreaStatusPage(String pageName, List<CdmPreference> prefs, boolean localPref) {
72
        super(pageName, null, localPref);
73

    
74
        perAreaPreferences = prefs;
75
        if(PreferencesUtil.getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies) == null && PreferencesUtil.getStringValue(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey()) == null){
76
            vocs = CdmStore.getService(IVocabularyService.class).findVocabularyDtoByTermType(type);
77

    
78
        }
79
        pref = PreferencesUtil.getPreferenceFromDB(PreferencePredicate.AvailableDistributionStatus);
80
        if (pref == null){
81
            pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, null);
82
        }
83
        initialiseVocabularies();
84
        countTerms = CdmStore.getTermManager().getPreferredTerms(type).size();
85
    }
86

    
87

    
88

    
89
    @Override
90
    public void createControl(Composite parent) {
91
        setTitle(Messages.AvailableDistributionStatusPage_PAGE_TITLE);
92
        setDescription(Messages.AvailableDistributionStatusPage_PAGE_DESCRIPTION);
93
        createAreaSelectionCombo(parent);
94

    
95
        super.createControl(parent);
96

    
97

    
98

    
99
    }
100
    @Override
101
    protected Button createAllowOverrideButton(Composite parent) {
102
        Button activateCheckButton = new Button(parent, SWT.CHECK);
103
        if (localPref){
104
            activateCheckButton.setText("Override");
105
            activateCheckButton.setSelection(override);
106
        }else{
107
            activateCheckButton.setText("Allow Override");
108
            activateCheckButton.setSelection(override);
109
        }
110

    
111
        activateCheckButton.addSelectionListener(new SelectionAdapter(){
112
            @Override
113
            public void widgetSelected(SelectionEvent e) {
114
                if (actualPref != null){
115
                   actualPref.setAllowOverride(activateCheckButton.getSelection());
116
                }
117
                override = activateCheckButton.getSelection();
118

    
119
            }
120
        });
121

    
122
         return activateCheckButton;
123
     }
124

    
125
    protected void createAreaSelectionCombo(Composite parent) {
126

    
127
        Composite toolbar = new Composite(parent, SWT.NONE);
128
        toolbar.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
129
        GridLayout gl_toolbar = new GridLayout(4, false);
130
        gl_toolbar.horizontalSpacing = 4;
131
        gl_toolbar.marginHeight = 0;
132
        gl_toolbar.verticalSpacing = 0;
133
        toolbar.setLayout(gl_toolbar);
134

    
135
        Label areaLabel = new Label(toolbar, SWT.NONE);
136
        areaLabel.setText("Select area for area specific status");
137

    
138
        GridData textData = new GridData();
139
        textData.minimumWidth = 200;
140
        textData.widthHint = 200;
141
        areaText = new Text(toolbar,  SWT.NONE);
142
        areaText.setEditable(false);
143
        areaText.setBackground(StoreUtil
144
                .getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND));
145
        areaText.setLayoutData(textData);
146
        if (actualArea != null){
147
            areaText.setText(actualArea.getLabel());
148
            areaText.setEnabled(false);
149
        }
150
        btnSelectArea = new Button(toolbar, SWT.PUSH | SWT.FLAT );
151
        btnSelectArea.setImage(ImageResources
152
                .getImage(ImageResources.BROWSE_ICON));
153
        btnSelectArea.setToolTipText("Browse Area");
154

    
155
        btnSelectArea.addSelectionListener(new SelectionListener(){
156

    
157
            @Override
158
            public void widgetSelected(SelectionEvent e) {
159
                refreshActualPrefernce();
160

    
161
                NamedArea selection = SelectionDialogFactory.getSelectionFromDialog(NamedArea.class, getShell(), //getConversationHolder(),
162
                        actualArea, null);
163
                actualArea = selection;
164
                PrefKey key;
165
                if (actualArea != null){
166
                    areaText.setText(actualArea.getLabel());
167
                    key = newAreaSpecificStatusPreference();
168
                    actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
169
                    if (actualPref == null){
170
                        actualPref = CdmPreference.NewInstance(key, null);
171
                        perAreaPreferences.add(actualPref);
172
                    }
173
                    override = actualPref.isAllowOverride();
174
                }else{
175
                    actualPref = null;
176
                }
177

    
178
                status.setVisible(false);
179
                rememberCheckedValues(getCheckedValuesFromPreferences());
180

    
181
            }
182

    
183
            @Override
184
            public void widgetDefaultSelected(SelectionEvent e) {
185
                // TODO Auto-generated method stub
186

    
187
            }
188

    
189
        });
190
//        btnRemove = new Button(toolbar, SWT.NONE);
191
//        btnRemove.addSelectionListener(new SelectionListener(){
192
//
193
//            @Override
194
//            public void widgetSelected(SelectionEvent e) {
195
//
196
//                PrefKey key = newAreaSpecificStatusPreference();
197
//                actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
198
//                actualPref = CdmPreference.NewInstance(key, null);
199
//                if (actualPref.getKey().equals(pref.getKey())){
200
//                    pref = actualPref;
201
//                }
202
//
203
//                perAreaPreferences.add(actualPref);
204
//                if (actualArea != null){
205
//                    status.setText("Preference for area " + actualArea.getLabel() + " removed. Now the status defined for all areas are displayed");
206
//                }else{
207
//                    status.setText("Preference for all areas is removed. Now all status will be displayed");
208
//                }
209
//                status.setVisible(true);
210
//
211
//                actualArea = null;
212
//
213
//                areaText.setText("");
214
//                rememberCheckedValues(getCheckedValuesFromPreferences());
215
//
216
//            }
217
//
218
//            @Override
219
//            public void widgetDefaultSelected(SelectionEvent e) {
220
//                // TODO Auto-generated method stub
221
//
222
//            }
223
//
224
//        });
225
//        btnRemove.setImage(ImageResources.getImage(ImageResources.ACTIVE_DELETE_ICON));
226
//        btnRemove.setToolTipText("");
227
        status = new Label(toolbar, SWT.NONE);
228
        status.setVisible(false);
229
    }
230

    
231

    
232
    @Override
233
    public void propertyChange(PropertyChangeEvent event) {
234
        if(event == null){
235
            return;
236
        }
237
        Object eventSource = event.getSource();
238
        if(eventSource != this && btnSelectArea.equals(eventSource)){
239
            if (actualArea != null){
240
                PrefKey key = newAreaSpecificStatusPreference();
241
                actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
242
                areaText.setText(actualArea.getLabel());
243
                override = actualPref.isAllowOverride();
244
            }else{
245
                actualPref = null;
246
            }
247

    
248
        }
249
    }
250

    
251
    @Override
252
    protected String getCheckedValuesFromPreferences() {
253
       String checkedValues = null;
254
       if (actualArea == null){
255
           checkedValues = pref.getValue();
256
           override = pref.isAllowOverride();
257
       }else{
258
           if (actualPref == null){
259
               PrefKey key = newAreaSpecificStatusPreference();
260
               actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
261

    
262
               if (actualPref == null){
263
                   actualPref = CdmPreference.NewInstance(key, null);
264
                   checkedValues = PreferencesUtil.getStringValue(PreferencePredicate.AvailableDistributionStatus.getKey(), true);
265

    
266
               }
267
           }
268
           checkedValues = actualPref.getValue();
269
           override = actualPref.isAllowOverride();
270
       }
271

    
272
       return checkedValues;
273
    }
274

    
275
    protected void refreshActualPrefernce(){
276
        String saveCheckedElements;
277
        getViewer().expandAll();
278

    
279

    
280
        if (countTerms == getViewer().getCheckedElements().length){
281
            saveCheckedElements = null;
282
        }else{
283
            Object[] checkedElements = getViewer().getCheckedElements();
284
            List<UUID> listUIIDChecked = new ArrayList<>();
285
            List<DefinedTermBase> preferredTerms = new ArrayList<>();
286
            for (Object o : checkedElements) {
287
                 if(o instanceof TermDto){
288
                     TermDto termDto = (TermDto) o;
289
                     listUIIDChecked.add(termDto.getUuid());
290
                     preferredTerms.add(CdmStore.getService(ITermService.class).load(termDto.getUuid()));
291
                 }
292
             }
293
             saveCheckedElements = StringUtils.join(listUIIDChecked, ";"); //$NON-NLS-1$
294
             if (StringUtils.isBlank(saveCheckedElements)){
295
                 saveCheckedElements = null;
296
         }
297
        }
298
        if (actualArea == null){
299
            CdmPreference savePref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, saveCheckedElements);
300
            savePref.setAllowOverride(override);
301
            pref = savePref;
302
        }else{
303
            PrefKey key = newAreaSpecificStatusPreference();
304
            actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
305
            CdmPreference savePref = CdmPreference.NewInstance(PreferenceSubject.fromKey(key), PreferencePredicate.AvailableDistributionStatus, saveCheckedElements);
306
            if (actualPref != null){
307
               perAreaPreferences.remove(actualPref);
308
            }
309
            perAreaPreferences.add(savePref);
310
            savePref.setAllowOverride(override);
311
            actualPref = savePref;
312

    
313
        }
314
    }
315

    
316
    @Override
317
    protected  List<TermVocabularyDto> getVocabulariesFromPreference(){
318
     return null;
319
    }
320

    
321
    private PrefKey newAreaSpecificStatusPreference(){
322
        PrefKey prefKey;
323
        if (actualArea != null){
324
            prefKey  = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.ROOT+"NamedArea["+actualArea.getUuid().toString()+"]"+PreferenceSubject.SEP), PreferencePredicate.AvailableDistributionStatus);
325
        }else{
326
            prefKey = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.AvailableDistributionStatus);
327
        }
328
        return prefKey;
329
    }
330

    
331

    
332
    public void setActualPreference(CdmPreference pref){
333
        this.actualPref = pref;
334
        if (actualPref != null){
335
            override = actualPref.isAllowOverride();
336
        }else{
337
            override = true;
338
        }
339
    }
340

    
341

    
342
}
(6-6/18)