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.task.app.view.column;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37 import info.magnolia.icons.MagnoliaIcons;
38 import info.magnolia.registry.RegistrationException;
39 import info.magnolia.task.Task;
40 import info.magnolia.task.definition.registry.TaskDefinitionRegistry;
41 import info.magnolia.ui.contentapp.configuration.column.ConfiguredColumnDefinition;
42
43 import java.text.MessageFormat;
44
45 import org.apache.commons.lang3.BooleanUtils;
46 import org.apache.commons.lang3.StringUtils;
47 import org.apache.commons.text.StringEscapeUtils;
48 import org.jsoup.Jsoup;
49 import org.jsoup.safety.Whitelist;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53 import com.vaadin.data.ValueProvider;
54 import com.vaadin.ui.renderers.AbstractRenderer;
55 import com.vaadin.ui.renderers.HtmlRenderer;
56
57 import lombok.AllArgsConstructor;
58
59
60
61
62 public class TaskDescriptionColumnDefinition extends ConfiguredColumnDefinition {
63
64 private static final Logger log = LoggerFactory.getLogger(TaskDescriptionColumnDefinition.class);
65
66 @Override
67 public Class<? extends AbstractRenderer> getRenderer() {
68 return HtmlRenderer.class;
69 }
70
71 @Override
72 public Class<? extends ValueProvider> getValueProvider() {
73 return TaskTextValueProvider.class;
74 }
75
76
77
78
79 @AllArgsConstructor
80 public class TaskTextValueProvider implements ValueProvider<Task, String> {
81
82 private final TaskDefinitionRegistry taskDefinitionRegistry;
83 private final SimpleTranslator translator;
84
85 @Override
86 public String apply(Task task) {
87
88 String title = getTitle(task);
89 if (StringUtils.isNotBlank(title)) {
90
91
92 String escapedTitle = StringEscapeUtils.escapeXml11(title);
93 String comment = translator.translate("tasks.nocomment");
94 if (StringUtils.isNotEmpty(task.getComment())) {
95 comment = StringEscapeUtils.escapeXml11(task.getComment());
96 }
97
98 return "<div style='height:59px; padding-top:16px; vertical-align: middle;'>" +
99 MagnoliaIcons.WORK_ITEM.getHtml() +
100 "</div> <div style='height:59px; padding-top:16px; padding-left:20px; vertical-align: middle;'><span style='line-height:normal; padding-top:16px'>" +
101 Jsoup.clean(escapedTitle, Whitelist.simpleText()) +
102 "</span><br/><span style='font-size:12px; line-height:normal; padding-top:8px'>" +
103 Jsoup.clean(comment, Whitelist.simpleText()) + "</span></div>";
104 }
105 return "";
106 }
107
108 public String getTitle(Task task) {
109
110 String title = task.getName();
111
112 if (title == null) {
113 return null;
114 }
115
116 try {
117 title = taskDefinitionRegistry.get(task.getName()).getTitle();
118
119
120 if ("publish".equals(task.getName())) {
121 boolean isDeletion = BooleanUtils.toBooleanDefaultIfNull((Boolean) task.getContent().get("isDeletion"), false);
122 title = MessageFormat.format(title, BooleanUtils.toInteger(isDeletion));
123 }
124 } catch (RegistrationException e) {
125 log.error("Could not get task definition for {}.", task.getName(), e);
126 }
127 return title;
128 }
129 }
130 }