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.templating.imaging.variation;
35
36 import info.magnolia.cms.beans.runtime.FileProperties;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.imaging.ParameterProvider;
39 import info.magnolia.imaging.operations.ImageOperation;
40 import info.magnolia.imaging.variation.DefaultVariation;
41 import info.magnolia.jcr.util.PropertyUtil;
42 import info.magnolia.module.site.SiteManager;
43 import info.magnolia.templating.imaging.ThemeAwareImageGenerator;
44
45 import java.net.URI;
46 import java.net.URISyntaxException;
47
48 import javax.inject.Inject;
49 import javax.jcr.Node;
50 import javax.jcr.Property;
51 import javax.jcr.RepositoryException;
52
53 import org.apache.commons.lang3.StringUtils;
54 import org.slf4j.Logger;
55 import org.slf4j.LoggerFactory;
56
57
58
59
60
61
62 public class ImageOperationProvidingVariation extends DefaultVariation {
63
64 private static final Logger log = LoggerFactory.getLogger(ImageOperationProvidingVariation.class);
65
66 private String generatorName;
67 private ImageOperation<ParameterProvider<Node>> imageOperation;
68
69 private final SiteManager siteManager;
70
71 @Inject
72 public ImageOperationProvidingVariation(SiteManager siteManager) {
73 this.siteManager = siteManager;
74 setGeneratorName(ThemeAwareImageGenerator.GENERATOR_NAME);
75 }
76
77 public ImageOperation<ParameterProvider<Node>> getImageOperation() {
78 return this.imageOperation;
79 }
80
81 public void setImageOperation(ImageOperation<ParameterProvider<Node>> imageOperation) {
82 this.imageOperation = imageOperation;
83 }
84
85 public String getGeneratorName() {
86 return generatorName;
87 }
88
89 public void setGeneratorName(String generatorName) {
90 this.generatorName = generatorName;
91 }
92
93 @Override
94 public String createLink(Property binaryProperty) {
95 String fileName = null;
96
97 try {
98 final String workspaceName = binaryProperty.getSession().getWorkspace().getName();
99 final Node parent = binaryProperty.getParent();
100 final String path = parent.getPath();
101 final String themeName = siteManager.getAssignedSite(parent).getTheme().getName();
102
103 String extension = PropertyUtil.getString(parent, FileProperties.EXTENSION);
104 extension = StringUtils.isNotEmpty(extension) ? "." + extension : StringUtils.EMPTY;
105
106 fileName = PropertyUtil.getString(parent, FileProperties.PROPERTY_FILENAME);
107 if (StringUtils.isNotEmpty(fileName) && !fileName.endsWith(extension)) {
108 fileName += extension;
109 }
110 fileName = new URI(null, null, fileName, null).toASCIIString();
111
112 return MgnlContext.getContextPath() + "/.imaging/" + getGeneratorName() + "/" + themeName + "/" + getName() + "/" + workspaceName + path + "/" + fileName;
113 } catch (RepositoryException e) {
114 log.warn("Could not create link for property [{}].", binaryProperty, e);
115 } catch (URISyntaxException e) {
116 log.warn("Could not create link for image due to illegal property file name [{}].", fileName, e);
117 }
118
119 return null;
120 }
121
122 }