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.pages.app;
35
36 import info.magnolia.cms.core.Path;
37 import info.magnolia.context.SystemContext;
38 import info.magnolia.i18nsystem.SimpleTranslator;
39 import info.magnolia.jcr.util.NodeTypes;
40 import info.magnolia.objectfactory.ComponentProvider;
41 import info.magnolia.rendering.template.TemplateAvailability;
42 import info.magnolia.rendering.template.TemplateDefinition;
43 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
44 import info.magnolia.repository.RepositoryConstants;
45 import info.magnolia.ui.api.app.AppContext;
46 import info.magnolia.ui.api.app.AppView;
47 import info.magnolia.ui.api.location.Location;
48 import info.magnolia.ui.api.overlay.AlertCallback;
49 import info.magnolia.ui.contentapp.ContentApp;
50 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
51
52 import java.util.Iterator;
53
54 import javax.inject.Inject;
55 import javax.jcr.Node;
56 import javax.jcr.RepositoryException;
57 import javax.jcr.Session;
58
59 import org.slf4j.Logger;
60 import org.slf4j.LoggerFactory;
61
62
63
64
65
66
67 public class PagesContentApp extends ContentApp {
68
69 private static final Logger log = LoggerFactory.getLogger(PagesContentApp.class);
70
71 private final TemplateDefinitionRegistry templateDefinitionRegistry;
72 private final TemplateAvailability templateAvailability;
73 private final SimpleTranslator i18n;
74 private final SystemContext systemContext;
75
76 private static final String HELP_URL = "https://documentation.magnolia-cms.com/display/DOCS54/Get+templates";
77
78 @Inject
79 public PagesContentApp(AppContext appContext, AppView view, ComponentProvider componentProvider, TemplateDefinitionRegistry templateDefinitionRegistry, TemplateAvailability templateAvailability, SimpleTranslator i18n, SystemContext systemContext) {
80 super(appContext, view, componentProvider);
81 this.templateDefinitionRegistry = templateDefinitionRegistry;
82 this.templateAvailability = templateAvailability;
83 this.i18n = i18n;
84 this.systemContext = systemContext;
85 }
86
87 @Override
88 public void start(Location location) {
89 super.start(location);
90
91
92 if (!hasAvailablePageTemplates()) {
93 final String templateAvailabilityMessage = i18n.translate("pages.noAvailableTemplatesAlert.templateAvailabilityMessage");
94 final String createTemplateLink = i18n.translate("pages.noAvailableTemplatesAlert.createTemplateLink", HELP_URL);
95 final String message = templateAvailabilityMessage + createTemplateLink;
96 getAppContext().openAlert(MessageStyleTypeEnum.INFO, i18n.translate("pages.noAvailableTemplatesAlert.title"), message, i18n.translate("button.ok"), new AlertCallback() {
97 @Override
98 public void onOk() {
99
100 }
101 });
102 }
103 }
104
105
106
107
108 protected boolean hasAvailablePageTemplates() {
109 boolean hasAvailablePageTemplates = false;
110
111 try {
112
113 final Session session = systemContext.getJCRSession(RepositoryConstants.WEBSITE);
114 final Node websiteRootNode = session.getRootNode();
115
116
117 final String tempNodeName = Path.getUniqueLabel(websiteRootNode, "tmp");
118 final Node tempNode = websiteRootNode.addNode(tempNodeName, NodeTypes.Page.NAME);
119
120
121 final Iterator<TemplateDefinition> iterator = templateDefinitionRegistry.getAllDefinitions().iterator();
122
123 while (iterator.hasNext()) {
124 final TemplateDefinition templateDefinition = iterator.next();
125 if (templateAvailability.isAvailable(tempNode, templateDefinition)) {
126 hasAvailablePageTemplates = true;
127 break;
128 }
129 }
130
131
132 session.removeItem(tempNode.getPath());
133 } catch (RepositoryException e) {
134 log.error("Failed to retrieve website workspace or create temporary node when trying to determine available page templates.", e);
135 }
136
137 return hasAvailablePageTemplates;
138 }
139
140 }