/PhaseBook/src/phasebook/user/PhasebookUserBean.java

https://github.com/rplopes/j2ee_ejb · Java · 438 lines · 374 code · 54 blank · 10 comment · 29 complexity · d1e2868ff8f99e3eb3b2ab829c286b95 MD5 · raw file

  1. package phasebook.user;
  2. import java.security.NoSuchAlgorithmException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7. import javax.ejb.Stateless;
  8. import javax.persistence.EntityManager;
  9. import javax.persistence.EntityManagerFactory;
  10. import javax.persistence.EntityTransaction;
  11. import javax.persistence.NoResultException;
  12. import javax.persistence.NonUniqueResultException;
  13. import javax.persistence.Persistence;
  14. import javax.persistence.Query;
  15. import phasebook.friendship.Friendship;
  16. import phasebook.photo.Photo;
  17. import phasebook.photo.PhotoBean;
  18. import phasebook.post.Post;
  19. import phasebook.auth.Auth;
  20. import phasebook.email.*;
  21. /**
  22. * Session Bean implementation class PhasebookUserBean
  23. */
  24. @Stateless
  25. public class PhasebookUserBean implements PhasebookUserRemote {
  26. /**
  27. * Default constructor.
  28. */
  29. public PhasebookUserBean() {
  30. }
  31. public int create(String name, String email, String password)
  32. {
  33. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  34. EntityManager em = emf.createEntityManager();
  35. EntityTransaction tx = em.getTransaction();
  36. // Return -1 if email already exists
  37. try {
  38. Query q = em.createQuery("SELECT u FROM PhasebookUser u " +
  39. "WHERE u.email LIKE :email");
  40. q.setParameter("email",email);
  41. PhasebookUser user = ((PhasebookUser)q.getSingleResult());
  42. em.close();
  43. emf.close();
  44. return -1;
  45. } catch(NoResultException ex){
  46. } catch(NonUniqueResultException ex){
  47. em.close();
  48. emf.close();
  49. return -1;
  50. }
  51. tx.begin();
  52. PhasebookUser user = new PhasebookUser(name, email, password);
  53. em.persist(user);
  54. em.refresh(user);
  55. tx.commit();
  56. int id = user.getId();
  57. em.close();
  58. emf.close();
  59. return id;
  60. }
  61. /* (non-Javadoc)
  62. * @see phasebook.user.PhasebookUserRemote#login(java.lang.String, java.lang.String)
  63. */
  64. public int login(String email, String password)
  65. {
  66. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  67. EntityManager em = emf.createEntityManager();
  68. try {
  69. int returnValue = -1;
  70. Query q = em.createQuery("SELECT u FROM PhasebookUser u " +
  71. "WHERE u.email LIKE :email AND " +
  72. "u.password LIKE :password");
  73. q.setParameter("email",email);
  74. q.setParameter("password",password);
  75. PhasebookUser user = ((PhasebookUser)q.getSingleResult());
  76. em.merge(user);
  77. em.refresh(user);
  78. em.close();
  79. emf.close();
  80. return user.getId();
  81. } catch(NoResultException ex){
  82. em.close();
  83. emf.close();
  84. return -1;
  85. } catch(NonUniqueResultException ex){
  86. em.close();
  87. emf.close();
  88. return -1;
  89. }
  90. }
  91. public List<Post> getUserReceivedPosts(Object userId,
  92. Object authId, Object authPass)
  93. {
  94. if (Auth.authenticate(authId, authPass))
  95. return null;
  96. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  97. EntityManager em = emf.createEntityManager();
  98. PhasebookUser user = em.find(PhasebookUser.class, Integer.parseInt(userId.toString()));
  99. try{
  100. Query q = em.createQuery("SELECT u FROM Post u " +
  101. "WHERE u.toUser LIKE :user AND " +
  102. "u.deletedAt is NULL");
  103. q.setParameter("user",user);
  104. em.clear();
  105. emf.close();
  106. return q.getResultList();
  107. } catch(NoResultException e){
  108. em.close();
  109. emf.close();
  110. List<Post> empty = new ArrayList<Post>();
  111. return empty;
  112. }
  113. }
  114. public List getUserPublicPosts(Object userId,
  115. Object authId, Object authPass)
  116. {
  117. if (Auth.authenticate(authId, authPass))
  118. return null;
  119. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  120. EntityManager em = emf.createEntityManager();
  121. PhasebookUser user = em.find(PhasebookUser.class, Integer.parseInt(userId.toString()));
  122. try{
  123. Query q = em.createQuery("SELECT u FROM Post u " +
  124. "WHERE u.toUser LIKE :user AND " +
  125. "u.private_ = :private_ AND u.deletedAt is NULL");
  126. q.setParameter("user",user);
  127. q.setParameter("private_",false);
  128. em.clear();
  129. emf.close();
  130. return q.getResultList();
  131. } catch(NoResultException e){
  132. em.close();
  133. emf.close();
  134. List<Post> empty = new ArrayList<Post>();
  135. return empty;
  136. }
  137. }
  138. public PhasebookUser getUserById(Object id,
  139. Object authId, Object authPass)
  140. {
  141. if (Auth.authenticate(authId, authPass))
  142. return null;
  143. int userId = Integer.parseInt(id.toString());
  144. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  145. EntityManager em = emf.createEntityManager();
  146. try {
  147. PhasebookUser user = em.find(PhasebookUser.class, userId);
  148. em.persist(user);
  149. em.refresh(user);
  150. em.close();
  151. emf.close();
  152. return user;
  153. } catch(NoResultException ex){
  154. em.close();
  155. emf.close();
  156. return null;
  157. } catch(NonUniqueResultException ex){
  158. em.close();
  159. emf.close();
  160. return null;
  161. }
  162. }
  163. public List getUsersFromSearch(Object search,
  164. Object authId, Object authPass)
  165. {
  166. if (Auth.authenticate(authId, authPass))
  167. return null;
  168. List users = new ArrayList();
  169. List results = new ArrayList();
  170. String s = search.toString().toLowerCase();
  171. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  172. EntityManager em = emf.createEntityManager();
  173. try {
  174. Query q = em.createQuery("SELECT u FROM PhasebookUser u ");
  175. users = q.getResultList();
  176. if (s != null)
  177. {
  178. Pattern pattern = Pattern.compile(s);
  179. for (int i=0; i<users.size(); i++)
  180. {
  181. PhasebookUser user = (PhasebookUser)users.get(i);
  182. boolean found = false;
  183. Matcher matcher = pattern.matcher(user.getName().toLowerCase());
  184. if (matcher.find())
  185. found = true;
  186. matcher = pattern.matcher(user.getEmail().toLowerCase());
  187. if (matcher.find())
  188. found = true;
  189. if (found)
  190. results.add(user);
  191. }
  192. }
  193. em.close();
  194. emf.close();
  195. return results;
  196. } catch (Exception e) {
  197. em.close();
  198. emf.close();
  199. return users;
  200. }
  201. }
  202. public void addPost(PhasebookUser from, PhasebookUser to, String text, String privacy,
  203. Object authId, Object authPass)
  204. {
  205. if (Auth.authenticate(authId, authPass))
  206. return;
  207. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  208. EntityManager em = emf.createEntityManager();
  209. EntityTransaction tx = em.getTransaction();
  210. tx.begin();
  211. Post post = new Post(from, to, text, privacy);
  212. em.persist(post);
  213. em.refresh(post);
  214. tx.commit();
  215. em.close();
  216. emf.close();
  217. if(!from.equals(to))
  218. EmailUtils.postSent(to, from, text, null, getNUnreadUserPosts(to, authId, authPass));
  219. }
  220. public void addPost(PhasebookUser from, PhasebookUser to, String text, String photoLink, String privacy,
  221. Object authId, Object authPass)
  222. {
  223. if (Auth.authenticate(authId, authPass))
  224. return;
  225. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  226. EntityManager em = emf.createEntityManager();
  227. EntityTransaction tx = em.getTransaction();
  228. tx.begin();
  229. Photo photo = new Photo(photoLink);
  230. em.persist(photo);
  231. em.refresh(photo);
  232. Post post = new Post(from, to, text, photo, privacy);
  233. em.persist(post);
  234. em.refresh(post);
  235. tx.commit();
  236. if(!from.equals(to))
  237. EmailUtils.postSent(to, from, text, photo, getNUnreadUserPosts(to, authId, authPass));
  238. em.close();
  239. emf.close();
  240. }
  241. public Photo addPhoto(String photoLink,
  242. Object authId, Object authPass)
  243. {
  244. if (Auth.authenticate(authId, authPass))
  245. return null;
  246. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  247. EntityManager em = emf.createEntityManager();
  248. EntityTransaction tx = em.getTransaction();
  249. tx.begin();
  250. Photo photo = new Photo(photoLink);
  251. em.persist(photo);
  252. em.refresh(photo);
  253. tx.commit();
  254. em.close();
  255. emf.close();
  256. return photo;
  257. }
  258. public void invite(PhasebookUser hostUser, PhasebookUser invitedUser,
  259. Object authId, Object authPass)
  260. {
  261. if (Auth.authenticate(authId, authPass))
  262. return;
  263. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  264. EntityManager em = emf.createEntityManager();
  265. EntityTransaction tx = em.getTransaction();
  266. tx.begin();
  267. Friendship fship = new Friendship(hostUser, invitedUser);
  268. em.persist(fship);
  269. em.refresh(fship);
  270. tx.commit();
  271. EmailUtils.sentInvite(hostUser, invitedUser);
  272. em.close();
  273. emf.close();
  274. }
  275. public void setProfilePicture(PhasebookUser user, Photo photo,
  276. Object authId, Object authPass)
  277. {
  278. if (Auth.authenticate(authId, authPass))
  279. return;
  280. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  281. EntityManager em = emf.createEntityManager();
  282. EntityTransaction tx = em.getTransaction();
  283. tx.begin();
  284. em.merge(user);
  285. user.setPhoto(photo);
  286. em.merge(user);
  287. tx.commit();
  288. em.close();
  289. emf.close();
  290. }
  291. public void deposit(Object id, Float money,
  292. Object authId, Object authPass)
  293. {
  294. if (Auth.authenticate(authId, authPass))
  295. return;
  296. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  297. EntityManager em = emf.createEntityManager();
  298. EntityTransaction tx = em.getTransaction();
  299. tx.begin();
  300. PhasebookUser user = getUserById(id, authId, authPass);
  301. user.setMoney(user.getMoney() + money);
  302. em.merge(user);
  303. tx.commit();
  304. em.close();
  305. emf.close();
  306. }
  307. public List<PhasebookUser> getUserFriendships(String id,
  308. Object authId, Object authPass)
  309. {
  310. if (Auth.authenticate(authId, authPass))
  311. return null;
  312. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  313. EntityManager em = emf.createEntityManager();
  314. PhasebookUser user = em.find(PhasebookUser.class, Integer.parseInt(id.toString()));
  315. em.persist(user);
  316. em.refresh(user);
  317. List friends1 = user.getReceivedInvites();
  318. List friends2 = user.getSentInvites();
  319. List<PhasebookUser> friends = new ArrayList<PhasebookUser>();
  320. for (int i=0; i<friends1.size(); i++){
  321. Friendship friendship = (Friendship) friends1.get(i);
  322. em.persist(friendship);
  323. if (friendship.isAccepted_())
  324. friends.add(friendship.getHostUser());
  325. }
  326. for (int i=0; i<friends2.size(); i++){
  327. Friendship friendship = (Friendship) friends2.get(i);
  328. em.persist(friendship);
  329. if (friendship.isAccepted_())
  330. friends.add(friendship.getInvitedUser());
  331. }
  332. em.close();
  333. emf.close();
  334. return friends;
  335. }
  336. public void editAccount(Object id, String name, String photo, String password,
  337. Object authId, Object authPass)
  338. {
  339. if (Auth.authenticate(authId, authPass))
  340. return;
  341. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  342. EntityManager em = emf.createEntityManager();
  343. EntityTransaction tx = em.getTransaction();
  344. tx.begin();
  345. PhasebookUser user = getUserById(id, authId, authPass);
  346. user.setName(name);
  347. PhotoBean photoEJB = new PhotoBean();
  348. user.setPhoto(photoEJB.getPhotoById(photo, authId, authPass));
  349. if (password != null && password.length() > 0)
  350. user.setPassword(password);
  351. em.merge(user);
  352. tx.commit();
  353. em.close();
  354. emf.close();
  355. }
  356. public int getNUnreadUserPosts(PhasebookUser user,
  357. Object authId, Object authPass)
  358. {
  359. if (Auth.authenticate(authId, authPass))
  360. return -1;
  361. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  362. EntityManager em = emf.createEntityManager();
  363. List<?> posts = null;
  364. Query q = em.createQuery("SELECT u FROM Post u WHERE u.toUser = :user AND u.read_ = :status AND u.deletedAt = NULL");
  365. q.setParameter("user",user);
  366. q.setParameter("status",false);
  367. int result = q.getResultList().size();
  368. em.close();
  369. emf.close();
  370. return result;
  371. }
  372. public Photo getUserPhoto(PhasebookUser user,
  373. Object authId, Object authPass)
  374. {
  375. if (Auth.authenticate(authId, authPass))
  376. return null;
  377. EntityManagerFactory emf = Persistence.createEntityManagerFactory("PhaseBook");
  378. EntityManager em = emf.createEntityManager();
  379. em.merge(user);
  380. em.close();
  381. emf.close();
  382. return user.getPhoto();
  383. }
  384. }