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]

Reply via email to