package jdepend.model.component;
import java.util.Collection;
import java.util.List;
import jdepend.metadata.JavaPackage;
import jdepend.model.Component;
import jdepend.model.ComponentException;
import jdepend.model.JavaClassUnit;
import jdepend.model.result.AnalysisResult;
/**
* 一种组织类的方式,不改变Class所属组件的性质
*
* 在 {@link MoveRelationTODOItem}中用于聚合相关的类 在 {@link Component}中用于计算内聚性
*
* @author user
*
*/
public class VirtualComponent extends Component {
private static final long serialVersionUID = -1281457261148140764L;
public VirtualComponent() {
super();
}
public VirtualComponent(String name, AnalysisResult result) {
super(name);
this.setResult(result);
}
public VirtualComponent(JavaClassUnit javaClass) {
super(javaClass.getName());
this.joinJavaClass(javaClass);
this.setResult(javaClass.getResult());
}
public VirtualComponent(Component component) {
super(component.getName());
for (JavaClassUnit javaClass : component.getClasses()) {
this.joinJavaClass(javaClass);
}
this.setResult(component.getResult());
}
/**
* 建立组件与类之间的单向关联
*
* @param javaClass
*/
public synchronized void joinJavaClass(JavaClassUnit javaClass) {
if (!this.javaClasses.contains(javaClass)) {
this.javaClasses.add(javaClass);
this.javaClassesForId.put(javaClass.getId(), javaClass);
}
}
@Override
protected List<Component> doList(Collection<JavaPackage> javaPackages) throws ComponentException {
throw new ComponentException("虚拟组件不进行组件的识别");
}
}