1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.clazz.bean;
17
18 import org.apache.commons.clazz.Clazz;
19 import org.apache.commons.clazz.ClazzInstanceFactory;
20 import org.apache.commons.clazz.ClazzLoader;
21 import org.apache.commons.clazz.common.ClazzFeatureSupport;
22
23
24
25
26
27
28 public abstract class BeanClazzInstanceFactory
29 extends ClazzFeatureSupport
30 implements ClazzInstanceFactory
31 {
32 private String name;
33 private static final String[] EMPTY_STRING_ARRAY = new String[0];
34 private String[] parameterClazzNames;
35 private Clazz[] parameterClazzes;
36 private String signature;
37
38 public BeanClazzInstanceFactory(
39 Clazz declaringClazz,
40 String parameterClazzNames[])
41 {
42 this(declaringClazz, null, parameterClazzNames);
43 }
44
45
46
47
48
49 public BeanClazzInstanceFactory(
50 Clazz declaringClazz,
51 String name,
52 String parameterClazzNames[])
53 {
54 super(declaringClazz);
55 this.name = name;
56 this.parameterClazzNames = parameterClazzNames;
57 this.parameterClazzNames =
58 (parameterClazzNames != null
59 ? parameterClazzNames
60 : EMPTY_STRING_ARRAY);
61 }
62
63
64
65
66 public String getName() {
67 return name;
68 }
69
70
71
72
73 public Clazz[] getParameterClazzes() {
74 if (parameterClazzes == null) {
75 parameterClazzes = new Clazz[parameterClazzNames.length];
76 ClazzLoader loader = getDeclaringClazz().getClazzLoader();
77 for (int i = 0; i < parameterClazzes.length; i++) {
78 parameterClazzes[i] =
79 loader.getClazzForName(parameterClazzNames[i]);
80 if (parameterClazzes[i] == null) {
81 throw new BeanClazzConfigurationException(
82 "Invalid argument type: "
83 + parameterClazzNames[i]
84 + ". Clazz not found.");
85 }
86 }
87 }
88
89 return parameterClazzes;
90 }
91
92
93
94
95 public String getSignature() {
96 if (signature == null) {
97 signature = Clazz.constructSignature(name, getParameterClazzes());
98 }
99 return signature;
100 }
101 }