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.pages.app.column;
35
36 import info.magnolia.cms.beans.config.URI2RepositoryManager;
37 import info.magnolia.cms.beans.config.VirtualURIManager;
38 import info.magnolia.i18nsystem.SimpleTranslator;
39 import info.magnolia.objectfactory.ComponentProvider;
40 import info.magnolia.repository.RepositoryConstants;
41 import info.magnolia.ui.workbench.column.AbstractColumnFormatter;
42 import info.magnolia.ui.workbench.column.StatusColumnFormatter.ActivationStatus;
43 import info.magnolia.ui.workbench.column.definition.ColumnFormatter;
44 import info.magnolia.ui.workbench.column.definition.PropertyColumnDefinition;
45 import info.magnolia.virtualuri.VirtualUriRegistry;
46
47 import java.net.URI;
48 import java.util.Optional;
49
50 import javax.inject.Inject;
51 import javax.jcr.Item;
52 import javax.jcr.Node;
53 import javax.jcr.RepositoryException;
54
55 import org.apache.commons.lang3.StringUtils;
56 import org.slf4j.Logger;
57 import org.slf4j.LoggerFactory;
58
59 import com.vaadin.v7.ui.Table;
60
61
62
63
64 public class PageNameColumnFormatter extends AbstractColumnFormatter<PropertyColumnDefinition> {
65
66 private static Logger log = LoggerFactory.getLogger(PageNameColumnFormatter.class);
67
68 private ColumnFormatter innerFormatter;
69
70 private final URI2RepositoryManager uriManager;
71 private final VirtualUriRegistry virtualUriRegistry;
72 private final Definition definition;
73 private final SimpleTranslator i18n;
74
75 @Inject
76 public PageNameColumnFormatter(Definition definition, SimpleTranslator i18n, URI2RepositoryManager uriManager, ComponentProvider componentProvider, VirtualUriRegistry virtualUriRegistry) {
77 super(definition);
78 this.i18n = i18n;
79 this.definition = definition;
80 this.uriManager = uriManager;
81 this.virtualUriRegistry = virtualUriRegistry;
82 if (definition.getInnerFormatter() != null) {
83 this.innerFormatter = componentProvider.newInstance(definition.getInnerFormatter(), definition, i18n);
84 }
85 }
86
87
88
89
90 @Deprecated
91 public PageNameColumnFormatter(Definition definition, SimpleTranslator i18n, URI2RepositoryManager uriManager, VirtualURIManager vuriManager, ComponentProvider componentProvider) {
92 this(definition, i18n, uriManager, componentProvider, componentProvider.getComponent(VirtualUriRegistry.class));
93 }
94
95 @Override
96 public Object generateCell(Table source, Object itemId, Object columnId) {
97 String basicStatus = null;
98 final Item jcrItem = getJcrItem(source, itemId);
99 if (innerFormatter != null) {
100 basicStatus = (String) innerFormatter.generateCell(source, itemId, columnId);
101 } else if (jcrItem != null) {
102 try {
103 basicStatus = jcrItem.getName();
104 } catch (RepositoryException re) {
105 log.debug("Failed to retrieve path for item '{}':", jcrItem.toString(), re);
106 }
107 }
108
109
110 String conflictStatus = null;
111 try {
112 if (jcrItem != null && jcrItem.isNode()) {
113 Node node = (Node) jcrItem;
114 String nodePath = node.getPath();
115 if (!RepositoryConstants.WEBSITE.equals(uriManager.getRepository(nodePath))) {
116 String conflictStatusMessage = i18n.translate("pages.browser.status-column.uriConflictDetected");
117 conflictStatus = "<span style=\"float:right;\" class=\"" + ActivationStatus.NOT_ACTIVATED.getBaseStyleName()
118 + " icon-error color-red\" title=\"" + conflictStatusMessage + "\"></span>";
119 }
120 if (definition.isReportVirtualURIConflicts()) {
121 boolean conflicting = virtualUriRegistry.getAllDefinitions().stream()
122 .map(uriMapping -> uriMapping.mapUri(URI.create(nodePath)))
123 .anyMatch(Optional::isPresent);
124 if (conflicting) {
125 String conflictStatusMessage = i18n.translate("pages.browser.status-column.virtualUriConflictDetected");
126 conflictStatus = "<span style=\"float:right;\" class=\"" + ActivationStatus.MODIFIED.getBaseStyleName()
127 + " icon-warning color-yellow\" title=\"" + conflictStatusMessage + "\"></span>";
128 }
129 }
130 }
131 } catch (RepositoryException e) {
132 log.debug("Could not access the JCR item for the following node identifier " + itemId, e);
133 }
134
135 return StringUtils.defaultIfEmpty((basicStatus == null ? "" : basicStatus) + (conflictStatus == null ? "" : conflictStatus), null);
136 }
137
138
139
140
141 public static class Definition extends PropertyColumnDefinition {
142 private boolean isVirtualURICheckEnabled;
143 private Class<? extends ColumnFormatter> innerFormatter;
144
145 @Override
146 public void setFormatterClass(Class<? extends ColumnFormatter> formatterClass) {
147 this.innerFormatter = formatterClass;
148 }
149
150 public Class<? extends ColumnFormatter> getInnerFormatter() {
151 return innerFormatter;
152 }
153
154 @Override
155 public Class<? extends ColumnFormatter> getFormatterClass() {
156 return PageNameColumnFormatter.class;
157 }
158
159 public boolean isReportVirtualURIConflicts() {
160 return isVirtualURICheckEnabled;
161 }
162
163 public void setReportVirtualURIConflicts(boolean isVirtualURICheckEnabled) {
164 this.isVirtualURICheckEnabled = isVirtualURICheckEnabled;
165 }
166
167 }
168 }