1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.portals.graffito.jcr.persistence.objectconverter.impl;
18
19 import javax.jcr.Node;
20 import javax.jcr.RepositoryException;
21 import javax.jcr.Session;
22
23 import net.sf.cglib.proxy.Enhancer;
24 import net.sf.cglib.proxy.LazyLoader;
25
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.apache.portals.graffito.jcr.mapper.model.CollectionDescriptor;
29 import org.apache.portals.graffito.jcr.persistence.collectionconverter.CollectionConverter;
30 import org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollection;
31 import org.apache.portals.graffito.jcr.persistence.collectionconverter.ManageableCollectionUtil;
32 import org.apache.portals.graffito.jcr.persistence.objectconverter.ObjectConverter;
33
34 public class ProxyManager {
35
36 private final static Log log = LogFactory.getLog(ProxyManager.class);
37
38
39 public Object createBeanProxy(Session session, ObjectConverter objectConverter, Class beanClass, String path)
40 {
41
42 try {
43 if (!session.itemExists(path)) {
44 return null;
45 }
46 } catch (RepositoryException e) {
47 throw new org.apache.portals.graffito.jcr.exception.RepositoryException( "Impossible to check,if the object exits on " + path, e);
48 }
49
50 LazyLoader loader = new BeanLazyLoader(objectConverter, session, beanClass, path) ;
51 return Enhancer.create(beanClass, loader);
52 }
53
54
55 public Object createCollectionProxy(Session session, CollectionConverter collectionConverter, Node parentNode, CollectionDescriptor collectionDescriptor, Class collectionFieldClass)
56 {
57
58 if (collectionConverter.isNull(session, parentNode, collectionDescriptor, collectionFieldClass)) {
59 return null;
60 }
61
62 ManageableCollection manageableCollection = ManageableCollectionUtil.getManageableCollection(collectionFieldClass);
63
64 LazyLoader loader = new CollectionLazyLoader(collectionConverter, session, parentNode, collectionDescriptor, collectionFieldClass);
65 return Enhancer.create(manageableCollection.getClass(), loader);
66 }
67 }