示例#1
0
/** Created by Boyarsky Vitaliy on 02.07.2015. */
public class Feed {

  private static ServiceFactory factory = ServiceFactory.getInstance();
  private static PostService postService = factory.create(PostService.class);
  private static CategoryService categoryService = factory.create(CategoryService.class);
  private static Receiver feedReceiver = null;

  public boolean processing(Post post, Task task) {
    List<Category> categories = categoryService.getByTaskId(task.getId());
    post.setUserId(-1);
    if (postService.insert(post)) {
      postService.bindWithCategories(post.getId(), categories);
      if (feedReceiver != null) feedReceiver.send(post.getId(), "new|" + post.getId());
    }
    return false;
  }

  public static class FeedSender implements Sender {

    @Override
    public void accept(Receiver receiver) {
      feedReceiver = receiver;
    }

    @Override
    public void history(int clientId) {}
  }
}
  public static List<NewPost> getStatistics(List<NewPost> newPosts, int userId) {
    List<Profile> profiles = factory.create(ProfileService.class).getByUserId(userId);

    Vkontakte vk = new Vkontakte(4949213);
    for (Profile profile : profiles) {
      AccessToken accessToken = new AccessToken();
      accessToken.setAccessToken(profile.getAccessToken());
      accessToken.setUserId(profile.getVkId());
      accessToken.setExpirationMoment(profile.getExtTime());
      vk.setAccessToken(accessToken);
      try {
        return vk.execute().getPostStats(newPosts);
      } catch (VKException e) {
        continue;
      }
    }
    return newPosts;
  }
  public JSONObject getPersonDetails(
      int start, int listDisplayAmount, String dir, int totalRecords, HttpServletRequest request)
      throws SQLException, ClassNotFoundException {

    int totalAfterSearch = totalRecords;
    JSONObject result = new JSONObject();
    JSONArray array = new JSONArray();
    String searchSQL = "";
    String sql =
        "SELECT  new_post.vk_post_id AS vk_post_id, new_post.post_id AS post_id , "
            + " new_post.id AS  id, "
            + " new_post.wall_id AS wall_id , "
            + " new_post.post_time AS post_time, "
            + " new_post.state AS state "
            + " FROM  post JOIN new_post ON "
            + " new_post.post_id=post.id  "
            + " AND new_post.deleted=false "
            + "AND new_post.state='POSTED' ";
    String globeSearch = " AND  post.message LIKE '%" + GLOBAL_SEARCH_TERM + "%' ";

    if (GLOBAL_SEARCH_TERM != "") {
      searchSQL = globeSearch;
    }

    sql += searchSQL;
    sql += " limit " + start + ", " + listDisplayAmount;
    List<NewPost> resList =
        ServiceFactory.getInstance().create(NewPostService.class).getAllWithQuery(sql);

    if (resList != null) {
      try {

        if (dir.equals("asc")) {
          for (int i = 0; i < resList.size(); ++i) {
            for (int j = i + 1; j < resList.size(); ++j) {
              if (resList.get(j).getPostTime().getTime() > resList.get(i).getPostTime().getTime()) {
                NewPost temp = resList.get(i);
                resList.set(i, resList.get(j));
                resList.set(j, temp);
              }
            }
          }
        } else {
          for (int i = 0; i < resList.size(); ++i) {
            for (int j = i + 1; j < resList.size(); ++j) {
              if (resList.get(j).getPostTime().getTime() < resList.get(i).getPostTime().getTime()) {
                NewPost temp = resList.get(i);
                resList.set(i, resList.get(j));
                resList.set(j, temp);
              }
            }
          }
        }
      } catch (Exception ex) {
        ex.printStackTrace();
      }

      String groupNameToGroup = request.getParameter("groupNameToGroup");
      System.out.println("groupNameToGroup:  " + groupNameToGroup);
      if (groupNameToGroup != null) {

        List<NewPost> newResList = new ArrayList<>();
        for (int i = 0; i < resList.size(); ++i) {
          try {
            WallService wallService = ServiceFactory.getInstance().create(WallService.class);
            String groupName = wallService.getById(resList.get(i).getWallId()).getOwner().getName();
            if (groupName.equals(groupNameToGroup)) {
              newResList.add(resList.get(i));
            }
          } catch (Exception ex) {
            ex.printStackTrace();
          }
        }
        resList = newResList;
      }

      resList = getStatistics(resList, ((User) request.getSession().getAttribute("user")).getId());

      for (int i = 0; i < resList.size(); ++i) {
        JSONArray ja = new JSONArray();
        NewPost currPost = resList.get(i);
        if (currPost != null) {

          // message
          try {
            String msg;
            if (currPost.getPost().getMessage().length() > 45) {
              msg = currPost.getPost().getMessage().substring(0, 42) + "...";
            } else {
              msg = currPost.getPost().getMessage();
            }
            ja.put(msg);
          } catch (Exception ex) {
            ex.printStackTrace();
            ja.put("No MESSAGE!");
          }

          // group name
          try {
            WallService wallService = ServiceFactory.getInstance().create(WallService.class);
            String groupName = wallService.getById(currPost.getWallId()).getOwner().getName();
            ja.put(groupName);
          } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println(ex.getMessage());
            ja.put("Empty Wall!");
          }
          ja.put(currPost.getFullId());

          try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            ja.put(dateFormat.format(currPost.getPostTime()));
          } catch (Exception ex) {
            ja.put("Unknown Time!");
          }

          NewPost.Stats stats = currPost.getStats();
          String data = stats.getLikes() + "|" + stats.getReposts() + "|" + stats.getComments();

          ja.put(data);
          ja.put(currPost.getPostId());
          ja.put(currPost.getId());
          array.put(ja);
        }
      }
    }
    String query = "SELECT COUNT(*) FROM new_post WHERE deleted=false AND state='POSTED' ";
    // for pagination
    if (GLOBAL_SEARCH_TERM != "") {
      query += searchSQL;
      NewPostService npostServ = ServiceFactory.getInstance().create(NewPostService.class);
      totalAfterSearch = npostServ.getCountWithQuery(query);
    }
    try {
      result.put("iTotalRecords", totalRecords);
      result.put("iTotalDisplayRecords", totalAfterSearch);
      result.put("aaData", array);
    } catch (Exception e) {

    }
    return result;
  }
