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.objectfactory.guice;
35
36 import javax.inject.Inject;
37 import javax.inject.Provider;
38 import javax.jcr.Node;
39 import javax.jcr.RepositoryException;
40
41 import com.google.inject.ProvisionException;
42 import info.magnolia.cms.util.ContentUtil;
43 import info.magnolia.content2bean.Content2BeanException;
44 import info.magnolia.content2bean.Content2BeanUtil;
45 import info.magnolia.context.MgnlContext;
46 import info.magnolia.objectfactory.ComponentProvider;
47
48
49
50
51
52
53
54
55 public class GuiceConfiguredComponentProvider<T> implements Provider<T> {
56
57 @Inject
58 private ComponentProvider componentProvider;
59 private final String workspace;
60 private final String path;
61
62 public GuiceConfiguredComponentProvider(String workspace, String path) {
63 this.path = path;
64 this.workspace = workspace;
65 }
66
67 @Override
68 public T get() {
69 final Node node;
70 try {
71 node = MgnlContext.getJCRSession(workspace).getNode(path);
72 } catch (RepositoryException e) {
73 throw new ProvisionException("Can't find the node [" + workspace + ":" + path + "] to create an instance");
74 }
75
76 try {
77 return transformNode(node);
78 } catch (Content2BeanException e) {
79 throw new ProvisionException(e.getMessage(), e);
80 }
81 }
82
83 @SuppressWarnings("unchecked")
84 protected T transformNode(Node node) throws Content2BeanException{
85 return (T) Content2BeanUtil.toBean(ContentUtil.asContent(node), true, componentProvider);
86 }
87 }