package com.kreative.paint.document.undo;
import java.util.LinkedList;
import java.util.ListIterator;
public class Transaction implements Undoable {
private String name;
private LinkedList<Atom> atoms;
public Transaction(String name) {
this.name = name;
this.atoms = new LinkedList<Atom>();
}
public synchronized void add(Atom a) {
if (!atoms.isEmpty()) {
Atom b = atoms.getLast();
if (a.canBuildUpon(b)) {
a = a.buildUpon(b);
atoms.removeLast();
}
}
atoms.add(a);
}
public synchronized boolean isEmpty() {
return atoms.isEmpty();
}
public synchronized String getName() {
return name;
}
public synchronized void setName(String name) {
this.name = name;
}
@Override
public synchronized void redo() {
ListIterator<Atom> i = atoms.listIterator();
while (i.hasNext()) i.next().redo();
}
@Override
public synchronized void undo() {
ListIterator<Atom> i = atoms.listIterator(atoms.size());
while (i.hasPrevious()) i.previous().undo();
}
}