/** Created by Орест on 6/28/2015. */
public class FillPostedPostsCommand implements ActionCommand {

  String GLOBAL_SEARCH_TERM = "";

  @Override
  public void execute(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    JSONObject jsonResult = new JSONObject();
    int listDisplayAmount = 5;
    int start = 0;
    String pageNo = request.getParameter("iDisplayStart");
    String pageSize = request.getParameter("iDisplayLength");
    String sortDirection = request.getParameter("sSortDir_0");

    if (pageNo != null) {
      start = Integer.parseInt(pageNo);
      if (start < 0) {
        start = 0;
      }
    }

    if (pageSize != null) {
      try {
        listDisplayAmount = Integer.parseInt(pageSize);
      } catch (Exception e) {
        listDisplayAmount = 5;
      }
      if (listDisplayAmount < 3 || listDisplayAmount > 50) {
        listDisplayAmount = 10;
      }
    }

    if (sortDirection != null) {
      if (!sortDirection.equals("asc")) sortDirection = "desc";
    } else {
      sortDirection = "asc";
    }

    int totalRecords = getTotalRecordCount();

    GLOBAL_SEARCH_TERM = request.getParameter("sSearch");

    try {
      jsonResult = getPersonDetails(start, listDisplayAmount, sortDirection, totalRecords, request);
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    }

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Cache-Control", "no-store");
    PrintWriter out = response.getWriter();
    out.print(jsonResult);
  }

