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 info.magnolia.cms.security.AccessDeniedException;
37 import info.magnolia.module.templatingkit.templates.SiteNavigation;
38
39 import javax.jcr.Node;
40 import javax.jcr.PathNotFoundException;
41 import javax.jcr.RepositoryException;
42
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
45
46
47
48
49
50
51
52
53
54 public class SiteNavigationModel {
55
56 private static Logger log = LoggerFactory.getLogger(SiteNavigationModel.class);
57
58 private Node currentNode;
59
60 private Node siteRoot;
61
62 private SiteNavigation siteNavigation;
63
64 public SiteNavigationModel(SiteNavigation siteNavigation, Node siteRoot, Node currentNode) {
65 this.siteRoot = siteRoot;
66 this.currentNode = currentNode;
67 this.siteNavigation = siteNavigation;
68 }
69
70 public NavigationModel getHorizontalNavigation() throws RepositoryException{
71 if(isShowHorizontalNavigation()){
72 boolean allOpen = siteNavigation.getHorizontal().getAllOpen();
73 return new NavigationModel(siteRoot, currentNode, getHorizontalLevel(), allOpen, true);
74 }
75 return null;
76 }
77
78 public NavigationModel getVerticalNavigation() throws RepositoryException{
79 if(isShowVerticalNavigation()){
80 return _getVerticalNavigation();
81 }
82 return null;
83 }
84
85 private NavigationModel _getVerticalNavigation() throws PathNotFoundException, RepositoryException, AccessDeniedException {
86 int startLevel = siteRoot.getDepth();
87 boolean rootIsHome = true;
88 if(isShowHorizontalNavigation()){
89 startLevel += getHorizontalLevel();
90 rootIsHome = false;
91 }
92 Node root = (Node)currentNode.getAncestor(startLevel);
93 boolean allOpen = siteNavigation.getVertical().getAllOpen();
94 return new NavigationModel(root, currentNode, getVerticalLevel(), allOpen, rootIsHome);
95 }
96
97 public boolean isShowHorizontalNavigation() {
98 return siteNavigation.getHorizontal().getEnabled();
99 }
100
101 public boolean isShowVerticalNavigation() {
102 try {
103 if(isShowHorizontalNavigation() && siteRoot.getDepth() + this.getHorizontalLevel() > currentNode.getDepth() ){
104 return false;
105 }
106 final boolean enabled = siteNavigation.getVertical().getEnabled();
107 final boolean empty = _getVerticalNavigation().getItems().isEmpty();
108 return enabled && !empty;
109 }
110 catch (RepositoryException e) {
111 log.error("Can't check existence of vertical navigation",e);
112 return false;
113 }
114 }
115
116 public int getVerticalLevel() {
117 return siteNavigation.getVertical().getLevel();
118 }
119
120 public int getHorizontalLevel() {
121 return siteNavigation.getHorizontal().getLevel();
122 }
123
124 }