/**
   * @param user
   * @return
   * @throws java.text.ParseException @Desc This function populates the "classifiedDayVector"
   *     variable of the com.post.parser.model.User class. It gives the total number of posts in the
   *     specified day range which has been described in getDayCategory(int DayOfWeek) in this
   *     class.
   */
  public User setCategorizedDayOfMonthToUser(User user) throws ParseException {
    int[] userDayOfMonthVector = user.getClassifiedDayOfMonthVector();
    for (Posts posts : user.getUserPost()) {
      String date = posts.getDate();
      int DayOfMonth = getDayOfMonth(date) - 1;
      userDayOfMonthVector[DayOfMonth] = userDayOfMonthVector[DayOfMonth] + 1;
    }
    user.setClassifiedDayOfMonthVector(userDayOfMonthVector);

    return user;
  }
  /**
   * @param user
   * @return
   * @throws java.text.ParseException @Desc This function populates the "classifiedDayVector"
   *     variable of the com.post.parser.model.User class. It gives the total number of posts in the
   *     specified day range which has been described in getDayCategory(int DayOfWeek) in this
   *     class.
   */
  public User setCategorizedMonthToUser(User user) throws ParseException {
    int[] userMonthVector = user.getClassifiedMonthVector();
    for (Posts posts : user.getUserPost()) {
      String date = posts.getDate();
      int MonthOfYear = getMonthOfYear(date);
      //                System.out.println("Day Of Week " + DayOfWeek);
      userMonthVector[MonthOfYear] = userMonthVector[MonthOfYear] + 1;
    }
    user.setClassifiedMonthVector(userMonthVector);

    return user;
  }
  /**
   * @param user
   * @return
   * @throws java.text.ParseException @Desc This function populates the "classifiedDayVector"
   *     variable of the com.post.parser.model.User class. It gives the total number of posts in the
   *     specified day range which has been described in getDayCategory(int DayOfWeek) in this
   *     class.
   */
  public User setCategorizedDayToUser(User user) throws ParseException {
    int[] userDayVector = user.getClassifiedDayVector();
    for (Posts posts : user.getUserPost()) {
      String date = posts.getDate();
      int DayOfWeek = getDayOfWeek(date) - 1;
      //                System.out.println("Day Of Week " + DayOfWeek);
      userDayVector[DayOfWeek] = userDayVector[DayOfWeek] + 1;
    }
    user.setClassifiedDayVector(userDayVector);

    return user;
  }
 /**
  * @param userList
  * @return
  * @throws java.text.ParseException @Desc This function populates the "classifiedDayVector"
  *     variable of the com.post.parser.model.User class. It gives the total number of posts in the
  *     specified day range which has been described in getDayCategory(int DayOfWeek) in this
  *     class.
  */
 public List<User> setCategorizedDayOfMonthToUser(List<User> userList) throws ParseException {
   for (User user : userList) {
     int[] userDayOfMonthVector = user.getClassifiedDayOfMonthVector();
     for (Posts posts : user.getUserPost()) {
       String date = posts.getDate();
       int DayOfMonth = getDayOfMonth(date) - 1;
       System.out.println("Day Of Week " + DayOfMonth);
       userDayOfMonthVector[DayOfMonth] = userDayOfMonthVector[DayOfMonth] + 1;
     }
     user.setClassifiedDayOfMonthVector(userDayOfMonthVector);
   }
   return userList;
 }
  /**
   * @param user
   * @return user @Desc This function populates the "classifiedTimeVector" variable of the
   *     com.post.parser.model.User class. It gives the total number of posts in the specified time
   *     range which has been described in getTimeCategory(int hours) in this class.
   */
  public User setCategorizedHourOfDayToUser(User user) {
    int[] userTimeVector = user.getClassifiedHourOfDayVector();
    for (Posts posts : user.getUserPost()) {
      Timestamp ts =
          Timestamp.valueOf(
              new SimpleDateFormat("yyyy-MM-dd ").format(new Date()).concat(posts.getTime()));
      int timeCategory = ts.getHours();
      userTimeVector[timeCategory] = userTimeVector[timeCategory] + 1;
    }
    user.setClassifiedHourOfDayVector(userTimeVector);

    return user;
  }
  /**
   * @param user
   * @return user
   * @throws java.text.ParseException @Desc This function populates the "classifiedTimeVector"
   *     variable of the com.post.parser.model.User class. It gives the total number of posts in the
   *     specified time range which has been described in getTimeCategory(int hours) in this class.
   */
  public User setCategorizedTypeOfWeekToUser(User user) throws ParseException {
    int[] userTimeVector = user.getClassifiedTypeOfWeekVector();
    for (Posts posts : user.getUserPost()) {
      String date = posts.getDate();
      int dayOfWeek = getDayOfWeek(date);
      int typeOfWeek = getTypeOfWeek(dayOfWeek);

      userTimeVector[typeOfWeek] = userTimeVector[typeOfWeek] + 1;
    }
    user.setClassifiedTypeOfWeekVector(userTimeVector);

    return user;
  }
 /**
  * @param userList
  * @return
  * @throws java.text.ParseException @Desc This function populates the
  *     "classifiedSixMonthDataVector" variable of the com.post.parser.model.User class. It gives
  *     the total number of posts of only six months
  */
 public List<User> setCategorizedSixMonthDataToUser(List<User> userList) throws ParseException {
   for (User user : userList) {
     int[] userMonthVector = user.getClassifiedSixMonthDataVector();
     for (Posts posts : user.getUserPost()) {
       String date = posts.getDate();
       int MonthOfYear = getMonthOfYear(date);
       if (MonthOfYear <= 5) {
         userMonthVector[MonthOfYear] = userMonthVector[MonthOfYear] + 1;
       }
     }
     user.setClassifiedMonthVector(userMonthVector);
   }
   return userList;
 }
 public List<User> generateUserSecondActivityCluster(List<User> userList) {
   for (User user : userList) {
     List postList = user.getUserPost();
     int requiredPostValue = (int) (0.20 * postList.size());
     int[] secondActivityCluster = user.getSecondActivityVector();
     int[] tempClassifiedTimeVector = user.getClassifiedTimeVector();
     for (int i = 0; i < secondActivityCluster.length; i++) {
       if (tempClassifiedTimeVector[i] > requiredPostValue) {
         secondActivityCluster[i] = 1;
       }
     }
     user.setSecondActivityVector(secondActivityCluster);
   }
   return userList;
 }
 /**
  * if user has posted less than or equal to 8 percent of total message then it will be consider as
  * his sleeping time
  *
  * @param userList
  * @return
  */
 public List<User> generateUserSleepingCluster(List<User> userList) {
   for (User user : userList) {
     int[] sleepingCluster = user.getSleepingClusterVector();
     int[] tempClassifiedTimeVector = user.getClassifiedTimeVector();
     List postList = user.getUserPost();
     int requiredSleepingPostValue = (int) (0.08 * postList.size());
     //            int requiredSleepingPostValue = 5;
     for (int i = 0; i < sleepingCluster.length; i++) {
       if (tempClassifiedTimeVector[i] <= requiredSleepingPostValue) {
         sleepingCluster[i] = 1;
       }
     }
     user.setSleepingClusterVector(sleepingCluster);
   }
   return userList;
 }
  /**
   * @param user @Desc This function populates the "classifiedTimeVector" variable of the
   *     com.post.parser.model.User class. It gives the total number of posts in the specified time
   *     range which has been described in getTimeCategory(int hours) in this class.
   * @return List<User>
   */
  public User setCategorizedTimeToUser(User user) {
    ClusterCommons cc = new ClusterCommons();
    int[] userTimeVector = user.getClassifiedTimeVector();
    for (Posts posts : user.getUserPost()) {
      Timestamp ts =
          Timestamp.valueOf(
              new SimpleDateFormat("yyyy-MM-dd ").format(new Date()).concat(posts.getTime()));
      int timeCategory = cc.getTimeCategory(ts.getHours());
      if (timeCategory < 6) {
        userTimeVector[timeCategory] = userTimeVector[timeCategory] + 1;
      }
    }
    user.setClassifiedTimeVector(userTimeVector);

    return user;
  }
 /*
  * Generates first activity user cluster by taking the maximum number
  * of posts posted by user
  */
 public List<User> generateUserMostActiveCluster(List<User> userList) {
   for (User user : userList) {
     int[] firstActivityCluster = user.getFirstActivityVector();
     int[] tempClassifiedTimeVector = user.getClassifiedTimeVector();
     int max = 0;
     int maxIndex = 0;
     for (int i = 0; i < tempClassifiedTimeVector.length; i++) {
       if (tempClassifiedTimeVector[i] > max) {
         max = tempClassifiedTimeVector[i];
         maxIndex = i;
       }
     }
     firstActivityCluster[maxIndex] = 1;
     user.setFirstActivityVector(firstActivityCluster);
   }
   return userList;
 }
 public HashMap<Integer, Set> generateUserCluster(List<User> userList) {
   HashMap<Integer, Set> userCluster;
   userCluster = new HashMap<>();
   Set<Integer> firstClusterList = new TreeSet<>();
   Set<Integer> secondClusterList = new TreeSet<>();
   Set<Integer> thirdClusterList = new TreeSet<>();
   Set<Integer> fourthClusterList = new TreeSet<>();
   Set<Integer> fifthClusterList = new TreeSet<>();
   Set<Integer> sixthClusterList = new TreeSet<>();
   for (User user : userList) {
     // int[] firstActivityCluster = user.getFirstActivityVector();
     int[] tempClassifiedTimeVector = user.getClassifiedTimeVector();
     int max = 0;
     int maxIndex = 0;
     for (int i = 0; i < tempClassifiedTimeVector.length; i++) {
       if (tempClassifiedTimeVector[i] > max) {
         max = tempClassifiedTimeVector[i];
         maxIndex = i;
       }
     }
     if (maxIndex == 0) {
       Integer tempuserID = user.getId();
       firstClusterList.add(tempuserID);
       userCluster.put(1, firstClusterList);
     } else if (maxIndex == 1) {
       int tempuserID = user.getId();
       secondClusterList.add(tempuserID);
       userCluster.put(2, secondClusterList);
     } else if (maxIndex == 2) {
       int tempuserID = user.getId();
       thirdClusterList.add(tempuserID);
       userCluster.put(3, thirdClusterList);
     } else if (maxIndex == 3) {
       int tempuserID = user.getId();
       fourthClusterList.add(tempuserID);
       userCluster.put(4, fourthClusterList);
     } else if (maxIndex == 4) {
       int tempuserID = user.getId();
       fifthClusterList.add(tempuserID);
       userCluster.put(5, fifthClusterList);
     } else if (maxIndex == 5) {
       int tempuserID = user.getId();
       sixthClusterList.add(tempuserID);
       userCluster.put(6, sixthClusterList);
     }
     // firstActivityCluster[maxIndex] = 1;
   }
   return userCluster;
 }