Package org.xadoop.servlet

Source Code of org.xadoop.servlet.XadoopServlet

package org.xadoop.servlet;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.xadoop.SessionAttrs;
import org.xadoop.XadoopConstants;
import org.xadoop.servlet.actions.AbstractAction;
import org.xadoop.servlet.actions.LoginAction;
import org.xadoop.servlet.actions.results.AbstractResult;
import org.xadoop.servlet.pages.AbstractPage;
import org.xadoop.servlet.pages.ErrorPage;
import org.xadoop.servlet.pages.HomePage;
import org.xadoop.servlet.pages.LoginPage;
import org.xadoop.servlet.utils.GetRequest;
import org.xadoop.servlet.utils.ServletResponseTools;

/**
* The Xadoop servlet.
*
* @author Lukas Blunschi
*
*/
public class XadoopServlet extends HttpServlet {

  /**
   * required default serial version UID.
   */
  private static final long serialVersionUID = 1L;

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    long begin = System.nanoTime();

    // see if user is logged in
    String username = (String) req.getSession().getAttribute(SessionAttrs.USERNAME);
    boolean isLoggedIn = username == null ? false : true;

    // handle actions
    // not logged in users may only execute login
    String msg = null;
    String actionStr = req.getParameter(AbstractAction.P_ACTION);
    if (actionStr != null) {
      boolean isLoginAction = actionStr.equals(LoginAction.ACTIONNAME);
      if (isLoggedIn || isLoginAction) {
        ServletContext ctx = req.getSession().getServletContext();
        HashMap<String, AbstractAction> am = getActionMap(ctx);
        AbstractAction action = am.get(actionStr);
        if (action == null) {
          msg = "Action " + actionStr + " unknown!";
        } else {
          AbstractResult result = action.execute(req);

          // if everything was okay
          // send reload (retaining get parameters)
          if (result.wasSuccessful()) {
            String parameters = GetRequest.reconstructParameters(req, "&");
            String uri = req.getRequestURI();
            ServletResponseTools.sendReload(req, resp, uri + parameters + result.getReloadSuffix());
            return;
          } else {
            msg = result.getErrorMessage();
          }
        }
      }
    }

    // find page to render
    AbstractPage page = null;
    if (msg != null) {
      page = new ErrorPage(msg);
    } else {
      if (isLoggedIn) {

        // logged in users may see all pages
        ServletContext ctx = req.getSession().getServletContext();
        HashMap<String, AbstractPage> pageMap = getPageMap(ctx);
        String pageStr = req.getParameter(AbstractPage.P_PAGE);
        page = pageMap.get(pageStr);
        if (page == null) {
          String pagenameDefault = AbstractPage.extractPagename(HomePage.class);
          page = pageMap.get(pagenameDefault);
        }
      } else {

        // not logged in users may see only the login page
        page = new LoginPage();
      }
    }

    // get html
    StringBuffer html = null;
    try {
      html = page.getHtml(req);
    } catch (Exception e) {
      html = new ErrorPage(e.getMessage()).getHtml(req);
    }

    // produce output
    double calcTime = (System.nanoTime() - begin) / 1E6;
    ServletResponseTools.streamStringBuffer(html, "text/html", "utf-8", calcTime, req, resp);
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);
  }

  @SuppressWarnings("unchecked")
  private HashMap<String, AbstractPage> getPageMap(ServletContext ctx) {
    return (HashMap<String, AbstractPage>) ctx.getAttribute(XadoopConstants.CTX_PAGEMAP);
  }

  @SuppressWarnings("unchecked")
  private HashMap<String, AbstractAction> getActionMap(ServletContext ctx) {
    return (HashMap<String, AbstractAction>) ctx.getAttribute(XadoopConstants.CTX_ACTIONMAP);
  }

}
TOP

Related Classes of org.xadoop.servlet.XadoopServlet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.