package org.anotheria.moskitodemo.usecases.fibonacci.presentation.action; import net.anotheria.maf.action.AbstractAction; import net.anotheria.maf.action.ActionCommand; import net.anotheria.maf.action.ActionMapping; import net.anotheria.maf.bean.FormBean; import org.anotheria.moskitodemo.usecases.fibonacci.business.FibonacciCalculatorFactory; import org.anotheria.moskitodemo.usecases.fibonacci.business.IFibonacciCalculator; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.concurrent.atomic.AtomicInteger; public class FibonacciCalculatorAction extends AbstractAction{ private IFibonacciCalculator calculator; private AtomicInteger counter; public FibonacciCalculatorAction(){ calculator = FibonacciCalculatorFactory.createFibonacciCalculator(); counter = new AtomicInteger(0); } @Override public ActionCommand execute(ActionMapping mapping, FormBean af, HttpServletRequest req, HttpServletResponse res) throws Exception { String pOrder = req.getParameter("pOrder"); if (pOrder==null || pOrder.length()==0){ req.setAttribute("useCaseName", "fibonacci-"+counter.incrementAndGet()); return mapping.dialog(); } int order = 0; try{ order = Integer.parseInt(req.getParameter("pOrder")); }catch(Exception ignored){} if (order<0 || order>20) throw new RuntimeException("Order should be between 0 and 20."); String useCaseName = req.getParameter("mskUseCaseName"); long result = calculator.calculateFibonacciNumber(order); req.setAttribute("result", result); req.setAttribute("order", order); req.setAttribute("useCaseName", useCaseName); return mapping.success(); } }