Author: eric
Date: Thu Jan 13 17:54:23 2011
New Revision: 1058688
URL: http://svn.apache.org/viewvc?rev=1058688&view=rev
Log:
Mailbox and MailboxMembership are now linked with a Foreign Key in JPA - Format
some code - All columns are nullable, this must still be tuned (MAILBOX-14)
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAHeader.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAProperty.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
Thu Jan 13 17:54:23 2011
@@ -54,11 +54,15 @@ public abstract class JPAMailboxManager
public void deleteEverything(MailboxSession mailboxSession) throws
MailboxException {
final JPAMailboxMapper mapper = (JPAMailboxMapper)
mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
mapper.execute(new TransactionalMapper.VoidTransaction() {
-
public void runVoid() throws MailboxException {
- mapper.deleteAll();
+ mapper.deleteAllMemberships();
+ }
+ });
+ mapper.execute(new TransactionalMapper.VoidTransaction() {
+ public void runVoid() throws MailboxException {
+ mapper.deleteAllMailboxes();
}
-
});
}
+
}
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
Thu Jan 13 17:54:23 2011
@@ -27,6 +27,7 @@ import javax.mail.Flags;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.jpa.mail.model.JPAHeader;
+import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMembership;
import org.apache.james.mailbox.store.StoreMessageManager;
import org.apache.james.mailbox.store.mail.UidProvider;
@@ -37,7 +38,7 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.util.MailboxEventDispatcher;
/**
- * Abstract base class which should be used from JPA 2.0 implementations
+ * Abstract base class which should be used from JPA implementations.
*/
public class JPAMessageManager extends StoreMessageManager<Long> {
@@ -53,10 +54,9 @@ public class JPAMessageManager extends S
for (Header header: headers) {
jpaHeaders.add((JPAHeader) header);
}
- final MailboxMembership<Long> message = new
JPAMailboxMembership(getMailboxEntity().getMailboxId(), uid, internalDate,
size, flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
+ final MailboxMembership<Long> message = new
JPAMailboxMembership((JPAMailbox) getMailboxEntity(), uid, internalDate, size,
flags, document, bodyStartOctet, jpaHeaders, propertyBuilder);
return message;
}
-
@Override
protected Header createHeader(int lineNumber, String name, String value) {
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
Thu Jan 13 17:54:23 2011
@@ -92,7 +92,6 @@ public class JPAMailboxMapper extends JP
}
} catch (NoResultException e) {
throw new MailboxNotFoundException(mailboxPath);
-
} catch (PersistenceException e) {
throw new MailboxException("Search of mailbox " + mailboxPath + "
failed", e);
}
@@ -103,8 +102,8 @@ public class JPAMailboxMapper extends JP
*/
public void delete(Mailbox<Long> mailbox) throws MailboxException {
try {
- getEntityManager().remove(mailbox);
getEntityManager().createNamedQuery("deleteMessages").setParameter("idParam",
mailbox.getMailboxId()).executeUpdate();
+ getEntityManager().remove(mailbox);
} catch (PersistenceException e) {
throw new MailboxException("Delete of mailbox " + mailbox + "
failed", e);
}
@@ -127,14 +126,21 @@ public class JPAMailboxMapper extends JP
}
}
- public void deleteAll() throws MailboxException {
+ public void deleteAllMemberships() throws MailboxException {
try {
- getEntityManager().createNamedQuery("deleteAll").executeUpdate();
+
getEntityManager().createNamedQuery("deleteAllMemberships").executeUpdate();
+ } catch (PersistenceException e) {
+ throw new MailboxException("Delete of mailboxes failed", e);
+ }
+ }
+
+ public void deleteAllMailboxes() throws MailboxException {
+ try {
+
getEntityManager().createNamedQuery("deleteAllMailboxes").executeUpdate();
} catch (PersistenceException e) {
throw new MailboxException("Delete of mailboxes failed", e);
}
}
-
/**
* @see
org.apache.james.mailbox.store.mail.MailboxMapper#hasChildren(java.lang.String)
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
Thu Jan 13 17:54:23 2011
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.SearchQu
import org.apache.james.mailbox.SearchQuery.Criterion;
import org.apache.james.mailbox.SearchQuery.NumericRange;
import org.apache.james.mailbox.jpa.JPATransactionalMapper;
+import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
import
org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMailboxMembership;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMembership;
import
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMailboxMembership;
@@ -42,11 +43,10 @@ import org.apache.james.mailbox.store.ma
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
import org.apache.james.mailbox.store.mail.model.UpdatedFlags;
-
+import org.apache.openjpa.persistence.ArgumentException;
/**
* JPA implementation of a {@link MessageMapper}. This class is not
thread-safe!
- *
*/
public class JPAMessageMapper extends JPATransactionalMapper implements
MessageMapper<Long> {
@@ -189,10 +189,7 @@ public class JPAMessageMapper extends JP
}
}
-
-
/*
- *
* (non-Javadoc)
* @see
org.apache.james.mailbox.store.mail.MessageMapper#searchMailbox(org.apache.james.mailbox.store.mail.model.Mailbox,
org.apache.james.mailbox.SearchQuery)
*/
@@ -200,7 +197,7 @@ public class JPAMessageMapper extends JP
public Iterator<Long> searchMailbox(Mailbox<Long> mailbox, SearchQuery
query) throws MailboxException {
try {
final StringBuilder queryBuilder = new StringBuilder(50);
- queryBuilder.append("SELECT membership FROM Membership membership
WHERE membership.mailboxId = ").append(mailbox.getMailboxId());
+ queryBuilder.append("SELECT membership FROM Membership membership
WHERE membership.mailbox.mailboxId = ").append(mailbox.getMailboxId());
final List<Criterion> criteria = query.getCriterias();
boolean range = false;
int rangeLength = -1;
@@ -291,19 +288,28 @@ public class JPAMessageMapper extends JP
}
}
-
/*
* (non-Javadoc)
* @see
org.apache.james.mailbox.store.mail.MessageMapper#add(org.apache.james.mailbox.store.mail.model.Mailbox,
org.apache.james.mailbox.store.mail.model.MailboxMembership)
*/
public long add(Mailbox<Long> mailbox, MailboxMembership<Long> message)
throws MailboxException {
+
try {
-
+
+ // We need to reload a "JPA attached" mailbox, because the provide
mailbox is already "JPA detached"
+ // If we don't this, we will get an
org.apache.openjpa.persistence.ArgumentException.
+ ((AbstractJPAMailboxMembership)
message).setMailbox(getEntityManager().find(JPAMailbox.class,
mailbox.getMailboxId()));
+
getEntityManager().persist(message);
+
return message.getUid();
+
} catch (PersistenceException e) {
throw new MailboxException("Save of message " + message + " failed
in mailbox " + mailbox, e);
+ } catch (ArgumentException e) {
+ throw new MailboxException("Save of message " + message + " failed
in mailbox " + mailbox, e);
}
+
}
/*
@@ -311,26 +317,24 @@ public class JPAMessageMapper extends JP
* @see
org.apache.james.mailbox.store.mail.MessageMapper#copy(org.apache.james.mailbox.store.mail.model.Mailbox,
long, org.apache.james.mailbox.store.mail.model.MailboxMembership)
*/
public long copy(Mailbox<Long> mailbox, long uid, MailboxMembership<Long>
original) throws MailboxException {
-
MailboxMembership<Long> copy;
if (original instanceof JPAStreamingMailboxMembership) {
- copy = new JPAStreamingMailboxMembership(mailbox.getMailboxId(),
uid, (AbstractJPAMailboxMembership) original);
+ copy = new JPAStreamingMailboxMembership((JPAMailbox) mailbox,
uid, (AbstractJPAMailboxMembership) original);
} else {
- copy = new JPAMailboxMembership(mailbox.getMailboxId(), uid,
(AbstractJPAMailboxMembership) original);
+ copy = new JPAMailboxMembership((JPAMailbox) mailbox, uid,
(AbstractJPAMailboxMembership) original);
}
return add(mailbox, copy);
}
-
-
/*
* (non-Javadoc)
* @see
org.apache.james.mailbox.store.mail.MessageMapper#updateFlags(org.apache.james.mailbox.store.mail.model.Mailbox,
javax.mail.Flags, boolean, boolean, org.apache.james.mailbox.MessageRange)
*/
public Iterator<UpdatedFlags> updateFlags(Mailbox<Long> mailbox, Flags
flags, boolean value, boolean replace, MessageRange set) throws
MailboxException {
+
final List<UpdatedFlags> updatedFlags = new ArrayList<UpdatedFlags>();
-
final List<MailboxMembership<Long>> members = findInMailbox(mailbox,
set);
+
for (final MailboxMembership<Long> member:members) {
Flags originalFlags = member.createFlags();
if (replace) {
@@ -349,7 +353,8 @@ public class JPAMessageMapper extends JP
updatedFlags.add(new UpdatedFlags(member.getUid(),originalFlags,
newFlags));
}
- return updatedFlags.iterator();
+ return updatedFlags.iterator();
+
}
}
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAHeader.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAHeader.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAHeader.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAHeader.java
Thu Jan 13 17:54:23 2011
@@ -36,25 +36,25 @@ public class JPAHeader extends AbstractC
@Id
@GeneratedValue
- @Column(name = "HEADER_ID", nullable = false)
+ @Column(name = "HEADER_ID", nullable = true)
private long id;
/** The value for the lineNumber field */
@Basic(optional=false)
- @Column(name = "HEADER_LINE_NUMBER", nullable = false)
+ @Column(name = "HEADER_LINE_NUMBER", nullable = true)
private int lineNumber;
/** The value for the field field */
/** Use a max of 1024 which could happen on very freaky header field
names*/
@Basic(optional=false)
- @Column(name = "HEADER_FIELD", nullable = false, length = 1024)
+ @Column(name = "HEADER_FIELD", nullable = true, length = 1024)
private String field;
/** The value for the value field */
/** We use 4000 as max which is mostly overkill for most emails but better
waste a bit of space then loose headers**/
/** 4000 is the maximum value accepted by Oracle for VARCHAR2 **/
@Basic(optional=false)
- @Column(name = "HEADER_VALUE", nullable = false, length = 4000)
+ @Column(name = "HEADER_VALUE", nullable = true, length = 4000)
private String value;
/**
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
Thu Jan 13 17:54:23 2011
@@ -34,23 +34,23 @@ import org.apache.james.mailbox.store.ma
@Table(name="JAMES_MAILBOX")
@NamedQueries({
@NamedQuery(name="findMailboxById",
- query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.mailboxId =
:idParam"),
+ query="SELECT mailbox FROM Mailbox mailbox WHERE
mailbox.mailbox.mailboxId = :idParam"),
@NamedQuery(name="findMailboxByName",
query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name =
:nameParam and mailbox.user is NULL and mailbox.namespace= :namespaceParam"),
@NamedQuery(name="findMailboxByNameWithUser",
query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name =
:nameParam and mailbox.user= :userParam and mailbox.namespace=
:namespaceParam"),
- @NamedQuery(name="deleteAll",
- query="DELETE FROM Mailbox mailbox"),
+ @NamedQuery(name="deleteAllMailboxes",
+ query="DELETE FROM Mailbox mailbox"),
@NamedQuery(name="findMailboxWithNameLikeWithUser",
- query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name
LIKE :nameParam and mailbox.user= :userParam and mailbox.namespace=
:namespaceParam"),
+ query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name LIKE
:nameParam and mailbox.user= :userParam and mailbox.namespace=
:namespaceParam"),
@NamedQuery(name="findMailboxWithNameLike",
- query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name
LIKE :nameParam and mailbox.user is NULL and mailbox.namespace=
:namespaceParam"),
+ query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name LIKE
:nameParam and mailbox.user is NULL and mailbox.namespace= :namespaceParam"),
@NamedQuery(name="countMailboxesWithNameLikeWithUser",
- query="SELECT COUNT(mailbox) FROM Mailbox mailbox WHERE
mailbox.name LIKE :nameParam and mailbox.user= :userParam and
mailbox.namespace= :namespaceParam"),
+ query="SELECT COUNT(mailbox) FROM Mailbox mailbox WHERE mailbox.name
LIKE :nameParam and mailbox.user= :userParam and mailbox.namespace=
:namespaceParam"),
@NamedQuery(name="countMailboxesWithNameLike",
- query="SELECT COUNT(mailbox) FROM Mailbox mailbox WHERE
mailbox.name LIKE :nameParam and mailbox.user is NULL and mailbox.namespace=
:namespaceParam"),
+ query="SELECT COUNT(mailbox) FROM Mailbox mailbox WHERE mailbox.name
LIKE :nameParam and mailbox.user is NULL and mailbox.namespace=
:namespaceParam"),
@NamedQuery(name="listMailboxes",
- query="SELECT mailbox FROM Mailbox mailbox")
+ query="SELECT mailbox FROM Mailbox mailbox")
})
public class JPAMailbox implements Mailbox<Long> {
@@ -59,17 +59,17 @@ public class JPAMailbox implements Mailb
/** The value for the mailboxId field */
@Id
@GeneratedValue
- @Column(name = "MAILBOX_ID", nullable = false)
+ @Column(name = "MAILBOX_ID", nullable = true)
private long mailboxId;
/** The value for the name field */
@Basic(optional=false)
- @Column(name = "MAILBOX_NAME", nullable = false, length = 200)
+ @Column(name = "MAILBOX_NAME", nullable = true, length = 200)
private String name;
/** The value for the uidValidity field */
@Basic(optional=false)
- @Column(name = "MAILBOX_UID_VALIDITY", nullable = false)
+ @Column(name = "MAILBOX_UID_VALIDITY", nullable = true)
private long uidValidity;
@Basic(optional=false)
@@ -77,7 +77,7 @@ public class JPAMailbox implements Mailb
private String user;
@Basic(optional=false)
- @Column(name = "MAILBOX_NAMESPACE", nullable = false, length = 200)
+ @Column(name = "MAILBOX_NAMESPACE", nullable = true, length = 200)
private String namespace;
/**
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAProperty.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAProperty.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAProperty.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAProperty.java
Thu Jan 13 17:54:23 2011
@@ -35,27 +35,27 @@ public class JPAProperty extends Abstrac
/** The system unique key */
@Id
@GeneratedValue
- @Column(name = "PROPERTY_ID", nullable = false)
+ @Column(name = "PROPERTY_ID", nullable = true)
private long id;
/** Order within the list of properties */
@Basic(optional=false)
- @Column(name = "PROPERTY_LINE_NUMBER", nullable = false)
+ @Column(name = "PROPERTY_LINE_NUMBER", nullable = true)
private int line;
/** Local part of the name of this property */
@Basic(optional=false)
- @Column(name = "PROPERTY_LOCAL_NAME", nullable = false, length = 200)
+ @Column(name = "PROPERTY_LOCAL_NAME", nullable = true, length = 200)
private String localName;
/** Namespace part of the name of this property */
@Basic(optional=false)
- @Column(name = "PROPERTY_NAME_SPACE", nullable = false, length = 200)
+ @Column(name = "PROPERTY_NAME_SPACE", nullable = true, length = 200)
private String namespace;
/** Value of this property */
@Basic(optional=false)
- @Column(name = "PROPERTY_VALUE", nullable = false, length = 200)
+ @Column(name = "PROPERTY_VALUE", nullable = true, length = 200)
private String value;
/**
@@ -156,8 +156,7 @@ public class JPAProperty extends Abstrac
* @return a <code>String</code> representation
* of this object.
*/
- public String toString()
- {
+ public String toString() {
final String result = "JPAProperty ( "
+ "id = " + this.id + " "
+ "localName = " + this.localName + " "
@@ -167,4 +166,5 @@ public class JPAProperty extends Abstrac
return result;
}
+
}
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMembership.java
Thu Jan 13 17:54:23 2011
@@ -25,15 +25,19 @@ import java.util.List;
import javax.mail.Flags;
import javax.persistence.Basic;
+import javax.persistence.CascadeType;
import javax.persistence.Column;
+import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.IdClass;
+import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.jpa.mail.model.JPAHeader;
+import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
import org.apache.james.mailbox.store.mail.model.AbstractMailboxMembership;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
@@ -43,33 +47,35 @@ import org.apache.openjpa.persistence.jd
@IdClass(AbstractJPAMailboxMembership.MailboxIdUidKey.class)
@NamedQueries({
@NamedQuery(name="findRecentMessagesInMailbox",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.recent = TRUE"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.recent = TRUE"),
@NamedQuery(name="findUnseenMessagesInMailboxOrderByUid",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.seen = FALSE ORDER BY
membership.uid ASC"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.seen = FALSE ORDER BY
membership.uid ASC"),
@NamedQuery(name="findMessagesInMailbox",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam"),
@NamedQuery(name="findMessagesInMailboxBetweenUIDs",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.uid BETWEEN :fromParam AND
:toParam"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.uid BETWEEN :fromParam
AND :toParam"),
@NamedQuery(name="findMessagesInMailboxWithUID",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.uid=:uidParam"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.uid=:uidParam"),
@NamedQuery(name="findMessagesInMailboxAfterUID",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.uid>=:uidParam"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.uid>=:uidParam"),
@NamedQuery(name="findDeletedMessagesInMailbox",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.deleted=TRUE"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.deleted=TRUE"),
@NamedQuery(name="findDeletedMessagesInMailboxBetweenUIDs",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.uid BETWEEN :fromParam AND
:toParam AND membership.deleted=TRUE"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.uid BETWEEN :fromParam
AND :toParam AND membership.deleted=TRUE"),
@NamedQuery(name="findDeletedMessagesInMailboxWithUID",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.uid=:uidParam AND
membership.deleted=TRUE"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.uid=:uidParam AND
membership.deleted=TRUE"),
@NamedQuery(name="findDeletedMessagesInMailboxAfterUID",
- query="SELECT membership FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.uid>=:uidParam AND
membership.deleted=TRUE"),
+ query="SELECT membership FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.uid>=:uidParam AND
membership.deleted=TRUE"),
@NamedQuery(name="countUnseenMessagesInMailbox",
- query="SELECT COUNT(membership) FROM Membership membership WHERE
membership.mailboxId = :idParam AND membership.seen=FALSE"),
+ query="SELECT COUNT(membership) FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam AND membership.seen=FALSE"),
@NamedQuery(name="countMessagesInMailbox",
- query="SELECT COUNT(membership) FROM Membership membership WHERE
membership.mailboxId = :idParam"),
+ query="SELECT COUNT(membership) FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam"),
@NamedQuery(name="deleteMessages",
- query="DELETE FROM Membership membership WHERE
membership.mailboxId = :idParam"),
+ query="DELETE FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam"),
@NamedQuery(name="findLastUidInMailbox",
- query="SELECT membership.uid FROM Membership membership WHERE
membership.mailboxId = :idParam ORDER BY membership.uid DESC")
+ query="SELECT membership.uid FROM Membership membership WHERE
membership.mailbox.mailboxId = :idParam ORDER BY membership.uid DESC"),
+ @NamedQuery(name="deleteAllMemberships",
+ query="DELETE FROM Membership membership")
})
public abstract class AbstractJPAMailboxMembership extends
AbstractMailboxMembership<Long> {
@@ -79,11 +85,11 @@ public abstract class AbstractJPAMailbox
public static class MailboxIdUidKey implements Serializable {
private static final long serialVersionUID = 7847632032426660997L;
-
+
public MailboxIdUidKey() {}
- /** The value for the mailboxId field */
- public long mailboxId;
+ /** The value for the mailbox field */
+ public long mailbox;
/** The value for the uid field */
public long uid;
@@ -92,7 +98,7 @@ public abstract class AbstractJPAMailbox
public int hashCode() {
final int PRIME = 31;
int result = 1;
- result = PRIME * result + (int) (mailboxId ^ (mailboxId >>> 32));
+ result = PRIME * result + (int) (mailbox ^ (mailbox >>> 32));
result = PRIME * result + (int) (uid ^ (uid >>> 32));
return result;
}
@@ -106,22 +112,28 @@ public abstract class AbstractJPAMailbox
if (getClass() != obj.getClass())
return false;
final MailboxIdUidKey other = (MailboxIdUidKey) obj;
- if (mailboxId != other.mailboxId)
+ if (mailbox != other.mailbox)
return false;
if (uid != other.uid)
return false;
return true;
}
- }
+ }
/** The value for the mailboxId field */
@Id
- @Column(name = "MAILBOX_ID", nullable = false)
- private long mailboxId;
+ @ManyToOne(
+ cascade = {
+ CascadeType.PERSIST,
+ CascadeType.REFRESH,
+ CascadeType.MERGE},
+ fetch=FetchType.LAZY)
+ @Column(name = "MAILBOX_ID", nullable = true)
+ private JPAMailbox mailbox;
/** The value for the uid field */
@Id
- @Column(name = "MAIL_UID", nullable = false)
+ @Column(name = "MAIL_UID", nullable = true)
private long uid;
/** The value for the internalDate field */
@@ -168,9 +180,9 @@ public abstract class AbstractJPAMailbox
@Deprecated
public AbstractJPAMailboxMembership() {}
- public AbstractJPAMailboxMembership(long mailboxId, long uid, Date
internalDate, Flags flags, int bodyStartOctet, final List<JPAHeader> headers,
final PropertyBuilder propertyBuilder) throws MailboxException {
+ public AbstractJPAMailboxMembership(JPAMailbox mailbox, long uid, Date
internalDate, Flags flags, int bodyStartOctet, final List<JPAHeader> headers,
final PropertyBuilder propertyBuilder) throws MailboxException {
super();
- this.mailboxId = mailboxId;
+ this.mailbox = mailbox;
this.internalDate = internalDate;
this.uid = uid;
setFlags(flags);
@@ -184,9 +196,9 @@ public abstract class AbstractJPAMailbox
* @param original message to be copied, not null
* @throws IOException
*/
- public AbstractJPAMailboxMembership(long mailboxId, long uid,
MailboxMembership<?> original) throws MailboxException {
+ public AbstractJPAMailboxMembership(JPAMailbox mailbox, long uid,
MailboxMembership<?> original) throws MailboxException {
super();
- this.mailboxId = mailboxId;
+ this.mailbox = mailbox;
this.uid = uid;
this.internalDate = original.getInternalDate();
this.answered = original.isAnswered();
@@ -208,7 +220,7 @@ public abstract class AbstractJPAMailbox
* @see
org.apache.james.mailbox.store.mail.model.MailboxMembership#getMailboxId()
*/
public Long getMailboxId() {
- return mailboxId;
+ return getMailbox().getMailboxId();
}
/**
@@ -276,11 +288,25 @@ public abstract class AbstractJPAMailbox
seen = flags.contains(Flags.Flag.SEEN);
}
+ /**
+ * Utility getter on Mailbox.
+ */
+ public JPAMailbox getMailbox() {
+ return mailbox;
+ }
+
+ /**
+ * Utility setter on Mailbox.
+ */
+ public void setMailbox(JPAMailbox mailbox) {
+ this.mailbox = mailbox;
+ }
+
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
- result = PRIME * result + (int) (mailboxId ^ (mailboxId >>> 32));
+ result = PRIME * result + (int) (getMailboxId() ^ (getMailboxId() >>>
32));
result = PRIME * result + (int) (uid ^ (uid >>> 32));
return result;
}
@@ -294,7 +320,7 @@ public abstract class AbstractJPAMailbox
if (getClass() != obj.getClass())
return false;
final AbstractJPAMailboxMembership other =
(AbstractJPAMailboxMembership) obj;
- if (mailboxId != other.mailboxId)
+ if (getMailboxId() != other.getMailboxId())
return false;
if (uid != other.uid)
return false;
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
Thu Jan 13 17:54:23 2011
@@ -42,24 +42,23 @@ import org.apache.openjpa.persistence.jd
/**
* Abstract base class for JPA based implementations of {@link AbstractMessage}
- *
*/
@MappedSuperclass
public abstract class AbstractJPAMessage extends AbstractMessage {
@Id
@GeneratedValue
- @Column(name = "MAIL_ID", nullable = false)
+ @Column(name = "MAIL_ID", nullable = true)
private long id;
/** The first body octet */
@Basic(optional=false)
- @Column(name = "MAIL_BODY_START_OCTET", nullable = false)
+ @Column(name = "MAIL_BODY_START_OCTET", nullable = true)
private int bodyStartOctet;
/** Number of octets in the full document content */
@Basic(optional=false)
- @Column(name = "MAIL_CONTENT_OCTETS_COUNT", nullable = false)
+ @Column(name = "MAIL_CONTENT_OCTETS_COUNT", nullable = true)
private long contentOctets;
/** MIME media type */
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMembership.java
Thu Jan 13 17:54:23 2011
@@ -34,7 +34,6 @@ import javax.persistence.Table;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.jpa.mail.model.JPAHeader;
import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
-import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
@@ -44,7 +43,7 @@ public class JPAMailboxMembership extend
/** The value for the body field. Lazy loaded */
@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
- @Column(name = "MAIL_ID", nullable = false)
+ @Column(name = "MAIL_ID", nullable = true)
private JPAMessage message;
/**
@@ -53,9 +52,9 @@ public class JPAMailboxMembership extend
@Deprecated
public JPAMailboxMembership() {}
- public JPAMailboxMembership(long mailboxId, long uid, Date internalDate,
int size, Flags flags,
+ public JPAMailboxMembership(JPAMailbox mailbox, long uid, Date
internalDate, int size, Flags flags,
InputStream content, int bodyStartOctet, final List<JPAHeader>
headers, final PropertyBuilder propertyBuilder) throws MailboxException {
- super(mailboxId, uid, internalDate, flags, bodyStartOctet, headers,
propertyBuilder);
+ super(mailbox, uid, internalDate, flags, bodyStartOctet, headers,
propertyBuilder);
try {
this.message = new JPAMessage(content, size, bodyStartOctet,
headers, propertyBuilder);
} catch (IOException e) {
@@ -63,8 +62,8 @@ public class JPAMailboxMembership extend
}
}
- public JPAMailboxMembership(long mailboxId, long uid,
AbstractJPAMailboxMembership original) throws MailboxException {
- super(mailboxId, uid, original);
+ public JPAMailboxMembership(JPAMailbox mailbox, long uid,
AbstractJPAMailboxMembership original) throws MailboxException {
+ super(mailbox, uid, original);
try {
this.message = new JPAMessage((JPAMessage) original.getMessage());
} catch (IOException e) {
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMessage.java
Thu Jan 13 17:54:23 2011
@@ -42,7 +42,7 @@ public class JPAMessage extends Abstract
/** The value for the body field. Lazy loaded */
/** We use a max length to represent 1gb data. Thats prolly overkill, but
who knows */
@Basic(optional = false, fetch = FetchType.LAZY)
- @Column(name = "MAIL_BYTES", length = 1048576000)
+ @Column(name = "MAIL_BYTES", length = 1048576000, nullable = true)
@Lob private byte[] content;
@Deprecated
@@ -61,7 +61,6 @@ public class JPAMessage extends Abstract
public JPAMessage(Message message) throws IOException{
super(message);
this.content = StreamUtils.out(message.getFullContent()).toByteArray();
-
}
/*
@@ -80,6 +79,4 @@ public class JPAMessage extends Abstract
return new ByteArrayInputStream(content, getBodyStartOctet(),
(int)getFullContentOctets());
}
-
-
}
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMembership.java
Thu Jan 13 17:54:23 2011
@@ -34,7 +34,6 @@ import javax.persistence.Table;
import org.apache.james.mailbox.MailboxException;
import org.apache.james.mailbox.jpa.mail.model.JPAHeader;
import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
-import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMembership;
import org.apache.james.mailbox.store.mail.model.Message;
import org.apache.james.mailbox.store.mail.model.PropertyBuilder;
@@ -45,7 +44,7 @@ public class JPAStreamingMailboxMembersh
/** The value for the body field. Lazy loaded */
@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
- @Column(name = "MAIL_ID", nullable = false)
+ @Column(name = "MAIL_ID", nullable = true)
private JPAStreamingMessage message;
/**
@@ -54,14 +53,14 @@ public class JPAStreamingMailboxMembersh
@Deprecated
public JPAStreamingMailboxMembership() {}
- public JPAStreamingMailboxMembership(long mailboxId, long uid, Date
internalDate, int size, Flags flags,
+ public JPAStreamingMailboxMembership(JPAMailbox mailbox, long uid, Date
internalDate, int size, Flags flags,
InputStream content, int bodyStartOctet, final List<JPAHeader>
headers, final PropertyBuilder propertyBuilder) throws MailboxException {
- super(mailboxId, uid, internalDate, flags, bodyStartOctet, headers,
propertyBuilder);
+ super(mailbox, uid, internalDate, flags, bodyStartOctet, headers,
propertyBuilder);
this.message = new JPAStreamingMessage(content, size, bodyStartOctet,
headers, propertyBuilder);
}
- public JPAStreamingMailboxMembership(long mailboxId, long uid,
MailboxMembership<?> original) throws MailboxException {
- super(mailboxId, uid, original);
+ public JPAStreamingMailboxMembership(JPAMailbox mailbox, long uid,
MailboxMembership<?> original) throws MailboxException {
+ super(mailbox, uid, original);
try {
this.message = new JPAStreamingMessage(original.getMessage());
} catch (IOException e) {
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMessage.java
Thu Jan 13 17:54:23 2011
@@ -51,7 +51,7 @@ import org.apache.openjpa.persistence.Pe
public class JPAStreamingMessage extends AbstractJPAMessage {
@Persistent(optional=false, fetch=FetchType.LAZY)
- @Column(name = "MAIL_BYTES", length=1048576000)
+ @Column(name = "MAIL_BYTES", length=1048576000, nullable = true)
private InputStream content;
@Deprecated
Modified:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
URL:
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java?rev=1058688&r1=1058687&r2=1058688&view=diff
==============================================================================
---
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
(original)
+++
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
Thu Jan 13 17:54:23 2011
@@ -30,6 +30,7 @@ import org.apache.james.mailbox.MailboxE
import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
import org.apache.james.mailbox.jpa.JPAMessageManager;
import org.apache.james.mailbox.jpa.mail.model.JPAHeader;
+import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
import
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMailboxMembership;
import org.apache.james.mailbox.store.mail.UidProvider;
import org.apache.james.mailbox.store.mail.model.Header;
@@ -40,7 +41,6 @@ import org.apache.james.mailbox.util.Mai
/**
* OpenJPA implementation of Mailbox
- *
*/
public class OpenJPAMessageManager extends JPAMessageManager {
@@ -64,10 +64,10 @@ public class OpenJPAMessageManager exten
for (Header header: headers) {
jpaHeaders.add((JPAHeader) header);
}
- return new
JPAStreamingMailboxMembership(getMailboxEntity().getMailboxId(), uid,
internalDate, size, flags, document, bodyStartOctet, jpaHeaders,
propertyBuilder);
+ return new JPAStreamingMailboxMembership((JPAMailbox)
getMailboxEntity(), uid, internalDate, size, flags, document, bodyStartOctet,
jpaHeaders, propertyBuilder);
} else {
return super.createMessage(uid, internalDate, size,
bodyStartOctet, document, flags, headers, propertyBuilder);
}
}
-}
\ No newline at end of file
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]