@Override
 public boolean handleRequest(
     HttpServletRequest request, HttpServletResponse response, IFileStore dir)
     throws ServletException {
   try {
     switch (getMethod(request)) {
       case GET:
         return handleGet(request, response, dir);
       case PUT:
         return handlePut(request, response, dir);
       case POST:
         return handlePost(request, response, dir);
       case DELETE:
         return handleDelete(request, response, dir);
     }
   } catch (JSONException e) {
     return statusHandler.handleRequest(
         request,
         response,
         new ServerStatus(
             IStatus.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Syntax error in request", e));
   } catch (CoreException e) {
     // core exception messages are designed for end user consumption, so use message directly
     return statusHandler.handleRequest(
         request,
         response,
         new ServerStatus(
             IStatus.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.getMessage(), e));
   } catch (Exception e) {
     // the exception message is probably not appropriate for end user consumption
     LogHelper.log(e);
     return statusHandler.handleRequest(
         request,
         response,
         new ServerStatus(
             IStatus.ERROR,
             HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
             "An unknown failure occurred. Consult your server log or contact your system administrator.",
             e));
   }
   return false;
 }