001    /*****************************************************************************
002     * Copyright (C) NanoContainer Organization. All rights reserved.            *
003     * ------------------------------------------------------------------------- *
004     * The software in this package is published under the terms of the BSD      *
005     * style license a copy of which has been included with this distribution in *
006     * the LICENSE.txt file.                                                     *
007     *                                                                           *
008     * Original code by Joerg Schaibe                                            *
009     *****************************************************************************/
010    
011    package org.picocontainer.behaviors;
012    
013    import org.picocontainer.ComponentAdapter;
014    import org.picocontainer.ComponentMonitor;
015    import org.picocontainer.LifecycleStrategy;
016    import org.picocontainer.Parameter;
017    import org.picocontainer.PicoCompositionException;
018    import org.picocontainer.behaviors.AbstractBehaviorFactory;
019    
020    import java.util.Properties;
021    
022    
023    /**
024     * BehaviorFactory for Field Decorating. This factory will create {@link org.picocontainer.gems.behaviors.FieldDecorated} that will
025     * allow you to decorate fields on the component instance that has been created
026     *
027     * @author Paul Hammant
028     */
029    public abstract class FieldDecorating extends AbstractBehaviorFactory implements FieldDecorated.Decorator {
030        private final Class<?> fieldClass;
031    
032        public FieldDecorating(Class<?> fieldClass) {
033            this.fieldClass = fieldClass;
034        }
035    
036        public ComponentAdapter createComponentAdapter(
037                ComponentMonitor componentMonitor, LifecycleStrategy lifecycleStrategy, Properties componentProperties, final Object componentKey, final Class componentImplementation, final Parameter... parameters)
038                throws PicoCompositionException {
039            return componentMonitor.newBehavior(new FieldDecorated(
040                    super.createComponentAdapter(
041                            componentMonitor, lifecycleStrategy, componentProperties, componentKey, componentImplementation, parameters),
042                    fieldClass, this));
043        }
044    
045    
046        public ComponentAdapter addComponentAdapter(ComponentMonitor componentMonitor,
047                                                    LifecycleStrategy lifecycleStrategy,
048                                                    Properties componentProperties,
049                                                    ComponentAdapter adapter) {
050            return super.addComponentAdapter(componentMonitor,
051                    lifecycleStrategy,
052                    componentProperties,
053                    adapter);
054        }
055    }