package de.bht.fpa.statepattern.v2;
import de.bht.fpa.statepattern.v2.states.BeverageSelectedState;
import de.bht.fpa.statepattern.v2.states.ChipInsertedState;
import de.bht.fpa.statepattern.v2.states.NoChipState;
public class CoffeeMachine {
private final Object noChipState = new NoChipState(this);
private final Object chipInsertedState = new ChipInsertedState(this);
private final Object beverageSelectedState = new BeverageSelectedState(this);
private Object state = noChipState;
public CoffeeMachine() {
System.out.println("\nWillkommen.");
}
public String insertChip() {
if (state instanceof NoChipState) {
return ((NoChipState) state).insertChip();
} else if (state instanceof ChipInsertedState) {
return ((ChipInsertedState) state).insertChip();
} else if (state instanceof BeverageSelectedState) {
return ((BeverageSelectedState) state).insertChip();
}
throw new IllegalStateException();
}
public String ecjectChip() {
if (state instanceof NoChipState) {
return ((NoChipState) state).ecjectChip();
} else if (state instanceof ChipInsertedState) {
return ((ChipInsertedState) state).ecjectChip();
} else if (state instanceof BeverageSelectedState) {
return ((BeverageSelectedState) state).ecjectChip();
}
throw new IllegalStateException();
}
public String selectBeverage() {
if (state instanceof NoChipState) {
return ((NoChipState) state).selectBeverage();
} else if (state instanceof ChipInsertedState) {
return ((ChipInsertedState) state).selectBeverage();
} else if (state instanceof BeverageSelectedState) {
return ((BeverageSelectedState) state).selectBeverage();
}
throw new IllegalStateException();
}
public String dispenseBeverage() {
if (state instanceof NoChipState) {
return ((NoChipState) state).dispenseBeverage();
} else if (state instanceof ChipInsertedState) {
return ((ChipInsertedState) state).dispenseBeverage();
} else if (state instanceof BeverageSelectedState) {
return ((BeverageSelectedState) state).dispenseBeverage();
}
throw new IllegalStateException();
}
public void setState(Object state) {
this.state = state;
}
public Object getNoChipState() {
return noChipState;
}
public Object getChipInsertedState() {
return chipInsertedState;
}
public Object getBeverageSelectedState() {
return beverageSelectedState;
}
}