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 java.util.List;
47
48 import javax.inject.Inject;
49 import javax.jcr.Node;
50 import javax.jcr.RepositoryException;
51
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55 import com.google.common.collect.Lists;
56 import com.vaadin.v7.data.Item;
57
58
59
60
61 public abstract class AbstractContentPresenter extends AbstractContentPresenterBase {
62
63 private static final Logger log = LoggerFactory.getLogger(AbstractContentPresenterBase.class);
64
65 @Inject
66 public AbstractContentPresenter(ComponentProvider componentProvider) {
67 super(componentProvider);
68 }
69
70 @Override
71 public String getIcon(Item item) {
72 try {
73 if (item instanceof JcrPropertyAdapter) {
74 return ICON_PROPERTY;
75 } else if (item instanceof JcrNodeAdapter) {
76 Node node = ((AbstractJcrNodeAdapter)item).getJcrItem();
77 if (NodeUtil.hasMixin(node, NodeTypes.Deleted.NAME)) {
78 return ICON_TRASH;
79 }
80
81 NodeTypeDefinition nodeTypeDefinition = getNodeTypeDefinitionForNode(node);
82 if (nodeTypeDefinition != null) {
83 return nodeTypeDefinition.getIcon();
84 }
85 }
86
87 } catch (RepositoryException e) {
88 log.warn("Unable to resolve icon", e);
89 }
90 return null;
91 }
92
93 @Override
94 public void refresh() {
95 final List<Object> newSelection = Lists.newLinkedList();
96 for (final Object id : getSelectedItemIds()) {
97 if (contentConnector.canHandleItem(id)) {
98 newSelection.add(id);
99 }
100 }
101
102 if (newSelection.size() != getSelectedItemIds().size()) {
103 select(newSelection);
104 setSelectedItemIds(newSelection);
105 }
106 }
107
108 private NodeTypeDefinition getNodeTypeDefinitionForNode(Node node) throws RepositoryException {
109 String primaryNodeTypeName = node.getPrimaryNodeType().getName();
110 JcrContentConnectorDefinition connectorDefinition = ((JcrContentConnector)contentConnector).getContentConnectorDefinition();
111 for (NodeTypeDefinition nodeTypeDefinition : connectorDefinition.getNodeTypes()) {
112 if (nodeTypeDefinition.isStrict()) {
113 if (primaryNodeTypeName.equals(nodeTypeDefinition.getName())) {
114 return nodeTypeDefinition;
115 }
116 } else if (NodeUtil.isNodeType(node, nodeTypeDefinition.getName())) {
117 return nodeTypeDefinition;
118 }
119 }
120 return null;
121 }
122
123 }