You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2011/04/29 15:41:33 UTC
svn commit: r1097818 - in /james/mailbox/trunk/jpa: ./
src/main/java/org/apache/james/mailbox/jpa/
src/main/java/org/apache/james/mailbox/jpa/mail/model/
src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/
src/test/java/org/apache/james/mail...
Author: norman
Date: Fri Apr 29 13:41:32 2011
New Revision: 1097818
URL: http://svn.apache.org/viewvc?rev=1097818&view=rev
Log:
JPA mailbox now support user flags as permanent flags. Related to MAILBOX-63
Added:
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAUserFlag.java
Modified:
james/mailbox/trunk/jpa/pom.xml
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/model/openjpa/AbstractJPAMessage.java
james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java
james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java
Modified: james/mailbox/trunk/jpa/pom.xml
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/pom.xml?rev=1097818&r1=1097817&r2=1097818&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/pom.xml (original)
+++ james/mailbox/trunk/jpa/pom.xml Fri Apr 29 13:41:32 2011
@@ -104,7 +104,7 @@
</property>
<property>
<name>metaDataFactory</name>
- <value>jpa(Types=org.apache.james.mailbox.jpa.mail.model.JPAHeader;org.apache.james.mailbox.jpa.mail.model.JPAMailbox;org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage;org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage;org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMessage;org.apache.james.mailbox.jpa.mail.model.JPAProperty;org.apache.james.mailbox.jpa.user.model.JPASubscription)</value>
+ <value>jpa(Types=org.apache.james.mailbox.jpa.mail.model.JPAUserFlag;org.apache.james.mailbox.jpa.mail.model.JPAHeader;org.apache.james.mailbox.jpa.mail.model.JPAMailbox;org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage;org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage;org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMessage;org.apache.james.mailbox.jpa.mail.model.JPAProperty;org.apache.james.mailbox.jpa.user.model.JPASubscription)</value>
</property>
</toolProperties>
</configuration>
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=1097818&r1=1097817&r2=1097818&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 Fri Apr 29 13:41:32 2011
@@ -26,6 +26,7 @@ import java.util.List;
import javax.mail.Flags;
import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MailboxSession;
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.JPAMessage;
@@ -63,5 +64,15 @@ public class JPAMessageManager extends S
final Header header = new JPAHeader(lineNumber, name, value);
return header;
}
+
+ /**
+ * Support user flags
+ */
+ @Override
+ protected Flags getPermanentFlags(MailboxSession session) {
+ Flags flags = super.getPermanentFlags(session);
+ flags.add(Flags.Flag.USER);
+ return flags;
+ }
}
Added: james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAUserFlag.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAUserFlag.java?rev=1097818&view=auto
==============================================================================
--- james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAUserFlag.java (added)
+++ james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAUserFlag.java Fri Apr 29 13:41:32 2011
@@ -0,0 +1,116 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one *
+ * or more contributor license agreements. See the NOTICE file *
+ * distributed with this work for additional information *
+ * regarding copyright ownership. The ASF licenses this file *
+ * to you under the Apache License, Version 2.0 (the *
+ * "License"); you may not use this file except in compliance *
+ * with the License. You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, *
+ * software distributed under the License is distributed on an *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
+ * KIND, either express or implied. See the License for the *
+ * specific language governing permissions and limitations *
+ * under the License. *
+ ****************************************************************/
+package org.apache.james.mailbox.jpa.mail.model;
+
+import javax.persistence.Basic;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity(name="UserFlag")
+@Table(name="JAMES_MAIL_USERFLAG")
+public class JPAUserFlag {
+
+
+ /** The system unique key */
+ @Id
+ @GeneratedValue
+ @Column(name = "USERFLAG_ID", nullable = true)
+ private long id;
+
+ /** Local part of the name of this property */
+ @Basic(optional = false)
+ @Column(name = "USERFLAG_NAME", nullable = false, length = 500)
+ private String name;
+
+
+ /**
+ * @deprecated enhancement only
+ */
+ @Deprecated
+ public JPAUserFlag() {}
+
+ /**
+ * Constructs a User Flag.
+ * @param name not null
+ */
+ public JPAUserFlag(String name) {
+ super();
+ this.name = name;
+ }
+
+ /**
+ * Constructs a User Flag. cloned from the given.
+ * @param property not null
+ */
+ public JPAUserFlag(JPAUserFlag flag) {
+ this(flag.getName());
+ }
+
+
+
+ /**
+ * Gets the name.
+ * @return not null
+ */
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public int hashCode() {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + (int) (id ^ (id >>> 32));
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ final JPAUserFlag other = (JPAUserFlag) obj;
+ if (id != other.id)
+ return false;
+ return true;
+ }
+
+ /**
+ * Constructs a <code>String</code> with all attributes
+ * in name = value format.
+ *
+ * @return a <code>String</code> representation
+ * of this object.
+ */
+ public String toString() {
+ final String result = "JPAUserFlag ( "
+ + "id = " + this.id + " "
+ + "name = " + this.name
+ + " )";
+
+ return result;
+ }
+
+}
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=1097818&r1=1097817&r2=1097818&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 Fri Apr 29 13:41:32 2011
@@ -20,6 +20,7 @@ package org.apache.james.mailbox.jpa.mai
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -41,6 +42,7 @@ import org.apache.james.mailbox.MailboxE
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.JPAProperty;
+import org.apache.james.mailbox.jpa.mail.model.JPAUserFlag;
import org.apache.james.mailbox.store.mail.model.AbstractMessage;
import org.apache.james.mailbox.store.mail.model.Header;
import org.apache.james.mailbox.store.mail.model.Message;
@@ -235,6 +237,11 @@ public abstract class AbstractJPAMessage
@ElementJoinColumn(name="MAIL_UID", referencedColumnName="MAIL_UID")})
private List<JPAProperty> properties;
+ @OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
+ @ElementJoinColumns({@ElementJoinColumn(name="MAILBOX_ID", referencedColumnName="MAILBOX_ID"),
+ @ElementJoinColumn(name="MAIL_UID", referencedColumnName="MAIL_UID")})
+ private List<JPAUserFlag> userFlags;
+
@Deprecated
public AbstractJPAMessage() {}
@@ -243,7 +250,9 @@ public abstract class AbstractJPAMessage
this.mailbox = mailbox;
this.internalDate = internalDate;
this.uid = uid;
- setFlags(flags);
+ userFlags = new ArrayList<JPAUserFlag>();
+
+ setFlags(flags);
this.contentOctets = contentOctets;
this.bodyStartOctet = bodyStartOctet;
this.headers = new ArrayList<JPAHeader>(headers);
@@ -256,6 +265,7 @@ public abstract class AbstractJPAMessage
for (final Property property:properties) {
this.properties.add(new JPAProperty(property, order++));
}
+
}
/**
@@ -270,13 +280,8 @@ public abstract class AbstractJPAMessage
super();
this.mailbox = mailbox;
this.uid = uid;
- this.internalDate = original.getInternalDate();
- this.answered = original.isAnswered();
- this.deleted = original.isDeleted();
- this.draft = original.isDraft();
- this.flagged = original.isFlagged();
- this.recent = original.isRecent();
- this.seen = original.isSeen();
+ userFlags = new ArrayList<JPAUserFlag>();
+ setFlags(original.createFlags());
this.contentOctets = original.getFullContentOctets();
@@ -466,6 +471,31 @@ public abstract class AbstractJPAMessage
flagged = flags.contains(Flags.Flag.FLAGGED);
recent = flags.contains(Flags.Flag.RECENT);
seen = flags.contains(Flags.Flag.SEEN);
+
+ // Loop over the user flags and check which of them needs to get added / removed
+ List<String> uFlags = Arrays.asList(flags.getUserFlags());
+ for (int i = 0; i < userFlags.size(); i++) {
+ JPAUserFlag f = userFlags.get(i);
+ if (uFlags.contains(f.getName()) == false) {
+ userFlags.remove(f);
+ i++;
+ }
+ }
+ for (int i = 0; i < uFlags.size(); i++) {
+ boolean found = false;
+ String uFlag = uFlags.get(i);
+ for (int a = 0; a < userFlags.size(); a++) {
+ String userFlag = userFlags.get(a).getName();
+ if (userFlag.equals(uFlag)) {
+ found = true;
+ break;
+ }
+ }
+ if (found == false) {
+ userFlags.add(new JPAUserFlag(uFlag));
+ }
+
+ }
}
/**
@@ -476,6 +506,20 @@ public abstract class AbstractJPAMessage
}
/**
+ * This implementation supports user flags
+ *
+ *
+ */
+ @Override
+ protected String[] createUserFlags() {
+ String[] flags = new String[userFlags.size()];
+ for (int i = 0; i < userFlags.size(); i++) {
+ flags[i] = userFlags.get(i).getName();
+ }
+ return flags;
+ }
+
+ /**
* Utility setter on Mailbox.
*/
public void setMailbox(JPAMailbox mailbox) {
Modified: james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java?rev=1097818&r1=1097817&r2=1097818&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java (original)
+++ james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java Fri Apr 29 13:41:32 2011
@@ -30,6 +30,7 @@ import org.apache.james.mailbox.jpa.mail
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.JPAProperty;
+import org.apache.james.mailbox.jpa.mail.model.JPAUserFlag;
import org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage;
import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
@@ -91,6 +92,7 @@ public class JPAMailboxManagerTest exten
AbstractJPAMessage.class.getName() + ";" +
JPAMessage.class.getName() + ";" +
JPAProperty.class.getName() + ";" +
+ JPAUserFlag.class.getName() + ";" +
JPASubscription.class.getName() + ")");
entityManagerFactory = OpenJPAPersistence.getEntityManagerFactory(properties);
Modified: james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java?rev=1097818&r1=1097817&r2=1097818&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java (original)
+++ james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAStressTest.java Fri Apr 29 13:41:32 2011
@@ -31,6 +31,7 @@ import org.apache.james.mailbox.jpa.mail
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.JPAProperty;
+import org.apache.james.mailbox.jpa.mail.model.JPAUserFlag;
import org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage;
import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
@@ -66,6 +67,7 @@ public class JPAStressTest extends Abstr
AbstractJPAMessage.class.getName() + ";" +
JPAMessage.class.getName() + ";" +
JPAProperty.class.getName() + ";" +
+ JPAUserFlag.class.getName() + ";" +
JPASubscription.class.getName() + ")");
properties.put("openjpa.LockTimeout", locktimeout + "");
Modified: james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java?rev=1097818&r1=1097817&r2=1097818&view=diff
==============================================================================
--- james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java (original)
+++ james/mailbox/trunk/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java Fri Apr 29 13:41:32 2011
@@ -25,6 +25,7 @@ import org.apache.james.mailbox.Subscrip
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.JPAProperty;
+import org.apache.james.mailbox.jpa.mail.model.JPAUserFlag;
import org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMessage;
import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage;
import org.apache.james.mailbox.jpa.user.model.JPASubscription;
@@ -52,6 +53,7 @@ public class JPASubscriptionManagerTest
AbstractJPAMessage.class.getName() + ";" +
JPAMessage.class.getName() + ";" +
JPAProperty.class.getName() + ";" +
+ JPAUserFlag.class.getName() + ";" +
JPASubscription.class.getName() + ")");
entityManagerFactory = OpenJPAPersistence.getEntityManagerFactory(properties);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org