package fi.arcusys.koku.common.service.datamodel; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; /** * Entity for representing message folder in KV-Messages functionality. * * @author Dmitry Kudinov (dmitry.kudinov@arcusys.fi) * May 18, 2011 */ @Entity @NamedQueries({ @NamedQuery(name = "findFolderByUserAndType", query = "SELECT f FROM Folder f WHERE f.user = :user AND f.folderType = :folderType"), @NamedQuery(name = "findMessagesByUserAndFolderType", query = "SELECT DISTINCT mr FROM MessageRef mr " + " WHERE mr.folder.folderType = :folderType AND " + " (mr.folder.user = :user) " + " ORDER BY mr.createdDate DESC, mr.id DESC"), @NamedQuery(name = "findMessagesByUserWithRoleAndFolderType", query = "SELECT DISTINCT mr FROM MessageRef mr " + " WHERE mr.folder.folderType = :folderType AND " + " (mr.folder.user = :user OR mr.message.fromRoleUid in (:userRoles)) " + " ORDER BY mr.createdDate DESC, mr.id DESC"), @NamedQuery(name = "getTotalMessagesCount", query = "SELECT COUNT(mr) FROM MessageRef mr " + " WHERE mr.folder.folderType = :folderType AND " + " (mr.folder.user = :user) "), @NamedQuery(name = "getTotalMessagesCountWithRole", query = "SELECT COUNT(mr) FROM MessageRef mr " + " WHERE mr.folder.folderType = :folderType AND " + " (mr.folder.user = :user OR mr.message.fromRoleUid in (:userRoles)) "), @NamedQuery(name = "getMessagesCountByReadStatus", query = "SELECT COUNT(mr) FROM MessageRef mr " + " WHERE mr.folder.folderType = :folderType AND " + " (mr.folder.user = :user) AND mr.isRead = :isRead"), @NamedQuery(name = "getMessagesCountByReadStatusWithRole", query = "SELECT COUNT(mr) FROM MessageRef mr " + " WHERE mr.folder.folderType = :folderType AND " + " (mr.folder.user = :user OR mr.message.fromRoleUid in (:userRoles)) AND mr.isRead = :isRead") }) public class Folder extends AbstractEntity { @Enumerated(EnumType.STRING) private FolderType folderType; @ManyToOne private User user; /** * @return the type */ public FolderType getFolderType() { return this.folderType; } /** * @param type the type to set */ public void setFolderType(FolderType type) { this.folderType = type; } /** * @param testUser */ public void setUser(final User user) { this.user = user; } public User getUser() { return this.user; } }