package jdepend.util.todolist;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import jdepend.framework.exception.JDependException;
import jdepend.framework.log.BusiLogUtil;
import jdepend.framework.log.Operation;
import jdepend.metadata.JavaClassRelationItem;
import jdepend.model.JavaClassUnit;
import jdepend.util.refactor.RefactorToolFactory;
public abstract class MoveRelationTODOItem extends TODOItem {
private TODORelationData relationData;
protected MoveRelationInfo moveRelationInfo;
public MoveRelationTODOItem(TODORelationData relationData) {
super();
this.relationData = relationData;
}
@Override
public List<Object> execute() throws JDependException {
if (moveRelationInfo.getMoveClasses() != null && moveRelationInfo.getTargetComponent() != null) {
// 将依赖的Class移入到被依赖的Class所在的组件中
RefactorToolFactory.createTool().moveClass(moveRelationInfo.getMoveClasses(),
moveRelationInfo.getTargetComponent());
// 记录日志
BusiLogUtil.getInstance().businessLog(Operation.moveToClass);
}
return null;
}
public final boolean isMove() throws JDependException {
this.relationData.init();
return this.decision();
}
protected abstract boolean decision() throws JDependException;
public boolean isChangeDir() {
return moveRelationInfo.isChangeDir();
}
public TODORelationData getRelationData() {
return relationData;
}
@Override
public List<Object> getInfo() {
if (moveRelationInfo.getMoveClasses() != null && moveRelationInfo.getMoveClasses().size() > 0) {
StringBuilder info = new StringBuilder();
for (JavaClassUnit javaClass : moveRelationInfo.getMoveClasses()) {
info.append(javaClass.getName());
info.append(" 将从 ");
info.append(javaClass.getComponent().getName());
info.append(" 移动到 ");
info.append(moveRelationInfo.getTargetComponent().getName());
info.append("\n");
}
Collection<JavaClassRelationItem> items = this.moveRelationInfo.getFromClassRelations();
if (!items.isEmpty()) {
info.append("这些类与源组件的关系明细为:\n");
for (JavaClassRelationItem item : items) {
info.append(item);
info.append("\n");
}
}
List<Object> infos = new ArrayList<Object>();
infos.add(info);
infos.add(relationData);
return infos;
} else {
return null;
}
}
}