001    /**
002     * Copyright (C) 2009 Erik Putrycz <erik.putrycz@gmail.com>
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     *         http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    package net.ep.db4o.activator;
018    
019    import net.ep.db4o.javassist.ActivateOnAllMethods;
020    import net.ep.db4o.javassist.ActivateOnMethodPolicy;
021    import net.ep.db4o.javassist.JVSTReflector;
022    import net.ep.db4o.javassist.PersistOnMethodPolicy;
023    
024    import com.db4o.config.Configuration;
025    import com.db4o.config.ConfigurationItem;
026    import com.db4o.internal.InternalObjectContainer;
027    import com.db4o.ta.TransparentPersistenceSupport;
028    
029    public class ProxyActivationSupport implements ConfigurationItem {
030    
031            private JVSTReflector _reflector;
032            private boolean _threadLocal;
033            private PersistOnMethodPolicy _persistPolicy = null;
034            private ActivateOnMethodPolicy _activatePolicy = new ActivateOnAllMethods();
035            private boolean _ignoreNullActivator = false;
036            
037            public ProxyActivationSupport ignoreNullActivator() {
038                    _ignoreNullActivator = true;
039                    return this;
040            }
041            
042            public ProxyActivationSupport threadLocalActivator() {
043                    _threadLocal = true;
044                    return this;
045            }
046            
047            public ProxyActivationSupport withActivationPolicy(ActivateOnMethodPolicy activatePolicy) {
048                    _activatePolicy = activatePolicy;
049                    return this;
050            }
051            
052            public ProxyActivationSupport withPersistPolicy(PersistOnMethodPolicy persistPolicy) {
053                    _persistPolicy = persistPolicy;
054                    return this;
055            }
056            
057            
058            
059            private ProxyActivationSupport() {
060            }
061    
062            public static ProxyActivationSupport create() {
063                    return new ProxyActivationSupport();
064            }
065            
066            public void apply(InternalObjectContainer container) {
067                    //_reflector.setDiagnostics(container.handlers()._diagnosticProcessor);
068                    // nothing to do
069            }
070    
071            public void prepare(Configuration configuration) {
072                    // configuration.reflectWith(new CGLibReflector(Thread.currentThread()
073                    // .getContextClassLoader()));
074                    _reflector = new JVSTReflector(Thread.currentThread()
075                                    .getContextClassLoader());
076                    _reflector.setThreadLocal(_threadLocal);
077                    _reflector.setIgnoreNullActivator(_ignoreNullActivator);
078                    _reflector.setPersistPolicy(_persistPolicy);
079                    _reflector.setActivationPolicy(_activatePolicy);
080                    configuration.reflectWith(_reflector);
081                    configuration.add(new TransparentPersistenceSupport());
082                    //configuration.add(new TransparentActivationSupport());
083            }
084    
085    }