001/**************************************************************** 002 * Licensed to the Apache Software Foundation (ASF) under one * 003 * or more contributor license agreements. See the NOTICE file * 004 * distributed with this work for additional information * 005 * regarding copyright ownership. The ASF licenses this file * 006 * to you under the Apache License, Version 2.0 (the * 007 * "License"); you may not use this file except in compliance * 008 * with the License. You may obtain a copy of the License at * 009 * * 010 * http://www.apache.org/licenses/LICENSE-2.0 * 011 * * 012 * Unless required by applicable law or agreed to in writing, * 013 * software distributed under the License is distributed on an * 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 015 * KIND, either express or implied. See the License for the * 016 * specific language governing permissions and limitations * 017 * under the License. * 018 ****************************************************************/ 019package org.apache.james.mailbox.jpa.mail.model; 020 021import javax.persistence.Basic; 022import javax.persistence.Column; 023import javax.persistence.Entity; 024import javax.persistence.GeneratedValue; 025import javax.persistence.Id; 026import javax.persistence.NamedQueries; 027import javax.persistence.NamedQuery; 028import javax.persistence.Table; 029 030import org.apache.james.mailbox.model.MailboxACL; 031import org.apache.james.mailbox.model.MailboxPath; 032import org.apache.james.mailbox.model.SimpleMailboxACL; 033import org.apache.james.mailbox.store.mail.model.Mailbox; 034 035@Entity(name="Mailbox") 036@Table(name="JAMES_MAILBOX") 037@NamedQueries({ 038 @NamedQuery(name="findMailboxById", 039 query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.mailbox.mailboxId = :idParam"), 040 @NamedQuery(name="findMailboxByName", 041 query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name = :nameParam and mailbox.user is NULL and mailbox.namespace= :namespaceParam"), 042 @NamedQuery(name="findMailboxByNameWithUser", 043 query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name = :nameParam and mailbox.user= :userParam and mailbox.namespace= :namespaceParam"), 044 @NamedQuery(name="deleteAllMailboxes", 045 query="DELETE FROM Mailbox mailbox"), 046 @NamedQuery(name="findMailboxWithNameLikeWithUser", 047 query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name LIKE :nameParam and mailbox.user= :userParam and mailbox.namespace= :namespaceParam"), 048 @NamedQuery(name="findMailboxWithNameLike", 049 query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name LIKE :nameParam and mailbox.user is NULL and mailbox.namespace= :namespaceParam"), 050 @NamedQuery(name="countMailboxesWithNameLikeWithUser", 051 query="SELECT COUNT(mailbox) FROM Mailbox mailbox WHERE mailbox.name LIKE :nameParam and mailbox.user= :userParam and mailbox.namespace= :namespaceParam"), 052 @NamedQuery(name="countMailboxesWithNameLike", 053 query="SELECT COUNT(mailbox) FROM Mailbox mailbox WHERE mailbox.name LIKE :nameParam and mailbox.user is NULL and mailbox.namespace= :namespaceParam"), 054 @NamedQuery(name="listMailboxes", 055 query="SELECT mailbox FROM Mailbox mailbox"), 056 @NamedQuery(name="findHighestModSeq", 057 query="SELECT mailbox.highestModSeq FROM Mailbox mailbox WHERE mailbox.mailboxId = :idParam"), 058 @NamedQuery(name="findLastUid", 059 query="SELECT mailbox.lastUid FROM Mailbox mailbox WHERE mailbox.mailboxId = :idParam") 060}) 061public class JPAMailbox implements Mailbox<Long> { 062 063 private static final String TAB = " "; 064 065 /** The value for the mailboxId field */ 066 @Id 067 @GeneratedValue 068 @Column(name = "MAILBOX_ID") 069 private long mailboxId; 070 071 /** The value for the name field */ 072 @Basic(optional = false) 073 @Column(name = "MAILBOX_NAME", nullable = false, length = 200) 074 private String name; 075 076 /** The value for the uidValidity field */ 077 @Basic(optional = false) 078 @Column(name = "MAILBOX_UID_VALIDITY", nullable = false) 079 private long uidValidity; 080 081 @Basic(optional = false) 082 @Column(name = "USER_NAME", nullable = false, length = 200) 083 private String user; 084 085 @Basic(optional = false) 086 @Column(name = "MAILBOX_NAMESPACE", nullable = false, length = 200) 087 private String namespace; 088 089 @Basic(optional = false) 090 @Column(name = "MAILBOX_LAST_UID", nullable = false) 091 private long lastUid; 092 093 @Basic(optional = false) 094 @Column(name = "MAILBOX_HIGHEST_MODSEQ", nullable = false) 095 private long highestModSeq; 096 097 /** 098 * JPA only 099 */ 100 @Deprecated 101 public JPAMailbox() { 102 super(); 103 } 104 105 public JPAMailbox(MailboxPath path, int uidValidity) { 106 this(); 107 this.name = path.getName(); 108 this.user = path.getUser(); 109 this.namespace = path.getNamespace(); 110 this.uidValidity = uidValidity; 111 } 112 113 /** 114 * @see org.apache.james.mailbox.store.mail.model.Mailbox#getMailboxId() 115 */ 116 public Long getMailboxId() { 117 return mailboxId; 118 } 119 120 /** 121 * @see org.apache.james.mailbox.store.mail.model.Mailbox#getName() 122 */ 123 public String getName() { 124 return name; 125 } 126 127 /** 128 * @see org.apache.james.mailbox.store.mail.model.Mailbox#getUidValidity() 129 */ 130 public long getUidValidity() { 131 return uidValidity; 132 } 133 134 /** 135 * @see org.apache.james.mailbox.store.mail.model.Mailbox#setName(java.lang.String) 136 */ 137 public void setName(String name) { 138 this.name = name; 139 } 140 141 @Override 142 public String toString() { 143 final String retValue = "Mailbox ( " 144 + "mailboxId = " + this.mailboxId + TAB 145 + "name = " + this.name + TAB 146 + "uidValidity = " + this.uidValidity + TAB 147 + " )"; 148 return retValue; 149 } 150 151 @Override 152 public int hashCode() { 153 final int PRIME = 31; 154 int result = 1; 155 result = PRIME * result + (int) (mailboxId ^ (mailboxId >>> 32)); 156 return result; 157 } 158 159 @Override 160 public boolean equals(Object obj) { 161 if (this == obj) 162 return true; 163 if (obj == null) 164 return false; 165 if (getClass() != obj.getClass()) 166 return false; 167 final JPAMailbox other = (JPAMailbox) obj; 168 if (mailboxId != other.mailboxId) 169 return false; 170 return true; 171 } 172 173 /** 174 * @see org.apache.james.mailbox.store.mail.model.Mailbox#getNamespace() 175 */ 176 public String getNamespace() { 177 return namespace; 178 } 179 180 /** 181 * @see org.apache.james.mailbox.store.mail.model.Mailbox#getUser() 182 */ 183 public String getUser() { 184 return user; 185 } 186 187 /** 188 * @see org.apache.james.mailbox.store.mail.model.Mailbox#setNamespace(java.lang.String) 189 */ 190 public void setNamespace(String namespace) { 191 this.namespace = namespace; 192 } 193 194 /** 195 * @see org.apache.james.mailbox.store.mail.model.Mailbox#setUser(java.lang.String) 196 */ 197 public void setUser(String user) { 198 this.user = user; 199 } 200 201 202 public long getLastUid() { 203 return lastUid; 204 } 205 206 public long getHighestModSeq() { 207 return highestModSeq; 208 } 209 210 public long consumeUid() { 211 return ++lastUid; 212 } 213 214 public long consumeModSeq() { 215 return ++highestModSeq; 216 } 217 218 /* (non-Javadoc) 219 * @see org.apache.james.mailbox.store.mail.model.Mailbox#getACL() 220 */ 221 @Override 222 public MailboxACL getACL() { 223 // TODO ACL support 224 return SimpleMailboxACL.OWNER_FULL_ACL; 225 } 226 227 /* (non-Javadoc) 228 * @see org.apache.james.mailbox.store.mail.model.Mailbox#setACL(org.apache.james.mailbox.MailboxACL) 229 */ 230 @Override 231 public void setACL(MailboxACL acl) { 232 // TODO ACL support 233 } 234 235}