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.templates.areas;
35
36 import info.magnolia.cms.core.MgnlNodeType;
37 import info.magnolia.jcr.util.NodeUtil;
38 import info.magnolia.module.templatingkit.functions.STKTemplatingFunctions;
39 import info.magnolia.module.templatingkit.navigation.Link;
40 import info.magnolia.module.templatingkit.templates.AbstractSTKTemplateModel;
41 import info.magnolia.module.templatingkit.templates.pages.STKPage;
42 import info.magnolia.module.templatingkit.templates.pages.STKPageModel;
43 import info.magnolia.objectfactory.Components;
44 import info.magnolia.rendering.model.RenderingModel;
45 import info.magnolia.rendering.template.AreaDefinition;
46 import info.magnolia.templating.functions.TemplatingFunctions;
47
48 import java.util.ArrayList;
49 import java.util.Collection;
50 import java.util.Iterator;
51 import java.util.List;
52
53 import javax.inject.Inject;
54 import javax.jcr.Node;
55 import javax.jcr.RepositoryException;
56
57 import org.slf4j.Logger;
58 import org.slf4j.LoggerFactory;
59
60
61
62
63
64
65
66
67
68
69
70 public class ContentNavigationAreaModel<RD extends AreaDefinition> extends AbstractSTKTemplateModel<RD> {
71
72 private static Logger log = LoggerFactory.getLogger(ContentNavigationAreaModel.class);
73
74 @Inject
75 public ContentNavigationAreaModel(Node content, RD definition, RenderingModel<?> parent, STKTemplatingFunctions stkFunctions, TemplatingFunctions templatingFunctions) {
76 super(content, definition, parent, stkFunctions, templatingFunctions);
77 }
78
79 public Collection<Link> getContentNavigation() throws RepositoryException {
80 STKPageModel<STKPage> pageModel = (STKPageModel<STKPage>) getRoot();
81 int maxNavLevel = pageModel.getNavigation().getHorizontalLevel() + pageModel.getNavigation().getVerticalLevel() + getSiteRoot().getDepth();
82
83 Iterable<Node> children = NodeUtil.getNodes(getRoot().getNode(), MgnlNodeType.NT_PAGE);
84 Iterator<Node> childrenIterator = children.iterator();
85
86 int depth = content.getDepth();
87 if(depth >= maxNavLevel && childrenIterator.hasNext()) {
88 List<Link> items = new ArrayList<Link>();
89
90 while(childrenIterator.hasNext()) {
91 Node current = childrenIterator.next();
92 items.add(Components.newInstance(Link.class, current));
93 }
94 return items;
95 }
96
97 return null;
98 }
99
100 }