package org.theonefx.wcframework.ioc;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.theonefx.wcframework.core.ClassParseContext;
import org.theonefx.wcframework.core.ClassParser;
import org.theonefx.wcframework.core.ClassWrapper;
import org.theonefx.wcframework.core.AbstractParserDelegate;
import org.theonefx.wcframework.core.resource.ClassScanner;
/**
* @File : ClassScanParserDelegate.java
* @ClassName : ClassScanParserDelegate
* @Author : 陈曦
* @Date : 2012-2-6 上午09:08:48
* @Version : v1.0
* @Description : 类资源扫描器代理
*/
public class ClassScanParserDelegate extends AbstractParserDelegate implements ClassParserRegister {
private List<ClassParser> parsers = new ArrayList<ClassParser>();
private ClassScanner scanner = new ClassScanner();
public void parse(Collection<String> packages) {
Iterator<String> iter = packages.iterator();
while (iter.hasNext()) {
Set<Class<?>> classes = scanner.getPackageAllClasses(iter.next(), true);
Iterator<Class<?>> classesIter = classes.iterator();
while (classesIter.hasNext()) {
Class<?> clazz = classesIter.next();
parseClass(clazz);
}
}
}
public void parseClass(Class<?> clazz) {
Iterator<ClassParser> iter = parsers.iterator();
ClassWrapper<?> wrapper = ClassWrapper.getWrapper(clazz);
ClassParseContext context = new ClassParseContext(wrapper);
while (iter.hasNext()) {
ClassParser parser = iter.next();
parser.parse(wrapper, getRegistr(), context);
}
if (context.getDefinition() != null && !getRegistr().containsBeanDefinition(context.getId())) {
getRegistr().registerBeanDefinition(context.getId(), context.getDefinition());
}
}
@Override
public void regist(ClassParser parser) {
parsers.add(parser);
}
}