Refactor ResourceResolverChain + resolver class names
This change splits out resource transformation out from the ResourceResolverChain so that chain is focused entirely on resource resolution (as its name suggests). The invocation of transformers is left as a separate step, it uses a different (recursive) algorithm in any case and iterates over a different set of objects. Also ResourceResolverChain is now limited strictly to methods that a ResourceResolver should be able to use to delegate to remaining resolvers. Furthermore, ResourceResolverChain now maintains an internal index of the "current" resolver so that resolvers don't have to pass the chain when invoking it much like a (Servlet API) FilterChain works. If the last resolver calls the chain again, a null value is returned.
This commit is contained in:
@@ -40,9 +40,9 @@ public class ExtensionMappingResourceResolverTests {
|
||||
@Before
|
||||
public void setUp() {
|
||||
List<ResourceResolver> resolvers = new ArrayList<ResourceResolver>();
|
||||
resolvers.add(new ExtensionMappingResourceResolver());
|
||||
resolvers.add(new PathExtensionResourceResolver());
|
||||
resolvers.add(new PathResourceResolver());
|
||||
resolver = new DefaultResourceResolverChain(resolvers, new ArrayList<ResourceTransformer>());
|
||||
resolver = new DefaultResourceResolverChain(resolvers);
|
||||
locations = new ArrayList<Resource>();
|
||||
locations.add(new ClassPathResource("test/", getClass()));
|
||||
locations.add(new ClassPathResource("testalternatepath/", getClass()));
|
||||
@@ -52,7 +52,7 @@ public class ExtensionMappingResourceResolverTests {
|
||||
public void resolveLessResource() throws Exception {
|
||||
String resourceId = "zoo.css";
|
||||
Resource resource = new ClassPathResource("test/" + resourceId + ".less", getClass());
|
||||
Resource resolved = resolver.resolveAndTransform(null, resourceId, locations);
|
||||
Resource resolved = resolver.resolveResource(null, resourceId, locations);
|
||||
assertEquals(resource, resolved);
|
||||
}
|
||||
|
||||
@@ -60,6 +60,6 @@ public class ExtensionMappingResourceResolverTests {
|
||||
public void resolveLessUrl() {
|
||||
String resourceId = "zoo.css";
|
||||
String url = "zoo.css";
|
||||
assertEquals(url, resolver.resolveUrl(resourceId, locations));
|
||||
assertEquals(url, resolver.resolveUrlPath(resourceId, locations));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ public class FingerprintResourceResolverTests {
|
||||
List<ResourceResolver> resolvers = new ArrayList<ResourceResolver>();
|
||||
resolvers.add(resolver);
|
||||
resolvers.add(new PathResourceResolver());
|
||||
chain = new DefaultResourceResolverChain(resolvers, new ArrayList<ResourceTransformer>());
|
||||
chain = new DefaultResourceResolverChain(resolvers);
|
||||
locations = new ArrayList<Resource>();
|
||||
locations.add(new ClassPathResource("test/", getClass()));
|
||||
locations.add(new ClassPathResource("testalternatepath/", getClass()));
|
||||
@@ -59,7 +59,7 @@ public class FingerprintResourceResolverTests {
|
||||
public void resolveWithoutHash() throws Exception {
|
||||
String file = "bar.css";
|
||||
Resource expected = new ClassPathResource("test/" + file, getClass());
|
||||
Resource actual = chain.resolveAndTransform(null, file, locations);
|
||||
Resource actual = chain.resolveResource(null, file, locations);
|
||||
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
@@ -67,14 +67,14 @@ public class FingerprintResourceResolverTests {
|
||||
@Test
|
||||
public void resolveWithHashNoMatch() throws Exception {
|
||||
String file = "bogus-e36d2e05253c6c7085a91522ce43a0b4.css";
|
||||
assertNull(chain.resolveAndTransform(null, file, locations));
|
||||
assertNull(chain.resolveResource(null, file, locations));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resolveStaticFingerprintedResource() throws Exception {
|
||||
String file = "foo-e36d2e05253c6c7085a91522ce43a0b4.css";
|
||||
Resource expected = new ClassPathResource("test/"+file, getClass());
|
||||
Resource actual = chain.resolveAndTransform(null, file, locations);
|
||||
Resource actual = chain.resolveResource(null, file, locations);
|
||||
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
@@ -84,7 +84,7 @@ public class FingerprintResourceResolverTests {
|
||||
Resource expected = new ClassPathResource("test/bar.css", getClass());
|
||||
String hash = DigestUtils.md5DigestAsHex(FileCopyUtils.copyToByteArray(expected.getInputStream()));
|
||||
String path = "/bar-" + hash + ".css";
|
||||
Resource actual = chain.resolveAndTransform(null, path, locations);
|
||||
Resource actual = chain.resolveResource(null, path, locations);
|
||||
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
@@ -94,7 +94,7 @@ public class FingerprintResourceResolverTests {
|
||||
Resource expected = new ClassPathResource("test/bar.min.css", getClass());
|
||||
String hash = DigestUtils.md5DigestAsHex(FileCopyUtils.copyToByteArray(expected.getInputStream()));
|
||||
String path = "/bar.min-" + hash + ".css";
|
||||
Resource actual = chain.resolveAndTransform(null, path, locations);
|
||||
Resource actual = chain.resolveResource(null, path, locations);
|
||||
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
@@ -104,7 +104,7 @@ public class FingerprintResourceResolverTests {
|
||||
Resource expected = new ClassPathResource("test/foo-bar/foo-bar.css", getClass());
|
||||
String hash = DigestUtils.md5DigestAsHex(FileCopyUtils.copyToByteArray(expected.getInputStream()));
|
||||
String path = "/foo-bar/foo-bar-" + hash + ".css";
|
||||
Resource actual = chain.resolveAndTransform(null, path, locations);
|
||||
Resource actual = chain.resolveResource(null, path, locations);
|
||||
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@@ -72,7 +72,7 @@ public class GzipResourceResolverTests {
|
||||
resolvers.add(new GzipResourceResolver());
|
||||
resolvers.add(new FingerprintResourceResolver());
|
||||
resolvers.add(new PathResourceResolver());
|
||||
resolver = new DefaultResourceResolverChain(resolvers, new ArrayList<ResourceTransformer>());
|
||||
resolver = new DefaultResourceResolverChain(resolvers);
|
||||
locations = new ArrayList<Resource>();
|
||||
locations.add(new ClassPathResource("test/", getClass()));
|
||||
locations.add(new ClassPathResource("testalternatepath/", getClass()));
|
||||
@@ -85,7 +85,7 @@ public class GzipResourceResolverTests {
|
||||
String file = "js/foo.js";
|
||||
String gzFile = file+".gz";
|
||||
Resource resource = new ClassPathResource("test/"+gzFile, getClass());
|
||||
Resource resolved = resolver.resolveAndTransform(request, file, locations);
|
||||
Resource resolved = resolver.resolveResource(request, file, locations);
|
||||
|
||||
assertEquals(resource.getDescription(), resolved.getDescription());
|
||||
assertEquals(new ClassPathResource("test/"+file).getFilename(), resolved.getFilename());
|
||||
@@ -100,7 +100,7 @@ public class GzipResourceResolverTests {
|
||||
String file = "foo-e36d2e05253c6c7085a91522ce43a0b4.css";
|
||||
String gzFile = file+".gz";
|
||||
Resource resource = new ClassPathResource("test/"+gzFile, getClass());
|
||||
Resource resolved = resolver.resolveAndTransform(request, file, locations);
|
||||
Resource resolved = resolver.resolveResource(request, file, locations);
|
||||
|
||||
assertEquals(resource.getDescription(), resolved.getDescription());
|
||||
assertEquals(new ClassPathResource("test/"+file).getFilename(), resolved.getFilename());
|
||||
|
||||
@@ -86,7 +86,7 @@ public class ResourceUrlMapperTests {
|
||||
@Test
|
||||
public void getExtensionMappedResourceUrl() {
|
||||
List<ResourceResolver> resolvers = new ArrayList<ResourceResolver>();
|
||||
resolvers.add(new ExtensionMappingResourceResolver());
|
||||
resolvers.add(new PathExtensionResourceResolver());
|
||||
resolvers.add(new PathResourceResolver());
|
||||
handler.setResourceResolvers(resolvers);
|
||||
resetMapper();
|
||||
|
||||
Reference in New Issue
Block a user