package jdepend.util.refactor; import java.util.ArrayList; import java.util.Date; import java.util.List; import jdepend.framework.exception.JDependException; import jdepend.model.JDependUnitMgr; import jdepend.model.result.AnalysisResult; public class AdjustHistory { private List<Memento> mementos = new ArrayList<Memento>(); private List<String> actions; private AnalysisResult current;// 移动后的当前结果 private Memento compared = null; private static AdjustHistory inst = new AdjustHistory(); private AdjustHistory() { } public static AdjustHistory getInstance() { return inst; } public void addMemento() { AnalysisResult result = JDependUnitMgr.getInstance().getResult().clone(); this.addMemento(CreateMemento(result)); } private void addMemento(Memento memento) { this.mementos.add(memento); } private Memento CreateMemento(AnalysisResult result) { return new Memento(result, actions); } public Memento getCompared() { if (this.compared != null) { return this.compared; } else { return this.getOriginality(); } } public Memento getOriginality() { if (this.mementos.size() == 0) { return null; } else { return this.mementos.get(0); } } public void setCompared(Memento memento) { this.compared = memento; } public List<String> getActions() { return actions; } public void setActions(List<String> actions) { this.actions = actions; } public Memento getPrior() { return this.mementos.get(this.mementos.size() - 1); } public List<Memento> getMementos() { return this.mementos; } public Memento getTheMemento(Date date) { for (Memento memento : this.mementos) { if (memento.getCreateDate().equals(date)) { return memento; } } return null; } public void clear() { this.mementos = new ArrayList<Memento>(); this.actions = null; this.current = null; this.compared = null; } public boolean empty() { return this.mementos.size() == 0; } public void setCurrent(AnalysisResult current) { this.current = current; } public AnalysisResult getCurrent() { return current; } public CompareInfo compare(CompareObject object) throws JDependException { if (this.getCompared() != null) { AnalysisResult result = this.getCompared().getResult(); Object originality = object.getOriginalityValue(result); // 获取比较的数值 CompareInfo info = new CompareInfo(object); info.setMetrics(object.getMetrics()); info.setValue(object.getValue()); info.setOriginality(originality); // 进行比较 info.calResult(); return info; } else { return null; } } }