1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.clazz.common;
17
18 import java.util.ArrayList;
19 import java.util.Collections;
20 import java.util.List;
21
22 import org.apache.commons.clazz.Clazz;
23 import org.apache.commons.clazz.ClazzLoader;
24 import org.apache.commons.clazz.ModelClazzLoader;
25
26
27
28
29
30
31
32
33
34 public class GroupClazzLoader extends ClazzLoader {
35
36
37
38
39 protected ArrayList loaders = new ArrayList();
40
41 public GroupClazzLoader(ModelClazzLoader modelClazzLoader) {
42 super(modelClazzLoader);
43 }
44
45
46
47
48
49 public boolean canAddClazzLoader(ClazzLoader loader) {
50 return true;
51 }
52
53
54
55
56
57
58
59 public void addClazzLoader(ClazzLoader loader) {
60 for (int i = loaders.size(); --i >= 0;) {
61 ClazzLoader member = (ClazzLoader) loaders.get(i);
62 if (member instanceof GroupClazzLoader) {
63 GroupClazzLoader group = (GroupClazzLoader) member;
64 if (group.canAddClazzLoader(loader)) {
65 group.addClazzLoader(loader);
66 return;
67 }
68 }
69 }
70 loaders.add(loader);
71 }
72
73
74
75
76
77 public boolean isMember(Object instance) {
78
79 for (int i = loaders.size(); --i >= 0;) {
80 ClazzLoader loader = (ClazzLoader) loaders.get(i);
81 if (loader.isMember(instance)) {
82 return true;
83 }
84 }
85 return false;
86 }
87
88 public String getClazzName(Object instance) {
89
90 for (int i = loaders.size(); --i >= 0;) {
91 ClazzLoader loader = (ClazzLoader) loaders.get(i);
92 String name = loader.getClazzName(instance);
93 if (name != null) {
94 return name;
95 }
96 }
97 return null;
98 }
99
100
101
102
103
104 public Clazz getClazzForName(String name) {
105 Clazz clazz = null;
106
107 for (int i = loaders.size(); --i >= 0;) {
108 ClazzLoader loader = (ClazzLoader) loaders.get(i);
109 clazz = loader.getClazzForName(name);
110 if (clazz != null) {
111 break;
112 }
113 }
114 return clazz;
115 }
116
117
118
119
120 public Clazz defineClazz(
121 String name,
122 Class clazzClass,
123 Class instanceClass)
124 {
125 Clazz clazz = null;
126
127 for (int i = loaders.size(); --i >= 0;) {
128 ClazzLoader loader = (ClazzLoader) loaders.get(i);
129 clazz = loader.defineClazz(name, clazzClass, instanceClass);
130 if (clazz != null) {
131 break;
132 }
133 }
134 return clazz;
135 }
136
137
138
139
140
141 public List getClazzLoaders() {
142 return Collections.unmodifiableList(loaders);
143 }
144
145
146
147
148
149
150 }