Author: norman
Date: Fri Apr 29 05:33:53 2011
New Revision: 1097687

URL: http://svn.apache.org/viewvc?rev=1097687&view=rev
Log:
Allow to support User Flags. See MAILBOX-63

Modified:
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1097687&r1=1097686&r2=1097687&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 Fri Apr 29 05:33:53 2011
@@ -117,31 +117,31 @@ public abstract class StoreMessageManage
     }
     
 
-    
-    private Flags getPermanentFlags(MailboxSession session) {
+    /**
+     * Return {@link Flags} which are permanent stored by the mailbox. By 
default this are the following flags:
+     * <br>
+     *  {@link Flag#ANSWERED}, {@link Flag#DELETED}, {@link Flag#DRAFT}, 
{@link Flag#FLAGGED}, {@link Flag#RECENT}, {@link Flag#SEEN}
+     * <br>
+     * 
+     * Which in fact does not allow to permanent store user flags / keywords. 
+     * 
+     * If the sub-class does allow to store "any" user flag / keyword it MUST 
override this method and add {@link Flag#USER} to the list
+     * of returned {@link Flags}. If only a special set of user flags / 
keywords should be allowed just add them directly.
+     * 
+     * @param session
+     * @return flags
+     */
+    protected Flags getPermanentFlags(MailboxSession session) {
         Flags permanentFlags = new Flags();
         permanentFlags.add(Flags.Flag.ANSWERED);
         permanentFlags.add(Flags.Flag.DELETED);
         permanentFlags.add(Flags.Flag.DRAFT);
         permanentFlags.add(Flags.Flag.FLAGGED);
         permanentFlags.add(Flags.Flag.SEEN);
-        if (areUserFlagsPermanent(session)) {
-            permanentFlags.add(Flags.Flag.USER);
-        }
+       
         return permanentFlags;
     }
 
-    /**
-     * Sub-classes should override this and return true if they support to 
store user flags(keywords) permanent.
-     * 
-     * The default is to return false
-     * 
-     * @param session
-     * @return supported 
-     */
-    protected boolean areUserFlagsPermanent(MailboxSession session) {
-        return false;
-    }
     
     /*
      * (non-Javadoc)
@@ -419,8 +419,13 @@ public abstract class StoreMessageManage
     }
 
  
-    // Check if this mailbox supports user flags and if not remove all of them 
before 
-    // pass this to the mapper
+    /**
+     * Check if the given {@link Flags} contains {@link Flags} which are not 
included in the returned {@link Flags} of {@link 
#getPermanentFlags(MailboxSession)}.
+     * If any are found, these are removed from the given {@link Flags} 
instance
+     * 
+     * @param flags
+     * @param session
+     */
     private void trimFlags(Flags flags, MailboxSession session) {
         
         Flags permFlags = getPermanentFlags(session);
@@ -432,6 +437,7 @@ public abstract class StoreMessageManage
                 flags.remove(f);
             }
         }
+        // if the permFlags contains the special USER flag we can skip this as 
all user flags are allowed
         if (permFlags.contains(Flags.Flag.USER) == false) {
             String[] uFlags = flags.getUserFlags();
             for (int i = 0; i <uFlags.length; i++) {

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java?rev=1097687&r1=1097686&r2=1097687&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/model/AbstractMessage.java
 Fri Apr 29 05:33:53 2011
@@ -42,7 +42,7 @@ public abstract class AbstractMessage<Id
     /**
      * @see 
org.apache.james.mailbox.store.mail.model.MailboxMembership#createFlags()
      */
-    public Flags createFlags() {
+    public final Flags createFlags() {
         final Flags flags = new Flags();
 
         if (isAnswered()) {
@@ -63,9 +63,27 @@ public abstract class AbstractMessage<Id
         if (isSeen()) {
             flags.add(Flags.Flag.SEEN);
         }
+        String[] userFlags = createUserFlags();
+        if (userFlags != null && userFlags.length > 0) {
+            for (int i = 0; i < userFlags.length; i++) {
+                flags.add(userFlags[i]);
+            }
+        }
         return flags;
     }
     
+    
+    /**
+     * Return all stored user flags or null if none are stored. By default 
this return null as no user flags are stored
+     * permanent. This method SHOULD get overridden, If the implementation 
supports to store user flags.
+     * 
+     * @return userFlags
+     */
+    protected String[] createUserFlags() {
+        return null;
+    }
+    
+    
     /**
      * The number of octets contained in the body of this part.
      * 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to