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 public abstract class AbstractWorkspaceAndPathParameterProviderFactory<PT> implements ParameterProviderFactory<HttpServletRequest, PT> {
51
52 private boolean trimExtension = true;
53
54 @Override
55 public ParameterProvider<PT> newParameterProviderFor(HttpServletRequest req) {
56 String pathInfo = req.getPathInfo();
57 if (pathInfo == null) {
58 throw new IllegalArgumentException("Can't determine node, no pathInfo is available for uri " + req.getRequestURI());
59 }
60
61
62
63 final PathSplitter pathSplitter = new PathSplitter(pathInfo, trimExtension);
64 if (pathSplitter.count() < 2) {
65 throw new IllegalArgumentException("Can't determine node from pathInfo: " + pathInfo);
66
67 }
68 final String workspaceName = pathSplitter.skipTo(1);
69 final String path = "/" + pathSplitter.remaining();
70
71 try {
72 final HierarchyManager hm = MgnlContext.getHierarchyManager(workspaceName);
73 return newParameterProviderForPath(hm, path);
74 } catch (RepositoryException e) {
75 throw new RuntimeException("Can't load source from " + path + " from workspace " + workspaceName, e);
76 }
77 }
78
79 protected abstract ParameterProvider<PT> newParameterProviderForPath(final HierarchyManager hm, final String path) throws RepositoryException;
80
81 public void setTrimExtension(boolean trimExtension) {
82 this.trimExtension = trimExtension;
83 }
84
85 }