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.column;
35
36 import info.magnolia.config.registry.Registry;
37 import info.magnolia.i18nsystem.I18nizer;
38 import info.magnolia.objectfactory.Components;
39 import info.magnolia.pages.app.field.TemplateSelectorFieldFactory;
40 import info.magnolia.rendering.template.TemplateDefinition;
41 import info.magnolia.rendering.template.assignment.TemplateDefinitionAssignment;
42 import info.magnolia.rendering.template.registry.TemplateDefinitionRegistry;
43 import info.magnolia.ui.workbench.column.AbstractColumnFormatter;
44
45 import java.text.MessageFormat;
46
47 import javax.inject.Inject;
48 import javax.jcr.Item;
49 import javax.jcr.Node;
50 import javax.jcr.RepositoryException;
51
52 import org.apache.commons.lang3.StringUtils;
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
55
56 import com.vaadin.v7.ui.Table;
57
58
59
60
61
62
63 public class TemplateColumnFormatter extends AbstractColumnFormatter<TemplateColumnDefinition> {
64
65 private static final Logger log = LoggerFactory.getLogger(TemplateColumnFormatter.class);
66
67 private final TemplateDefinitionRegistry templateRegistry;
68 private final TemplateDefinitionAssignment templateDefinitionAssignment;
69 private final I18nizer i18nizer;
70
71 @Inject
72 public TemplateColumnFormatter(TemplateColumnDefinition definition, TemplateDefinitionRegistry templateRegistry, TemplateDefinitionAssignment templateDefinitionAssignment, I18nizer i18nizer) {
73 super(definition);
74 this.templateRegistry = templateRegistry;
75 this.templateDefinitionAssignment = templateDefinitionAssignment;
76 this.i18nizer = i18nizer;
77 }
78
79
80
81
82 @Deprecated
83 public TemplateColumnFormatter(TemplateColumnDefinition definition, TemplateDefinitionRegistry templateRegistry, TemplateDefinitionAssignment templateDefinitionAssignment) {
84 this(definition, templateRegistry, templateDefinitionAssignment, Components.getComponent(I18nizer.class));
85 }
86
87 @Override
88 public Object generateCell(Table source, Object itemId, Object columnId) {
89 final Item jcrItem = getJcrItem(source, itemId);
90
91 if (jcrItem == null || !jcrItem.isNode()) {
92 return "";
93 }
94
95 Node node = (Node) jcrItem;
96
97
98 String templateId;
99 try {
100 templateId = templateDefinitionAssignment.getAssignedTemplate(node);
101 } catch (RepositoryException e) {
102 return "Unknown";
103 }
104
105
106 TemplateDefinition template = null;
107 try {
108 template = templateRegistry.getProvider(templateId).get();
109 } catch (Registry.NoSuchDefinitionException e) {
110 log.warn("Template with id {} not found.", templateId);
111 }
112
113 if (template == null) {
114 return MessageFormat.format(definition.getUnknownTemplateLabel(), templateId);
115 } else {
116 return getI18nTitle(template);
117 }
118 }
119
120 private String getI18nTitle(TemplateDefinition definition) {
121 String translatedTitle = i18nizer.decorate(definition).getTitle();
122 if (isMessageKey(translatedTitle)) {
123 translatedTitle = TemplateSelectorFieldFactory.getI18nTitle(definition);
124 }
125 return translatedTitle;
126 }
127
128 private boolean isMessageKey(String key) {
129 return !StringUtils.endsWith(key, ".") && StringUtils.contains(key, ".") && !StringUtils.contains(key, " ");
130 }
131 }