public String render(Window window, USSDResponse response)
        {
            StringBuilder builder = new StringBuilder();

            foreach (Message message in window.getMessages())
            {
                builder.Append(message.getContent());
                builder.Append("\n");
            }

            foreach (MenuItem menuItem in window.getMenuItems())
            {
                builder.Append(menuItem.Index + "." + menuItem.Description + "\n");
            }

            String final = builder.ToString();
            USSDSession <Object> session = response.getSession();

            foreach (Object key in session.Keys)
            {
                Object value = session[(String)key];
                final = final.Replace("\\{\\{" + (String)key + "\\}\\}", value.ToString()); //ToDo: Fix this!
            }

            return(final);
        }
Exemplo n.º 2
0
 public BantURequestException(String message, USSDRequest request, USSDResponse response, USSDSession <Object> session, Exception cause)
     : base(message, cause)
 {
     this.request  = request;
     this.response = response;
     this.session  = session;
 }
Exemplo n.º 3
0
        public new void redirectTo(String windowName, USSDSession <Object> session, USSDResponse response)
        {
            base.redirectTo(windowName, session, response);
            GetRequest getRequest = buildGetRequest();

            delegateRequest(getRequest, session, response);
        }
        public void doFilter(USSDRequest request, USSDSession <Object> session, USSDResponse response, USSDFilteringChain chain)
        {
            String cWName;
            Window currentWindow;

            cWName = session.getCurrentWindow();
            if (String.IsNullOrEmpty(cWName))
            {
                session.setCurrentWindow(request.getApplication().getStartupWindowId());
                cWName = request.getApplication().getStartupWindowId();
            }

            currentWindow = request.getApplication().getWindow(cWName);

            List <USSDFilter> windowFilters = request.getApplication().getWindowFilters(session.getCurrentWindow());

            if (windowFilters.Count > 0)
            {
                foreach (USSDFilter filter in windowFilters)
                {
                    chain.appendFilter(filter);
                }

                BaseUSSDFilter ussdFilter = new BaseUSSDFilter();
                ussdFilter.proceedProcessing = new BaseUSSDFilter.ProceedProcessing(proceedProcessing);

                chain.appendFilter(ussdFilter);

                chain.proceed(request, session, response);

                session.saveSession();
            }
        }
 public void proceed(USSDRequest request, USSDSession <Object> session, USSDResponse response)
 {
     if (Filters.Count > 0)
     {
         Filters.ElementAt(0).doFilter(request, session, response, this);
     }
 }
Exemplo n.º 6
0
        public void mustRenderRequestSubmittedWindow()
        {
            USSDApplication app     = getTestApp1();
            USSDRequest     request = app.newRequest("1234");

            fillRequest(request);

            USSDResponse response = BantU.executeRequest(getTestApp1(), request);

            Assert.AreEqual("operations", response.getWindow().getId());
            Assert.AreEqual(ResponseType.FORM, response.getResponseType());
            request = app.newRequest("1");
            fillRequest(request);

            response = BantU.executeRequest(getTestApp1(), request);
            Assert.AreEqual("transfers", response.getWindow().getId());
            Assert.AreEqual(ResponseType.FORM, response.getResponseType());
            request = app.newRequest("2");
            fillRequest(request);

            response = BantU.executeRequest(getTestApp1(), request);
            Assert.AreEqual("amountWindow", response.getWindow().getId());
            Assert.AreEqual(ResponseType.FORM, response.getResponseType());
            request = app.newRequest("1000");
            fillRequest(request);

            response = BantU.executeRequest(getTestApp1(), request);
            Assert.AreEqual("requestSubmitted", response.getWindow().getId());
            Assert.AreEqual(ResponseType.MESSAGE, response.getResponseType());
        }
Exemplo n.º 7
0
        protected void delegateRequest(USSDRequest request, USSDSession <Object> session, USSDResponse response)
        {
            USSDResponse ussdResponse = BantU.executeRequest(application, request, session);

            response.setWindow(ussdResponse.getWindow());
            response.setResponseType(ussdResponse.getResponseType());
            response.setSession(ussdResponse.getSession());
        }
Exemplo n.º 8
0
        public void mustRenderOperationsWindow()
        {
            USSDRequest request = getTestApp1().newRequest("1234");

            fillRequest(request);
            USSDResponse response = BantU.executeRequest(getTestApp1(), request);

            Assert.AreEqual("operations", response.getWindow().getId());
            Assert.AreEqual(ResponseType.FORM, response.getResponseType());
        }
Exemplo n.º 9
0
        public void mustRenderLoginWindow()
        {
            USSDRequest request = getTestApp1().newRequest(TEST_BASE_CODE);

            fillRequest(request);
            USSDResponse response = BantU.executeRequest(getTestApp1(), request);

            Assert.AreEqual("login", response.getWindow().getId());
            Assert.AreEqual(ResponseType.FORM, response.getResponseType());
        }
Exemplo n.º 10
0
        public void mustRenderPasswordRecoverWindow()
        {
            USSDRequest request = getTestApp1().newRequest("1111");

            fillRequest(request);
            USSDApplication app      = getTestApp1();
            USSDResponse    response = BantU.executeRequest(getTestApp1(), request);

            Assert.AreEqual("recoverPassowrd", response.getWindow().getId());
            Assert.AreEqual(ResponseType.MESSAGE, response.getResponseType());
        }
