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 }