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.rendering.template.assignment;
35
36 import java.util.ArrayList;
37 import java.util.Collection;
38 import java.util.Collections;
39 import javax.inject.Inject;
40 import javax.inject.Singleton;
41 import javax.jcr.Node;
42 import javax.jcr.RepositoryException;
43 import javax.jcr.Session;
44
45 import org.apache.commons.lang.StringUtils;
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48
49 import info.magnolia.cms.core.MgnlNodeType;
50 import info.magnolia.cms.security.PermissionUtil;
51 import info.magnolia.context.MgnlContext;
52 import info.magnolia.jcr.util.MetaDataUtil;
53 import info.magnolia.jcr.util.NodeUtil;
54 import info.magnolia.registry.RegistrationException;
55 import info.magnolia.rendering.template.TemplateAvailability;
56 import info.magnolia.rendering.template.TemplateDefinition;
57 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
58
59
60
61
62
63
64
65 @Singleton
66 public class MetaDataBasedTemplateDefinitionAssignment implements TemplateDefinitionAssignment {
67
68 private static final String DELETED_PAGE_TEMPLATE = "adminInterface:mgnlDeleted";
69
70 private static final Logger log = LoggerFactory.getLogger(MetaDataBasedTemplateDefinitionAssignment.class);
71
72 private TemplateDefinitionRegistry templateDefinitionRegistry;
73
74 @Inject
75 public MetaDataBasedTemplateDefinitionAssignment(TemplateDefinitionRegistry templateDefinitionRegistry) {
76 this.templateDefinitionRegistry = templateDefinitionRegistry;
77 }
78
79 @Override
80 public TemplateDefinition getAssignedTemplateDefinition(Node content) throws RegistrationException {
81 final String templateId = MetaDataUtil.getMetaData(content).getTemplate();
82 return templateDefinitionRegistry.getTemplateDefinition(templateId);
83 }
84
85
86
87
88 @Override
89 public TemplateDefinition getDefaultTemplate(Node content) {
90
91
92 TemplateDefinition parentTemplate = null;
93 try {
94 parentTemplate = getAssignedTemplateDefinition(content.getParent());
95 } catch (RepositoryException e) {
96 log.error("Failed to determine template assigned to parent of node: " + NodeUtil.getNodePathIfPossible(content), e);
97 } catch (RegistrationException e) {
98
99 }
100
101 if (parentTemplate != null && isAvailable(content, parentTemplate)) {
102 return parentTemplate;
103 }
104
105
106 Collection<TemplateDefinition> templates = getAvailableTemplates(content);
107 if (templates.isEmpty()) {
108 return null;
109 }
110
111 return templates.iterator().next();
112 }
113
114 @Override
115 public Collection<TemplateDefinition> getAvailableTemplates(Node content) {
116
117 try {
118 if (content != null && NodeUtil.hasMixin(content, MgnlNodeType.MIX_DELETED)) {
119 return Collections.singleton(templateDefinitionRegistry.getTemplateDefinition(DELETED_PAGE_TEMPLATE));
120 }
121 } catch (RepositoryException e) {
122 log.error("Failed to check node for deletion status.", e);
123 } catch (RegistrationException e) {
124 log.error("Deleted content template is not correctly registered.", e);
125 }
126
127 final ArrayList<TemplateDefinition> availableTemplateDefinitions = new ArrayList<TemplateDefinition>();
128 final Collection<TemplateDefinition> templateDefinitions = templateDefinitionRegistry.getTemplateDefinitions();
129 for (TemplateDefinition templateDefinition : templateDefinitions) {
130 if (isTemplateAvailable(content, templateDefinition)) {
131 availableTemplateDefinitions.add(templateDefinition);
132 }
133 }
134 return availableTemplateDefinitions;
135 }
136
137 protected boolean isTemplateAvailable(Node content, TemplateDefinition templateDefinition) {
138 return hasReadAccess(content) &&
139 isVisible(templateDefinition) &&
140 isPageTemplate(content, templateDefinition) &&
141 isAvailable(content, templateDefinition);
142 }
143
144 protected boolean isPageTemplate(Node content, TemplateDefinition templateDefinition) {
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175