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.field;
35
36 import info.magnolia.cms.i18n.Messages;
37 import info.magnolia.cms.i18n.MessagesManager;
38 import info.magnolia.i18nsystem.I18nizer;
39 import info.magnolia.jcr.util.NodeTypes;
40 import info.magnolia.objectfactory.Components;
41 import info.magnolia.rendering.template.TemplateDefinition;
42 import info.magnolia.rendering.template.assignment.TemplateDefinitionAssignment;
43 import info.magnolia.ui.api.context.UiContext;
44 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
45 import info.magnolia.ui.form.field.definition.SelectFieldOptionDefinition;
46 import info.magnolia.ui.form.field.factory.SelectFieldFactory;
47 import info.magnolia.ui.vaadin.integration.jcr.JcrNewNodeAdapter;
48 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
49
50 import java.util.ArrayList;
51 import java.util.Collection;
52 import java.util.Collections;
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.apache.commons.lang3.StringUtils;
60 import org.slf4j.Logger;
61 import org.slf4j.LoggerFactory;
62
63 import com.vaadin.data.Item;
64
65
66
67
68
69
70 public class TemplateSelectorFieldFactory extends SelectFieldFactory<TemplateSelectorDefinition> {
71
72 private static final Logger log = LoggerFactory.getLogger(TemplateSelectorFieldFactory.class);
73
74 private final TemplateDefinitionAssignment templateAssignment;
75 private final I18nizer i18nizer;
76
77 @Inject
78 public TemplateSelectorFieldFactory(TemplateSelectorDefinition definition, Item relatedFieldItem, UiContext uiContext, I18NAuthoringSupport i18nAuthoringSupport, TemplateDefinitionAssignment templateDefinitionAssignment, I18nizer i18nizer) {
79 super(definition, relatedFieldItem, uiContext, i18nAuthoringSupport);
80 this.templateAssignment = templateDefinitionAssignment;
81 this.i18nizer = i18nizer;
82 }
83
84
85
86
87 @Deprecated
88 public TemplateSelectorFieldFactory(TemplateSelectorDefinition definition, Item relatedFieldItem, TemplateDefinitionAssignment templateDefinitionAssignment, I18nizer i18nizer) {
89 this(definition, relatedFieldItem, null, Components.getComponent(I18NAuthoringSupport.class), templateDefinitionAssignment, i18nizer);
90 }
91
92
93
94
95 @Deprecated
96 public TemplateSelectorFieldFactory(TemplateSelectorDefinition definition, Item relatedFieldItem, TemplateDefinitionAssignment templateDefinitionAssignment) {
97 this(definition, relatedFieldItem, null, Components.getComponent(I18NAuthoringSupport.class), templateDefinitionAssignment, Components.getComponent(I18nizer.class));
98 }
99
100
101
102
103 @Deprecated
104 public TemplateSelectorFieldFactory(TemplateSelectorDefinition definition, Item relatedFieldItem) {
105 this(definition, relatedFieldItem, null, Components.getComponent(I18NAuthoringSupport.class), Components.getComponent(TemplateDefinitionAssignment.class), Components.getComponent(I18nizer.class));
106 }
107
108
109
110
111 @Override
112 public List<SelectFieldOptionDefinition> getSelectFieldOptionDefinition() {
113 List<SelectFieldOptionDefinition> res = new ArrayList<SelectFieldOptionDefinition>();
114
115 if (item instanceof JcrNodeAdapter) {
116 Node associatedNode = ((JcrNodeAdapter) item).getJcrItem();
117
118 Collection<TemplateDefinition> templates = Collections.emptySet();
119
120 if (item instanceof JcrNewNodeAdapter) {
121
122
123 try {
124 Node tempNode = associatedNode.addNode("temp", NodeTypes.Page.NAME);
125 templates = templateAssignment.getAvailableTemplates(tempNode);
126 associatedNode.getSession().removeItem(tempNode.getPath());
127 } catch (RepositoryException e) {
128 log.error("Could not create temporary node to get available templates.", e);
129 }
130 } else {
131 templates = templateAssignment.getAvailableTemplates(associatedNode);
132 }
133
134 for (TemplateDefinition templateDefinition : templates) {
135 SelectFieldOptionDefinition option = new SelectFieldOptionDefinition();
136 option.setValue(templateDefinition.getId());
137 option.setLabel(this.getTranslatedTitle(templateDefinition));
138 res.add(option);
139 }
140 }
141 return res;
142 }
143
144 @Override
145 protected Class<?> getDefaultFieldType() {
146 return String.class;
147 }
148
149 private String getTranslatedTitle(TemplateDefinition definition) {
150 String translatedTitle = i18nizer.decorate(definition).getTitle();
151 if (isMessageKey(translatedTitle)) {
152 translatedTitle = getI18nTitle(definition);
153 }
154 if (isMessageKey(translatedTitle)) {
155 translatedTitle = definition.getId();
156 }
157 return translatedTitle;
158 }
159
160 private boolean isMessageKey(String key) {
161 return !StringUtils.endsWith(key, ".") && StringUtils.contains(key, ".") && !StringUtils.contains(key, " ");
162 }
163
164
165
166
167
168
169
170 @Deprecated
171 public static synchronized String getI18nTitle(TemplateDefinition definition) {
172 Messages messages = MessagesManager.getMessages(definition.getI18nBasename());
173
174 String templateTitle = StringUtils.isNotBlank(definition.getTitle()) ? definition.getTitle() : definition.getId();
175 return messages.getWithDefault(templateTitle, templateTitle);
176 }
177 }