01: /*****************************************************************************
02: * Copyright (C) NanoContainer Organization. All rights reserved. *
03: * ------------------------------------------------------------------------- *
04: * The software in this package is published under the terms of the BSD *
05: * style license a copy of which has been included with this distribution in *
06: * the LICENSE.txt file. *
07: * *
08: * Original code by Joerg Schaibe *
09: *****************************************************************************/package org.picocontainer.gems.behaviors;
10:
11: import com.thoughtworks.proxy.ProxyFactory;
12: import com.thoughtworks.proxy.factory.StandardProxyFactory;
13:
14: import org.picocontainer.ComponentAdapter;
15: import org.picocontainer.Parameter;
16: import org.picocontainer.PicoCompositionException;
17: import org.picocontainer.ComponentMonitor;
18: import org.picocontainer.LifecycleStrategy;
19: import org.picocontainer.behaviors.AbstractBehaviorFactory;
20: import org.picocontainer.ComponentFactory;
21:
22: import java.util.Properties;
23:
24: /**
25: * Factory for the Assimilated. This factory will create {@link Assimilated} instances for all
26: * {@link ComponentAdapter} instances created by the delegate. This will assimilate every component for a specific type.
27: *
28: * @author Jörg Schaible
29: */
30: public class Assimilating extends AbstractBehaviorFactory {
31:
32: private final ProxyFactory proxyFactory;
33: private final Class assimilationType;
34:
35: /**
36: * Construct an Assimilating. The instance will use the {@link StandardProxyFactory} using the JDK
37: * implementation.
38: *
39: * @param type The assimilated type.
40: */
41: public Assimilating(final Class type) {
42: this (type, new StandardProxyFactory());
43: }
44:
45: /**
46: * Construct an Assimilating using a special {@link ProxyFactory}.
47: *
48: * @param type The assimilated type.
49: * @param proxyFactory The proxy factory to use.
50: */
51: public Assimilating(final Class type,
52: final ProxyFactory proxyFactory) {
53: this .assimilationType = type;
54: this .proxyFactory = proxyFactory;
55: }
56:
57: /**
58: * Create a {@link Assimilated}. This adapter will wrap the returned {@link ComponentAdapter} of the
59: * deleated {@link ComponentFactory}.
60: *
61: * @see ComponentFactory#createComponentAdapter(ComponentMonitor,LifecycleStrategy,Properties,Object,Class,Parameter...)
62: */
63: public ComponentAdapter createComponentAdapter(
64: ComponentMonitor componentMonitor,
65: LifecycleStrategy lifecycleStrategy,
66: Properties componentProperties, final Object componentKey,
67: final Class componentImplementation,
68: final Parameter... parameters)
69: throws PicoCompositionException {
70: return new Assimilated(assimilationType, super
71: .createComponentAdapter(componentMonitor,
72: lifecycleStrategy, componentProperties,
73: componentKey, componentImplementation,
74: parameters), proxyFactory);
75: }
76:
77: public ComponentAdapter addComponentAdapter(
78: ComponentMonitor componentMonitor,
79: LifecycleStrategy lifecycleStrategy,
80: Properties componentProperties, ComponentAdapter adapter) {
81: return new Assimilated(assimilationType,
82: super
83: .addComponentAdapter(componentMonitor,
84: lifecycleStrategy, componentProperties,
85: adapter));
86: }
87: }
|