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.app.ui.imageprovider;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.dam.api.AssetProviderRegistry;
38 import info.magnolia.dam.api.ItemKey;
39 import info.magnolia.dam.jcr.JcrAsset;
40 import info.magnolia.jcr.util.NodeTypes;
41 import info.magnolia.link.LinkUtil;
42 import info.magnolia.ui.imageprovider.DefaultImageProvider;
43 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
44
45 import java.util.Calendar;
46
47 import javax.inject.Inject;
48 import javax.jcr.Node;
49 import javax.jcr.RepositoryException;
50
51 import org.apache.jackrabbit.JcrConstants;
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55
56
57
58 public class DamLinkImageProvider extends DefaultImageProvider {
59
60 private static final Logger log = LoggerFactory.getLogger(DamLinkImageProvider.class);
61
62 private DamLinkImageProviderDefinition definition;
63 private ContentConnector contentConnector;
64 private AssetProviderRegistry assetProviderRegistry;
65
66 @Inject
67 public DamLinkImageProvider(DamLinkImageProviderDefinition definition, ContentConnector contentConnector, AssetProviderRegistry assetProviderRegistry) {
68 super(definition, contentConnector);
69 this.definition = definition;
70 this.contentConnector = contentConnector;
71 this.assetProviderRegistry = assetProviderRegistry;
72 }
73
74 @Override
75 protected String getGeneratorImagePath(String workspace, Node node, String defaultGenerator) {
76 String imagePath = null;
77
78 if (node != null) {
79 try {
80 JcrAsset asset = getJcrAsset(node);
81 if (asset != null) {
82 imagePath = MgnlContext.getContextPath() + "/" + definition.getImagingServletPath() +
83 "/" + defaultGenerator + "/" + asset.getAssetProvider().getWorkspaceName() +
84 "/" + asset.getNode().getNode(JcrConstants.JCR_CONTENT).getIdentifier() + "/" + asset.getFileName();
85
86 Calendar lastModified = NodeTypes.LastModified.getLastModified(node);
87 imagePath = LinkUtil.addFingerprintToLink(imagePath, lastModified);
88 }
89
90 } catch (RepositoryException e) {
91 log.warn("Could not get name or identifier from imageNode: {}", e.getMessage());
92 }
93 }
94
95 return imagePath;
96 }
97
98 @Override
99 protected Node getImageNode(Node node) throws RepositoryException {
100 JcrAsset asset = getJcrAsset(node);
101 if (asset == null) {
102 return null;
103 }
104
105 return asset.getNode().getNode(JcrConstants.JCR_CONTENT);
106 }
107
108 private JcrAsset getJcrAsset(Node node) throws RepositoryException {
109 String damLinkPropertyName = definition.getDamLinkPropertyName();
110 if (node.hasProperty(damLinkPropertyName)) {
111 String damLink = node.getProperty(damLinkPropertyName).getString();
112 ItemKey itemKey = ItemKey.from(damLink);
113 return (JcrAsset) assetProviderRegistry.getProviderById(itemKey.getProviderId()).getAsset(itemKey);
114 }
115
116 return null;
117 }
118 }