package murex.dojo.coffeemachine; import murex.dojo.coffeemachine.requests.IRequest; public class CoffeeMachine implements ICoffeeMachine { private double getDrinkPrice(IRequest request) { PriceRequestVisitor visitor = new PriceRequestVisitor(); request.accept(visitor); return visitor.getDrinkPrice(); } public String process(IRequest request, double priceInEuros) { double drinkPrice = getDrinkPrice(request); final int sugarQuantity = request.getSugarQuantity(); return priceInEuros >= drinkPrice ? new StringBuilder("Drink maker makes 1 ") .append(request.getDrinkName().toLowerCase()) .append(" with ") .append(sugarQuantity > 0 ? sugarQuantity + " sugar and a stick" : "no sugar - and therefore no stick") .toString() : "Not enough money: " + Math.round((drinkPrice - priceInEuros) * 10)/10. + " euros still missing"; } }