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