package jdepend.util.refactor; import java.util.ArrayList; import java.util.Collection; import java.util.List; import jdepend.model.Component; import jdepend.model.JDependUnitMgr; import jdepend.model.JavaClassUnit; final class DefaultRefactorTool implements RefactorTool { @Override public void createComponent(String componentName, int componentLayer) throws RefactorException { // 保存当前快照 AdjustHistory.getInstance().addMemento(); List<String> actions = new ArrayList<String>(); actions.add("创建新组件[" + componentName + "]"); AdjustHistory.getInstance().setActions(actions); // 添加新组件 JDependUnitMgr.getInstance().getResult().addComponent(componentName, componentLayer); // 清空缓存 JDependUnitMgr.getInstance().getResult().clearCache(); // 保存调整之后的结果 AdjustHistory.getInstance().setCurrent(JDependUnitMgr.getInstance().getResult()); } @Override public void deleteComponent(String componentName) throws RefactorException { // 保存当前快照 AdjustHistory.getInstance().addMemento(); List<String> actions = new ArrayList<String>(); actions.add("删除组件[" + componentName + "]"); AdjustHistory.getInstance().setActions(actions); // 删除组件 JDependUnitMgr.getInstance().getResult().deleteTheComponent(componentName); // 清空缓存 JDependUnitMgr.getInstance().getResult().clearCache(); // 保存调整之后的结果 AdjustHistory.getInstance().setCurrent(JDependUnitMgr.getInstance().getResult()); } @Override public void moveClass(Collection<JavaClassUnit> javaClasses, Component target) throws RefactorException { boolean adjust = false; for (JavaClassUnit javaClass : javaClasses) { if (!javaClass.getComponent().equals(target)) { adjust = true; break; } } if (!adjust) { return; } AdjustHistory.getInstance().addMemento(); List<String> actions = new ArrayList<String>(); StringBuilder action; for (JavaClassUnit javaClass : javaClasses) { action = new StringBuilder(); action.append(javaClass.getName()); action.append(" 从 "); action.append(javaClass.getComponent().getName()); action.append(" 移动到 "); action.append(target.getName()); actions.add(action.toString()); } AdjustHistory.getInstance().setActions(actions); for (JavaClassUnit javaClass : javaClasses) { if (!javaClass.getComponent().equals(target)) { // 删除执行的JavaClass javaClass.getComponent().removeJavaClass(javaClass); // 增加到新的组件中 target.addJavaClass(javaClass); } } // 清空缓存 JDependUnitMgr.getInstance().getResult().clearCache(); // 保存调整之后的结果 AdjustHistory.getInstance().setCurrent(JDependUnitMgr.getInstance().getResult()); } @Override public void uniteComponent(String name, int layer, Collection<String> components) throws RefactorException { AdjustHistory.getInstance().addMemento(); List<String> actions = new ArrayList<String>(); StringBuilder content = new StringBuilder(); UniteComponentConf uniteComponentConf = new UniteComponentConf(name, layer, components); for (String component : uniteComponentConf.getComponents()) { content.append(component); content.append("\n"); } content.append(" 合并到 "); content.append("\n"); content.append(uniteComponentConf.getName()); actions.add(content.toString()); AdjustHistory.getInstance().setActions(actions); List<Component> units = JDependUnitMgr.getInstance().getComponents(); List<Component> newUnits = new ArrayList<Component>(); UniteComponent newComponent; // 增加未受影响的组件 for (Component unit : units) { if (!uniteComponentConf.getComponents().contains(unit.getName())) { newUnits.add(unit); } } // 创建合并组件 newComponent = new UniteComponent(uniteComponentConf.getName()); newComponent.setSubComponents(uniteComponentConf.getComponents()); newComponent.setLayer(uniteComponentConf.getLayer()); newComponent.unite(); newUnits.add(newComponent); JDependUnitMgr.getInstance().getResult().setComponents(newUnits); // 清空缓存 JDependUnitMgr.getInstance().getResult().clearCache(); // 保存调整之后的结果 AdjustHistory.getInstance().setCurrent(JDependUnitMgr.getInstance().getResult()); } }