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.imaging;
35
36 import java.io.IOException;
37
38 import javax.inject.Inject;
39 import javax.inject.Provider;
40 import javax.jcr.LoginException;
41 import javax.jcr.RepositoryException;
42 import javax.jcr.Session;
43
44 import info.magnolia.context.SystemContext;
45 import info.magnolia.imaging.caching.CachingImageStreamer;
46 import info.magnolia.imaging.caching.CachingStrategy;
47 import info.magnolia.objectfactory.annotation.LazySingleton;
48
49
50
51
52
53
54 @LazySingleton
55 public class Imaging {
56 private final ImagingModule config;
57
58 private final Provider<SystemContext> contextProvider;
59
60 @Inject
61 public Imaging(ImagingModule config, Provider<SystemContext> contextProvider) {
62 this.config = config;
63 this.contextProvider = contextProvider;
64 }
65
66 public <ENV, PT> void generate(String generatorName, ENV input, ImageResponse imageResponse) throws IOException, ImagingException {
67 final ImageGenerator<ParameterProvider<PT>> generator = getGenerator(generatorName);
68 if (generator == null) {
69 throw new IllegalArgumentException("No ImageGenerator with name " + generatorName);
70 }
71
72 final ParameterProviderFactory<ENV, PT> parameterProviderFactory = generator.getParameterProviderFactory();
73 final ParameterProvider<PT> p = parameterProviderFactory.newParameterProviderFor(input);
74
75 final ImageStreamer<PT> streamer = getStreamer(parameterProviderFactory);
76 streamer.serveImage(generator, p, imageResponse);
77 }
78
79 protected ImageGenerator getGenerator(String generatorName) {
80 return config.getGenerators().get(generatorName);
81 }
82
83 protected <E, PT> ImageStreamer<PT> getStreamer(ParameterProviderFactory<E, PT> parameterProviderFactory) {
84 final DefaultImageStreamer<PT> newDefaultImageStreamer = new DefaultImageStreamer<PT>();
85 if (!config.isStoreGeneratedImages()) {
86 return newDefaultImageStreamer;
87 } else {
88 Session session;
89 try {
90 session = contextProvider.get().getJCRSession(ImagingModule.IMAGING);
91 final CachingStrategy<PT> cachingStrategy = parameterProviderFactory.getCachingStrategy();
92 return new CachingImageStreamer<PT>(session, cachingStrategy, newDefaultImageStreamer, contextProvider.get());
93 } catch (LoginException e) {
94 throw new RuntimeException("Could not connect to imaging repository.", e);
95 } catch (RepositoryException e) {
96 throw new RuntimeException("Could not connect to imaging repository.", e);
97 }
98 }
99 }
100
101 }