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.resourceloader.classpath;
35
36 import info.magnolia.cms.util.ClasspathResourcesUtil;
37 import info.magnolia.resourceloader.ResourceOriginFactory;
38 import info.magnolia.resourceloader.ResourceVisitor;
39
40 import java.net.URL;
41
42 import com.google.auto.factory.AutoFactory;
43 import com.google.common.base.Predicate;
44
45
46
47
48
49 @AutoFactory(implementing = ResourceOriginFactory.class)
50 public class LegacyClasspathResourceOrigin extends ClasspathResourceOrigin {
51 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LegacyClasspathResourceOrigin.class);
52
53 private static final String DOCU_LINK = "https://documentation.magnolia-cms.com/display/DOCS/Resources";
54
55 private static final String PREFIX = "mgnl-resources";
56 private static final String PREFIX_AND_SLASH = PREFIX + "/";
57 private static final String PREFIX_AND_DOT = PREFIX + ".";
58
59 LegacyClasspathResourceOrigin(String name) {
60 super(null, name);
61 }
62
63
64
65
66
67 @Override
68 public void watchForChanges(ResourceVisitor visitor) {
69 log.debug("Watching resource changes is not supported in LegacyClasspathResourceOrigin.");
70 }
71
72 @Override
73 protected Predicate<String> resourcesFilter() {
74 return new StartsWith(PREFIX_AND_DOT);
75 }
76
77 @Override
78 protected String validatePath(String resource) {
79 if (!resource.startsWith(PREFIX_AND_SLASH)) {
80 throw new IllegalStateException("Resources for " + getClass().getName() + " should be under /mgnl-resources/; got " + resource);
81 }
82
83 return resource.substring(PREFIX.length());
84 }
85
86 @Override
87 protected URL getUrl(ClasspathResource resource) {
88 final URL url = ClasspathResourcesUtil.getResource(PREFIX + resource.getRealPath());
89 if (url == null) {
90 throw new IllegalStateException("Can't open stream for " + resource);
91 }
92 log.warn("Using {} to load a resource off of mgnl-resources/ at {}. Please update your resources. See {}", getClass().getSimpleName(), url, DOCU_LINK);
93 return url;
94 }
95
96 private static class StartsWith implements Predicate<String> {
97 private final String prefix;
98
99 public StartsWith(String prefix) {
100 this.prefix = prefix;
101 }
102
103 @Override
104 public boolean apply(String input) {
105 return input.startsWith(prefix);
106 }
107 }
108 }