package plp.sort; import java.util.*; public class SortableDataTracer extends Observable implements SortableData { public static final String SWAP_NAME = "Swap"; public static final String COMPARE_NAME = "Compare"; public static final String ACCESS_NAME = "Access"; public class Operation { private String name; private int [] indices; private Operation(String name, int [] indices) { this.name = name; this.indices = indices; } public String name() { return name; } public int [] indices() { return indices; } } private SortableData data; public SortableDataTracer(SortableData data) { this.data = data; } public int length() { return data.length(); } private void notify(String name, int [] t) { setChanged(); notifyObservers(new Operation(name, t)); } public void swap(int i, int j) { data.swap(i, j); int [] t = {i, j}; notify(SWAP_NAME, t); } public Object access(int i) { Object o = data.access(i); int [] t = {i}; notify(ACCESS_NAME, t); return o; } public int compare(int i, int j) { int comp = data.compare(i, j); int [] t = {i, j}; notify(COMPARE_NAME, t); return comp; } }