package com.robonobo.midas.dao; import static com.robonobo.common.util.TextUtil.*; import static com.robonobo.common.util.TimeUtil.*; import java.util.Date; import java.util.List; import org.hibernate.Hibernate; import org.hibernate.Query; import org.springframework.stereotype.Repository; import com.robonobo.midas.model.MidasPlaylist; @Repository("playlistDao") public class PlaylistDaoImpl extends MidasDao implements PlaylistDao { @Override public long getHighestPlaylistId() { String hql = "select max(playlistId) from MidasPlaylist"; List l = getSession().createQuery(hql).list(); if(l.size() == 0 || l.get(0) == null) return 0; return ((Long)l.get(0)).longValue(); } @Override public void deletePlaylist(MidasPlaylist playlist) { getSession().delete(playlist); } @Override public MidasPlaylist getPlaylistById(long playlistId) { return (MidasPlaylist) getSession().get(MidasPlaylist.class, playlistId); } @Override public MidasPlaylist getPlaylistByUserIdAndTitle(long uid, String title) { String hql = "from MidasPlaylist as mp where :title = lower(mp.title) and :uid in elements(mp.ownerIds)"; Query q = getSession().createQuery(hql); q.setParameter("title", title.toLowerCase()); q.setParameter("uid", uid); List result = q.list(); if(result.size() == 0) return null; return (MidasPlaylist) result.get(0); } @Override public void savePlaylist(MidasPlaylist playlist) { sanitizePlaylist(playlist); getSession().saveOrUpdate(playlist); } @Override @SuppressWarnings("unchecked") public List<MidasPlaylist> getRecentPlaylists(long maxAgeMs) { Date maxAge = timeInPast(maxAgeMs); String hql = "from MidasPlaylist where updated > :maxAge"; Query q = getSession().createQuery(hql); q.setParameter("maxAge", maxAge, Hibernate.TIMESTAMP); return q.list(); } private void sanitizePlaylist(MidasPlaylist p) { p.setTitle(truncate(p.getTitle(), 128)); p.setDescription(truncate(p.getDescription(), 512)); } }