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
51 public abstract class AbstractWorkspaceAndIdentifierParameterProviderFactory<PT> implements ParameterProviderFactory<HttpServletRequest, PT> {
52 @Override
53 public ParameterProvider<PT> newParameterProviderFor(HttpServletRequest request) {
54 final String pathInfo = request.getPathInfo();
55 if (pathInfo == null) {
56 throw new IllegalArgumentException(String.format("Can't determine node, no pathInfo is available for uri '%s'", request.getRequestURI()));
57 }
58
59 final PathSplitter pathSplitter = new PathSplitter(pathInfo, true);
60 if (pathSplitter.count() < 2) {
61 throw new IllegalArgumentException(String.format("Can't determine node from pathInfo '%s'", pathInfo));
62
63 }
64
65 final String workspaceName = pathSplitter.skipTo(1);
66 final String identifier = pathSplitter.skipTo(2);
67 try {
68 final Session session = MgnlContext.getJCRSession(workspaceName);
69 return newParameterProviderForIdentifier(session, identifier);
70 } catch (RepositoryException e) {
71 throw new RuntimeException(String.format("Can't load source for identifier '%s' from workspace '%s'", identifier, workspaceName), e);
72 }
73 }
74
75 abstract protected ParameterProvider<PT> newParameterProviderForIdentifier(Session session, String identifier) throws RepositoryException;
76
77 }