Project

General

Profile

Download (1.35 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.jaxb;
2

    
3
import org.apache.log4j.Logger;
4
import org.hibernate.Hibernate;
5
import org.hibernate.proxy.HibernateProxy;
6

    
7
import com.sun.xml.bind.api.AccessorException;
8
import com.sun.xml.bind.v2.runtime.JAXBContextImpl;
9
import com.sun.xml.bind.v2.runtime.reflect.Accessor;
10

    
11
public class CdmAccessor<BeanT,ValueT> extends Accessor<BeanT,ValueT> {
12

    
13
	private static final Logger logger = Logger.getLogger(CdmAccessor.class);
14
	
15
	private Accessor<BeanT, ValueT> delegate;
16

    
17
	public CdmAccessor(Accessor<BeanT, ValueT> delegate) {
18
		super(delegate.getValueType());
19
		this.delegate = delegate;
20
	}
21

    
22
	@Override
23
	public Accessor<BeanT, ValueT> optimize(JAXBContextImpl context) {
24
		delegate = delegate.optimize(context);
25
		return this;
26
	}
27

    
28
	@Override
29
	public ValueT get(BeanT bean) throws AccessorException {
30
		return hideLazy(delegate.get(bean));
31
	}
32

    
33
	@Override
34
	public void set(BeanT bean, ValueT value) throws AccessorException {
35
		delegate.set(bean, value);
36
	}
37

    
38
	protected ValueT hideLazy(ValueT value) {
39
		if (Hibernate.isInitialized(value)) {			
40
			if(value instanceof HibernateProxy) {
41
				logger.info("Accessor Returning " + value + " as unwrapped proxy");
42
				return (ValueT)((HibernateProxy)value).getHibernateLazyInitializer().getImplementation();						
43
			} else {
44
				logger.info("Accessor Returning " + value);
45
			    return value;
46
			}
47
		}
48
		return null;
49
	}
50
}
(1-1/16)