1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.templatingkit.navigation;
35
36 import java.util.List;
37
38 import javax.jcr.Node;
39 import javax.jcr.RepositoryException;
40
41
42
43
44
45
46 public class NavigationModel extends SubNavigation {
47
48 private Node selectedNode;
49 private boolean rootIsHome;
50 private Home home;
51
52 public NavigationModel(Node root, Node selectedNode, int depth, boolean allOpen, boolean rootIsHome) {
53 super(root, null, depth, allOpen);
54 this.selectedNode = selectedNode;
55 this.rootIsHome = rootIsHome;
56 if (rootIsHome) {
57 home = new Home(content, this);
58 }
59 }
60
61 @Override
62 public List<NavigationItem> getItems() throws RepositoryException {
63 final List<NavigationItem> items = super.getItems();
64 if (rootIsHome && home.isVisible()) {
65 items.add(0, home);
66 }
67 return items;
68 }
69
70 protected Node getSelectedNode() {
71 return this.selectedNode;
72 }
73
74 public NavigationItem getSelectedItem() throws RepositoryException {
75 final NavigationItem selectedItem = _getSelectedItem(getItems());
76 if (selectedItem == null && rootIsHome) {
77 return home;
78 }
79 return selectedItem;
80 }
81
82 private NavigationItem _getSelectedItem(List<NavigationItem> items) throws RepositoryException {
83 for (NavigationItem item : items) {
84 if (item.isSelected()) {
85 return item;
86 } else if (selectedNode.getPath().startsWith(item.getContent().getJCRNode().getPath())) {
87 if (item.isLeaf()) {
88
89
90 if (!(item.equals(home))) {
91 return item;
92 }
93 }
94 NavigationItem found = _getSelectedItem(item.getItems());
95 if (found != null) {
96 return found;
97 }
98 }
99 }
100 return null;
101 }
102 }