Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* This Source Code Form is subject to the terms of the Mozilla Public
   * License, v. 2.0. If a copy of the MPL was not distributed with this file,
   * You can obtain one at http://mozilla.org/MPL/2.0/. */
  
  package pt.webdetails.cda.utils.framework;
  
 import java.util.Map;
 import  javax.servlet.http.HttpServletRequest;
 import  javax.servlet.http.HttpServletResponse;
 
 import  org.apache.commons.logging.Log;
 import  org.apache.commons.logging.LogFactory;
 import  org.json.JSONException;
 import  org.json.JSONObject;
 import  org.pentaho.platform.api.engine.IParameterProvider;
 import  org.pentaho.platform.api.engine.IPentahoSession;
 import  org.pentaho.platform.engine.core.system.PentahoSessionHolder;

Boilerplate for a JSON content generator
 
 public abstract class JsonCallHandler {
 
   private static Log logger = LogFactory.getLog(JsonCallHandler.class);
   
   public static final String ENCODING = "UTF-8";
   public static final int INDENT_FACTOR = 2;
   
   private HashMap<StringMethodmethods = new HashMap<StringMethod>();
   private String methodParameter = "method";
   private String defaultMethod = null;
   
   public static class JsonResultFields 
   {
     public static final String STATUS = "status";
     public static final String ERROR_MSG = "errorMsg";
     public static final String RESULT = "result";
   }
   
   public enum ResponseStatus{
     
     OK,
     ERROR;
     
     @Override public String toString(){
       return super.toString().toLowerCase();
     }
   }
   
   public static abstract class Method {
     
     private String name;
     
     public abstract JSONObject execute(HttpServletRequest requestthrows Exception;
     
     public void setName(String name){
       this. = name;
     }
     public String getName(){
       return ;
     }
   }

  

Parameters:
name
method
 
   protected void registerMethod(String nameMethod method){
     method.setName(name);
     .put(namemethod);
   }
  
  
Simple overridable method to limit access. Allows everything by default.

Parameters:
session Caller session
method Method being executed
Returns:
 
   protected boolean hasPermission(IPentahoSession session,  Method method){
     return true;
   }
   
   public void handleCall(HttpServletRequest request, HttpServletResponse response)
   {
   //TODO: messages
     String methodName = request.getParameter();
        
     JSONObject result = null;
     Method method = .get(methodName);
     
     try 
     {
       if(methodName == null){
        result = getErrorJson("No method received.");
      }
      else if(method == null)
      {
        result = getErrorJson(MessageFormat.format("Method {0} not found."methodName));
      }
     else if(!hasPermission(PentahoSessionHolder.getSession(), method)){
        result = getErrorJson(MessageFormat.format("Permission denied to call method {0}:{1}."this.getClass().getName(), methodName));
      }
      else 
      {
        try
        {
          result = method.execute(request);
        }
        catch(JSONException e){
          .error( MessageFormat.format("Error building JSON response in method {0}."methodName) , e);
        }
        catch(Exception e){
          .error( MessageFormat.format("Error executing method {0}."methodName), e);
          result = createJsonResultFromException(e);
        }
      }
      response.getOutputStream().write(result.toString().getBytes());
      response.getOutputStream().flush();
      
    } catch (JSONException e) {
      .error("Error building JSON response"e);
    } catch (UnsupportedEncodingException e) {
      .error("Error attempting to use UTF-8 encoding"e);
    } catch (IOException e) {
      .error("Error writing to output stream"e);
    }
  }
  
  public static JSONObject createJsonResultFromException(Exception excthrows JSONException
  {
    JSONObject result = new JSONObject();
    
    result.put(.exc.getMessage());
    
    return result;
  }
  
  public static JSONObject getErrorJson(String msgthrows JSONException {
    JSONObject result = new JSONObject();
    result.put(.msg);
    return result;
  }
  public static JSONObject getOKJson(Object objthrows JSONException {
    JSONObject result = new JSONObject();
    result.put(.obj);
    return result;
  }
  
  
New to GrepCode? Check out our FAQ X