APIController.java :  » Wiki-Engine » ocwiki » org » ocwiki » controller » Java Open Source

Java Open Source » Wiki Engine » ocwiki 
ocwiki » org » ocwiki » controller » APIController.java
package org.ocwiki.controller;

import java.io.IOException;

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

import org.ocwiki.conf.APIDescriptor;
import org.ocwiki.conf.Config;
import org.ocwiki.controller.api.API;
import org.ocwiki.data.User;
import org.ocwiki.persistence.HibernateUtil;
import org.ocwiki.util.JsonUtils;
import org.ocwiki.util.SessionUtils;
import org.ocwiki.util.Utils;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONObject;

/**
 * Servlet implementation class APIController
 */
public class APIController extends HttpServlet {

  private static final long serialVersionUID = 1L;

  /**
   * @see HttpServlet#HttpServlet()
   */
  public APIController() {
    super();
  }

  private void process(HttpServletRequest request,
      HttpServletResponse response) throws IOException {
    try {
      response.setContentType("application/json;charset=UTF-8");

      String actionStr = request.getPathInfo().substring(1);
      APIDescriptor descriptor = Config.get().getAPIDescriptor(actionStr);

      if (descriptor == null) {
        response.getWriter().write("{\"status\":\"failed\", \"code\":\"no such API\"}");
        return;
      }
      
      Object result;

      // check permission
      User user = SessionUtils.getUser(request.getSession());
      boolean loggedIn = SessionUtils.isLoggedIn(request.getSession());
      if ((descriptor.isLoginRequired() && !loggedIn)
          || (Utils.isNotEmpty(descriptor.getRequiredGroups()) && (!loggedIn || !descriptor
              .getRequiredGroups().contains(user.getGroup())))) {
        // TODO real result
        result = "{\"status\":\"failed\", \"code\":no permission\"\"}";
      } else {
        API api = descriptor.createAPI();
        api.setRequest(request);
        api.perform();
        result = api.getResult();
      }
      if (result instanceof String) {
        response.getWriter().write((String) result);
      } else if (result instanceof JsonNode
          || result instanceof JSONObject
          || result instanceof JSONArray) {
        response.getWriter().write(result.toString());
      } else {
        JsonUtils.toJson(result, response.getWriter());
      }
    } catch (Exception e) {
      e.printStackTrace();
      response.getWriter().write(e.getMessage());
    } finally {
      HibernateUtil.closeSession();
    }
  }

  /**
   * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
   *      response)
   */
  protected void doGet(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    process(request, response);
  }

  /**
   * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
   *      response)
   */
  protected void doPost(HttpServletRequest request,
      HttpServletResponse response) throws ServletException, IOException {
    process(request, response);
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.