ref #7920: adaptions for changing PreferenceCache
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / wizard / AvailableDistributionPerAreaStatusPage.java
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.lang.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.SelectionEvent;
20 import org.eclipse.swt.events.SelectionListener;
21 import org.eclipse.swt.layout.GridData;
22 import org.eclipse.swt.layout.GridLayout;
23 import org.eclipse.swt.widgets.Button;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Label;
26 import org.eclipse.swt.widgets.Text;
27
28 import eu.etaxonomy.cdm.api.service.ITermService;
29 import eu.etaxonomy.cdm.api.service.IVocabularyService;
30 import eu.etaxonomy.cdm.model.location.NamedArea;
31 import eu.etaxonomy.cdm.model.metadata.CdmPreference;
32 import eu.etaxonomy.cdm.model.metadata.CdmPreference.PrefKey;
33 import eu.etaxonomy.cdm.model.metadata.PreferencePredicate;
34 import eu.etaxonomy.cdm.model.metadata.PreferenceResolver;
35 import eu.etaxonomy.cdm.model.metadata.PreferenceSubject;
36 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
37 import eu.etaxonomy.cdm.persistence.dto.TermDto;
38 import eu.etaxonomy.cdm.persistence.dto.TermVocabularyDto;
39 import eu.etaxonomy.taxeditor.l10n.Messages;
40 import eu.etaxonomy.taxeditor.model.ImageResources;
41 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
42 import eu.etaxonomy.taxeditor.preference.Resources;
43 import eu.etaxonomy.taxeditor.store.CdmStore;
44 import eu.etaxonomy.taxeditor.store.StoreUtil;
45 import eu.etaxonomy.taxeditor.ui.dialog.selection.SelectionDialogFactory;
46
47 /**
48 * @author k.luther
49 * @since 05.10.2018
50 *
51 */
52 public class AvailableDistributionPerAreaStatusPage extends AvailableDistributionStatusPage implements IPropertyChangeListener{
53
54 List<CdmPreference> perAreaPreferences = new ArrayList();
55 List<TermVocabularyDto> vocs;
56 NamedArea actualArea;
57 CdmPreference actualPref;
58 Text areaText;
59 Button btnSelectArea;
60 Button btnRemove;
61 Label status;
62 int countTerms;
63
64
65 public AvailableDistributionPerAreaStatusPage(String pageName, List<CdmPreference> prefs, boolean localPref) {
66 super(pageName, null, localPref);
67
68 perAreaPreferences = prefs;
69 if(PreferencesUtil.getPreferenceFromDB(PreferencePredicate.AvailableDistributionAreaVocabularies) == null && PreferencesUtil.getStringValue(PreferencePredicate.AvailableDistributionAreaVocabularies.getKey()) == null){
70 vocs = CdmStore.getService(IVocabularyService.class).findVocabularyDtoByTermType(type);
71
72 }
73 pref = PreferencesUtil.getPreferenceFromDB(PreferencePredicate.AvailableDistributionStatus);
74 if (pref == null){
75 pref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, null);
76 }
77 initialiseVocabularies();
78 countTerms = CdmStore.getTermManager().getPreferredTerms(type).size();
79 }
80
81 @Override
82 public void createControl(Composite parent) {
83 setTitle(Messages.AvailableDistributionStatusPage_PAGE_TITLE);
84 setDescription(Messages.AvailableDistributionStatusPage_PAGE_DESCRIPTION);
85 createAreaSelectionCombo(parent);
86
87 super.createControl(parent);
88
89 }
90
91
92 protected void createAreaSelectionCombo(Composite parent) {
93
94 Composite toolbar = new Composite(parent, SWT.NONE);
95 toolbar.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
96 GridLayout gl_toolbar = new GridLayout(4, false);
97 gl_toolbar.horizontalSpacing = 4;
98 gl_toolbar.marginHeight = 0;
99 gl_toolbar.verticalSpacing = 0;
100 toolbar.setLayout(gl_toolbar);
101
102 Label areaLabel = new Label(toolbar, SWT.NONE);
103 areaLabel.setText("Select area for area specific status");
104
105 GridData textData = new GridData();
106 textData.minimumWidth = 200;
107 textData.widthHint = 200;
108 areaText = new Text(toolbar, SWT.NONE);
109 areaText.setEditable(false);
110 areaText.setBackground(StoreUtil
111 .getColor(Resources.COLOR_TEXT_DISABLED_BACKGROUND));
112 areaText.setLayoutData(textData);
113 btnSelectArea = new Button(toolbar, SWT.PUSH | SWT.FLAT );
114 btnSelectArea.setImage(ImageResources
115 .getImage(ImageResources.BROWSE_ICON));
116 btnSelectArea.setToolTipText("Browse Area");
117
118 btnSelectArea.addSelectionListener(new SelectionListener(){
119
120 @Override
121 public void widgetSelected(SelectionEvent e) {
122 refreshActualPrefernce();
123
124 NamedArea selection = SelectionDialogFactory.getSelectionFromDialog(NamedArea.class, getShell(), //getConversationHolder(),
125 actualArea, null);
126 actualArea = selection;
127 PrefKey key;
128 if (actualArea != null){
129 areaText.setText(actualArea.getLabel());
130 key = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.NewDistributionEditorInstance()+"area/"+actualArea.getUuid().toString()), PreferencePredicate.AvailableDistributionPerAreaStatus);
131 actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
132 if (actualPref == null){
133 actualPref = CdmPreference.NewInstance(key, null);
134 perAreaPreferences.add(actualPref);
135 }
136 }else{
137 actualPref = null;
138 }
139
140 status.setVisible(false);
141 rememberCheckedValues(getCheckedValuesFromPreferences());
142
143 }
144
145 @Override
146 public void widgetDefaultSelected(SelectionEvent e) {
147 // TODO Auto-generated method stub
148
149 }
150
151 });
152 btnRemove = new Button(toolbar, SWT.NONE);
153 btnRemove.addSelectionListener(new SelectionListener(){
154
155 @Override
156 public void widgetSelected(SelectionEvent e) {
157
158
159 PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.NewDistributionEditorInstance()+"area/"+actualArea.getUuid().toString()), PreferencePredicate.AvailableDistributionPerAreaStatus);
160 actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
161 actualPref = CdmPreference.NewInstance(key, null);
162
163 perAreaPreferences.add(actualPref);
164 status.setText("Preference for area " + actualArea.getLabel() + " removed.");
165 status.setVisible(true);
166 actualArea = null;
167 areaText.setText("");
168 rememberCheckedValues(getCheckedValuesFromPreferences());
169
170 }
171
172 @Override
173 public void widgetDefaultSelected(SelectionEvent e) {
174 // TODO Auto-generated method stub
175
176 }
177
178 });
179 btnRemove.setImage(ImageResources.getImage(ImageResources.ACTIVE_DELETE_ICON));
180 btnRemove.setToolTipText("");
181 status = new Label(toolbar, SWT.NONE);
182 status.setVisible(false);
183 }
184
185
186 @Override
187 public void propertyChange(PropertyChangeEvent event) {
188 if(event == null){
189 return;
190 }
191 Object eventSource = event.getSource();
192 if(eventSource != this && btnSelectArea.equals(eventSource)){
193 if (actualArea != null){
194 PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.DISTR_EDITOR+"/area/"+actualArea.getUuid().toString()), PreferencePredicate.AvailableDistributionPerAreaStatus);
195 actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
196 areaText.setText(actualArea.getLabel());
197 }else{
198 actualPref = null;
199 }
200
201 }
202 }
203
204 @Override
205 protected String getCheckedValuesFromPreferences() {
206 String checkedValues = null;
207 if (actualArea == null){
208 checkedValues = pref.getValue();
209 }else{
210 if (actualPref == null){
211 PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.DISTR_EDITOR+"/area/"+actualArea.getUuid().toString()), PreferencePredicate.AvailableDistributionPerAreaStatus);
212 actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
213
214 if (actualPref == null){
215 actualPref = CdmPreference.NewInstance(key, null);
216 checkedValues = PreferencesUtil.getStringValue(PreferencePredicate.AvailableDistributionStatus.getKey(), true);
217
218 }
219 }
220 checkedValues = actualPref.getValue();
221 }
222
223 return checkedValues;
224 }
225
226 protected void refreshActualPrefernce(){
227 String saveCheckedElements;
228 getViewer().expandAll();
229
230
231 if (countTerms == getViewer().getCheckedElements().length){
232 saveCheckedElements = null;
233 }else{
234 Object[] checkedElements = getViewer().getCheckedElements();
235 List<UUID> listUIIDChecked = new ArrayList<>();
236 List<DefinedTermBase> preferredTerms = new ArrayList<>();
237 for (Object o : checkedElements) {
238 if(o instanceof TermDto){
239 TermDto termDto = (TermDto) o;
240 listUIIDChecked.add(termDto.getUuid());
241 preferredTerms.add(CdmStore.getService(ITermService.class).load(termDto.getUuid()));
242 }
243 }
244 saveCheckedElements = StringUtils.join(listUIIDChecked, ";"); //$NON-NLS-1$
245 if (StringUtils.isBlank(saveCheckedElements)){
246 saveCheckedElements = null;
247 }
248 }
249 if (actualArea == null){
250 CdmPreference savePref = CdmPreference.NewTaxEditorInstance(PreferencePredicate.AvailableDistributionStatus, saveCheckedElements);
251 savePref.setAllowOverride(pref.isAllowOverride());
252 pref = savePref;
253 }else{
254 PrefKey key = CdmPreference.NewKey(PreferenceSubject.NewInstance(PreferenceSubject.NewDistributionEditorInstance()+"area/"+actualArea.getUuid().toString()), PreferencePredicate.AvailableDistributionPerAreaStatus);
255 actualPref = PreferenceResolver.resolve(perAreaPreferences, key);
256 CdmPreference savePref = CdmPreference.NewInstance(PreferenceSubject.fromKey(key), PreferencePredicate.AvailableDistributionPerAreaStatus, saveCheckedElements);
257 if (actualPref != null){
258 perAreaPreferences.remove(actualPref);
259 }
260 perAreaPreferences.add(savePref);
261 actualPref = savePref;
262
263 }
264 }
265
266
267
268 @Override
269 protected List<TermVocabularyDto> getVocabulariesFromPreference(){
270 return null;
271 }
272
273 }