package sale;
import users.User;
public class UIGate extends Object implements Gate {
protected FormSheet m_fsFormSheet;
protected MenuSheet m_msMenuSheet;
private transient Transition m_tTransition;
private transient Object m_oLock;
private final Object getLock() {
if (m_oLock == null) {
m_oLock = new Object();
}
return m_oLock;
}
private transient int m_nChanged = NOTHING;
private static final int NOTHING = 0;
private static final int FORMSHEET = 1;
private static final int MENUSHEET = 2;
private static final int TRANSITION = 8;
public UIGate (FormSheet fs,
MenuSheet ms) {
super();
m_fsFormSheet = fs;
m_msMenuSheet = ms;
}
public Transition getNextTransition (SaleProcess pOwner, User usr)
throws InterruptedException {
synchronized (getLock()) {
m_tTransition = null;
m_nChanged = FORMSHEET | MENUSHEET;
while ((m_nChanged & TRANSITION) == 0) {
if ((m_nChanged & MENUSHEET) != 0) {
pOwner.getContext().setMenuSheet (pOwner, m_msMenuSheet);
}
if ((m_nChanged & FORMSHEET) != 0) {
if (m_fsFormSheet != null) {
m_fsFormSheet.setWaitResponse (false);
}
pOwner.getContext().setFormSheet (pOwner, m_fsFormSheet);
}
m_nChanged = NOTHING;
getLock().wait();
}
}
return m_tTransition;
}
public void setFormSheet (FormSheet fs) {
synchronized (getLock()) {
m_fsFormSheet = fs;
m_nChanged |= FORMSHEET;
getLock().notifyAll();
}
}
public void setMenuSheet (MenuSheet ms) {
synchronized (getLock()) {
m_msMenuSheet = ms;
m_nChanged |= MENUSHEET;
getLock().notifyAll();
}
}
public void setNextTransition (Transition tNext) {
if (tNext == null) {
throw new NullPointerException();
}
synchronized (getLock()) {
m_tTransition = tNext;
m_nChanged |= TRANSITION;
getLock().notifyAll();
}
}
}