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 }