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