package com.cxy.redisclient.presentation; import java.util.LinkedList; import java.util.List; import org.eclipse.swt.widgets.TreeItem; public class NavHistory { private List<TreeItem> history; private int pos; public NavHistory(){ this.history = new LinkedList<TreeItem>(); pos = -1; } public void add(TreeItem item) { if(pos == -1){ addItem(item); } else { TreeItem head = history.get(pos); if(head != item) { addItem(item); } } } private void addItem(TreeItem item) { pos ++; history.add(pos, item); if(pos < history.size() -1) for(int i = pos + 1; i < history.size(); i ++) history.remove(i); } public TreeItem backward(){ if(canBackward()) { if(pos != 0) pos --; TreeItem item = history.get(pos); return item; } else throw new IllegalArgumentException("empty navigation history"); } public TreeItem forward() { if(canForward()) { pos ++; TreeItem item = history.get(pos); return item; }else throw new IllegalArgumentException("end of navigation history"); } public boolean canBackward() { return pos != 0; } public boolean canForward() { return pos < history.size() - 1; } public void clear(){ this.history = new LinkedList<TreeItem>(); pos = -1; } }