1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.web.servlet.resource;
18
19 import java.io.IOException;
20 import javax.servlet.http.HttpServletRequest;
21
22 import org.apache.commons.logging.Log;
23 import org.apache.commons.logging.LogFactory;
24
25 import org.springframework.cache.Cache;
26 import org.springframework.cache.CacheManager;
27 import org.springframework.core.io.Resource;
28 import org.springframework.util.Assert;
29
30
31
32
33
34
35
36
37
38
39 public class CachingResourceTransformer implements ResourceTransformer {
40
41 private static final Log logger = LogFactory.getLog(CachingResourceTransformer.class);
42
43 private final Cache cache;
44
45 public CachingResourceTransformer(CacheManager cacheManager, String cacheName) {
46 this(cacheManager.getCache(cacheName));
47 }
48
49 public CachingResourceTransformer(Cache cache) {
50 Assert.notNull(cache, "'cache' is required");
51 this.cache = cache;
52 }
53
54
55
56
57
58 public Cache getCache() {
59 return this.cache;
60 }
61
62 @Override
63 public Resource transform(HttpServletRequest request, Resource resource, ResourceTransformerChain transformerChain)
64 throws IOException {
65
66 Resource transformed = this.cache.get(resource, Resource.class);
67 if (transformed != null) {
68 if (logger.isTraceEnabled()) {
69 logger.trace("Found match");
70 }
71 return transformed;
72 }
73
74 transformed = transformerChain.transform(request, resource);
75
76 if (logger.isTraceEnabled()) {
77 logger.trace("Putting transformed resource in cache");
78 }
79 this.cache.put(resource, transformed);
80
81 return transformed;
82 }
83
84 }