1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.seasar.cubby.plugins.s2.detector.impl;
18
19 import java.util.HashSet;
20 import java.util.Set;
21
22 import org.seasar.cubby.plugins.s2.detector.ClassDetector;
23 import org.seasar.cubby.plugins.s2.detector.DetectClassProcessor;
24 import org.seasar.framework.container.ComponentDef;
25 import org.seasar.framework.container.cooldeploy.CoolComponentAutoRegister;
26 import org.seasar.framework.util.ClassUtil;
27 import org.seasar.framework.util.Disposable;
28 import org.seasar.framework.util.DisposableUtil;
29
30
31
32
33
34
35
36
37
38 public class ClassDetectorImpl extends CoolComponentAutoRegister implements
39 ClassDetector, Disposable {
40
41
42 public static final String INIT_METHOD = null;
43
44
45 private boolean initialized;
46
47
48 private DetectClassProcessor[] processors;
49
50
51 private final Set<String> processedClasses = new HashSet<String>();
52
53
54
55
56 @Override
57 public void processClass(final String packageName,
58 final String shortClassName) {
59 final String fqcn = ClassUtil.concatName(packageName, shortClassName);
60 if (!processedClasses.contains(fqcn)) {
61 processedClasses.add(fqcn);
62 for (final DetectClassProcessor processor : processors) {
63 processor.processClass(packageName, shortClassName);
64 }
65 }
66 }
67
68
69
70
71 public void detect() {
72 if (!initialized) {
73 processedClasses.clear();
74 processors = (DetectClassProcessor[]) getContainer().getRoot()
75 .findAllComponents(DetectClassProcessor.class);
76 registerAll();
77 processedClasses.clear();
78 DisposableUtil.add(this);
79 initialized = true;
80 }
81 }
82
83
84
85
86 public void dispose() {
87 initialized = false;
88 }
89
90
91
92
93 @SuppressWarnings("unchecked")
94 @Override
95 protected ComponentDef createComponentDef(final Class componentClass) {
96 throw new UnsupportedOperationException();
97 }
98
99 }