View Javadoc

1   package org.neo.swarm.core.container.pico;
2   
3   import org.neo.swarm.core.aop.AspectContainer;
4   import org.neo.swarm.core.aop.silc.SilcAspectComponentAdapter;
5   import org.picocontainer.ComponentAdapter;
6   import org.picocontainer.Parameter;
7   import org.picocontainer.defaults.CachingComponentAdapter;
8   import org.picocontainer.defaults.ConstantParameter;
9   import org.picocontainer.defaults.ConstructorInjectionComponentAdapter;
10  import org.picocontainer.defaults.InstanceComponentAdapter;
11  
12  public class SilcComponentAdapterFactoryImpl implements SilcComponentAdapterFactory {
13      private AspectContainer aspectContainer;
14  
15      public SilcComponentAdapterFactoryImpl(AspectContainer aspectContainer) {
16          if (aspectContainer == null) {
17              throw new IllegalArgumentException("aspectContainer must not be null");
18          }
19          this.aspectContainer = aspectContainer;
20      }
21  
22      public ComponentAdapter createCachingComponentAdapter(Object key, Class impl) {
23          return new SilcAspectComponentAdapter(new CachingComponentAdapter(new ConstructorInjectionComponentAdapter(key, impl)), aspectContainer);
24      }
25  
26      public ComponentAdapter createConstructorComponentAdapter(Object key, Class impl) {
27          return new SilcAspectComponentAdapter(new ConstructorInjectionComponentAdapter(key, impl), aspectContainer);
28      }
29  
30      public ComponentAdapter createCachingComponentAdapter(Object key, Class impl, Object[] args) {
31          Parameter[] params = createParams(args);
32          return new SilcAspectComponentAdapter(new CachingComponentAdapter(new ConstructorInjectionComponentAdapter(key, impl, params)), aspectContainer);
33      }
34  
35      public ComponentAdapter createConstructorComponentAdapter(Object key, Class impl, Object[] args) {
36          Parameter [] params = createParams(args);
37          return new SilcAspectComponentAdapter(new ConstructorInjectionComponentAdapter(key, impl, params), aspectContainer);
38      }
39  
40      public ComponentAdapter createInstanceComponentAdapter(String name, Object object) {
41          return new SilcAspectComponentAdapter(new InstanceComponentAdapter(name, object), aspectContainer);
42      }
43  
44      private Parameter[] createParams(Object[] args) {
45          Parameter[] params = new Parameter[args.length];
46          for (int i = 0; i < params.length; i++) {
47              params[i] = new ConstantParameter(args[i]);
48  
49          }
50          return params;
51      }
52  }