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.dam.preview.imageprovider;
35
36 import info.magnolia.link.LinkUtil;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.jcr.util.NodeTypes;
39 import info.magnolia.ui.imageprovider.DefaultImageProvider;
40 import info.magnolia.ui.imageprovider.definition.ImageProviderDefinition;
41 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
42
43 import java.util.Calendar;
44
45 import javax.inject.Inject;
46 import javax.jcr.Node;
47 import javax.jcr.RepositoryException;
48
49 import org.apache.commons.lang3.StringUtils;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53
54
55
56
57
58 public class MultiGeneratorImageProvider extends DefaultImageProvider {
59
60 private static final Logger log = LoggerFactory.getLogger(MultiGeneratorImageProvider.class);
61
62 public final String ICON_CLASS_DEFAULT = "file";
63
64 private MultiGeneratorImageProviderDefinition definition;
65
66 private ContentConnector contentConnector;
67
68 @Inject
69 public MultiGeneratorImageProvider(ImageProviderDefinition definition, ContentConnector contentConnector) {
70 super(definition, contentConnector);
71 this.definition = (MultiGeneratorImageProviderDefinition) definition;
72 this.contentConnector = contentConnector;
73 }
74
75 @Override
76 protected String getGeneratorImagePath(String workspace, Node node, String defaultGenerator) {
77 String imagePath = null;
78
79 if (node != null) {
80 try {
81 Node imageNode = node.getNode(definition.getOriginalImageNodeName());
82
83 if (imageNode.hasProperty("extension")) {
84 String ext = imageNode.getProperty("extension").getString();
85 String generator = definition.getGenerators().get(ext);
86 if (StringUtils.isNotBlank(generator)) {
87 defaultGenerator += "-" + generator;
88 }
89 }
90 String imageName;
91 if (imageNode.hasProperty("fileName")) {
92 imageName = imageNode.getProperty("fileName").getString();
93 } else {
94 imageName = node.getName();
95 }
96
97 imagePath = MgnlContext.getContextPath() + "/" + definition.getImagingServletPath() + "/" + defaultGenerator + "/" + workspace + "/" + imageNode.getIdentifier() + "/" + imageName + "." + definition.getImageExtension();
98
99
100 Calendar lastModified = NodeTypes.LastModified.getLastModified(node);
101 imagePath = LinkUtil.addFingerprintToLink(imagePath, lastModified);
102
103 } catch (RepositoryException e) {
104 log.warn("Could not get name or identifier from imageNode: {}", e.getMessage());
105 }
106 }
107
108 return imagePath;
109 }
110
111 @Override
112 protected boolean isImage(String mimeType) {
113 return super.isImage(mimeType) || (mimeType != null && definition.getGenerators().keySet().contains(StringUtils.substringAfter(mimeType, "/").toLowerCase()));
114 }
115 }