1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.exoplatform.wcm.webui.selector.page;
18
19 import java.util.ArrayList;
20 import java.util.Collection;
21 import java.util.Iterator;
22 import java.util.List;
23
24 import org.exoplatform.portal.mop.user.UserNavigation;
25 import org.exoplatform.portal.mop.user.UserNode;
26 import org.exoplatform.portal.mop.user.UserPortal;
27 import org.exoplatform.portal.webui.util.Util;
28 import org.exoplatform.services.wcm.navigation.NavigationUtils;
29 import org.exoplatform.web.application.ApplicationMessage;
30 import org.exoplatform.webui.application.WebuiRequestContext;
31 import org.exoplatform.webui.config.annotation.ComponentConfig;
32 import org.exoplatform.webui.config.annotation.ComponentConfigs;
33 import org.exoplatform.webui.config.annotation.EventConfig;
34 import org.exoplatform.webui.core.UIComponent;
35 import org.exoplatform.webui.core.UIContainer;
36 import org.exoplatform.webui.core.UIDropDownControl;
37 import org.exoplatform.webui.core.UIRightClickPopupMenu;
38 import org.exoplatform.webui.core.UITree;
39 import org.exoplatform.webui.core.model.SelectItemOption;
40 import org.exoplatform.webui.event.Event;
41 import org.exoplatform.webui.event.Event.Phase;
42 import org.exoplatform.webui.event.EventListener;
43
44
45
46
47
48
49
50
51 @ComponentConfigs({
52 @ComponentConfig(
53 template = "classpath:groovy/wcm/webui/selector/page/UIPageNodeSelector.gtmpl" ,
54 events = {
55 @EventConfig(listeners = UIPageNodeSelector.SelectNavigationActionListener.class, phase=Phase.DECODE)
56 }
57 ),
58 @ComponentConfig (
59 type = UIDropDownControl.class ,
60 id = "UIDropDown",
61 template = "classpath:groovy/wcm/webui/selector/page/UINavigationSelector.gtmpl",
62 events = {
63 @EventConfig(listeners = UIPageNodeSelector.SelectNavigationActionListener.class)
64 }
65 )
66 })
67 public class UIPageNodeSelector extends UIContainer {
68
69
70 private List<UserNavigation> navigations;
71
72
73 private SelectedNode selectedNode;
74
75
76 private SelectedNode copyNode;
77
78
79 private List<UserNavigation> deleteNavigations = new ArrayList<UserNavigation>();
80
81
82 private UserPortal userPortal;
83
84
85
86
87
88
89 public UIPageNodeSelector() throws Exception {
90 userPortal = Util.getPortalRequestContext().getUserPortalConfig().getUserPortal();
91
92 UIDropDownControl uiDopDownControl = addChild(UIDropDownControl.class, "UIDropDown", "UIDropDown");
93 uiDopDownControl.setParent(this);
94
95 UITree uiTree = addChild(UITree.class, null, "TreeNodeSelector");
96 uiTree.setIcon("DefaultPageIcon");
97 uiTree.setSelectedIcon("DefaultPageIcon");
98 uiTree.setBeanIdField("URI");
99 uiTree.setBeanChildCountField("ChildrenCount");
100 uiTree.setBeanLabelField("encodedResolvedLabel");
101 uiTree.setBeanIconField("icon");
102
103 loadNavigations();
104 }
105
106
107
108
109
110
111 public void loadNavigations() throws Exception {
112
113 navigations = new ArrayList<UserNavigation>();
114 navigations.addAll(userPortal.getNavigations());
115
116
117 if (navigations == null || navigations.size() <= 0) {
118 getChild(UIDropDownControl.class).setOptions(null);
119 getChild(UITree.class).setSibbling(null);
120 return;
121 }
122
123
124 updateNavigationSelector();
125
126
127 chooseAndShowNavigation();
128 }
129
130
131
132
133
134
135 private void chooseAndShowNavigation() throws Exception {
136
137
138 String currentPortalName = Util.getPortalRequestContext().getUserPortalConfig().getPortalName();
139 UserNavigation portalSelectedNav = NavigationUtils.getUserNavigationOfPortal( userPortal, currentPortalName);
140
141 int portalSelectedNavId = getId(portalSelectedNav);
142 if (getUserNavigation(portalSelectedNavId) != null) {
143 selectNavigation(portalSelectedNavId);
144 UserNode portalSelectedNode = Util.getUIPortal().getSelectedUserNode();
145 if (portalSelectedNode != null)
146 selectUserNodeByUri(portalSelectedNode.getURI());
147 return;
148 }
149
150
151 UserNavigation firstNav = navigations.get(0);
152 selectNavigation(getId(firstNav));
153 UserNode rootNode = userPortal.getNode(firstNav,
154 NavigationUtils.ECMS_NAVIGATION_SCOPE,
155 null, null);
156 Iterator<UserNode> childrenIter = rootNode.getChildren().iterator();
157 if (childrenIter.hasNext()) {
158 selectUserNodeByUri(childrenIter.next().getURI());
159 }
160 }
161
162
163
164 public int getId(UserNavigation nav) {
165 return (nav.getKey().getTypeName() + "::" + nav.getKey().getName()).hashCode();
166 }
167
168
169
170
171
172
173
174 private int getIndex(int navId) {
175 int index = -1;
176
177 if (navigations == null || navigations.size() <= 0) {
178 return index;
179 }
180
181 for (int i = 0; i < navigations.size(); i++) {
182 UserNavigation nav = navigations.get(i);
183 if (getId(nav) == navId) {
184 index = i;
185 break;
186 }
187 }
188
189 return index;
190 }
191
192
193
194
195 private void updateNavigationSelector() {
196
197 List<SelectItemOption<String>> options = new ArrayList<SelectItemOption<String>>();
198 for (UserNavigation navigation : navigations) {
199 options.add(new SelectItemOption<String>(navigation.getKey().getTypeName() + ":"
200 + navigation.getKey().getName(), String.valueOf(getId(navigation))));
201 }
202 UIDropDownControl uiNavigationSelector = getChild(UIDropDownControl.class);
203 uiNavigationSelector.setOptions(options);
204 if (options.size() > 0)
205 uiNavigationSelector.setValue(0);
206 }
207
208
209
210
211
212
213 public void selectNavigation(int id) throws Exception {
214 UserNavigation selectedNav = getUserNavigation(id);
215 if (selectedNav == null) {
216 return;
217 }
218
219 UserNode rootNode = userPortal.getNode(selectedNav,
220 NavigationUtils.ECMS_NAVIGATION_SCOPE,
221 null,
222 null);
223 selectedNode = new SelectedNode(selectedNav, rootNode, null, null);
224 selectUserNodeByUri(null);
225
226
227 UITree uiTree = getChild(UITree.class);
228 uiTree.setSibbling(rootNode.getChildren());
229
230
231 UIDropDownControl uiDropDownSelector = getChild(UIDropDownControl.class);
232 uiDropDownSelector.setValue(getIndex(id));
233 }
234
235
236
237
238
239
240 public void selectUserNodeByUri(String uri) throws Exception {
241 if (selectedNode == null || uri == null)
242 return;
243 UITree tree = getChild(UITree.class);
244 Collection<?> sibbling = tree.getSibbling();
245 tree.setSibbling(null);
246 tree.setParentSelected(null);
247
248 UserNavigation selectedNav = selectedNode.getUserNavigation();
249 UserNode userNode = userPortal.resolvePath(selectedNav, null, uri);
250
251 if (userNode != null) {
252 userPortal.updateNode(userNode, NavigationUtils.ECMS_NAVIGATION_SCOPE, null);
253 if (userNode != null) {
254
255 selectedNode.setNode(userNode);
256 selectedNode.setParentNode(userNode.getParent());
257
258 tree.setParentSelected(selectedNode.getParentNode());
259 tree.setSibbling(selectedNode.getParentNode().getChildren());
260 tree.setSelected(selectedNode.getNode());
261 tree.setChildren(selectedNode.getNode().getChildren());
262 return;
263 }
264 }
265
266 tree.setSelected(null);
267 tree.setChildren(null);
268 tree.setSibbling(sibbling);
269 }
270
271
272
273
274
275
276 public List<UserNavigation> getUserNavigations() {
277 if(navigations == null) navigations = new ArrayList<UserNavigation>();
278 return navigations;
279 }
280
281
282
283
284
285
286
287 public UserNavigation getUserNavigation(int id) {
288 for (UserNavigation nav : getUserNavigations()) {
289 if (getId(nav) == id)
290 return nav;
291 }
292 return null;
293 }
294
295
296
297
298 public void processRender(WebuiRequestContext context) throws Exception {
299 UIRightClickPopupMenu uiPopupMenu = getChild(UIRightClickPopupMenu.class);
300 if(uiPopupMenu != null) {
301 if(navigations == null || navigations.size() < 1) uiPopupMenu.setRendered(false) ;
302 else uiPopupMenu.setRendered(true) ;
303 }
304 super.processRender(context) ;
305 }
306
307
308
309
310
311
312 public SelectedNode getCopyNode() { return copyNode; }
313
314
315
316
317
318
319 public void setCopyNode(SelectedNode copyNode) { this.copyNode = copyNode; }
320
321
322
323
324
325
326
327
328
329
330 static public class SelectNavigationActionListener extends EventListener<UIDropDownControl> {
331
332
333
334
335 public void execute(Event<UIDropDownControl> event) throws Exception {
336 String id = event.getRequestContext().getRequestParameter(OBJECTID);
337 UIDropDownControl uiDropDownControl = event.getSource();
338 UIPageNodeSelector uiPageNodeSelector = uiDropDownControl.getAncestorOfType(UIPageNodeSelector.class);
339 event.getRequestContext().addUIComponentToUpdateByAjax(uiPageNodeSelector.getParent()) ;
340 if(id != null) uiPageNodeSelector.selectNavigation(Integer.parseInt(id));
341 try {
342 UIPageSelector pageSelector = uiPageNodeSelector.getAncestorOfType(UIPageSelector.class);
343 UIPageSelectorPanel pageSelectorPanel = pageSelector.getChild(UIPageSelectorPanel.class);
344 pageSelectorPanel.setSelectedNode(uiPageNodeSelector.getSelectedNode().getNode());
345 pageSelectorPanel.updateGrid();
346
347 event.getRequestContext().addUIComponentToUpdateByAjax(pageSelector);
348 } catch (Exception ex) {
349 org.exoplatform.wcm.webui.Utils.createPopupMessage(uiPageNodeSelector,
350 "UIMessageBoard.msg.select-navigation",
351 null,
352 ApplicationMessage.ERROR);
353 }
354 uiPageNodeSelector.<UIComponent> getParent().broadcast(event, event.getExecutionPhase());
355
356 }
357 }
358
359
360
361
362 public static class SelectedNode {
363
364
365 private UserNavigation nav;
366
367
368 private UserNode parentNode;
369
370
371 private UserNode node;
372
373 private UserNode rootNode;
374
375
376 private boolean deleteNode = false;
377
378
379 private boolean cloneNode = false;
380
381
382
383
384
385
386
387
388 public SelectedNode(UserNavigation nav, UserNode rootNode, UserNode parentNode, UserNode node) {
389 this.nav = nav;
390 this.rootNode = rootNode;
391 this.parentNode = parentNode;
392 this.node = node;
393 }
394
395
396
397
398
399
400 public UserNavigation getUserNavigation() {
401 return nav;
402 }
403
404
405
406
407
408
409 public void setUserNavigation(UserNavigation nav) {
410 this.nav = nav;
411 }
412
413
414
415
416
417
418 public UserNode getRootNode() {
419 return rootNode;
420 }
421
422
423
424
425
426
427 public void setRootNode(UserNode rootNode) {
428 this.rootNode = rootNode;
429 }
430
431
432
433
434
435
436 public UserNode getParentNode() {
437 return parentNode;
438 }
439
440
441
442
443
444
445 public void setParentNode(UserNode parentNode) {
446 this.parentNode = parentNode;
447 }
448
449
450
451
452
453
454 public UserNode getNode() {
455 return node;
456 }
457
458
459
460
461
462
463 public void setNode(UserNode node) {
464 this.node = node;
465 }
466
467
468
469
470
471
472 public boolean isDeleteNode() {
473 return deleteNode;
474 }
475
476
477
478
479
480
481 public void setDeleteNode(boolean deleteNode) {
482 this.deleteNode = deleteNode;
483 }
484
485
486
487
488
489
490 public boolean isCloneNode() {
491 return cloneNode;
492 }
493
494
495
496
497
498
499 public void setCloneNode(boolean b) {
500 cloneNode = b;
501 }
502 }
503
504
505
506
507
508
509 public SelectedNode getSelectedNode() {
510 return selectedNode;
511 }
512
513
514
515
516
517
518 public UserNavigation getSelectedNavigation() {
519 return selectedNode == null ? null : selectedNode.getUserNavigation();
520 }
521
522
523
524
525
526
527 public UserNode getRootNodeOfSelectedNav() {
528 return selectedNode == null ? null : selectedNode.getRootNode();
529 }
530
531
532
533
534
535
536 public UserNode getSelectedUserNode() {
537 return selectedNode == null ? null : selectedNode.getNode();
538 }
539
540
541
542
543
544
545 public String getUpLevelUri() {
546 return selectedNode.getParentNode().getURI();
547 }
548
549
550
551
552
553
554 public List<UserNavigation> getDeleteNavigations() {
555 return deleteNavigations;
556 }
557 }