package org.sakaiproject.profile2.logic; import java.util.Calendar; import java.util.Date; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.sakaiproject.profile2.dao.ProfileDao; import org.sakaiproject.profile2.model.ProfilePrivacy; import org.sakaiproject.profile2.model.ProfileStatus; import org.sakaiproject.profile2.util.ProfileUtils; /** * Implementation of ProfileStatusLogic API * * @author Steve Swinsburg (steve.swinsburg@gmail.com) * */ public class ProfileStatusLogicImpl implements ProfileStatusLogic { private static final Logger log = Logger.getLogger(ProfileStatusLogicImpl.class); /** * {@inheritDoc} */ public ProfileStatus getUserStatus(final String userUuid, ProfilePrivacy privacy) { //check privacy if(privacy == null){ return null; } String currentUserUuid = sakaiProxy.getCurrentUserId(); //if not same, check privacy if(!StringUtils.equals(userUuid, currentUserUuid)) { //friend? boolean friend = connectionsLogic.isUserXFriendOfUserY(userUuid, currentUserUuid); //check allowed if(!privacyLogic.isUserXStatusVisibleByUserY(userUuid, privacy, currentUserUuid, friend)){ return null; } } // compute oldest date for status Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_YEAR, -7); final Date oldestStatusDate = cal.getTime(); //get data ProfileStatus status = dao.getUserStatus(userUuid, oldestStatusDate); if(status == null){ return null; } //format the date field if(status.getDateAdded() != null){ status.setDateFormatted(ProfileUtils.convertDateForStatus(status.getDateAdded())); } return status; } /** * {@inheritDoc} */ public ProfileStatus getUserStatus(final String userUuid) { return getUserStatus(userUuid, privacyLogic.getPrivacyRecordForUser(userUuid)); } /** * {@inheritDoc} */ public boolean setUserStatus(String userId, String status) { //create object ProfileStatus profileStatus = new ProfileStatus(userId,status,new Date()); return setUserStatus(profileStatus); } /** * {@inheritDoc} */ public boolean setUserStatus(ProfileStatus profileStatus) { //current user must be the user making the request if(!StringUtils.equals(sakaiProxy.getCurrentUserId(), profileStatus.getUserUuid())) { throw new SecurityException("You are not authorised to perform that action."); } //PRFL-588 ensure size limit. Column size is 255. String tMessage = ProfileUtils.truncate(profileStatus.getMessage(), 255, false); profileStatus.setMessage(tMessage); if(dao.setUserStatus(profileStatus)){ log.info("Updated status for user: " + profileStatus.getUserUuid()); return true; } return false; } /** * {@inheritDoc} */ public boolean clearUserStatus(String userId) { ProfileStatus profileStatus = getUserStatus(userId); if(profileStatus == null){ log.error("ProfileStatus null for userId: " + userId); return false; } //current user must be the user making the request if(!StringUtils.equals(sakaiProxy.getCurrentUserId(), profileStatus.getUserUuid())) { throw new SecurityException("You are not authorised to perform that action."); } if(dao.clearUserStatus(profileStatus)) { log.info("User: " + userId + " cleared status"); return true; } return false; } /** * {@inheritDoc} */ public int getStatusUpdatesCount(final String userUuid) { return dao.getStatusUpdatesCount(userUuid); } private SakaiProxy sakaiProxy; public void setSakaiProxy(SakaiProxy sakaiProxy) { this.sakaiProxy = sakaiProxy; } private ProfilePrivacyLogic privacyLogic; public void setPrivacyLogic(ProfilePrivacyLogic privacyLogic) { this.privacyLogic = privacyLogic; } private ProfileConnectionsLogic connectionsLogic; public void setConnectionsLogic(ProfileConnectionsLogic connectionsLogic) { this.connectionsLogic = connectionsLogic; } private ProfileDao dao; public void setDao(ProfileDao dao) { this.dao = dao; } }