  public JSONObject getPersonDetails(
      int start, int listDisplayAmount, String dir, int totalRecords, HttpServletRequest request)
      throws SQLException, ClassNotFoundException {

    int totalAfterSearch = totalRecords;
    JSONObject result = new JSONObject();
    JSONArray array = new JSONArray();
    String searchSQL = "";
    String sql =
        "SELECT  new_post.vk_post_id AS vk_post_id, new_post.post_id AS post_id , "
            + " new_post.id AS  id, "
            + " new_post.wall_id AS wall_id , "
            + " new_post.post_time AS post_time, "
            + " new_post.state AS state "
            + " FROM  post JOIN new_post ON "
            + " new_post.post_id=post.id  "
            + " AND new_post.deleted=false "
            + "AND new_post.state='POSTED' ";
    String globeSearch = " AND  post.message LIKE '%" + GLOBAL_SEARCH_TERM + "%' ";

    if (GLOBAL_SEARCH_TERM != "") {
      searchSQL = globeSearch;
    }

    sql += searchSQL;
    sql += " limit " + start + ", " + listDisplayAmount;
    List<NewPost> resList =
        ServiceFactory.getInstance().create(NewPostService.class).getAllWithQuery(sql);

    if (resList != null) {
      try {

        if (dir.equals("asc")) {
          for (int i = 0; i < resList.size(); ++i) {
            for (int j = i + 1; j < resList.size(); ++j) {
              if (resList.get(j).getPostTime().getTime() > resList.get(i).getPostTime().getTime()) {
                NewPost temp = resList.get(i);
                resList.set(i, resList.get(j));
                resList.set(j, temp);
              }
            }
          }
        } else {
          for (int i = 0; i < resList.size(); ++i) {
            for (int j = i + 1; j < resList.size(); ++j) {
              if (resList.get(j).getPostTime().getTime() < resList.get(i).getPostTime().getTime()) {
                NewPost temp = resList.get(i);
                resList.set(i, resList.get(j));
                resList.set(j, temp);
              }
            }
          }
        }
      } catch (Exception ex) {
        ex.printStackTrace();
      }

      String groupNameToGroup = request.getParameter("groupNameToGroup");
      System.out.println("groupNameToGroup:  " + groupNameToGroup);
      if (groupNameToGroup != null) {

        List<NewPost> newResList = new ArrayList<>();
        for (int i = 0; i < resList.size(); ++i) {
          try {
            WallService wallService = ServiceFactory.getInstance().create(WallService.class);
            String groupName = wallService.getById(resList.get(i).getWallId()).getOwner().getName();
            if (groupName.equals(groupNameToGroup)) {
              newResList.add(resList.get(i));
            }
          } catch (Exception ex) {
            ex.printStackTrace();
          }
        }
        resList = newResList;
      }

      resList = getStatistics(resList, ((User) request.getSession().getAttribute("user")).getId());

      for (int i = 0; i < resList.size(); ++i) {
        JSONArray ja = new JSONArray();
        NewPost currPost = resList.get(i);
        if (currPost != null) {

          // message
          try {
            String msg;
            if (currPost.getPost().getMessage().length() > 45) {
              msg = currPost.getPost().getMessage().substring(0, 42) + "...";
            } else {
              msg = currPost.getPost().getMessage();
            }
            ja.put(msg);
          } catch (Exception ex) {
            ex.printStackTrace();
            ja.put("No MESSAGE!");
          }

          // group name
          try {
            WallService wallService = ServiceFactory.getInstance().create(WallService.class);
            String groupName = wallService.getById(currPost.getWallId()).getOwner().getName();
            ja.put(groupName);
          } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println(ex.getMessage());
            ja.put("Empty Wall!");
          }
          ja.put(currPost.getFullId());

          try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm");
            ja.put(dateFormat.format(currPost.getPostTime()));
          } catch (Exception ex) {
            ja.put("Unknown Time!");
          }

          NewPost.Stats stats = currPost.getStats();
          String data = stats.getLikes() + "|" + stats.getReposts() + "|" + stats.getComments();

          ja.put(data);
          ja.put(currPost.getPostId());
          ja.put(currPost.getId());
          array.put(ja);
        }
      }
    }
    String query = "SELECT COUNT(*) FROM new_post WHERE deleted=false AND state='POSTED' ";
    // for pagination
    if (GLOBAL_SEARCH_TERM != "") {
      query += searchSQL;
      NewPostService npostServ = ServiceFactory.getInstance().create(NewPostService.class);
      totalAfterSearch = npostServ.getCountWithQuery(query);
    }
    try {
      result.put("iTotalRecords", totalRecords);
      result.put("iTotalDisplayRecords", totalAfterSearch);
      result.put("aaData", array);
    } catch (Exception e) {

    }
    return result;
  }

  public int getTotalRecordCount() {
    String sql = "SELECT COUNT(*) FROM new_post WHERE deleted=false AND state='POSTED' ";
    NewPostService serv = ServiceFactory.getInstance().create(NewPostService.class);
    int totalRecords = serv.getCountWithQuery(sql);
    return totalRecords;
  }

  private static ServiceFactory factory = ServiceFactory.getInstance();
  private static WallService wallService = factory.create(WallService.class);

  public static List<NewPost> getStatistics(List<NewPost> newPosts, int userId) {
    List<Profile> profiles = factory.create(ProfileService.class).getByUserId(userId);

    Vkontakte vk = new Vkontakte(4949213);
    for (Profile profile : profiles) {
      AccessToken accessToken = new AccessToken();
      accessToken.setAccessToken(profile.getAccessToken());
      accessToken.setUserId(profile.getVkId());
      accessToken.setExpirationMoment(profile.getExtTime());
      vk.setAccessToken(accessToken);
      try {
        return vk.execute().getPostStats(newPosts);
      } catch (VKException e) {
        continue;
      }
    }
    return newPosts;
  }
}
 public int getTotalRecordCount() {
   String sql = "SELECT COUNT(*) FROM new_post WHERE deleted=false AND state='POSTED' ";
   NewPostService serv = ServiceFactory.getInstance().create(NewPostService.class);
   int totalRecords = serv.getCountWithQuery(sql);
   return totalRecords;
 }