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