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
.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
;
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
;
54 abstract public class GeneralTermPreference
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
;
63 protected boolean localPref
;
65 public GeneralTermPreference(){
70 public boolean isLocalPref() {
74 public void setLocalPref(boolean localPref
) {
75 this.localPref
= localPref
;
78 protected TermType type
;
80 public List
<TermVocabularyDto
> getVocabularies() {
84 public void setVocabularies(List
<TermVocabularyDto
> vocabularies
) {
85 this.vocabularies
= vocabularies
;
88 public IPreferencePredicate
getPredicate() {
92 public void setPredicate(PreferencePredicate predicate
) {
93 this.predicate
= predicate
;
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);
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
);
116 useLocalOrAdmin
.add(LocalOrDefaultEnum
.Default
.getLabel(), 0);
117 useLocalOrAdmin
.add(LocalOrDefaultEnum
.Local
.getLabel(), 1);
120 useLocalOrAdmin
.add(LocalOrDefaultEnum
.AllowOverride
.getLabel(), 0);
121 useLocalOrAdmin
.add(LocalOrDefaultEnum
.Database
.getLabel(), 1);
125 treeComposite
= new CheckBoxTreeComposite(container
, new TermDtoContentProvider(), new TermDtoLabelProvider(), SWT
.NONE
);
126 treeComposite
.getViewer().setComparator(new DefinedTermSorter());
127 rememberCheckedValues(getCheckedValuesFromPreferences());
131 useLocalOrAdmin
.select(1);
133 useLocalOrAdmin
.select(0);
134 treeComposite
.setEnabled(false);
138 useLocalOrAdmin
.select(0);
140 useLocalOrAdmin
.select(1);
143 useLocalOrAdmin
.addSelectionListener(this);
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);
154 public String
getCheckedValuesFromPreferences(){
156 if (localPref
&& isOverride
){
157 values
= PreferencesUtil
.getStringValue(predicate
.getKey(), true);
159 values
= pref
!= null ?pref
.getValue(): null;
164 protected void rememberCheckedValues(String checkedValues
) {
165 initialiseVocabularies();
166 treeComposite
.getViewer().getTree().deselectAll();
167 treeComposite
.getViewer().refresh();
168 treeComposite
.getViewer().setInput(getVocabularies());
170 if (checkedValues
!= null && checkedValues
!= "") { //$NON-NLS-1$
171 String
[] listChecked
= checkedValues
.split(";"); //$NON-NLS-1$
172 String
[] listCheckedComma
= checkedValues
.split(","); //$NON-NLS-1$
173 List
<String
> checked
= new ArrayList
<>();
174 if (listChecked
!= null ){
175 checked
= Arrays
.asList(listChecked
);
177 if (listCheckedComma
!= null && checkedValues
.contains(",")){ //$NON-NLS-1$
178 checked
= Arrays
.asList(listCheckedComma
);
180 List
<AbstractTermDto
> termsFromStringValues
= getTermsFromStringValues(checked
);
181 treeComposite
.setCheckedElements(termsFromStringValues
.toArray());
184 List
<AbstractTermDto
> termsFromStringValues
= getTermsFromStringValues(new ArrayList
<String
>());
185 treeComposite
.setCheckedElements(termsFromStringValues
.toArray());
186 treeComposite
.getViewer().refresh();
187 treeComposite
.redraw();
192 protected List
<AbstractTermDto
> getTermsFromStringValues(List
<String
> listValue
) {
193 List
<AbstractTermDto
> termlist
= new ArrayList
<>();
194 ITermService termService
= CdmStore
.getService(ITermService
.class);
195 for (String s
: listValue
) {
196 if (!StringUtils
.isBlank(s
)){
197 UUID uuid
= UUID
.fromString(s
);
199 DefinedTermBase definedTermBase
= termService
.load(uuid
);
200 if(definedTermBase
!= null){
201 termlist
.add(TermDto
.fromTerm(definedTermBase
, true));
203 IVocabularyService vocabularyService
= CdmStore
.getService(IVocabularyService
.class);
204 TermVocabulary termVocabulary
= vocabularyService
.load(uuid
);
205 if (termVocabulary
!= null){
206 termlist
.add(new TermVocabularyDto(uuid
, termVocabulary
.getRepresentations(), termVocabulary
.getTermType()));
211 if (listValue
.isEmpty()){
212 List
<DefinedTermBase
> terms
= CdmStore
.getTermManager().getAllTerms(type
, null);
213 for (DefinedTermBase term
: terms
){
214 if (!(term
instanceof eu
.etaxonomy
.cdm
.model
.description
.Character
) && term
!= null){
215 termlist
.add(TermDto
.fromTerm(term
, true));
223 protected void initialiseVocabularies() {
224 if (getVocabularies() != null) {
225 getVocabularies().clear();
227 List
<TermVocabularyDto
> vocs
= new ArrayList
<>();
228 vocs
= CdmStore
.getService(IVocabularyService
.class).findVocabularyDtoByTermType(type
);
230 setVocabularies(vocs
);
233 protected void getPreferenceValues(){
234 pref
= PreferencesUtil
.getPreferenceFromDB(predicate
);
235 this.allowOverride
= pref
!= null?pref
.isAllowOverride():true;
236 this.isOverride
= PreferencesUtil
.getBooleanValue(PreferencesUtil
.createOverridePreferenceString(predicate
.getKey()));
238 pref
= CdmPreference
.NewTaxEditorInstance(predicate
, null);
246 public void selectionChanged(SelectionChangedEvent event
) {
254 public void widgetSelected(SelectionEvent e
) {
255 if (e
.getSource().equals(useLocalOrAdmin
)){
256 if (useLocalOrAdmin
.getText().equals(LocalOrDefaultEnum
.Default
.getLabel())){
257 rememberCheckedValues(getCheckedValuesFromPreferences());
258 treeComposite
.setEnabled(false);
260 treeComposite
.setEnabled(true);
270 public void widgetDefaultSelected(SelectionEvent e
) {
271 // TODO Auto-generated method stub
276 protected void performDefaults(){
278 rememberCheckedValues("");
279 treeComposite
.setEnabled(true);
282 rememberCheckedValues(getCheckedValuesFromPreferences());
283 treeComposite
.setEnabled(false);
286 useLocalOrAdmin
.select(0);
289 super.performDefaults();
294 public boolean performOk() {
298 Object
[] checkedElements
= treeComposite
.getViewer().getCheckedElements();
299 List
<UUID
> listUIIDChecked
= new ArrayList
<>();
300 Collection
<TermDto
> preferredTermDtos
= new ArrayList
<>();
301 List
<DefinedTermBase
> preferredTerms
= new ArrayList
<>();
302 for (Object o
: checkedElements
) {
303 if(o
instanceof TermDto
){
304 TermDto termDto
= (TermDto
) o
;
305 listUIIDChecked
.add(termDto
.getUuid());
306 preferredTermDtos
.add(termDto
);
307 if (vocabularies
.size() > 1){
308 preferredTerms
.add(CdmStore
.getService(ITermService
.class).load(termDto
.getUuid()));
313 String saveCheckedElements
= StringUtils
.join(listUIIDChecked
, ";"); //$NON-NLS-1$
315 PreferencesUtil
.setStringValue(predicate
.getKey(), saveCheckedElements
);
316 String text
= this.useLocalOrAdmin
.getText();
317 if (text
.equals(LocalOrDefaultEnum
.Database
.getLabel()) || text
.equals(LocalOrDefaultEnum
.Default
.getLabel())){
318 PreferencesUtil
.setBooleanValue(PreferencesUtil
.createOverridePreferenceString(predicate
.getKey()), false);
319 }else if (text
.equals(LocalOrDefaultEnum
.Local
.getLabel())){
320 PreferencesUtil
.setBooleanValue(PreferencesUtil
.createOverridePreferenceString(predicate
.getKey()), true);
323 CdmStore
.getTermManager().setPreferredTermsByDto(preferredTermDtos
, vocabularies
.get(0));
325 CdmStore
.getTermManager().setPreferredTermsByType(preferredTermDtos
, type
);
327 PreferencesUtil
.firePreferencesChanged(this.getClass());
331 protected boolean performOkAdmin() {
332 Object
[] checkedElements
= treeComposite
.getViewer().getCheckedElements();
333 List
<UUID
> listUIIDChecked
= new ArrayList
<>();
334 List
<DefinedTermBase
> preferredTerms
= new ArrayList
<>();
335 for (Object o
: checkedElements
) {
336 if(o
instanceof TermDto
){
337 TermDto termDto
= (TermDto
) o
;
338 listUIIDChecked
.add(termDto
.getUuid());
339 preferredTerms
.add(CdmStore
.getService(ITermService
.class).load(termDto
.getUuid()));
342 String saveCheckedElements
= StringUtils
.join(listUIIDChecked
, ";"); //$NON-NLS-1$
343 if (StringUtils
.isBlank(saveCheckedElements
)){
344 saveCheckedElements
= null;
346 CdmPreference savePref
= CdmPreference
.NewTaxEditorInstance(predicate
, saveCheckedElements
);
347 String text
= this.useLocalOrAdmin
.getText();
348 if (text
.equals(LocalOrDefaultEnum
.Database
.getLabel()) ){
349 savePref
.setAllowOverride(false);
350 }else if (text
.equals(LocalOrDefaultEnum
.AllowOverride
.getLabel())){
351 savePref
.setAllowOverride(true);
354 PreferencesUtil
.setPreferenceToDB(savePref
);
355 PreferencesUtil
.updateDBPreferences();
356 PreferencesUtil
.firePreferencesChanged(this.getClass());