ref #9340, #9734, #9668: further improvements for configurable sec handling during...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / IOPreferences.java
1 /**
2 * Copyright (C) 2020 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 org.eclipse.swt.SWT;
12 import org.eclipse.swt.events.SelectionAdapter;
13 import org.eclipse.swt.events.SelectionEvent;
14 import org.eclipse.swt.events.SelectionListener;
15 import org.eclipse.swt.layout.GridData;
16 import org.eclipse.swt.widgets.Button;
17 import org.eclipse.swt.widgets.Combo;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Control;
20 import org.eclipse.swt.widgets.Label;
21
22 import eu.etaxonomy.cdm.model.metadata.CdmPreference;
23 import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
24 import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
25 import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
26 import eu.etaxonomy.taxeditor.l10n.Messages;
27 import eu.etaxonomy.taxeditor.preference.menu.CdmPreferencePage;
28
29 /**
30 * @author k.luther
31 * @since 11.02.2020
32 */
33 public class IOPreferences extends CdmPreferencePage implements SelectionListener {
34
35 protected Boolean isShowIOMenu;
36 protected CdmPreference showIOMenuPref;
37 protected boolean isAllowOverrideShowIOMenu;
38 protected boolean isOverrideShowIOMenu;
39
40 protected Combo showIOMenuButton;
41 protected Button allowOverrideShowIOMenuButton;
42
43 @Override
44 protected Control createContents(Composite parent) {
45 getValues();
46 final Composite composite = createComposite(parent);
47
48 GridData gridData = createTextGridData();
49 if (!isAdminPreference && showIOMenuPref != null && !showIOMenuPref.isAllowOverride() ) {
50 Label label = new Label(composite, SWT.NONE);
51 label.setText(
52 "The CDM settings don't allow to set the preferences for using the distribution editor locally. If you need to make local settings, please ask an administrator.");
53 this.setDefaultButtonActivated(false);
54 } else {
55 Label separator= new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
56 separator.setLayoutData(gridData);
57 separator.setVisible(false);
58 showIOMenuButton = createBooleanCombo(composite, SHOW, DO_NOT_SHOW, PreferencePredicate.ShowImportExportMenu, "Show Export/Import Menu",
59 isAdminPreference);
60
61 int index = 0;
62 for (String itemLabel : showIOMenuButton.getItems()) {
63 if (isShowIOMenu == null && itemLabel.startsWith(Messages.Preference_Use_Default)) {
64 showIOMenuButton.select(index);
65 break;
66 }
67 if (isShowIOMenu != null && itemLabel.equals(SHOW) && isShowIOMenu){
68 showIOMenuButton.select(index);
69 break;
70 }
71 if (isShowIOMenu != null && itemLabel.equals(DO_NOT_SHOW) && !isShowIOMenu){
72 showIOMenuButton.select(index);
73 break;
74 }
75 index++;
76 }
77
78 showIOMenuButton.addSelectionListener(this);
79
80
81 if (isAdminPreference){
82 allowOverrideShowIOMenuButton = createAllowOverrideButton(composite);
83 allowOverrideShowIOMenuButton.addSelectionListener(new SelectionAdapter(){
84 @Override
85 public void widgetSelected(SelectionEvent e) {
86 isAllowOverrideShowIOMenu = allowOverrideShowIOMenuButton.getSelection();
87 setApply(true);
88 }
89 });
90 allowOverrideShowIOMenuButton.setSelection(isAllowOverrideShowIOMenu);
91
92 }
93 if(!isAdminPreference){
94 if (!isAllowOverrideShowIOMenu){
95 showIOMenuButton.setEnabled(false);
96 }
97 }
98 }
99 return composite;
100
101 }
102
103 @Override
104 public boolean performOk() {
105 if (!isApply()){
106 return true;
107 }
108
109 if (isAllowOverrideShowIOMenu){
110 if (isShowIOMenu != null){
111 PreferencesUtil.setBooleanValue(PreferencePredicate.ShowImportExportMenu.getKey(), isShowIOMenu);
112 }
113 PreferencesUtil.setBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowImportExportMenu.getKey()), isOverrideShowIOMenu);
114 }
115
116
117
118 return true;
119 }
120
121 @Override
122 protected void getValues(){
123 isAdminPreference = false;
124
125 CdmPreferenceCache cache = CdmPreferenceCache.instance();
126 isOverrideShowIOMenu = PreferencesUtil.getBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowImportExportMenu.getKey()), true) != null?
127 PreferencesUtil.getBooleanValue(PreferencesUtil.prefOverrideKey(PreferencePredicate.ShowImportExportMenu.getKey()), true): false;
128 if (isOverrideShowIOMenu){
129 isShowIOMenu = PreferencesUtil.getBooleanValue(PreferencePredicate.ShowImportExportMenu.getKey(), true);
130 }
131
132
133 PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewTaxEditorInstance(), PreferencePredicate.ShowImportExportMenu);
134 showIOMenuPref = cache.findBestMatching(key);
135 if (showIOMenuPref != null){
136 isAllowOverrideShowIOMenu = showIOMenuPref.isAllowOverride();
137 }else{
138 isAllowOverrideShowIOMenu = true;
139 }
140 }
141
142
143 @Override
144 public void widgetSelected(SelectionEvent e) {
145 setApply(true);
146 if (e.getSource().equals(this.showIOMenuButton)) {
147 String text = showIOMenuButton.getText();
148 if (text.startsWith(Messages.Preference_Use_Default)){
149 isOverrideShowIOMenu = false;
150 isShowIOMenu = null;
151
152 }else if (text.equals(SHOW)){
153 isShowIOMenu = true;
154 isOverrideShowIOMenu = true;
155
156 }else{
157 isShowIOMenu = false;
158 isOverrideShowIOMenu = true;
159 }
160 }
161 }
162
163 @Override
164 protected void performDefaults() {
165 isOverrideShowIOMenu = false;
166 isShowIOMenu = null;
167 setSelections();
168 setApply(true);
169 }
170
171 protected void setSelections(){
172 if (isShowIOMenu == null || (!isOverrideShowIOMenu && !isAdminPreference)){
173 showIOMenuButton.select(0);
174 }else{
175 if (isShowIOMenu){
176 showIOMenuButton.select(1);
177 }else{
178 showIOMenuButton.select(2);
179 }
180 }
181 if (isAdminPreference){
182 allowOverrideShowIOMenuButton.setSelection(isAllowOverrideShowIOMenu);
183 }
184 }
185
186 @Override
187 public void widgetDefaultSelected(SelectionEvent e) {
188 // TODO Auto-generated method stub
189
190 }
191
192 }