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 public static final double MAX_TASK_DESC_WIDTH = 300.0;
66
67 @Override
68 public Class<? extends AbstractRenderer> getRenderer() {
69 return HtmlRenderer.class;
70 }
71
72 @Override
73 public Class<? extends ValueProvider> getValueProvider() {
74 return TaskTextValueProvider.class;
75 }
76
77 @Override
78 public Double getLargeContentColumnWidth() {
79 return MAX_TASK_DESC_WIDTH;
80 }
81
82
83
84
85 @AllArgsConstructor
86 public class TaskTextValueProvider implements ValueProvider<Task, String> {
87
88 private final TaskDefinitionRegistry taskDefinitionRegistry;
89 private final SimpleTranslator translator;
90
91 @Override
92 public String apply(Task task) {
93
94 String title = getTitle(task);
95 if (StringUtils.isNotBlank(title)) {
96
97
98 String escapedTitle = StringEscapeUtils.escapeXml11(title);
99 String comment = translator.translate("tasks.nocomment");
100 if (StringUtils.isNotEmpty(task.getComment())) {
101 comment = StringEscapeUtils.escapeXml11(task.getComment());
102 }
103
104 return "<div style='height:35px; padding-top:10px; vertical-align: middle'>" + MagnoliaIcons.WORK_ITEM.getHtml() +
105 "</div>" +
106 "<div style='padding-left:20px; vertical-align: middle; overflow: hidden;'>" +
107 "<div style='line-height:normal; overflow: hidden; text-overflow: ellipsis;'>" + Jsoup.clean(escapedTitle, Whitelist.simpleText()) + "</div>" +
108 "<div style='font-size:12px; line-height:normal; overflow: hidden; text-overflow: ellipsis;'>" + Jsoup.clean(comment, Whitelist.simpleText()) + "</div>" +
109 "</div>";
110 }
111 return "";
112 }
113
114 public String getTitle(Task task) {
115
116 String title = task.getName();
117
118 if (title == null) {
119 return null;
120 }
121
122 try {
123 title = taskDefinitionRegistry.get(task.getName()).getTitle();
124
125
126 if ("publish".equals(task.getName())) {
127 boolean isDeletion = BooleanUtils.toBooleanDefaultIfNull((Boolean) task.getContent().get("isDeletion"), false);
128 title = MessageFormat.format(title, BooleanUtils.toInteger(isDeletion));
129 }
130 } catch (RegistrationException e) {
131 log.error("Could not get task definition for {}.", task.getName(), e);
132 }
133 return title;
134 }
135 }
136 }