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.pages;
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.navigation.SiteNavigationModel;
41 import info.magnolia.module.templatingkit.templates.AbstractSTKTemplateModel;
42 import info.magnolia.module.templatingkit.templates.category.TemplateCategory;
43 import info.magnolia.module.templatingkit.templates.category.TemplateCategoryUtil;
44 import info.magnolia.module.templatingkit.templates.components.ImageModel;
45 import info.magnolia.module.templatingkit.templates.components.TextImageModel;
46 import info.magnolia.objectfactory.Components;
47 import info.magnolia.rendering.model.RenderingModel;
48 import info.magnolia.templating.functions.TemplatingFunctions;
49
50 import java.util.ArrayList;
51 import java.util.Collection;
52 import java.util.Iterator;
53 import java.util.List;
54
55 import javax.inject.Inject;
56 import javax.jcr.Node;
57 import javax.jcr.RepositoryException;
58
59 import org.slf4j.Logger;
60 import org.slf4j.LoggerFactory;
61
62
63
64
65
66
67
68
69
70
71 public class STKPageModel<RD extends STKPage> extends AbstractSTKTemplateModel<RD> {
72
73 private static Logger log = LoggerFactory.getLogger(STKPageModel.class);
74
75 protected static final String LINK_PROP_NAME = "link";
76 protected static final String LINK_TITLE_PROP_NAME = "linkTitle";
77
78 @Inject
79 public STKPageModel(Node content, RD definition, RenderingModel<?> parent, STKTemplatingFunctions stkFunctions, TemplatingFunctions templatingFunctions) {
80 super(content, definition, parent, stkFunctions, templatingFunctions);
81 }
82
83 public String getBodyClass() {
84 return stkFunctions.theme(getSite()).getBodyClassResolver().resolveBodyClass(this);
85 }
86
87 public SiteNavigationModel getNavigation() {
88 return new SiteNavigationModel(getDefinition().getNavigation(), getSiteRoot(), content);
89 }
90
91 public String getLogoImageLink() {
92 final Node root = getSiteRoot();
93 return stkFunctions.getAssetLink(root, "logoImg");
94 }
95
96 public String getPrintLogoImageLink() {
97 final Node root = getSiteRoot();
98 return stkFunctions.getAssetLink(root, "printLogoImg");
99 }
100
101 protected Node resolveSectionPage() throws RepositoryException {
102 return stkFunctions
103 .wrap(TemplateCategoryUtil.findParentWithTemplateCategory(content, TemplateCategory.SECTION));
104 }
105
106
107
108 public Collection<Link> getContentNavigation() throws RepositoryException {
109 int maxNavLevel =
110 this.getNavigation().getHorizontalLevel() + this.getNavigation().getVerticalLevel()
111 + getSiteRoot().getDepth();
112
113 Iterable<Node> children = NodeUtil.getNodes(content, MgnlNodeType.NT_PAGE);
114 Iterator<Node> childrenIterator = children.iterator();
115
116 if (content.getDepth() >= maxNavLevel && childrenIterator.hasNext()) {
117 List<Link> items = new ArrayList<Link>();
118
119 while (childrenIterator.hasNext()) {
120 Node current = childrenIterator.next();
121 items.add(Components.newInstance(Link.class, current));
122 }
123 return items;
124 }
125
126 return null;
127 }
128
129
130
131
132 public List<?> getCategories() {
133 return stkFunctions.getCategories(this.content);
134 }
135
136
137
138
139 public String getCategoryLink(String categoryName) {
140 return stkFunctions.getCategoryLink(this.content, categoryName);
141 }
142
143
144
145
146 public ImageModel<?> getImageModel() {
147
148 return Components.newInstance(TextImageModel.class, content, definition, this);
149 }
150
151 }