/** * Copyright (c) 2008-2012 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.osedu.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.sakaiproject.profile2.dao.impl; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import org.apache.log4j.Logger; import org.hibernate.CacheMode; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.transform.Transformers; import org.sakaiproject.profile2.dao.ProfileDao; import org.sakaiproject.profile2.hbm.model.ProfileFriend; import org.sakaiproject.profile2.hbm.model.ProfileImageExternal; import org.sakaiproject.profile2.hbm.model.ProfileImageOfficial; import org.sakaiproject.profile2.hbm.model.ProfileImageUploaded; import org.sakaiproject.profile2.hbm.model.ProfileKudos; import org.sakaiproject.profile2.model.CompanyProfile; import org.sakaiproject.profile2.model.ExternalIntegrationInfo; import org.sakaiproject.profile2.model.GalleryImage; import org.sakaiproject.profile2.model.Message; import org.sakaiproject.profile2.model.MessageParticipant; import org.sakaiproject.profile2.model.MessageThread; import org.sakaiproject.profile2.model.ProfilePreferences; import org.sakaiproject.profile2.model.ProfilePrivacy; import org.sakaiproject.profile2.model.ProfileStatus; import org.sakaiproject.profile2.model.SocialNetworkingInfo; import org.sakaiproject.profile2.model.UserProfile; import org.sakaiproject.profile2.model.WallItem; import org.sakaiproject.profile2.model.WallItemComment; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * Internal DAO Interface for Profile2 * * @author Steve Swinsburg (steve.swinsburg@gmail.com) * */ public class ProfileDaoImpl extends HibernateDaoSupport implements ProfileDao { private static final Logger log = Logger.getLogger(ProfileDaoImpl.class); /** * {@inheritDoc} */ public List<String> getRequestedConnectionUserIdsForUser(final String userId) { //get friends of this user [and map it automatically to the Friend object] //updated: now just returns a List of Strings HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_FRIEND_REQUESTS_FOR_USER); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setBoolean("false", Boolean.FALSE); //q.setResultTransformer(Transformers.aliasToBean(Friend.class)); return q.list(); } }; return (List<String>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public List<String> getConfirmedConnectionUserIdsForUser(final String userId) { //get HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_CONFIRMED_FRIEND_USERIDS_FOR_USER); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setBoolean("true", Boolean.TRUE); return q.list(); } }; return (List<String>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public List<String> findSakaiPersonsByNameOrEmail(final String search) { //get HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_FIND_SAKAI_PERSONS_BY_NAME_OR_EMAIL); q.setParameter(SEARCH, '%' + search + '%', Hibernate.STRING); return q.list(); } }; return (List<String>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public List<String> findSakaiPersonsByInterest(final String search, final boolean includeBusinessBio) { //get HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q; if (false == includeBusinessBio) { q = session.getNamedQuery(QUERY_FIND_SAKAI_PERSONS_BY_INTEREST); } else { q = session.getNamedQuery(QUERY_FIND_SAKAI_PERSONS_BY_INTEREST_AND_BUSINESS_BIO); } q.setParameter(SEARCH, '%' + search + '%', Hibernate.STRING); return q.list(); } }; return (List<String>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public List<ProfileImageUploaded> getCurrentProfileImageRecords(final String userId) { //get HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_CURRENT_PROFILE_IMAGE_RECORD); q.setParameter(USER_UUID, userId, Hibernate.STRING); return q.list(); } }; return (List<ProfileImageUploaded>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public ProfileImageUploaded getCurrentProfileImageRecord(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_CURRENT_PROFILE_IMAGE_RECORD); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (ProfileImageUploaded) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public List<ProfileImageUploaded> getOtherProfileImageRecords(final String userId) { //get HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_OTHER_PROFILE_IMAGE_RECORDS); q.setParameter(USER_UUID, userId, Hibernate.STRING); return q.list(); } }; return (List<ProfileImageUploaded>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public ProfileFriend getConnectionRecord(final String userId, final String friendId) { //this particular query checks for records when userId/friendId is in either column HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_FRIEND_RECORD); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setParameter(FRIEND_UUID, friendId, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (ProfileFriend) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public CompanyProfile getCompanyProfile(final String userId, final long companyProfileId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_COMPANY_PROFILE); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setParameter(ID, companyProfileId, Hibernate.LONG); q.setMaxResults(1); return q.uniqueResult(); } }; return (CompanyProfile) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public GalleryImage getGalleryImageRecord(final String userId, final long imageId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_GALLERY_RECORD); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setParameter(ID, imageId, Hibernate.LONG); q.setMaxResults(1); return q.uniqueResult(); } }; return (GalleryImage) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public ProfileImageOfficial getOfficialImageRecordForUser(final String userUuid) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_OFFICIAL_IMAGE_RECORD); q.setParameter(USER_UUID, userUuid, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (ProfileImageOfficial) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public boolean addNewConnection(ProfileFriend profileFriend) { try { getHibernateTemplate().save(profileFriend); return true; } catch (Exception e) { log.error("requestFriend failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public boolean updateConnection(ProfileFriend profileFriend) { try { getHibernateTemplate().update(profileFriend); return true; } catch (Exception e) { log.error("confirmFriendRequest failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public boolean removeConnection(ProfileFriend profileFriend) { //delete try { getHibernateTemplate().delete(profileFriend); return true; } catch (Exception e) { log.error("removeConnection failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public ProfileFriend getPendingConnection(final String userId, final String friendId) { if(userId == null || friendId == null){ throw new IllegalArgumentException("Null Argument in getPendingConnection"); } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_FRIEND_REQUEST); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setParameter(FRIEND_UUID, friendId, Hibernate.STRING); q.setParameter(CONFIRMED, false, Hibernate.BOOLEAN); q.setMaxResults(1); return q.uniqueResult(); } }; return (ProfileFriend) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public ProfileStatus getUserStatus(final String userId, final Date oldestDate) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_USER_STATUS); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setParameter(OLDEST_STATUS_DATE, oldestDate, Hibernate.DATE); q.setMaxResults(1); return q.uniqueResult(); } }; return (ProfileStatus) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public boolean setUserStatus(ProfileStatus profileStatus) { try { //only allowing one status object per user, hence saveOrUpdate getHibernateTemplate().saveOrUpdate(profileStatus); return true; } catch (Exception e) { log.error("ProfileLogic.setUserStatus() failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public boolean clearUserStatus(ProfileStatus profileStatus) { try { getHibernateTemplate().delete(profileStatus); return true; } catch (Exception e) { log.error("ProfileLogic.clearUserStatus() failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public int getStatusUpdatesCount(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_STATUS_UPDATES_COUNT); q.setParameter(USER_UUID, userId, Hibernate.STRING); return q.uniqueResult(); } }; return ((Integer)getHibernateTemplate().execute(hcb)).intValue(); } /** * {@inheritDoc} */ public ProfilePrivacy addNewPrivacyRecord(ProfilePrivacy privacy) { try { getHibernateTemplate().save(privacy); return privacy; } catch (Exception e) { log.error("addPrivacyRecord failed. " + e.getClass() + ": " + e.getMessage()); return null; } } /** * {@inheritDoc} */ public ProfilePrivacy getPrivacyRecord(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_PRIVACY_RECORD); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (ProfilePrivacy) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public boolean updatePrivacyRecord(final ProfilePrivacy privacy) { try { getHibernateTemplate().saveOrUpdate(privacy); return true; } catch (Exception e) { log.error("updatePrivacyRecord failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public boolean addNewCompanyProfile(final CompanyProfile companyProfile) { try { getHibernateTemplate().save(companyProfile); return true; } catch (Exception e) { log.error("addNewCompanyProfile failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public boolean updateCompanyProfile(final CompanyProfile companyProfile) { try { getHibernateTemplate().saveOrUpdate(companyProfile); return true; } catch (Exception e) { log.error("updateCompanyProfile failed. "+ e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public List<CompanyProfile> getCompanyProfiles(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_COMPANY_PROFILES); q.setParameter(USER_UUID, userId, Hibernate.STRING); return q.list(); } }; return (List<CompanyProfile>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public boolean removeCompanyProfile(final CompanyProfile companyProfile) { try { getHibernateTemplate().delete(companyProfile); return true; } catch (Exception e) { log.error("ProfileLogicImpl.removeCompanyProfile() failed. "+ e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public boolean addNewGalleryImage(final GalleryImage galleryImage) { try { getHibernateTemplate().save(galleryImage); return true; } catch (Exception e) { log.error("addNewGalleryImage failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public List<GalleryImage> getGalleryImages(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_GALLERY_IMAGE_RECORDS); q.setParameter(USER_UUID, userId, Hibernate.STRING); return q.list(); } }; return (List<GalleryImage>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public boolean removeGalleryImage(final GalleryImage galleryImage) { try { getHibernateTemplate().delete(galleryImage); return true; } catch (Exception e) { log.error("removeGalleryImage failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public int getGalleryImagesCount(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_GALLERY_IMAGE_RECORDS_COUNT); q.setParameter(USER_UUID, userId, Hibernate.STRING); return q.uniqueResult(); } }; return ((Integer)getHibernateTemplate().execute(hcb)).intValue(); } /** * {@inheritDoc} */ public SocialNetworkingInfo getSocialNetworkingInfo(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_SOCIAL_NETWORKING_INFO); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (SocialNetworkingInfo) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public boolean saveSocialNetworkingInfo(SocialNetworkingInfo socialNetworkingInfo) { try { getHibernateTemplate().saveOrUpdate(socialNetworkingInfo); return true; } catch (Exception e) { log.error("saveSocialNetworkingInfo failed. "+ e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public boolean addNewProfileImage(final ProfileImageUploaded profileImage) { Boolean success = (Boolean) getHibernateTemplate().execute(new HibernateCallback() { public Object doInHibernate(Session session){ try { //first get the current ProfileImage records for this user List<ProfileImageUploaded> currentImages = new ArrayList<ProfileImageUploaded>(getCurrentProfileImageRecords(profileImage.getUserUuid())); for(Iterator<ProfileImageUploaded> i = currentImages.iterator(); i.hasNext();){ ProfileImageUploaded currentImage = (ProfileImageUploaded)i.next(); //invalidate each currentImage.setCurrent(false); //save session.update(currentImage); } //now save the new one session.save(profileImage); // flush session session.flush(); } catch(Exception e) { log.error("addNewProfileImage failed. " + e.getClass() + ": " + e.getMessage()); return Boolean.FALSE; } return Boolean.TRUE; } }); return success.booleanValue(); } /** * {@inheritDoc} */ public List<String> getAllSakaiPersonIds() { //get HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_ALL_SAKAI_PERSON_IDS); return q.list(); } }; return (List<String>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public int getAllSakaiPersonIdsCount() { //get HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_ALL_SAKAI_PERSON_IDS_COUNT); return q.uniqueResult(); } }; return ((Integer)getHibernateTemplate().execute(hcb)).intValue(); } /** * {@inheritDoc} */ public List<UserProfile> getUserProfiles(final int start, final int count) { //get fields directly from the sakaiperson table and use Transformers.aliasToBean to transform into UserProfile pojo //the idea is we *dont* want a SakaiPerson object HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_SAKAI_PERSON); //see scalars in the hbm q.setFirstResult(start); q.setMaxResults(count); q.setResultTransformer(Transformers.aliasToBean(UserProfile.class)); q.setCacheMode(CacheMode.GET); return q.list(); } }; return (List<UserProfile>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public ProfileImageExternal getExternalImageRecordForUser(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_EXTERNAL_IMAGE_RECORD); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (ProfileImageExternal) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public boolean saveExternalImage(ProfileImageExternal externalImage) { try { getHibernateTemplate().saveOrUpdate(externalImage); return true; } catch (Exception e) { log.error("saveExternalImage failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public ProfilePreferences addNewPreferencesRecord(ProfilePreferences prefs) { try { getHibernateTemplate().save(prefs); return prefs; } catch (Exception e) { log.error("ProfileLogic.createDefaultPreferencesRecord() failed. " + e.getClass() + ": " + e.getMessage()); return null; } } /** * {@inheritDoc} */ public ProfilePreferences getPreferencesRecordForUser(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_PREFERENCES_RECORD); q.setParameter(USER_UUID, userId, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (ProfilePreferences) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public boolean savePreferencesRecord(ProfilePreferences prefs) { try { getHibernateTemplate().saveOrUpdate(prefs); return true; } catch (Exception e) { log.error("savePreferencesRecord failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public int getAllUnreadMessagesCount(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_ALL_UNREAD_MESSAGES_COUNT); q.setParameter(UUID, userId, Hibernate.STRING); q.setBoolean("false", Boolean.FALSE); return q.uniqueResult(); } }; return ((Integer)getHibernateTemplate().execute(hcb)).intValue(); } /** * {@inheritDoc} */ public int getThreadsWithUnreadMessagesCount(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_THREADS_WITH_UNREAD_MESSAGES_COUNT); q.setParameter(UUID, userId, Hibernate.STRING); q.setBoolean("false", Boolean.FALSE); return q.uniqueResult(); } }; return ((Integer)getHibernateTemplate().execute(hcb)).intValue(); } /** * {@inheritDoc} */ public List<MessageThread> getMessageThreads(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_MESSAGE_THREADS); q.setParameter(UUID, userId, Hibernate.STRING); return q.list(); } }; return (List<MessageThread>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public int getMessageThreadsCount(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_MESSAGE_THREADS_COUNT); q.setParameter(UUID, userId, Hibernate.STRING); return q.uniqueResult(); } }; return ((Integer)getHibernateTemplate().execute(hcb)).intValue(); } /** * {@inheritDoc} */ public int getSentMessagesCount(final String userId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_SENT_MESSAGES_COUNT); q.setParameter(UUID, userId, Hibernate.STRING); return q.uniqueResult(); } }; return ((Integer)getHibernateTemplate().execute(hcb)).intValue(); } /** * {@inheritDoc} */ public List<Message> getMessagesInThread(final String threadId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_MESSAGES_IN_THREAD); q.setParameter(THREAD, threadId, Hibernate.STRING); return q.list(); } }; return (List<Message>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public int getMessagesInThreadCount(final String threadId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_MESSAGES_IN_THREAD_COUNT); q.setParameter(THREAD, threadId, Hibernate.STRING); return q.uniqueResult(); } }; return ((Integer)getHibernateTemplate().execute(hcb)).intValue(); } /** * {@inheritDoc} */ public Message getMessage(final String id) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_MESSAGE); q.setParameter(ID, id, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (Message) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public MessageThread getMessageThread(final String threadId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_MESSAGE_THREAD); q.setParameter(ID, threadId, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (MessageThread)getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public Message getLatestMessageInThread(final String threadId) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_LATEST_MESSAGE_IN_THREAD); q.setParameter(THREAD, threadId, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (Message) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public boolean toggleMessageRead(MessageParticipant participant, final boolean read) { try { participant.setRead(read); getHibernateTemplate().saveOrUpdate(participant); return true; } catch (Exception e) { log.error("toggleMessageRead failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public MessageParticipant getMessageParticipant(final String messageId, final String userUuid) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_MESSAGE_PARTICIPANT_FOR_MESSAGE_AND_UUID); q.setParameter(MESSAGE_ID, messageId, Hibernate.STRING); q.setParameter(UUID, userUuid, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (MessageParticipant) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public List<String> getThreadParticipants(final String threadId) { //get HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_THREAD_PARTICIPANTS); q.setParameter(THREAD, threadId, Hibernate.STRING); return q.list(); } }; return (List<String>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public void saveNewThread(MessageThread thread) { try { getHibernateTemplate().save(thread); log.info("MessageThread saved with id= " + thread.getId()); } catch (Exception e) { log.error("saveNewThread failed. " + e.getClass() + ": " + e.getMessage()); } } /** * {@inheritDoc} */ public void saveNewMessage(Message message) { try { getHibernateTemplate().save(message); log.info("Message saved with id= " + message.getId()); } catch (Exception e) { log.error("saveNewMessage failed. " + e.getClass() + ": " + e.getMessage()); } } /** * {@inheritDoc} */ public void saveNewMessageParticipant(MessageParticipant participant) { try { getHibernateTemplate().save(participant); log.info("MessageParticipant saved with id= " + participant.getId()); } catch (Exception e) { log.error("saveNewMessageParticipant failed. " + e.getClass() + ": " + e.getMessage()); } } /** * {@inheritDoc} */ public void saveNewMessageParticipants(List<MessageParticipant> participants) { for(MessageParticipant participant : participants) { try { getHibernateTemplate().save(participant); log.info("MessageParticipant saved with id= " + participant.getId()); } catch (Exception e) { log.error("saveNewMessageParticipant failed. " + e.getClass() + ": " + e.getMessage()); } } } /** * {@inheritDoc} */ public boolean saveOfficialImageUrl(ProfileImageOfficial officialImage) { try { getHibernateTemplate().saveOrUpdate(officialImage); return true; } catch (Exception e) { log.error("saveOfficialImageUrl failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public ProfileKudos getKudos(final String userUuid) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_KUDOS_RECORD); q.setParameter(USER_UUID, userUuid, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (ProfileKudos) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public boolean updateKudos(ProfileKudos kudos) { try { getHibernateTemplate().saveOrUpdate(kudos); return true; } catch (Exception e) { log.error("updateKudos failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public ExternalIntegrationInfo getExternalIntegrationInfo(final String userUuid) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_EXTERNAL_INTEGRATION_INFO); q.setParameter(USER_UUID, userUuid, Hibernate.STRING); q.setMaxResults(1); return q.uniqueResult(); } }; return (ExternalIntegrationInfo) getHibernateTemplate().execute(hcb); } /** * {@inheritDoc} */ public boolean updateExternalIntegrationInfo(ExternalIntegrationInfo info) { try { getHibernateTemplate().saveOrUpdate(info); return true; } catch (Exception e) { log.error("updateExternalIntegrationInfo failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public boolean addNewWallItemForUser(final String userUuid, final WallItem item) { try { getHibernateTemplate().save(item); return true; } catch (Exception e) { log.error("addNewWallItemForUser failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public boolean removeWallItemFromWall(final WallItem item) { try { getHibernateTemplate().delete(item); return true; } catch (Exception e) { log.error("removeWallItemFromWall failed. " + e.getClass() + ": " + e.getMessage()); return false; } } /** * {@inheritDoc} */ public List<WallItem> getWallItemsForUser(final String userUuid) { HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_GET_WALL_ITEMS); q.setParameter(USER_UUID, userUuid, Hibernate.STRING); return q.list(); } }; return (List<WallItem>) getHibernateTemplate().executeFind(hcb); } /** * {@inheritDoc} */ public boolean addNewCommentToWallItem(WallItemComment wallItemComment) { try { getHibernateTemplate().save(wallItemComment); return true; } catch (Exception e) { log.error("addNewWallItemComment failed. "+ e.getClass() + ": " + e.getMessage()); return false; } } public void init() { log.debug("init"); } }