1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.onehippo.forge.exdocpicker.impl.field;
17
18 import java.io.Serializable;
19 import java.util.Iterator;
20 import java.util.LinkedHashSet;
21 import java.util.Set;
22
23 import org.apache.commons.lang3.StringUtils;
24 import org.apache.wicket.model.IModel;
25 import org.apache.wicket.util.value.IValueMap;
26 import org.apache.wicket.util.value.ValueMap;
27 import org.hippoecm.frontend.dialog.AbstractDialog;
28 import org.hippoecm.frontend.plugin.IPluginContext;
29 import org.hippoecm.frontend.plugin.config.IPluginConfig;
30 import org.onehippo.forge.exdocpicker.api.ExternalDocumentCollection;
31 import org.onehippo.forge.exdocpicker.api.ExternalDocumentServiceContext;
32 import org.onehippo.forge.exdocpicker.api.ExternalDocumentServiceFacade;
33 import org.onehippo.forge.exdocpicker.api.PluginConstants;
34 import org.onehippo.forge.exdocpicker.impl.SimpleExternalDocumentCollection;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37
38
39
40
41 public abstract class AbstractExternalDocumentFieldBrowserDialog
42 extends AbstractDialog<ExternalDocumentCollection<Serializable>> {
43
44 private static final long serialVersionUID = 1L;
45
46 private static Logger log = LoggerFactory.getLogger(AbstractExternalDocumentFieldBrowserDialog.class);
47
48
49
50
51 private final IModel<String> titleModel;
52
53
54
55
56 private final ExternalDocumentServiceFacade<Serializable> exdocService;
57
58
59
60
61 private final Set<Serializable> pickedExtDocsInUI = new LinkedHashSet<Serializable>();
62
63
64
65
66 private ExternalDocumentCollection<Serializable> selectedExtDocsInVariantNode;
67
68
69
70
71 private ExternalDocumentCollection<Serializable> searchedExtDocs = new SimpleExternalDocumentCollection<Serializable>();
72
73
74
75
76 private int pageSize;
77
78
79
80
81 private final IValueMap dialogSize;
82
83
84
85
86 private final ExternalDocumentServiceContext extDocServiceContext;
87
88
89
90
91
92
93
94
95 public AbstractExternalDocumentFieldBrowserDialog(IModel<String> titleModel,
96 final ExternalDocumentServiceContext extDocServiceContext,
97 final ExternalDocumentServiceFacade<Serializable> exdocService,
98 IModel<ExternalDocumentCollection<Serializable>> model) {
99 super(model);
100 setOutputMarkupId(true);
101
102 this.titleModel = titleModel;
103 this.extDocServiceContext = extDocServiceContext;
104 this.exdocService = exdocService;
105
106 final String dialogSizeParam = getPluginConfig().getString(PluginConstants.PARAM_DIALOG_SIZE,
107 PluginConstants.DEFAULT_DIALOG_SIZE);
108 dialogSize = new ValueMap(dialogSizeParam).makeImmutable();
109
110 pageSize = getPluginConfig().getInt(PluginConstants.PARAM_PAGE_SIZE, PluginConstants.DEFAULT_PAGE_SIZE);
111
112 selectedExtDocsInVariantNode = getModelObject();
113
114 pickedExtDocsInUI.clear();
115
116 for (Iterator<? extends Serializable> it = selectedExtDocsInVariantNode.iterator(); it.hasNext();) {
117 pickedExtDocsInUI.add(it.next());
118 }
119
120 if (getModel().getObject() == null) {
121 setOkVisible(false);
122 setOkEnabled(false);
123 }
124
125 initializeSearchedExternalDocuments();
126 initializeDataListView();
127 }
128
129
130
131
132 @Override
133 protected void onOk() {
134 if (pickedExtDocsInUI != null) {
135 if (isSingleSelectionMode()) {
136 selectedExtDocsInVariantNode.clear();
137 Serializable curDoc = null;
138
139 for (Serializable serializable : pickedExtDocsInUI) {
140 curDoc = serializable;
141 }
142 if (curDoc != null) {
143 selectedExtDocsInVariantNode.add(curDoc);
144 }
145 exdocService.setFieldExternalDocuments(extDocServiceContext, selectedExtDocsInVariantNode);
146 } else {
147 boolean added = false;
148
149 for (Serializable doc : pickedExtDocsInUI) {
150 if (!selectedExtDocsInVariantNode.contains(doc)) {
151 selectedExtDocsInVariantNode.add(doc);
152 added = true;
153 }
154 }
155
156 if (added) {
157 exdocService.setFieldExternalDocuments(extDocServiceContext, selectedExtDocsInVariantNode);
158 }
159 }
160 }
161 }
162
163
164
165
166 @Override
167 public IModel<String> getTitle() {
168 return titleModel;
169 }
170
171
172
173
174 @Override
175 public IValueMap getProperties() {
176 return dialogSize;
177 }
178
179
180
181
182
183 protected IPluginConfig getPluginConfig() {
184 return extDocServiceContext.getPluginConfig();
185 }
186
187
188
189
190
191 protected IPluginContext getPluginContext() {
192 return extDocServiceContext.getPluginContext();
193 }
194
195
196
197
198
199 protected ExternalDocumentServiceFacade<Serializable> getExternalDocumentServiceFacade() {
200 return exdocService;
201 }
202
203
204
205
206
207 protected ExternalDocumentServiceContext getExternalDocumentServiceContext() {
208 return extDocServiceContext;
209 }
210
211
212
213
214
215 protected Set<Serializable> getPickedExternalDocuments() {
216 return pickedExtDocsInUI;
217 }
218
219
220
221
222
223 protected ExternalDocumentCollection<Serializable> getSelectedExternalDocuments() {
224 return selectedExtDocsInVariantNode;
225 }
226
227
228
229
230
231 protected ExternalDocumentCollection<Serializable> getSearchedExternalDocuments() {
232 return searchedExtDocs;
233 }
234
235
236
237
238
239 protected boolean isSingleSelectionMode() {
240 return StringUtils.equalsIgnoreCase(PluginConstants.SELECTION_MODE_SINGLE, getPluginConfig()
241 .getString(PluginConstants.PARAM_SELECTION_MODE, PluginConstants.SELECTION_MODE_MULTIPLE));
242 }
243
244
245
246
247
248 protected int getPageSize() {
249 return pageSize;
250 }
251
252
253
254
255
256 protected IValueMap getDialogSize() {
257 return dialogSize;
258 }
259
260
261
262
263
264 abstract protected void initializeSearchedExternalDocuments();
265
266
267
268
269
270 abstract protected void initializeDataListView();
271
272 }