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
47
48
49 public class NavigationModel extends SubNavigation {
50
51 private Node selectedNode;
52 private boolean rootIsHome;
53 private Home home;
54
55 public NavigationModel(Node root, Node selectedNode, int depth, boolean allOpen, boolean rootIsHome){
56 super(root, null, depth, allOpen);
57 this.selectedNode = selectedNode;
58 this.rootIsHome = rootIsHome;
59 if(rootIsHome){
60 home = new Home(content, this);
61 }
62 }
63
64 @Override
65 public List<NavigationItem> getItems() throws RepositoryException {
66 final List<NavigationItem> items = super.getItems();
67 if(rootIsHome && home.isVisible()){
68 items.add(0, home);
69 }
70 return items;
71 }
72
73 protected Node getSelectedNode() {
74 return this.selectedNode;
75 }
76
77 public NavigationItem getSelectedItem() throws RepositoryException{
78 final NavigationItem selectedItem = _getSelectedItem(getItems());
79 if(selectedItem == null && rootIsHome){
80 return home;
81 }
82 return selectedItem;
83 }
84
85 private NavigationItem _getSelectedItem(List<NavigationItem> items) throws RepositoryException {
86 for (NavigationItem item : items) {
87 if(item.isSelected()){
88 return item;
89 }
90 else if(selectedNode.getPath().startsWith(item.getContent().getJCRNode().getPath())){
91 if(item.isLeaf()){
92
93
94 if(!(item.equals(home))){
95 return item;
96 }
97 }
98 NavigationItem found = _getSelectedItem(item.getItems());
99 if(found != null){
100 return found;
101 }
102 }
103 }
104 return null;
105 }
106 }