Advertisement
Guest User

Untitled

a guest
May 2nd, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 37.43 KB | None | 0 0
  1. package beer.persistence;
  2.  
  3. import beer.helper.Utils;
  4. import beer.model.Comment;
  5. import beer.model.Organization;
  6. import beer.model.Stats;
  7. import beer.model.User;
  8. import beer.model.forum.Category;
  9. import beer.model.forum.Forum;
  10. import beer.model.forum.Reply;
  11. import beer.model.forum.Topic;
  12. import beer.model.message.has.Folder;
  13. import beer.model.user.has.Box;
  14. import beer.model.user.has.Group;
  15. import beer.model.user.has.GroupMembership;
  16. import beer.model.user.has.Theme;
  17. import java.io.Serializable;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import org.hibernate.Criteria;
  21. import org.hibernate.criterion.Expression;
  22. import org.hibernate.criterion.Order;
  23. import org.hibernate.criterion.Restrictions;
  24.  
  25. /**
  26.  *
  27.  * @author Ulisses
  28.  */
  29. public class Query extends Base implements Serializable {
  30.  
  31.     private Query() {
  32.     }
  33.     private static Query uniqueInstance;
  34.     public static final long ALL_FORUMS = 0;
  35.  
  36.     public static Query getInstance() {
  37.         synchronized (Query.class) {
  38.             if (uniqueInstance == null) {
  39.                 uniqueInstance = new Query();
  40.             }
  41.             return uniqueInstance;
  42.         }
  43.     }
  44.  
  45.     /**
  46.      * Gets the 5 more recent changes posted on the Changelog Topic by the Webmaster.
  47.      * @return
  48.      */
  49.     public List getChangelog() {
  50.         try {
  51.             org.hibernate.Query query = session.createQuery(
  52.                     "FROM Reply " +
  53.                     "WHERE cd_topic = 10 AND " +
  54.                     "cd_reply_user = 1 " +
  55.                     "ORDER BY cd_reply DESC");
  56.             query.setMaxResults(5);
  57.             List changelogs = query.list();
  58.  
  59.             return changelogs;
  60.         } catch (Exception e) {
  61.             e.printStackTrace();
  62.             return null;
  63.         }
  64.     }
  65.  
  66.     /**
  67.      * Gets the 10 latest News.
  68.      * "News" are any Topics with a "News" section value.
  69.      * @return The latest 10 News Topics.
  70.      */
  71.     public List getNews() {
  72.         try {
  73.             org.hibernate.Query query = session.createQuery(
  74.                     "FROM Topic " +
  75.                     "WHERE nm_topic_section = 'News' " +
  76.                     "ORDER BY cd_topic DESC");
  77.             query.setMaxResults(10);
  78.  
  79.             return query.list();
  80.         } catch (Exception e) {
  81.             e.printStackTrace();
  82.             return null;
  83.         }
  84.     }
  85.  
  86.     /**
  87.      * Gets all the Forums within a Category
  88.      * @param category
  89.      * @return
  90.      */
  91.     public List getForums(Category category) {
  92.         try {
  93.             org.hibernate.Query query = session.createQuery(
  94.                     "FROM Forum " +
  95.                     "WHERE cd_forum_category =:CATEGORY " +
  96.                     "ORDER BY dt_forum_created DESC");
  97.             query.setLong("CATEGORY", category.getId());
  98.             List forums = query.list();
  99.  
  100.             return forums;
  101.         } catch (Exception e) {
  102.             e.printStackTrace();
  103.             return null;
  104.         }
  105.     }
  106.  
  107.     /**
  108.      * Gets the latest replied Topics.
  109.      * @param maxResults The number of results you want.
  110.      * @return Topics List.
  111.      */
  112.     public List getRecentActiveTopics(int maxResults) {
  113.         try {
  114.             org.hibernate.Query query = session.createQuery(
  115.                     "FROM Topic " +
  116.                     "ORDER BY " +
  117.                     "lastReply.dateReplied DESC, " +
  118.                     "dateCreated DESC");
  119.             query.setMaxResults(maxResults);
  120.  
  121.             return query.list();
  122.         } catch (Exception e) {
  123.             e.printStackTrace();
  124.             return null;
  125.         }
  126.     }
  127.  
  128.     /**
  129.      * Gets the latest created Topics.
  130.      * @param maxResults The number of results you want.
  131.      * @param forumId If you want the topics from a specific Forum, you can pass it's id,
  132.      * otherwise you need to pass in a Query.ALL_FORUMS value.
  133.      * @return A Topic List.
  134.      */
  135.     public List getRecentCreatedTopics(int maxResults, long forumId) {
  136.         try {
  137.             org.hibernate.Query query;
  138.  
  139.             if (forumId == ALL_FORUMS) {
  140.                 query = session.createQuery(
  141.                         "FROM Topic " +
  142.                         "ORDER BY id DESC");
  143.  
  144.             } else {
  145.                 query = session.createQuery(
  146.                         "FROM Topic " +
  147.                         "WHERE forum =:ID " +
  148.                         "ORDER BY id DESC");
  149.  
  150.                 query.setLong("ID", forumId);
  151.             }
  152.             query.setMaxResults(maxResults);
  153.  
  154.             return query.list();
  155.         } catch (Exception e) {
  156.             e.printStackTrace();
  157.             return null;
  158.         }
  159.     }
  160.  
  161.     /**
  162.      * Gets the Topics with the highest view count.
  163.      * @param maxResults Number of results you want.
  164.      * @return Topic List.
  165.      */
  166.     public List getMostViewedTopics(int maxResults) {
  167.         try {
  168.             org.hibernate.Query query = session.createQuery(
  169.                     "FROM Topic " +
  170.                     "ORDER BY vl_topic_times_viewed DESC");
  171.             query.setMaxResults(maxResults);
  172.  
  173.             return query.list();
  174.         } catch (Exception e) {
  175.             e.printStackTrace();
  176.             return null;
  177.         }
  178.     }
  179.  
  180.     /**
  181.      * Gets the most viewed <code>Topic</code>.
  182.      * You can pass in a specific <code>Forum</code> id, or pass a <code>Query.ALL_FORUMS</code> value.
  183.      * @param forumId The <code>Forum</code> id, or Query.ALL_FORUMS.
  184.      * @return A <code>Topic</code>.
  185.      */
  186.     public Topic getMostViewedTopic(long forumId) {
  187.         try {
  188.             org.hibernate.Query query;
  189.             if (forumId == ALL_FORUMS) {
  190.                 query = session.createQuery(
  191.                         "FROM Topic " +
  192.                         "ORDER BY vl_topic_times_viewed DESC");
  193.             } else {
  194.                 query = session.createQuery(
  195.                         "FROM Topic " +
  196.                         "WHERE cd_topic_forum =:ID " +
  197.                         "ORDER BY vl_topic_times_viewed DESC");
  198.                 query.setLong("ID", forumId);
  199.             }
  200.             query.setMaxResults(1);
  201.             Topic topic = (Topic) query.uniqueResult();
  202.  
  203.             return topic;
  204.         } catch (Exception e) {
  205.             e.printStackTrace();
  206.             return null;
  207.         }
  208.     }
  209.  
  210.     /**
  211.      * Gets all replies in a <code>Topic</code>.
  212.      * @param userTopic The <code>Topic</code>.
  213.      * @return <code>Reply</code> <code>List</code>.
  214.      */
  215.     public List getReplies(Topic userTopic) {
  216.         try {
  217.             org.hibernate.Query query = session.createQuery(
  218.                     "FROM Reply " +
  219.                     "WHERE cd_topic =:TOPIC");
  220.             query.setLong("TOPIC", userTopic.getId());
  221.             List replies = query.list();
  222.  
  223.             return replies;
  224.         } catch (Exception e) {
  225.             e.printStackTrace();
  226.             return null;
  227.         }
  228.     }
  229.  
  230.     /**
  231.      * Gets specific <code>Stats</code>.
  232.      * @param statsName The name of the stat you want.
  233.      * @return A <code>Stats</code> object.
  234.      */
  235.     public Stats getStats(String statsName) {
  236.         try {
  237.             Stats stats = (Stats) session.createQuery(
  238.                     "FROM Stats " +
  239.                     "WHERE nm_stats='" + statsName + "'").uniqueResult();
  240.  
  241.             return stats;
  242.         } catch (Exception e) {
  243.             e.printStackTrace();
  244.             return null;
  245.         }
  246.     }
  247.  
  248.     /**
  249.      * Gets a <code>User</code> from a <code>String</code> that
  250.      * represents an E-Mail from a dvlCUBE User.
  251.      * @param mail A <code>String</code> containing and E-Mail address
  252.      * @return
  253.      */
  254.     public User getExistingEmail(String mail) {
  255.         try {
  256.             User user = (User) session.createQuery(
  257.                     "FROM User " +
  258.                     "WHERE cd_user_mail = '" + mail + "'").uniqueResult();
  259.  
  260.             return user;
  261.         } catch (Exception e) {
  262.             e.printStackTrace();
  263.             return null;
  264.         }
  265.     }
  266.  
  267.     /**
  268.      * Gets all Topics in the specified Forum ordered by the date of the last reply on that topic.
  269.      * @param forumId Forum Id
  270.      * @return List containing all the Topics in the specified Forum
  271.      */
  272.     public List getTopics(long forumId) {
  273.         try {
  274.             org.hibernate.Query query = session.createQuery(
  275.                     "FROM Topic " +
  276.                     "WHERE forum =:ID " +
  277.                     "ORDER BY " +
  278.                     "lastReply.dateReplied DESC, " +
  279.                     "dateCreated DESC");
  280.             query.setLong("ID", forumId);
  281.  
  282.             /*Criteria criteria = session.createCriteria(Topic.class);
  283.             criteria.add(Restrictions.eq("forum", forumId));
  284.             criteria.addOrder(Order.desc("lastReply"));
  285.             criteria.addOrder(Order.desc("dateCreated"));*/
  286.  
  287.             List topics = query.list();
  288.             //List topics = criteria.list();
  289.             return topics;
  290.         } catch (Exception e) {
  291.             e.printStackTrace();
  292.             return null;
  293.         }
  294.     }
  295.  
  296.     /**
  297.      * Gets the most recent reply made on the Topic provided.
  298.      * @param topicId The id of Topic desired.
  299.      * @return Returns the most recent reply found. If there's no Reply in the Topic, it returns a default placeholder Reply.
  300.      */
  301.     public Reply getLastReply(long topicId, boolean dummy) {
  302.         try {
  303.             org.hibernate.Query query = session.createQuery(
  304.                     "FROM Reply " +
  305.                     "WHERE cd_topic =:ID " +
  306.                     "ORDER BY dt_replied DESC");
  307.             query.setLong("ID", topicId);
  308.             query.setMaxResults(1);
  309.             Reply reply = (Reply) query.uniqueResult();
  310.  
  311.             if (dummy == true && reply == null) {
  312.                 reply = (Reply) get("beer.model.forum.Reply@1");
  313.             }
  314.  
  315.             return reply;
  316.         } catch (Exception e) {
  317.             e.printStackTrace();
  318.             return null;
  319.         }
  320.     }
  321.  
  322.     /**
  323.      * Gets the last Reply made in a Topic.
  324.      * @param topicId Id of the Topic.
  325.      * @return The Reply.
  326.      */
  327.     public Reply getLastReply(long topicId) {
  328.         try {
  329.             org.hibernate.Query query = session.createQuery(
  330.                     "FROM Reply " +
  331.                     "WHERE cd_topic =:ID " +
  332.                     "ORDER BY dt_replied DESC");
  333.             query.setLong("ID", topicId);
  334.             query.setMaxResults(1);
  335.             Reply reply = (Reply) query.uniqueResult();
  336.  
  337.             return reply;
  338.         } catch (Exception e) {
  339.             e.printStackTrace();
  340.             return null;
  341.         }
  342.     }
  343.  
  344.     @Deprecated
  345.     public Topic getLastTopic() {
  346.         try {
  347.             org.hibernate.Query query = session.createQuery(
  348.                     "FROM Topic " +
  349.                     "WHERE cd_topic_forum =:ID " +
  350.                     "ORDER BY dt_topic_created DESC");
  351.             query.setMaxResults(1);
  352.             Topic topic = (Topic) query.uniqueResult();
  353.  
  354.             return topic;
  355.         } catch (Exception e) {
  356.             e.printStackTrace();
  357.             return null;
  358.         }
  359.     }
  360.  
  361.     /**
  362.      * Gets all Users whose name or mail address matches the String[] item.
  363.      * @param nameOrAddress An array containing names or e-mails from dvlCUBE Users.
  364.      * @return A <code>User List</code>.
  365.      */
  366.     public List getUsers(String[] nameOrAddress) {
  367.         try {
  368.             List<User> users = new ArrayList<User>();
  369.             for (int i = 0; i < nameOrAddress.length; i++) {
  370.                 User user = (User) session.createQuery(
  371.                         "FROM User " +
  372.                         "WHERE " +
  373.                         "cd_user_mail = '" + nameOrAddress[i] + "' OR " +
  374.                         "nm_user = '" + nameOrAddress[i] + "'").uniqueResult();
  375.                 if (user != null) {
  376.                     users.add(user);
  377.                 }
  378.             }
  379.             if (users.size() > 0) {
  380.                 return users;
  381.             } else {
  382.                 return null;
  383.             }
  384.         } catch (Exception e) {
  385.             e.printStackTrace();
  386.             return null;
  387.         }
  388.     }
  389.  
  390.     /**
  391.      * Searches for a single <code>User</code> with the given name.
  392.      * @param nickname
  393.      * @return
  394.      */
  395.     public User getExistingNickname(String nickname) {
  396.         try {
  397.             User user = (User) session.createQuery(
  398.                     "FROM User " +
  399.                     "WHERE nm_user = '" + nickname + "'").uniqueResult();
  400.  
  401.             return user;
  402.         } catch (Exception e) {
  403.             e.printStackTrace();
  404.             return null;
  405.         }
  406.     }
  407.  
  408.     /**
  409.      * Gets a single <code>User</code> with the given e-mail and password.
  410.      * @param login A <code>String</code> array containing the e-mail [0] and password [1].
  411.      * @return A <code>User</code> object.
  412.      */
  413.     public User getRegisteredUser(String[] login) {
  414.         try {
  415.             User user = (User) session.createQuery(
  416.                     "FROM User " +
  417.                     "WHERE " +
  418.                     "cd_user_mail = '" + login[0] + "' AND " +
  419.                     "cd_user_password = '" + login[1] + "'").uniqueResult();
  420.  
  421.             return user;
  422.         } catch (Exception e) {
  423.             e.printStackTrace();
  424.             return null;
  425.         }
  426.     }
  427.  
  428.     /**
  429.      * Gets an <code>Organization</code> object that matches the given name <code>String</code>.
  430.      * @param organizationName
  431.      * @return
  432.      */
  433.     public Organization getOrganization(String organizationName) {
  434.         try {
  435.             Organization organization = (Organization) session.createQuery(
  436.                     "FROM Organization " +
  437.                     "WHERE nm_organization = '" + organizationName + "'").uniqueResult();
  438.  
  439.             return organization;
  440.         } catch (Exception e) {
  441.             e.printStackTrace();
  442.             return null;
  443.         }
  444.     }
  445.  
  446.     /**
  447.      * Gets a single file from a specific <code>User</code>.
  448.      * The user must own the file.
  449.      * @param id The file id;
  450.      * @param userId The <code>User</code> id.
  451.      * @return A <code>Box</code> object.
  452.      */
  453.     public Box getFileFromBox(long id, long userId) {
  454.         try {
  455.             Box box = (Box) session.createQuery(
  456.                     "FROM Box " +
  457.                     "WHERE " +
  458.                     "cd_file = " + id + " AND " +
  459.                     "cd_file_user = " + userId).uniqueResult();
  460.  
  461.             return box;
  462.  
  463.         } catch (Exception e) {
  464.             e.printStackTrace();
  465.             return null;
  466.         }
  467.     }
  468.  
  469.     /**
  470.      * get all boxes from a user.
  471.      * @param user
  472.      * @return
  473.      */
  474.     public List getBoxes(User user) {
  475.         try {
  476.             org.hibernate.Query query = session.createQuery(
  477.                     "SELECT DISTINCT(folder) " +
  478.                     "FROM Box " +
  479.                     "WHERE user = " + user.getId() +
  480.                     " ORDER BY dateCreated DESC");
  481.             List boxes = query.list();
  482.  
  483.             return boxes;
  484.         } catch (Exception e) {
  485.             e.printStackTrace();
  486.             return null;
  487.         }
  488.     }
  489.  
  490.     /**
  491.      * Gets all shared boxes from a <code>User</code>.
  492.      * @param user
  493.      * @return
  494.      */
  495.     public List getSharedBoxes(long user) {
  496.         try {
  497.             org.hibernate.Query query = session.createQuery(
  498.                     "SELECT DISTINCT(folder) " +
  499.                     "FROM Box " +
  500.                     "WHERE user = :USER " +
  501.                     "AND publicFile = true" +
  502.                     " ORDER BY dateCreated DESC");
  503.             query.setLong("USER", user);
  504.             List boxes = query.list();
  505.  
  506.             return boxes;
  507.         } catch (Exception e) {
  508.             e.printStackTrace();
  509.             return null;
  510.         }
  511.     }
  512.  
  513.     /**
  514.      * Get all files from a private folder.
  515.      * @param user
  516.      * @param folder
  517.      * @return
  518.      */
  519.     public List getFilesFrom(User user, String folder) {
  520.         try {
  521.             List files = session.createQuery(
  522.                     "FROM Box " +
  523.                     "WHERE " +
  524.                     "user = " + user.getId() + "AND " +
  525.                     "folder = '" + folder + "' " +
  526.                     "ORDER BY dateCreated DESC").list();
  527.             return files;
  528.         } catch (Exception e) {
  529.             e.printStackTrace();
  530.             return null;
  531.         }
  532.     }
  533.  
  534.     /**
  535.      * Gets all files in a shared folder.
  536.      * Not constrained to a specific <code>User</code>.
  537.      * @param folder <code>Box</code> name.
  538.      * @return All files in a shared folder.
  539.      */
  540.     public List getPublicFilesFrom(String folder) {
  541.         try {
  542.             List files = session.createQuery(
  543.                     "FROM Box " +
  544.                     "WHERE " +
  545.                     "nm_file_folder = '" + folder + "' " +
  546.                     "AND ic_public = 1 " +
  547.                     "ORDER BY dt_file_created DESC").list();
  548.             return files;
  549.         } catch (Exception e) {
  550.             e.printStackTrace();
  551.             return null;
  552.         }
  553.     }
  554.  
  555.     /**
  556.      * Gets all files in a shared <code>User</code> folder.
  557.      * @param user The <code>User</code> you want to browse files from.
  558.      * @param folder <code>Box</code> name.
  559.      * @return All files in a shared folder.
  560.      */
  561.     public List getPublicFilesFrom(long user) {
  562.         try {
  563.             Criteria criteria = session.createCriteria(Box.class);
  564.             criteria.add(Expression.eq("user", user)).add(Expression.eq("publicFile", true)).addOrder(Order.desc("dateCreated"));
  565.             return criteria.list();
  566.         } catch (Exception e) {
  567.             e.printStackTrace();
  568.             return null;
  569.         }
  570.     }
  571.  
  572.     /**
  573.      * Gets all files in a shared <code>User</code> folder.
  574.      * @param user The <code>User</code> you want to browse files from.
  575.      * @param folder <code>Box</code> name.
  576.      * @return All files in a shared folder.
  577.      */
  578.     public List getPublicFilesFrom(User user, String folder) {
  579.         try {
  580.             Criteria criteria = session.createCriteria(Box.class);
  581.             criteria.add(Expression.eq("user", user)).add(Expression.eq("folder", folder)).add(Expression.eq("publicFile", true)).addOrder(Order.desc("dateCreated"));
  582.             return criteria.list();
  583.         } catch (Exception e) {
  584.             e.printStackTrace();
  585.             return null;
  586.         }
  587.     }
  588.  
  589.     /**
  590.      * populate a list of images a user has previously uploaded to a box.
  591.      * @param user
  592.      * @return
  593.      */
  594.     public List getBoxImages(User user) {
  595.         try {
  596.             org.hibernate.Query query = session.createQuery(
  597.                     "SELECT name " +
  598.                     "FROM Box " +
  599.                     "WHERE " +
  600.                     "name = 'default-user.png' OR " +
  601.                     "(type like 'image%' AND " +
  602.                     "user = " + user.getId() + ")" +
  603.                     " ORDER BY name");
  604.             List pictures = query.list();
  605.  
  606.             return pictures;
  607.         } catch (Exception e) {
  608.             e.printStackTrace();
  609.             return null;
  610.         }
  611.     }
  612.  
  613.     /**
  614.      * Gets the default site <code>Theme</code>
  615.      * @return
  616.      */
  617.     public Theme getDefaultTheme() {
  618.         try {
  619.             Theme defaultTheme = (Theme) session.createQuery(
  620.                     "FROM Theme " +
  621.                     "WHERE id = 2").uniqueResult();
  622.  
  623.             return defaultTheme;
  624.  
  625.         } catch (Exception e) {
  626.             e.printStackTrace();
  627.             return null;
  628.         }
  629.     }
  630.  
  631.     public User getUserById(long id) {
  632.         try {
  633.             User user = (User) session.createQuery(
  634.                     "FROM User " +
  635.                     "WHERE id = " + id).uniqueResult();
  636.             return user;
  637.  
  638.         } catch (Exception e) {
  639.             e.printStackTrace();
  640.             return null;
  641.         }
  642.     }
  643.  
  644.     /**
  645.      * Creates a list that can be divided into n pages.
  646.      * @param listStart
  647.      * @param listMaxResults
  648.      * @return
  649.      */
  650.     public List getUsers(int listStart, int listMaxResults) {
  651.         try {
  652.             Criteria criteria = session.createCriteria(User.class).addOrder(Order.desc("totalPosts"));
  653.             criteria.setFirstResult(listStart);
  654.             criteria.setMaxResults(listMaxResults);
  655.  
  656.             List user = criteria.list();
  657.             return user;
  658.  
  659.         } catch (Exception e) {
  660.             e.printStackTrace();
  661.             return null;
  662.         }
  663.     }
  664.  
  665.     /**
  666.      * Creates a list that can be divided into n pages.
  667.      * @param listStart The List will start from this row;
  668.      * @param listMaxResults The list will return this (max) ammount of results;
  669.      * @param order The desired <code>Order</code> object.
  670.      * @return A <code>User List</code>.
  671.      */
  672.     public List getUsers(int listStart, int listMaxResults, Order order) {
  673.         try {
  674.             Criteria criteria = session.createCriteria(User.class).addOrder(order);
  675.             criteria.setFirstResult(listStart);
  676.             criteria.setMaxResults(listMaxResults);
  677.  
  678.             List user = criteria.list();
  679.             return user;
  680.  
  681.         } catch (Exception e) {
  682.             e.printStackTrace();
  683.             return null;
  684.         }
  685.     }
  686.  
  687.     /**
  688.      * This method takes a String and return all beer.model.User's who met the search String.
  689.      * @param search Search string (name attribute).
  690.      * @return Returns a List of users that met the search String.
  691.      */
  692.     public List getUsers(String search) {
  693.         try {
  694.             Criteria criteria = session.createCriteria(User.class);
  695.             criteria.add(Expression.like("name", "%" + search + "%"));
  696.  
  697.             List users = criteria.list();
  698.             return users;
  699.         } catch (Exception e) {
  700.             e.printStackTrace();
  701.             return null;
  702.         }
  703.     }
  704.  
  705.     /**
  706.      * A lighter version for getting existing names in a given Entity. Intended for use in an ajax application.
  707.      * @param param The String to search for.
  708.      * @param entity The Entity.
  709.      * @return A List containing only the String names found.
  710.      */
  711.     public List getNames(String param, String entity) {
  712.         try {
  713.             org.hibernate.Query query = session.createQuery(
  714.                     "SELECT name " +
  715.                     "FROM " + entity +
  716.                     " WHERE name like :PARAM");
  717.             query.setString("PARAM", "%" + param + "%");
  718.  
  719.             return query.list();
  720.         } catch (Exception e) {
  721.             e.printStackTrace();
  722.             return null;
  723.         }
  724.     }
  725.  
  726.     /**
  727.      * This heavier version of <code>getNames()</code> gives more freedom, since it returns the whole Object.
  728.      * Constraint: the Entity must have a <code>name</code> or <code>subject</code> property in its bean.
  729.      * (Currently not working).
  730.      * @param param The String to search for.
  731.      * @param entity The Entity.
  732.      * @return A List that can be cast to whatever type the Entity is.
  733.      */
  734.     public List getNamesLike(String param, String entity) {
  735.         try {
  736.             org.hibernate.Query query;
  737.  
  738.             if (entity.equals("Forum")) {
  739.                 query = session.createQuery(
  740.                         "FROM Forum " +
  741.                         "WHERE name LIKE :PARAM");
  742.             } else if (entity.equals("Topic")) {
  743.                 query = session.createQuery(
  744.                         "FROM Topic " +
  745.                         "WHERE subject LIKE :PARAM");
  746.             } else if (entity.equals("Mail")) {
  747.                 query = session.createQuery(
  748.                         "FROM User " +
  749.                         "WHERE " +
  750.                         "name LIKE :PARAM OR " +
  751.                         "mail LIKE :PARAM");
  752.             } else {
  753.                 return null;
  754.             }
  755.             query.setString("PARAM", "%" + param + "%");
  756.  
  757.             return query.list();
  758.         } catch (Exception e) {
  759.             e.printStackTrace();
  760.             return null;
  761.         }
  762.     }
  763.  
  764.     /**
  765.      * This heavier version of <code>getNames()</code> gives more freedom, since it returns the whole Object.
  766.      * This overloaded version doesn't return results that are already in the collection provided.
  767.      * @param param The String to search for.
  768.      * @param entity The Entity.
  769.      * @param collection A <code>String Array</code> containing the values you don't want
  770.      * this query to return again.
  771.      * @return A List that can be cast according to the Entity name.
  772.      * Returns only the first 35 results.
  773.      */
  774.     public List getNamesLike(String param, String entity, String[] collectionArray) {
  775.         try {
  776.             String collection = Utils.arrayToString(collectionArray);
  777.             org.hibernate.Query query;
  778.             if (entity.equals("Mail")) {
  779.                 query = session.createQuery(
  780.                         "FROM User " +
  781.                         "WHERE " +
  782.                         "name LIKE :PARAM OR " +
  783.                         "mail LIKE :PARAM " +
  784.                         "AND mail NOT IN(:COLLECTION)");
  785.             } else {
  786.                 return null;
  787.             }
  788.             query.setString("PARAM", "%" + param + "%");
  789.             query.setString("COLLECTION", collection);
  790.             query.setMaxResults(35);
  791.  
  792.             return query.list();
  793.         } catch (Exception e) {
  794.             e.printStackTrace();
  795.             return null;
  796.         }
  797.     }
  798.  
  799.     /**
  800.      * Tentativa usando criteria. Currently not fully working.
  801.      * @param param
  802.      * @param entity
  803.      * @param collectionArray
  804.      * @return
  805.      */
  806.     public List getNamesLike2(String param, String entity, String[] collectionArray) {
  807.         try {
  808.             Criteria criteria = session.createCriteria(User.class);
  809.             criteria.add(Expression.ilike("name", "%" + param + "%")).add(Expression.ilike("mail", "%" + param + "%")).add(Restrictions.not(Expression.in("mail", collectionArray)));
  810.             return criteria.list();
  811.         } catch (Exception e) {
  812.             e.printStackTrace();
  813.             return null;
  814.         }
  815.     }
  816.  
  817.     /**
  818.      * Searches for content in Replies or Topics.
  819.      * @param param
  820.      * @param entity Can be Reply or Topic
  821.      * @return
  822.      */
  823.     public List getContentLike(String param, String entity) {
  824.         try {
  825.             org.hibernate.Query query = session.createQuery(
  826.                     "FROM " + entity +
  827.                     " WHERE content like :PARAM");
  828.             query.setString("PARAM", "%" + param + "%");
  829.  
  830.             return query.list();
  831.         } catch (Exception e) {
  832.             e.printStackTrace();
  833.             return null;
  834.         }
  835.     }
  836.  
  837.     public Comment getComment(long commentId, long userId) {
  838.         try {
  839.             Comment comment = (Comment) session.createQuery(
  840.                     "FROM Comment " +
  841.                     "WHERE cd_comment = " + commentId +
  842.                     " AND cd_user = " + userId).uniqueResult();
  843.  
  844.             return comment;
  845.  
  846.         } catch (Exception e) {
  847.             e.printStackTrace();
  848.             return null;
  849.         }
  850.  
  851.     }
  852.  
  853.     public List getMessages(String folder, User user) {
  854.         try {
  855.             org.hibernate.Query query = session.createQuery(
  856.                     "FROM Message " +
  857.                     "WHERE cd_message_user =:USER AND " +
  858.                     "nm_message_folder =:FOLDER " +
  859.                     "ORDER BY dt_message_sent DESC");
  860.             query.setLong("USER", user.getId());
  861.             query.setString("FOLDER", folder);
  862.  
  863.             List messages = query.list();
  864.  
  865.             return messages;
  866.         } catch (Exception e) {
  867.             e.printStackTrace();
  868.             return null;
  869.         }
  870.     }
  871.  
  872.     public Long getNewMessages(String folder, long userId) {
  873.         try {
  874.             Long newMessages = (Long) session.createQuery(
  875.                     "SELECT COUNT(read) " +
  876.                     "FROM Message " +
  877.                     "WHERE " +
  878.                     "cd_message_user = " + userId +
  879.                     " AND " +
  880.                     "nm_message_folder = '" + folder + "' " +
  881.                     "AND " +
  882.                     "ic_message_read < 1").uniqueResult();
  883.  
  884.             return newMessages;
  885.         } catch (Exception e) {
  886.             e.printStackTrace();
  887.             return null;
  888.         }
  889.     }
  890.  
  891.     @Deprecated
  892.     public List getMessages2(String folder, User user) {
  893.         try {
  894.             org.hibernate.Query query = session.createQuery(
  895.                     "SELECT " +
  896.                     "cd_message, " +
  897.                     "cd_message_user, " +
  898.                     "nm_message_content, " +
  899.                     "cd_message_sender, " +
  900.                     "cd_message_recipient, " +
  901.                     "nm_message_subject, " +
  902.                     "cd_message_folder, " +
  903.                     "ic_message_read, " +
  904.                     "dt_message_sent " +
  905.                     "FROM Message m, Folder f " +
  906.                     "WHERE " +
  907.                     "m.cd_message_user = f.cd_folder_user " +
  908.                     "AND " +
  909.                     "f.nm_folder = '" + folder + "' " +
  910.                     "AND " +
  911.                     "m.cd_message_user = " + user.getId());
  912.  
  913.             List messages = query.list();
  914.             return messages;
  915.         } catch (Exception e) {
  916.             e.printStackTrace();
  917.             return null;
  918.         }
  919.     }
  920.  
  921.     @Deprecated
  922.     public Folder getFolder(Folder userFolder) {
  923.         try {
  924.             Folder folder = (Folder) session.createQuery(
  925.                     "FROM Folder " +
  926.                     "WHERE nm_folder = '" + userFolder.getName() + "' " +
  927.                     "AND cd_folder_user = " + userFolder.getUser().getId()).uniqueResult();
  928.  
  929.             return folder;
  930.         } catch (Exception e) {
  931.             e.printStackTrace();
  932.             return null;
  933.         }
  934.     }
  935.  
  936.     public List getMailFolders(User user) {
  937.         try {
  938.             org.hibernate.Query query = session.createQuery(
  939.                     "SELECT DISTINCT(folder) " +
  940.                     "FROM Message " +
  941.                     "WHERE " +
  942.                     "cd_message_user = " + user.getId() +
  943.                     " ORDER BY nm_message_folder ASC");
  944.  
  945.             List folders = query.list();
  946.             return folders;
  947.         } catch (Exception e) {
  948.             e.printStackTrace();
  949.             return null;
  950.         }
  951.     }
  952.  
  953.     public Long getMailFolderSize(String folder, long userId) {
  954.         try {
  955.             Long size = (Long) session.createQuery(
  956.                     "SELECT COUNT(id) " +
  957.                     "FROM Message " +
  958.                     "WHERE " +
  959.                     "nm_message_folder = '" + folder + "' " +
  960.                     "AND " +
  961.                     "cd_message_user = " + userId).uniqueResult();
  962.             return size;
  963.         } catch (Exception e) {
  964.             e.printStackTrace();
  965.             return null;
  966.         }
  967.     }
  968.  
  969.     /**
  970.      * Gets all the Forums created by the given User.
  971.      * @param user The User object.
  972.      * @return All the Forums that User has created.
  973.      */
  974.     public List getUserForums(User user) {
  975.         try {
  976.             Criteria criteria = session.createCriteria(Forum.class);
  977.             criteria.add(Restrictions.eq("author", user));
  978.  
  979.             return criteria.list();
  980.         } catch (Exception e) {
  981.             e.printStackTrace();
  982.             return null;
  983.         }
  984.     }
  985.  
  986.     public List getUserContacts(User user) {
  987.         try {
  988.             List<User> contacts = new ArrayList<User>();
  989.             org.hibernate.Query queryRecipients = session.createQuery(
  990.                     "SELECT DISTINCT(recipient) " +
  991.                     "FROM Message " +
  992.                     "WHERE cd_message_user = " + user.getId());
  993.  
  994.             org.hibernate.Query querySenders = session.createQuery(
  995.                     "SELECT DISTINCT(sender) " +
  996.                     "FROM Message " +
  997.                     "WHERE cd_message_user = " + user.getId());
  998.  
  999.             List<User> contactsA = queryRecipients.list();
  1000.             List<User> contactsB = querySenders.list();
  1001.             contacts.addAll(contactsA);
  1002.             for (int i = 0; i < contactsB.size(); i++) {
  1003.                 if (!(contactsA.contains(contactsB.get(i)))) {
  1004.                     contacts.add(contactsB.get(i));
  1005.                 }
  1006.             }
  1007.             return contacts;
  1008.         } catch (Exception e) {
  1009.             e.printStackTrace();
  1010.             return null;
  1011.         }
  1012.     }
  1013.  
  1014.     /**
  1015.      * Gets the number of unread messages from a specific user Inbox.
  1016.      * @param user The user.
  1017.      * @return A Long with the number of unread messages.
  1018.      */
  1019.     public Long getNewMessages(long userId) {
  1020.         try {
  1021.             Long newMessages = (Long) session.createQuery(
  1022.                     "SELECT COUNT(id) " +
  1023.                     "FROM Message " +
  1024.                     "WHERE " +
  1025.                     "user.id =:ID AND " +
  1026.                     "folder = 'Inbox' AND " +
  1027.                     "read = false").setLong("ID", userId).uniqueResult();
  1028.  
  1029.             return newMessages;
  1030.         } catch (Exception e) {
  1031.             e.printStackTrace();
  1032.             return null;
  1033.         }
  1034.     }
  1035.  
  1036.     /**
  1037.      * Gets a <code>Group</code> with the given owner and name.
  1038.      * @param user The owner of the <code>Group</code>;
  1039.      * @param name The name of the <code>Group</code>.
  1040.      * @return The <code>Group</code>, if any.
  1041.      */
  1042.     public Group getGroup(User user, String name) {
  1043.         try {
  1044.             Criteria criteria = session.createCriteria(Group.class);
  1045.             criteria.add(Restrictions.eq("owner", user));
  1046.             criteria.add(Restrictions.eq("name", name));
  1047.  
  1048.             if (criteria != null) {
  1049.                 return (Group) criteria.uniqueResult();
  1050.             } else {
  1051.                 return null;
  1052.             }
  1053.         } catch (Exception e) {
  1054.             e.printStackTrace();
  1055.             return null;
  1056.         }
  1057.     }
  1058.  
  1059.     /**
  1060.      * Gets all <code>Group</code>s created by the given <code>User</code>.
  1061.      * @param user The <code>User</code>.
  1062.      * @return <code>Group List</code>.
  1063.      */
  1064.     public List getGroups(User user) {
  1065.         try {
  1066.             Criteria criteria = session.createCriteria(Group.class);
  1067.             criteria.add(Restrictions.eq("owner", user));
  1068.             return criteria.list();
  1069.         } catch (Exception e) {
  1070.             e.printStackTrace();
  1071.             return null;
  1072.         }
  1073.     }
  1074.  
  1075.     /**
  1076.      * Gets all <code>GroupMemberships</code> in the given <code>Group</code>.
  1077.      * @param group The <code>Group</code>.
  1078.      * @return <code>GroupMembership List</code>.
  1079.      */
  1080.     public List getMemberships(Group group) {
  1081.         try {
  1082.             Criteria criteria = session.createCriteria(GroupMembership.class);
  1083.             criteria.add(Restrictions.eq("group", group));
  1084.             return criteria.list();
  1085.         } catch (Exception e) {
  1086.             e.printStackTrace();
  1087.             return null;
  1088.         }
  1089.     }
  1090.  
  1091.     /**
  1092.      * Gets all <code>GroupMemberships</code> in the given <code>Group</code>
  1093.      * that has the given <code>User</code> as a member.
  1094.      * @param group The <code>Group</code>.
  1095.      * @param user The <code>User</code> member.
  1096.      * @return <code>GroupMembership List</code>.
  1097.      */
  1098.     public List getMembership(Group group, User member) {
  1099.         try {
  1100.             Criteria criteria = session.createCriteria(GroupMembership.class);
  1101.             criteria.add(Restrictions.eq("group", group));
  1102.             criteria.add(Restrictions.eq("member", member));
  1103.             if (criteria.list().size() > 0) {
  1104.                 return criteria.list();
  1105.             } else {
  1106.                 return null;
  1107.             }
  1108.         } catch (Exception e) {
  1109.             e.printStackTrace();
  1110.             return null;
  1111.         }
  1112.     }
  1113.  
  1114.     /**
  1115.      * Checks if a <code>GroupMembership</code> already exists to avoid duplicates.
  1116.      * Deprecated. Use getMembership(Group, User) instead.
  1117.      * @param group The <code>Group</code>;
  1118.      * @param user The <code>User</code>.
  1119.      * @return Whether there's a membership beetween these two objects.
  1120.      */
  1121.     @Deprecated
  1122.     public boolean membershipExists(Group group, User user) {
  1123.         try {
  1124.             org.hibernate.Query query = session.createQuery(
  1125.                     "FROM GroupMembership " +
  1126.                     "WHERE " +
  1127.                     "cd_group = :GROUPID AND " +
  1128.                     "cd_member = :USERID");
  1129.             query.setLong("GROUPID", group.getId());
  1130.             query.setLong("USERID", user.getId());
  1131.  
  1132.             if (query.list() == null) {
  1133.                 return false;
  1134.             } else {
  1135.                 return true;
  1136.             }
  1137.         } catch (Exception e) {
  1138.             e.printStackTrace();
  1139.             return false;
  1140.         }
  1141.     }
  1142.  
  1143.     /**
  1144.      * Gets the latest <code>Topic</code>s from the Tips section.
  1145.      * @param maxResults The number of <code>Topic</code>s to be returned.
  1146.      * @return A <code>Topic List</code>.
  1147.      */
  1148.     public List<Topic> getTips(int maxResults) {
  1149.         try {
  1150.             Criteria criteria = session.createCriteria(Topic.class);
  1151.             criteria.add(Restrictions.eq("section", "Tips"));
  1152.             criteria.setMaxResults(maxResults);
  1153.  
  1154.             return criteria.list();
  1155.         } catch (Exception e) {
  1156.             e.printStackTrace();
  1157.             return null;
  1158.         }
  1159.     }
  1160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement