2 * Copyright (C) 2019 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
9 package eu
.etaxonomy
.taxeditor
.preference
;
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
;
17 import org
.apache
.commons
.lang3
.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
;
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
.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
;
53 abstract public class AbstractGeneralTermPreference
<T
extends AbstractTermDto
> extends CdmPreferencePage
implements ISelectionChangedListener
, SelectionListener
{
55 protected CheckBoxTreeComposite treeComposite
;
56 protected List
<TermVocabularyDto
> vocabularies
= new ArrayList
<>();
57 protected Combo useLocalOrAdmin
;
59 protected boolean isOverride
;
60 protected boolean allowOverride
;
61 protected CdmPreference pref
;
62 protected IPreferencePredicate predicate
;
65 public AbstractGeneralTermPreference(){
73 public AbstractGeneralTermPreference(String title
) {
77 public boolean isLocalPref() {
78 return !isAdminPreference
;
82 protected TermType type
;
84 public List
<TermVocabularyDto
> getVocabularies() {
88 public void setVocabularies(List
<TermVocabularyDto
> vocabularies
) {
89 this.vocabularies
= vocabularies
;
92 public IPreferencePredicate
getPredicate() {
96 public void setPredicate(PreferencePredicate predicate
) {
97 this.predicate
= predicate
;
100 public CheckBoxTreeComposite
getTreeComposite() {
101 return treeComposite
;
108 protected Control
createContents(Composite parent
) {
109 Composite container
= new Composite(parent
, SWT
.NULL
);
110 getPreferenceValues();
111 if (isLocalPref() && !allowOverride
){
112 final CLabel description
= new CLabel(parent
, SWT
.NULL
);
113 description
.setText(Messages
.NameDetailsViewConfiguration_description_not_available
);
114 this.setDefaultButtonActivated(false);
118 final GridLayout gridLayout
= new GridLayout();
119 gridLayout
.numColumns
= 2;
120 container
.setLayout(gridLayout
);
121 parent
.setLayout(new GridLayout());
122 useLocalOrAdmin
= new Combo(parent
, SWT
.BORDER
| SWT
.READ_ONLY
);
123 if (!isAdminPreference
){
124 useLocalOrAdmin
.add(LocalOrDefaultEnum
.Default
.getLabel(), 0);
125 useLocalOrAdmin
.add(LocalOrDefaultEnum
.Local
.getLabel(), 1);
128 useLocalOrAdmin
.add(LocalOrDefaultEnum
.AllowOverride
.getLabel(), 0);
129 useLocalOrAdmin
.add(LocalOrDefaultEnum
.Database
.getLabel(), 1);
133 treeComposite
= new CheckBoxTreeComposite(container
, new TermDtoContentProvider(), new TermDtoLabelProvider(), SWT
.SCROLL_PAGE
);
134 treeComposite
.getViewer().setComparator(new DefinedTermSorter());
135 rememberCheckedValues(getCheckedValuesFromPreferences());
139 useLocalOrAdmin
.select(1);
141 useLocalOrAdmin
.select(0);
142 if (treeComposite
.getViewer().getTree() != null && treeComposite
.getViewer().getTree().getTopItem() != null) {
143 treeComposite
.getViewer().getTree().setSelection(treeComposite
.getViewer().getTree().getTopItem());
145 treeComposite
.setEnabled(false);
147 //treeComposite.getViewer().getTree().getVerticalBar().setEnabled(true);
151 useLocalOrAdmin
.select(0);
153 useLocalOrAdmin
.select(1);
156 useLocalOrAdmin
.addSelectionListener(this);
158 GridData data
= new GridData(SWT
.FILL
, SWT
.FILL
, true, true, 1, 1);
159 data
.heightHint
= 300;
160 treeComposite
.setLayoutData(data
);
161 treeComposite
.getViewer().addSelectionChangedListener(this);
167 public String
getCheckedValuesFromPreferences(){
169 if (!isAdminPreference
&& isOverride
){
170 values
= PreferencesUtil
.getStringValue(predicate
.getKey(), true);
172 values
= pref
!= null ?pref
.getValue(): null;
177 protected void rememberCheckedValues(String checkedValues
) {
178 initialiseVocabularies();
179 treeComposite
.getViewer().getTree().deselectAll();
180 treeComposite
.getViewer().refresh();
181 treeComposite
.getViewer().setInput(getVocabularies());
182 Object o
=treeComposite
.getViewer().getInput();
185 if (checkedValues
!= null && checkedValues
!= "") { //$NON-NLS-1$
186 String
[] listChecked
= checkedValues
.split(";"); //$NON-NLS-1$
187 String
[] listCheckedComma
= checkedValues
.split(","); //$NON-NLS-1$
188 List
<String
> checked
= new ArrayList
<>();
189 if (listChecked
!= null ){
190 checked
= Arrays
.asList(listChecked
);
192 if (listCheckedComma
!= null && checkedValues
.contains(",")){ //$NON-NLS-1$
193 checked
= Arrays
.asList(listCheckedComma
);
195 List
<T
> termsFromStringValues
= getTermsFromStringValues(checked
);
196 treeComposite
.setCheckedElements(termsFromStringValues
.toArray());
199 List
<T
> termsFromStringValues
= getTermsFromStringValues(new ArrayList
<String
>());
200 treeComposite
.setCheckedElements(termsFromStringValues
.toArray());
201 treeComposite
.getViewer().refresh();
202 treeComposite
.redraw();
207 protected abstract List
<T
> getTermsFromStringValues(List
<String
> listValue
);
209 protected void initialiseVocabularies() {
210 if (getVocabularies() != null) {
211 getVocabularies().clear();
213 List
<TermVocabularyDto
> vocs
= new ArrayList
<>();
214 vocs
= CdmStore
.getService(IVocabularyService
.class).findVocabularyDtoByTermType(type
);
216 setVocabularies(vocs
);
219 protected void getPreferenceValues(){
220 pref
= PreferencesUtil
.getPreferenceFromDB(predicate
);
221 this.allowOverride
= pref
!= null?pref
.isAllowOverride():true;
222 this.isOverride
= PreferencesUtil
.getOverrideForPreference(predicate
.getKey());
224 pref
= CdmPreference
.NewTaxEditorInstance(predicate
, null);
232 public void selectionChanged(SelectionChangedEvent event
) {
240 public void widgetSelected(SelectionEvent e
) {
241 if (e
.getSource().equals(useLocalOrAdmin
)){
242 if (useLocalOrAdmin
.getText().equals(LocalOrDefaultEnum
.Default
.getLabel())){
243 treeComposite
.setEnabled(false);
246 treeComposite
.setEnabled(true);
249 rememberCheckedValues(getCheckedValuesFromPreferences());
258 public void widgetDefaultSelected(SelectionEvent e
) {
259 // TODO Auto-generated method stub
264 protected void performDefaults(){
266 rememberCheckedValues("");
267 treeComposite
.setEnabled(true);
270 rememberCheckedValues(getCheckedValuesFromPreferences());
271 treeComposite
.setEnabled(false);
274 useLocalOrAdmin
.select(0);
277 super.performDefaults();
282 public boolean performOk() {
286 Object
[] checkedElements
= treeComposite
.getViewer().getCheckedElements();
287 List
<UUID
> listUIIDChecked
= new ArrayList
<>();
288 Collection
<TermDto
> preferredTermDtos
= new ArrayList
<>();
289 List
<DefinedTermBase
> preferredTerms
= new ArrayList
<>();
290 for (Object o
: checkedElements
) {
291 if(o
instanceof TermDto
){
292 TermDto termDto
= (TermDto
) o
;
293 listUIIDChecked
.add(termDto
.getUuid());
294 preferredTermDtos
.add(termDto
);
295 if (vocabularies
.size() > 1){
296 preferredTerms
.add(CdmStore
.getService(ITermService
.class).load(termDto
.getUuid()));
301 String saveCheckedElements
= StringUtils
.join(listUIIDChecked
, ";"); //$NON-NLS-1$
304 String text
= this.useLocalOrAdmin
.getText();
305 if (text
.equals(LocalOrDefaultEnum
.Database
.getLabel()) || text
.equals(LocalOrDefaultEnum
.Default
.getLabel())){
306 PreferencesUtil
.setBooleanValue(PreferencesUtil
.createOverridePreferenceString(predicate
.getKey()), false);
307 }else if (text
.equals(LocalOrDefaultEnum
.Local
.getLabel())){
308 PreferencesUtil
.setStringValue(predicate
.getKey(), saveCheckedElements
);
309 PreferencesUtil
.setBooleanValue(PreferencesUtil
.createOverridePreferenceString(predicate
.getKey()), true);
312 CdmStore
.getTermManager().setPreferredTermsByDto(preferredTermDtos
, vocabularies
.get(0));
315 CdmStore
.getTermManager().setPreferredTermsByType(preferredTermDtos
, type
);
317 PreferencesUtil
.firePreferencesChanged(this.getClass());
321 protected boolean performOkAdmin() {
322 Object
[] checkedElements
= treeComposite
.getViewer().getCheckedElements();
323 List
<UUID
> listUIIDChecked
= new ArrayList
<>();
324 List
<DefinedTermBase
> preferredTerms
= new ArrayList
<>();
325 for (Object o
: checkedElements
) {
326 if(o
instanceof TermDto
){
327 TermDto termDto
= (TermDto
) o
;
328 listUIIDChecked
.add(termDto
.getUuid());
329 preferredTerms
.add(CdmStore
.getService(ITermService
.class).load(termDto
.getUuid()));
332 String saveCheckedElements
= StringUtils
.join(listUIIDChecked
, ";"); //$NON-NLS-1$
333 if (StringUtils
.isBlank(saveCheckedElements
)){
334 saveCheckedElements
= null;
336 CdmPreference savePref
= CdmPreference
.NewTaxEditorInstance(predicate
, saveCheckedElements
);
337 String text
= this.useLocalOrAdmin
.getText();
338 if (text
.equals(LocalOrDefaultEnum
.Database
.getLabel()) ){
339 savePref
.setAllowOverride(false);
340 }else if (text
.equals(LocalOrDefaultEnum
.AllowOverride
.getLabel())){
341 savePref
.setAllowOverride(true);
344 PreferencesUtil
.setPreferenceToDB(savePref
);
345 PreferencesUtil
.updateDBPreferences();
346 PreferencesUtil
.firePreferencesChanged(this.getClass());