package jdepend.util.todolist;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import jdepend.framework.exception.JDependException;
import jdepend.framework.util.MathUtil;
import jdepend.model.GroupCouplingItem;
import jdepend.model.JDependUnit;
import jdepend.model.JDependUnitMgr;
import jdepend.model.JavaClassUnit;
import jdepend.util.refactor.RefactorToolFactory;
public final class SplitComponentTODOItem extends TODOItem {
private JDependUnit unit;
private transient Map<String, Collection<JavaClassUnit>> moveInfos;
public SplitComponentTODOItem(JDependUnit unit) {
super();
this.unit = unit;
}
public JDependUnit getUnit() {
return unit;
}
public boolean isSplit() {
// 收集“寄养”JavaClass,并计算其“亲父母”
moveInfos = new HashMap<String, Collection<JavaClassUnit>>();
for (JavaClassUnit javaClass : unit.getClasses()) {
if (MathUtil.isZero(javaClass.getBalance())) {
GroupCouplingItem info = javaClass.getGroupCouplingInfo().getGroupCouplingItems().get(0);
if (moveInfos.get(info.name) == null) {
moveInfos.put(info.name, new ArrayList<JavaClassUnit>());
}
moveInfos.get(info.name).add(javaClass);
}
}
return true;
}
@Override
public List<Object> execute() throws JDependException {
// 移动“寄养”JavaClass到自己的“亲父母”那里
for (String target : moveInfos.keySet()) {
RefactorToolFactory.createTool().moveClass(moveInfos.get(target),
JDependUnitMgr.getInstance().getResult().getTheComponent(target));
}
return null;
}
@Override
public List<Object> getInfo() {
if (this.moveInfos != null && this.moveInfos.size() > 0) {
StringBuilder info = new StringBuilder();
for (String target : moveInfos.keySet()) {
for (JavaClassUnit javaClass : moveInfos.get(target)) {
info.append(javaClass.getName());
info.append(" 将从 ");
info.append(javaClass.getComponent().getName());
info.append(" 移动到 ");
info.append(target);
info.append("\n");
}
}
List<Object> infos = new ArrayList<Object>();
infos.add(info);
return infos;
} else {
return null;
}
}
}