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]