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.context.MgnlContext;
37 import info.magnolia.imaging.ParameterProvider;
38 import info.magnolia.imaging.ParameterProviderFactory;
39 import info.magnolia.imaging.util.PathSplitter;
40
41 import javax.jcr.RepositoryException;
42 import javax.jcr.Session;
43 import javax.servlet.http.HttpServletRequest;
44
45
46
47
48
49
50 public abstract class AbstractWorkspaceAndUuidParameterProviderFactory<PT> implements ParameterProviderFactory<HttpServletRequest, PT> {
51
52 private boolean trimExtension = true;
53
54 @Override
55 public ParameterProvider<PT> newParameterProviderFor(HttpServletRequest request) {
56 String pathInfo = request.getPathInfo();
57 if (pathInfo == null) {
58 throw new IllegalArgumentException("Can't determine node, no pathInfo is available for uri " + request.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 uuid = pathSplitter.skipTo(2);
70
71 try {
72 final Session session = MgnlContext.getJCRSession(workspaceName);
73 return newParameterProviderForUuid(session, uuid);
74 } catch (RepositoryException e) {
75 throw new RuntimeException("Can't load source from " + uuid + " from workspace " + workspaceName, e);
76 }
77 }
78
79 abstract protected ParameterProvider<PT> newParameterProviderForUuid(Session session, String uuid) throws RepositoryException;
80
81 public void setTrimExtension(boolean trimExtension) {
82 this.trimExtension = trimExtension;
83 }
84
85 }