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.ui.contentapp.column.jcr;
35
36 import info.magnolia.icons.MagnoliaIcons;
37 import info.magnolia.jcr.util.NodeTypes;
38 import info.magnolia.jcr.util.NodeUtil;
39 import info.magnolia.jcr.util.PropertyUtil;
40 import info.magnolia.ui.contentapp.configuration.column.ColumnType;
41 import info.magnolia.ui.contentapp.configuration.column.icon.IconColumnDefinition;
42
43 import java.util.HashMap;
44 import java.util.Map;
45 import java.util.Optional;
46
47 import javax.jcr.Item;
48 import javax.jcr.Node;
49
50 import com.machinezoo.noexception.Exceptions;
51 import com.vaadin.ui.renderers.HtmlRenderer;
52
53 import lombok.Getter;
54 import lombok.Setter;
55
56
57
58
59
60
61 @ColumnType("jcrTitleColumn")
62 public class JcrTitleColumnDefinition extends IconColumnDefinition {
63
64 private static final String JCR_NAME = "jcrName";
65
66 @Setter
67 @Getter
68 private Map<String, String> nodeTypeToIcon = new HashMap<>();
69
70 public JcrTitleColumnDefinition() {
71 setName(JCR_NAME);
72 setRenderer(HtmlRenderer.class);
73 setValueProvider(JcrTitleValueProvider.class);
74 }
75
76
77
78
79 public static class JcrTitleValueProvider extends IconColumnDefinition.IconValueProvider<Item, JcrTitleColumnDefinition> {
80
81 public JcrTitleValueProvider(JcrTitleColumnDefinition definition) {
82 super(definition);
83 }
84
85 @Override
86 public String apply(Item item) {
87 return super.apply(item) + Optional.of(item)
88 .filter(Item::isNode)
89 .map(Node.class::cast)
90 .map(Exceptions.wrap().function(node ->
91 PropertyUtil.getString(node, getDefinition().getName())))
92 .orElse(Exceptions.wrap().get(item::getName));
93 }
94
95 @Override
96 protected String getIcon(Item item) {
97 return Optional.of(item)
98 .filter(Item::isNode)
99 .map(Node.class::cast)
100 .map(Exceptions.wrap().function(node ->
101 NodeUtil.hasMixin(node, NodeTypes.Deleted.NAME) ?
102 MagnoliaIcons.TRASH.getCssClass() :
103 getDefinition().getNodeTypeToIcon().get(node.getPrimaryNodeType().getName())))
104 .orElse(super.getIcon(item));
105 }
106 }
107 }