package jdepend.model.area;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import jdepend.model.Component;
import jdepend.model.profile.model.AreaComponentProfile;
import jdepend.model.result.AnalysisResult;
import jdepend.model.util.ComponentPathSegment;
/**
* 按着组件路径创建组件区域
*
* @author user
*
*/
public class AreaCreatorWithPathInfo extends AbstractAreaCreator {
@Override
public String getName() {
return AreaComponentProfile.AccordingPathInfo;
}
@Override
public Collection<AreaComponentInfo> calCoverCount(AnalysisResult result) {
Collection<AreaComponentInfo> areaComponents = new ArrayList<AreaComponentInfo>();
List<String> paths = new ArrayList<String>();
for (Component unit : result.getComponents()) {
paths.add(unit.getPath());
}
List<ComponentPathSegment> segments = ComponentPathSegment.create(paths);
int maxCount = segments.get(0).getCount();
List<String> areaKeys = new ArrayList<String>();
for (ComponentPathSegment segment : segments) {
if (segment.getCount() < maxCount && segment.getCount() > 1) {
areaKeys.add(segment.getName());
}
}
// 生成AreaComponentInfo
Collection<Component> areaComponented = new HashSet<Component>();
Collection<Component> components = null;
for (String areaKey : areaKeys) {
components = new ArrayList<Component>();
for (Component component : result.getComponents()) {
if (!areaComponented.contains(component) && component.getPath().indexOf(areaKey) != -1) {
components.add(component);
areaComponented.add(component);
}
}
if (components.size() > 0) {
AreaComponentInfo componentInfo = new AreaComponentInfo();
componentInfo.setName(areaKey);
componentInfo.setLayer(0);
componentInfo.setComponents(components);
areaComponents.add(componentInfo);
}
}
return areaComponents;
}
}