protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    try {
      // Retrieving the file upload defaults from pentaho.xml
      String relativePath =
          PentahoSystem.getSystemSetting(
              "file-upload-defaults/relative-path",
              String.valueOf(DEFAULT_RELATIVE_UPLOAD_FILE_PATH)); // $NON-NLS-1$
      String maxFileLimit =
          PentahoSystem.getSystemSetting(
              "file-upload-defaults/max-file-limit", String.valueOf(MAX_FILE_SIZE)); // $NON-NLS-1$
      String maxFolderLimit =
          PentahoSystem.getSystemSetting(
              "file-upload-defaults/max-folder-limit",
              String.valueOf(MAX_FOLDER_SIZE)); // $NON-NLS-1$

      response.setContentType("text/plain");
      FileItem uploadItem = getFileItem(request);
      if (uploadItem == null) {
        response
            .getWriter()
            .write(
                Messages.getInstance()
                    .getErrorString("UploadFileServlet.ERROR_0001_NO_FILE_TO_UPLOAD"));
        return;
      }
      if (Long.parseLong(maxFileLimit) < uploadItem.getSize()) {
        response
            .getWriter()
            .write(
                Messages.getInstance().getErrorString("UploadFileServlet.ERROR_0003_FILE_TOO_BIG"));
        return;
      }

      String path = PentahoSystem.getApplicationContext().getSolutionPath(relativePath);

      File pathDir = new File(path);
      // create the path if it doesn't exist yet
      if (!pathDir.exists()) {
        pathDir.mkdirs();
      }

      if (uploadItem.getSize() + getFolderSize(pathDir) > Long.parseLong(maxFolderLimit)) {
        response
            .getWriter()
            .write(
                Messages.getInstance()
                    .getErrorString("UploadFileServlet.ERROR_0004_FOLDER_SIZE_LIMIT_REACHED"));
        return;
      }
      byte[] fileContents = uploadItem.get();
      UUID id = UUIDUtil.getUUID();
      String filename = id.toString() + CSV_EXT;

      if (doesFileExists(new File(path + filename))) {
        response
            .getWriter()
            .write(
                Messages.getInstance()
                    .getErrorString("UploadFileServlet.ERROR_0002_FILE_ALREADY_EXIST"));
        return;
      }
      FileOutputStream outputStream = new FileOutputStream(path + filename);
      outputStream.write(fileContents);
      outputStream.flush();
      outputStream.close();
      response.getWriter().write(new String(filename));
    } catch (Exception e) {
      response
          .getWriter()
          .write(
              Messages.getInstance()
                  .getErrorString(
                      "UploadFileServlet.ERROR_0005_UNKNOWN_ERROR", e.getLocalizedMessage()));
    }
  }
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    try {

      String relativePath =
          PentahoSystem.getSystemSetting(
              "file-upload-defaults/relative-path",
              String.valueOf(DEFAULT_RELATIVE_UPLOAD_FILE_PATH)); // $NON-NLS-1$
      String maxFileLimit =
          PentahoSystem.getSystemSetting(
              "file-upload-defaults/max-file-limit",
              String.valueOf(MAX_FILE_SIZE)); // $NON-NLS-1$
      String maxFolderLimit =
          PentahoSystem.getSystemSetting(
              "file-upload-defaults/max-folder-limit",
              String.valueOf(MAX_FOLDER_SIZE)); // $NON-NLS-1$
      IPentahoSession session = PentahoHttpSessionHelper.getPentahoSession(request);

      response.setContentType("text/plain"); // $NON-NLS-1$

      FileItem uploadItem = getFileItem(request);
      if (uploadItem == null) {
        String error =
            Messages.getErrorString(
                "UploadFileDebugServlet.ERROR_0001_NO_FILE_TO_UPLOAD"); //$NON-NLS-1$
        response.getWriter().write(error);
        return;
      }
      if (Long.parseLong(maxFileLimit) < uploadItem.getSize()) {
        String error =
            Messages.getErrorString(
                "UploadFileDebugServlet.ERROR_0003_FILE_TOO_BIG"); //$NON-NLS-1$
        response.getWriter().write(error);
        return;
      }

      String path = PentahoSystem.getApplicationContext().getSolutionPath(relativePath);
      File pathDir = new File(path);
      // create the path if it doesn't exist yet
      if (!pathDir.exists()) {
        pathDir.mkdirs();
      }

      if (uploadItem.getSize() + getFolderSize(new File(path)) > Long.parseLong(maxFolderLimit)) {
        String error =
            Messages.getErrorString(
                "UploadFileDebugServlet.ERROR_0004_FOLDER_SIZE_LIMIT_REACHED"); //$NON-NLS-1$
        response.getWriter().write(error);
        return;
      }

      String filename = request.getParameter("file_name"); // $NON-NLS-1$
      if (StringUtils.isEmpty(filename)) {
        filename = UUIDUtil.getUUID().toString();
      }

      String temporary = request.getParameter("mark_temporary"); // $NON-NLS-1$
      boolean isTemporary = false;
      if (temporary != null) {
        isTemporary = Boolean.valueOf(temporary);
      }

      File file;
      if (isTemporary) {
        file =
            PentahoSystem.getApplicationContext()
                .createTempFile(session, "", ".tmp", true); // $NON-NLS-1$
      } else {
        file = new File(path + File.separatorChar + filename);
      }

      FileOutputStream outputStream = new FileOutputStream(file);
      byte[] fileContents = uploadItem.get();
      outputStream.write(fileContents);
      outputStream.flush();
      outputStream.close();

      response.getWriter().write(file.getName());
    } catch (Exception e) {
      String error =
          Messages.getErrorString(
              "UploadFileDebugServlet.ERROR_0005_UNKNOWN_ERROR",
              e.getLocalizedMessage()); // $NON-NLS-1$
      response.getWriter().write(error);
    }
  }