package jdepend.model.component;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import jdepend.framework.exception.JDependException;
import jdepend.metadata.JavaClass;
import jdepend.metadata.JavaPackage;
import jdepend.model.Component;
import jdepend.model.ComponentException;
import jdepend.model.JavaClassUnit;
import jdepend.model.component.modelconf.ComponentConf;
import jdepend.model.component.modelconf.ComponentModelConf;
import jdepend.model.component.modelconf.ComponentModelConfMgr;
/**
* 定制组件
*
* @author wangdg
*
*/
public final class CustomComponent extends Component {
/**
*
*/
private static final long serialVersionUID = 4611204363465134237L;
private ComponentModelConf componentModelConf;
public CustomComponent() {
}
public CustomComponent(String componentName) {
super(componentName);
}
@Override
public void init(String group, String command, String info) throws ComponentException {
try {
componentModelConf = ComponentModelConfMgr.getInstance().getTheComponentModelConf(group, info);
} catch (Exception e) {
e.printStackTrace();
throw new ComponentException("CustomComponent 初始化失败!");
}
}
@Override
protected List<Component> doList(Collection<JavaPackage> javaPackages) throws ComponentException {
if (componentModelConf == null || componentModelConf.size() == 0) {
throw new ComponentException("没有定义组件信息!");
}
List<Component> components = new ArrayList<Component>();
CustomComponent component;
for (ComponentConf componentConf : componentModelConf.getComponentConfs()) {
component = new CustomComponent(componentConf.getName());
// 设置Layer
component.setLayer(componentConf.getLayer());
for (JavaPackage javaPackage : javaPackages) {
for (JavaClass javaClass : javaPackage.getClasses()) {
if (componentConf.isMember(javaClass)) {
component.addJavaClass(new JavaClassUnit(javaClass));
}
}
}
components.add(component);
}
return components;
}
@Override
public Component clone(Map<String, JavaClassUnit> javaClasses) throws ComponentException {
CustomComponent obj = (CustomComponent) super.clone(javaClasses);
obj.setComponentInfo(this.componentModelConf);
return obj;
}
public void setComponentInfo(ComponentModelConf componentInfo) {
this.componentModelConf = componentInfo;
}
public ComponentModelConf getComponentModelConf() {
return componentModelConf;
}
}