package com.proudcase.managedbean; import com.google.code.morphia.Key; import com.proudcase.constants.Constants; import com.proudcase.filehandling.PropertyReader; import com.proudcase.mongodb.manager.FriendInvitationManager; import com.proudcase.mongodb.manager.ManagerFactory; import com.proudcase.mongodb.manager.UserManager; import com.proudcase.persistence.FriendInvitationBean; import com.proudcase.persistence.UserBean; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; /** * Copyright © 03.07.2013 Michel Vocks * This file is part of proudcase. * proudcase is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * proudcase is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with proudcase. If not, see <http://www.gnu.org/licenses/>. /** * @Author: Michel Vocks * * @Date: 03.07.2013 * * @Encoding: UTF-8 */ @ManagedBean @ViewScoped public class FriendsBean implements Serializable { @ManagedProperty(value = "#{sessionBean}") private SessionBean sessionBean; private UserBean userToSearch; transient private UserManager userManager = ManagerFactory.createUserManager(); transient private FriendInvitationManager friendInvitationManager = ManagerFactory.createFriendInvitationManager(); private List<UserBean> friendsList = new ArrayList<>(); private String searchCriteria; private String friendInvitationText; @PostConstruct public void init() { // retrieve the current logged user FacesContext fCtx = FacesContext.getCurrentInstance(); UserBean loggedUser = (UserBean) fCtx.getExternalContext().getSessionMap().get(Constants.AUTH_KEY); // something wrong here if (loggedUser == null || loggedUser.getId() == null) { return; } // get all friends (but from the db) friendsList = userManager.getFriends(loggedUser); // no friends? empty list if (friendsList == null) { friendsList = new ArrayList<>(); } } public boolean checkCapableToBeFriend(UserBean friend) { // initial check if (friend == null) { return false; } // already a friend? // this is called on initital load, so we take the saved list // it should now be valid for (UserBean singleUser : friendsList) { if (singleUser.getId().equals(friend.getId())) { return false; } } // not a friend. So display the add friend button return true; } public void addAsFriend(UserBean friend) { // retrieve the current logged user FacesContext fCtx = FacesContext.getCurrentInstance(); UserBean loggedUser = (UserBean) fCtx.getExternalContext().getSessionMap().get(Constants.AUTH_KEY); // initial check if (friend == null || loggedUser == null) { return; } // initialize private variables String outPutText; String outPutHeader; // already a friend? (extra check here) if (userManager.isFriend(loggedUser, friend)) { outPutText = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "friend_invitation_fail_text", null, sessionBean.getUserLocale()); outPutHeader = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "friend_invitation_fail_head", null, sessionBean.getUserLocale()); fCtx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, outPutHeader, outPutText)); return; } // ask, if there is already an invitation FriendInvitationBean friendInvitation = friendInvitationManager.getFriendInvitation(loggedUser, friend); if (friendInvitation != null && friendInvitation.getId() != null) { // throw up a message that already an invitation was send outPutText = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "invitation_already_send_text", null, sessionBean.getUserLocale()); outPutHeader = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "invitation_already_send_head", null, sessionBean.getUserLocale()); fCtx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, outPutHeader, outPutText)); // out return; } // maybe the friend has already send an invitation? friendInvitation = friendInvitationManager.getFriendInvitation(friend, loggedUser); if (friendInvitation != null && friendInvitation.getId() != null) { // throw up a message that your friend has already send an invitation outPutText = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "friend_invitation_send_text", null, sessionBean.getUserLocale()); outPutHeader = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "friend_invitation_send_head", null, sessionBean.getUserLocale()); fCtx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, outPutHeader, outPutText)); // out return; } // if we are here, set up an invitation FriendInvitationBean friendInvitationBean = new FriendInvitationBean(); friendInvitationBean.setInvitationText(friendInvitationText); friendInvitationBean.setUserGotInvitation(friend); friendInvitationBean.setUserSendInvitation(loggedUser); // save in the database Key<FriendInvitationBean> save = friendInvitationManager.save(friendInvitationBean); // success? if (save != null && save.getId() != null) { outPutText = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "friend_invitation_success_text", null, sessionBean.getUserLocale()); outPutHeader = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "friend_invitation_success_head", null, sessionBean.getUserLocale()); fCtx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, outPutHeader, outPutText)); } else { // no success outPutText = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "friend_invitation_fail_text", null, sessionBean.getUserLocale()); outPutHeader = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "friend_invitation_fail_head", null, sessionBean.getUserLocale()); fCtx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, outPutHeader, outPutText)); } } public void removeFriend(UserBean friend) { // retrieve the current logged user FacesContext fCtx = FacesContext.getCurrentInstance(); UserBean loggedUser = (UserBean) fCtx.getExternalContext().getSessionMap().get(Constants.AUTH_KEY); if (friend == null || friend.getId() == null) { return; } if (loggedUser == null || loggedUser.getId() == null) { return; } // remove the friend from our list friendsList.remove(friend); // remove the relationship on both sides boolean firstSuccess = userManager.removeFriendRelationship(loggedUser, friend); boolean secondSuccess = userManager.removeFriendRelationship(friend, loggedUser); if (!firstSuccess && !secondSuccess) { String label = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "error_db_connection", null, sessionBean.getUserLocale()); fCtx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "", label)); } else { String label = PropertyReader.getMessageResourceString(fCtx.getApplication(). getMessageBundle(), "message_success_friend_removed", null, sessionBean.getUserLocale()); fCtx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "", label)); } } public List<UserBean> getFriendsList() { return friendsList; } public void setFriendsList(List<UserBean> friendsList) { this.friendsList = friendsList; } public UserBean getUserToSearch() { return userToSearch; } public void setUserToSearch(UserBean userToSearch) { this.userToSearch = userToSearch; } public String getFriendInvitationText() { return friendInvitationText; } public void setFriendInvitationText(String friendInvitationText) { this.friendInvitationText = friendInvitationText; } public SessionBean getSessionBean() { return sessionBean; } public void setSessionBean(SessionBean sessionBean) { this.sessionBean = sessionBean; } public String getSearchCriteria() { return searchCriteria; } public void setSearchCriteria(String searchCriteria) { this.searchCriteria = searchCriteria; } }