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.parameters;
35
36 import info.magnolia.cms.core.HierarchyManager;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.imaging.ParameterProvider;
39 import info.magnolia.imaging.ParameterProviderFactory;
40 import info.magnolia.imaging.util.PathSplitter;
41
42 import javax.jcr.RepositoryException;
43 import javax.servlet.http.HttpServletRequest;
44
45
46
47
48
49
50
51
52 public abstract class AbstractWorkspaceAndPathParameterProviderFactory<PT> implements ParameterProviderFactory<HttpServletRequest, PT> {
53
54 private boolean trimExtension = true;
55
56 @Override
57 public ParameterProvider<PT> newParameterProviderFor(HttpServletRequest req) {
58 String pathInfo = req.getPathInfo();
59 if (pathInfo == null) {
60 throw new IllegalArgumentException("Can't determine node, no pathInfo is available for uri " + req.getRequestURI());
61 }
62
63
64
65 final PathSplitter pathSplitter = new PathSplitter(pathInfo, trimExtension);
66 if (pathSplitter.count() < 2) {
67 throw new IllegalArgumentException("Can't determine node from pathInfo: " + pathInfo);
68
69 }
70 final String workspaceName = pathSplitter.skipTo(1);
71 final String path = "/" + pathSplitter.remaining();
72
73 try {
74 final HierarchyManager hm = MgnlContext.getHierarchyManager(workspaceName);
75 return newParameterProviderForPath(hm, path);
76 } catch (RepositoryException e) {
77 throw new RuntimeException("Can't load source from " + path + " from workspace " + workspaceName, e);
78 }
79 }
80
81 protected abstract ParameterProvider<PT> newParameterProviderForPath(final HierarchyManager hm, final String path) throws RepositoryException;
82
83 public void setTrimExtension(boolean trimExtension) {
84 this.trimExtension = trimExtension;
85 }
86
87 }