public void processRequest(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    response.setCharacterEncoding("UTF-8");
    request.setCharacterEncoding("UTF-8");
    System.out.println("before checkAndGetLoginFromToken");
    PrintWriter out = response.getWriter();
    try {

      Users accessUser = null;
      PermissionFilter filter = new PermissionFilter();
      String loginID = filter.checkAndGetLoginFromToken(request, response);

      UserDAO userDao = new UserDAO();
      if (loginID == null) {
        if (filter.getCheckResult().equalsIgnoreCase(filter.INVALID_LOGIN_TOKEN_ID)) {
          ReturnParser.outputErrorException(
              response, AllConstants.ErrorDictionary.Invalid_login_token_id, null, null);
          return;
        } else if (filter
            .getCheckResult()
            .equalsIgnoreCase(AllConstants.ErrorDictionary.login_token_expired)) {
          return;
        } else {
          ReturnParser.outputErrorException(
              response, AllConstants.ErrorDictionary.Invalid_login_token_id, null, null);
          return;
        }
      } else {
        accessUser = userDao.getLogin(loginID);
      }
      SubjectDAO subjDao = new SubjectDAO();
      Subject subject = (Subject) subjDao.findHealthSubject(loginID); // Retreive
      if (subject == null) {
        try {
          subject = subjDao.createDefaultHealthSubject(loginID);
          HealthDataStreamDAO hdsDao = new HealthDataStreamDAO();

          hdsDao.createDefaultDatastreamsOnDefaultSubject(loginID, subject.getId());
        } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          ReturnParser.outputErrorException(
              response, AllConstants.ErrorDictionary.Internal_Fault, null, null);
        }
      }

      String streamTitle = ServerUtil.getHealthStreamTitle(ServletPath(request));
      streamTitle = "ecg" + nextValue();
      System.out.println("Post Benchmark Data Points Title- " + streamTitle);
      DatastreamDAO dstreamDao = new DatastreamDAO();
      DBtoJsonUtil dbtoJUtil = new DBtoJsonUtil();
      Datastream datastream = null;
      try {
        datastream =
            dstreamDao.getHealthDatastreamByTitle(subject.getId(), streamTitle, true, false);
      } catch (NonUniqueResultException ex) {
        ReturnParser.outputErrorException(
            response, AllConstants.ErrorDictionary.Internal_Fault, null, streamTitle);
        return;
      }
      if (datastream == null) {
        ReturnParser.outputErrorException(
            response, AllConstants.ErrorDictionary.Unknown_StreamTitle, null, streamTitle);
        return;
      }
      if (!datastream.getOwner().equalsIgnoreCase(loginID)) {
        ReturnParser.outputErrorException(
            response, AllConstants.ErrorDictionary.Unauthorized_Access, null, streamTitle);
        return;
      }

      JsonUtil jutil = new JsonUtil();
      Gson gson = new Gson();
      JsonDataImport jdataImport = null;
      int jsonInputTotalByte = 0;
      try {
        String jsonInput = jutil.readJsonStrFromHttpRequest(request);
        jsonInputTotalByte = jsonInput.length();
        jdataImport = gson.fromJson(jsonInput, JsonDataImport.class);
      } catch (JsonSyntaxException ex) {
        ex.printStackTrace();
        ReturnParser.outputErrorException(
            response, AllConstants.ErrorDictionary.Input_Json_Format_Error, null, null);
        return;
      } catch (IOException ex) {
        ex.printStackTrace();
        ReturnParser.outputErrorException(
            response, AllConstants.ErrorDictionary.Input_Json_Format_Error, null, null);
        return;
      }

      List<DatastreamUnits> unitList = datastream.getDatastreamUnitsList();
      HashMap<String, String> unitIDList = new HashMap<String, String>();
      for (DatastreamUnits unit : unitList) {
        if (unit.getShortUnitID() != null && unit.getShortUnitID().length() > 1) {
          unitIDList.put(unit.getShortUnitID(), unit.getShortUnitID());
        } else {
          unitIDList.put(unit.getUnitID(), unit.getUnitID()); // retrieve
        } // all
        // existing
        // units
      }

      if (jdataImport == null) {
        ReturnParser.outputErrorException(
            response, AllConstants.ErrorDictionary.Input_Json_Format_Error, null, null);
        return;
      }
      if (jdataImport.getBlock_id() != null) {
        DatastreamBlocks block = dstreamDao.getDatastreamBlock(jdataImport.getBlock_id());
        if (block == null) {
          ReturnParser.outputErrorException(
              response,
              AllConstants.ErrorDictionary.Invalid_Datablock_ID,
              jdataImport.getBlock_id(),
              jdataImport.getBlock_id());
          return;
        } else {
          if (!block.getStreamID().getStreamId().equalsIgnoreCase(datastream.getStreamId())) {
            ReturnParser.outputErrorException(
                response,
                AllConstants.ErrorDictionary.Invalid_Datablock_ID_for_such_stream,
                jdataImport.getBlock_id(),
                jdataImport.getBlock_id());
            return;
          }
        }
      }

      HBaseDatapointDAO importDao = null;
      try {
        importDao = new HBaseDatapointDAO();
      } catch (Exception ex) {
        ex.printStackTrace();
        ReturnParser.outputErrorException(
            response, AllConstants.ErrorDictionary.Internal_Fault, null, null);
        return;
      }

      HBaseDataImport importData = new HBaseDataImport();

      if (jdataImport.getData_points_single_list() != null
          && jdataImport.getData_points_single_list().size() > 0) {
        System.out.println("--------------dealing with single data point list--------");
        if (unitIDList.size() == 0) {
          ReturnParser.outputErrorException(
              response,
              AllConstants.ErrorDictionary.Unknown_StreamID,
              null,
              datastream.getStreamId());
          return;
        }
        if (unitIDList.size() > 1) {
          ReturnParser.outputErrorException(
              response,
              AllConstants.ErrorDictionary.MORE_THAN_ONE_DATASTREAM_UNIT,
              null,
              datastream.getStreamId());
          return;
        }
        if (jdataImport.getData_points_single_list().size() < 1) {
          ReturnParser.outputErrorException(
              response,
              AllConstants.ErrorDictionary.No_Input_Single_Datapoints,
              null,
              datastream.getStreamId());
          return;
        }
        String singleUnitID = datastream.getDatastreamUnitsList().get(0).getShortUnitID();
        if (singleUnitID == null || singleUnitID.length() < 3) {
          singleUnitID = datastream.getDatastreamUnitsList().get(0).getUnitID();
        }
        importData.setSingle_Unit_ID(singleUnitID);
        importData.setData_points_single_list(jdataImport.getData_points_single_list());
        importData.setDatastream_id(datastream.getStreamId());
        importData.setBlock_id(jdataImport.getBlock_id());
      } else {
        System.out.println("--------------dealing with normal data point list--------");
        if (jdataImport.getData_points() == null || jdataImport.getData_points().size() < 1) {
          ReturnParser.outputErrorException(
              response,
              AllConstants.ErrorDictionary.No_Input_Datapoints,
              null,
              datastream.getStreamId());
          return;
        }
        importData.setDatastream(dbtoJUtil.convertDatastream(datastream, null));
        importData.setData_points(jdataImport.getData_points());
        importData.setDatastream_id(datastream.getStreamId());
        importData.setBlock_id(jdataImport.getBlock_id());
      }

      JsonDataPointsPostResult jsonResult = new JsonDataPointsPostResult();
      try {
        int totalStoredByte = importDao.importDatapointsDatapoints(importData); // submit data
        jsonResult.setTotal_stored_byte(totalStoredByte);

      } catch (ErrorCodeException ex) {
        ex.printStackTrace();
        ReturnParser.outputErrorException(response, ex.getErrorCode(), null, null);
        return;
      } catch (NumberFormatException ex) {
        ex.printStackTrace();
        ReturnParser.outputErrorException(
            response, AllConstants.ErrorDictionary.INPUT_DATE_FORMAT_ERROR, null, null);
        return;
      }
      int totalInputSize = 0;
      if (jdataImport.getData_points() != null) {
        totalInputSize = jdataImport.getData_points().size();
      } else if (jdataImport.getData_points_single_list() != null) {
        totalInputSize = jdataImport.getData_points_single_list().size();
      }
      jsonResult.setTotal_points(totalInputSize);
      jsonResult.setTotal_input_byte(jsonInputTotalByte);
      JsonElement je = gson.toJsonTree(jsonResult);
      JsonObject jo = new JsonObject();
      jo.addProperty(AllConstants.ProgramConts.result, AllConstants.ProgramConts.succeed);
      jo.add("data_import_stat", je);
      JsonWriter jwriter = new JsonWriter(out);
      gson.toJson(jo, jwriter);
    } catch (Exception ex) {
      ex.printStackTrace();
      ReturnParser.outputErrorException(
          response, AllConstants.ErrorDictionary.Internal_Fault, null, null);
      return;

    } finally {
      out.close();
    }
  }