Exemplo n.º 11
0
        public void process(USSDRequest request, USSDSession <Object> session, USSDResponse response)
        {
            String pin = session["pin"].ToString();

            if (pin.Equals("1234"))
            {
                request.redirectTo("operations", session, response);
            }
            else
            {
                request.redirectTo("recoverPassword", session, response);
            }
        }
Exemplo n.º 12
0
        private String whereToGo(MenuItem menuItem, USSDRequest request, USSDResponse response, USSDSession <Object> session)
        {
            if (menuItem.TargetWindow.Equals(BACKWARD_TARGET_WINDOW))
            {
                if (session.getPreviousWindow() == null)
                {
                    throw new ImpossibleBackwardRedirectException(menuItem, request, response, session);
                }

                return(session.getPreviousWindow());
            }

            return(menuItem.TargetWindow);
        }
Exemplo n.º 13
0
        public void windowFilterMustBeInvoked()
        {
            USSDApplication app    = new BaseUSSDApplication();
            Window          window = new Window("startup");

            window.addMessage(new Message("Welcome, please type something"));
            window.setInput(new Input {
                Name = "something"
            });
            app.addWindowFilter(window.getId(), new StartupWindowFirstFilter());
            app.addWindowFilter(window.getId(), new StartupWindowSecondFilter());

            app.addWindow(window);
            app.setStartupWindowId(window.getId());

            USSDRequest request = app.newRequest(TEST_BASE_CODE);

            fillRequest(request);
            USSDResponse response = BantU.executeRequest(app, request);

            Assert.AreEqual("Altered by the second filter", response.getWindow().getMessages()[0]);
        }
Exemplo n.º 14
0
        private bool matchInput(Window currentWindow, PostRequest request, USSDSession <Object> session, USSDResponse response)
        {
            String regExp = currentWindow.getInput().RegExp;

            String value = request.getInputValue();

            session[currentWindow.getInput().Name] = value;

            if (currentWindow.getInput().RegExp != null)
            {
                bool matches = regularExpressionMatches(regExp, value, request);

                if (!matches)
                {
                    request.redirectTo(currentWindow.getInput().OnErrorTargetWindow, session, response);
                    return(false);
                }
            }

            return(true);
        }
Exemplo n.º 15
0
        private bool matchMenuItemsAndRedirect(Window currentWindow, PostRequest request, USSDSession <Object> session, USSDResponse response)
        {
            foreach (MenuItem menuItem in currentWindow.getMenuItems())
            {
                if (menuItem.Index.Equals(request.getInputValue()))
                {
                    if (currentWindow.getMenuValueName() != null)
                    {
                        session[currentWindow.getMenuValueName()] = menuItem.Value;
                    }

                    if (menuItem.TargetWindow != null)
                    {
                        String windowId = whereToGo(menuItem, request, response, session);
                        request.redirectTo(windowId, session, response);

                        return(true);
                    }

                    break;
                }
            }

            return(false);
        }
 public WindowFetchFailedException(String windowId, USSDRequest request, USSDResponse response, USSDSession <Object> session)
     : base(String.Format("Failed to fetch window with Id {%s} from NavigationCache", windowId), request, response, session)
 {
 }
Exemplo n.º 17
0
 private void proceedProcessing(USSDRequest request, USSDSession <object> session, USSDResponse response, String currentWindowName, Window currentWindow)
 {
     if (currentWindow == null)
     {
         throw new WindowNotFoundException(currentWindowName, request, response, session);
     }
 }
Exemplo n.º 18
0
 public void redirectTo(String windowName, USSDSession <Object> session, USSDResponse response)
 {
     session.setPreviousWindow(session.getCurrentWindow());
     session.setCurrentWindow(windowName);
     session.saveSession();
 }
 public ImpossibleBackwardRedirectException(MenuItem menuItem, USSDRequest request, USSDResponse response, USSDSession <Object> session)
     : base(String.Format("Session has no valid previousWindow value. User cant be redirected backward by %s Menu Item.",
                          menuItem.getId()), request, response, session)
 {
 }
 public WindowNotFoundException(String name, USSDRequest request, USSDResponse response, USSDSession <object> session)
     : base(String.Format("A window with name \"%s\" could not be found.", name), request, response, session)
 {
     this.windowName = name;
 }
Exemplo n.º 21
0
 public void doFilter(USSDRequest request, USSDSession <Object> session, USSDResponse response, USSDFilteringChain chain)
 {
     chain.proceed(request, session, response);
     response.getWindow().getMessages()[0].setContent("Altered by the second filter");
 }
Exemplo n.º 22
0
 public void process(USSDRequest request, USSDSession <Object> session, USSDResponse response)
 {
     request.redirectTo("requestSubmited", session, response);
 }
 public void doFilter(USSDRequest request, USSDSession <Object> session, USSDResponse response, USSDFilteringChain chain)
 {
     proceedProcessing(request, session, response, currentWindowName, currentWindow);
 }
 public WindowStoreFailedException(String windowId, USSDRequest request, USSDResponse response, USSDSession <Object> session)
     : base(String.Format("Failed to store window with Id {%s} in NavigationCache", windowId), request, response, session)
 {
 }