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.workbench;
35
36 import info.magnolia.jcr.util.NodeTypes;
37 import info.magnolia.jcr.util.NodeUtil;
38 import info.magnolia.objectfactory.ComponentProvider;
39 import info.magnolia.ui.vaadin.integration.contentconnector.JcrContentConnector;
40 import info.magnolia.ui.vaadin.integration.contentconnector.JcrContentConnectorDefinition;
41 import info.magnolia.ui.vaadin.integration.contentconnector.NodeTypeDefinition;
42 import info.magnolia.ui.vaadin.integration.jcr.AbstractJcrNodeAdapter;
43 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
44 import info.magnolia.ui.vaadin.integration.jcr.JcrPropertyAdapter;
45
46 import javax.inject.Inject;
47 import javax.jcr.Node;
48 import javax.jcr.RepositoryException;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53 import com.vaadin.data.Item;
54
55
56
57
58 public abstract class AbstractContentPresenter extends AbstractContentPresenterBase {
59
60 private static final Logger log = LoggerFactory.getLogger(AbstractContentPresenterBase.class);
61
62 @Inject
63 public AbstractContentPresenter(ComponentProvider componentProvider) {
64 super(componentProvider);
65 }
66
67 @Override
68 public String getIcon(Item item) {
69 try {
70 if (item instanceof JcrPropertyAdapter) {
71 return ICON_PROPERTY;
72 } else if (item instanceof JcrNodeAdapter) {
73 Node node = ((AbstractJcrNodeAdapter)item).getJcrItem();
74 if (NodeUtil.hasMixin(node, NodeTypes.Deleted.NAME)) {
75 return ICON_TRASH;
76 }
77
78 NodeTypeDefinition nodeTypeDefinition = getNodeTypeDefinitionForNode(node);
79 if (nodeTypeDefinition != null) {
80 return nodeTypeDefinition.getIcon();
81 }
82 }
83
84 } catch (RepositoryException e) {
85 log.warn("Unable to resolve icon", e);
86 }
87 return null;
88 }
89
90 private NodeTypeDefinition getNodeTypeDefinitionForNode(Node node) throws RepositoryException {
91 String primaryNodeTypeName = node.getPrimaryNodeType().getName();
92 JcrContentConnectorDefinition connectorDefinition = ((JcrContentConnector)contentConnector).getContentConnectorDefinition();
93 for (NodeTypeDefinition nodeTypeDefinition : connectorDefinition.getNodeTypes()) {
94 if (nodeTypeDefinition.isStrict()) {
95 if (primaryNodeTypeName.equals(nodeTypeDefinition.getName())) {
96 return nodeTypeDefinition;
97 }
98 } else if (NodeUtil.isNodeType(node, nodeTypeDefinition.getName())) {
99 return nodeTypeDefinition;
100 }
101 }
102 return null;
103 }
104
105 }