下面列出了javax.mail.Flags#add ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Creates the EML message in the specified folder.
*
* @param folderFileInfo The folder to create message in.
* @param message The original MimeMessage.
* @return ID of the new message created
* @throws FileNotFoundException
* @throws FileExistsException
* @throws MessagingException
* @throws IOException
*/
private long createMimeMessageInFolder(
FileInfo folderFileInfo,
MimeMessage message,
Flags flags)
throws FileExistsException, FileNotFoundException, IOException, MessagingException
{
String name = AlfrescoImapConst.MESSAGE_PREFIX + GUID.generate();
FileFolderService fileFolderService = serviceRegistry.getFileFolderService();
FileInfo messageFile = fileFolderService.create(folderFileInfo.getNodeRef(), name, ContentModel.TYPE_CONTENT);
final long newMessageUid = (Long) messageFile.getProperties().get(ContentModel.PROP_NODE_DBID);
name = AlfrescoImapConst.MESSAGE_PREFIX + newMessageUid + AlfrescoImapConst.EML_EXTENSION;
fileFolderService.rename(messageFile.getNodeRef(), name);
Flags newFlags = new Flags(flags);
newFlags.add(Flag.RECENT);
imapService.setFlags(messageFile, newFlags, true);
if (extractAttachmentsEnabled)
{
imapService.extractAttachments(messageFile.getNodeRef(), message);
}
// Force persistence of the message to the repository
new IncomingImapMessage(messageFile, serviceRegistry, message);
return newMessageUid;
}
@Test
void shouldNotRemoveOtherFlagsWhenBigMessages() throws Exception {
Flags appendMessageFlag = new Flags();
appendMessageFlag.add(Flags.Flag.SEEN);
appendMessageFlag.add(Flags.Flag.DRAFT);
ComposedMessageId composedId = inboxMessageManager.appendMessage(
MessageManager.AppendCommand.builder()
.withFlags(appendMessageFlag)
.build(bigMessage()),
mailboxSession).getId();
assertThat(getMessageFlags(composedId.getUid()))
.allSatisfy(flags -> {
assertThat(flags.contains(Flags.Flag.SEEN)).isTrue();
assertThat(flags.contains(Flags.Flag.DRAFT)).isTrue();
assertThat(flags.contains(BIG_MESSAGE)).isTrue();
});
}
public static void setFlag(String flagString, Flags flags) throws DecodingException {
if (flagString.equalsIgnoreCase(MessageFlags.ANSWERED_ALL_CAPS)) {
flags.add(Flags.Flag.ANSWERED);
} else if (flagString.equalsIgnoreCase(MessageFlags.DELETED_ALL_CAPS)) {
flags.add(Flags.Flag.DELETED);
} else if (flagString.equalsIgnoreCase(MessageFlags.DRAFT_ALL_CAPS)) {
flags.add(Flags.Flag.DRAFT);
} else if (flagString.equalsIgnoreCase(MessageFlags.FLAGGED_ALL_CAPS)) {
flags.add(Flags.Flag.FLAGGED);
} else if (flagString.equalsIgnoreCase(MessageFlags.SEEN_ALL_CAPS)) {
flags.add(Flags.Flag.SEEN);
} else {
if (flagString.equalsIgnoreCase(MessageFlags.RECENT_ALL_CAPS)) {
// RFC3501 specifically excludes \Recent
// The \Recent flag should be set automatically by the server so throw Exception
//
// See IMAP-316
throw new DecodingException(HumanReadableText.INVALID_SYSTEM_FLAG, "\\Recent flag is now allowed to set.");
} else {
// RFC3501 allows novel flags
flags.add(flagString);
}
}
}
@Test
void getApplicableFlagShouldUnionAllMessageFlagsExceptRecentAndUser() throws Exception {
message1.setFlags(new Flags(Flag.ANSWERED));
message2.setFlags(new Flags(Flag.DELETED));
Flags recentAndUser = new Flags(Flag.RECENT);
recentAndUser.add(Flag.USER);
recentAndUser.add(CUSTOMS_USER_FLAGS_VALUE);
message3.setFlags(recentAndUser);
saveMessages();
assertThat(messageMapper.getApplicableFlag(benwaInboxMailbox))
.isEqualTo(FlagsBuilder.builder()
.add(Flag.DELETED, Flag.ANSWERED, Flag.DRAFT, Flag.FLAGGED, Flag.SEEN)
.add(CUSTOMS_USER_FLAGS_VALUE)
.build());
}
private static void addModifiedSystemFlags(Flags oldFlags, Flags newFlags, Flags modifiedFlags) {
if (isChanged(oldFlags, newFlags, Flags.Flag.ANSWERED)) {
modifiedFlags.add(Flags.Flag.ANSWERED);
}
if (isChanged(oldFlags, newFlags, Flags.Flag.DELETED)) {
modifiedFlags.add(Flags.Flag.DELETED);
}
if (isChanged(oldFlags, newFlags, Flags.Flag.DRAFT)) {
modifiedFlags.add(Flags.Flag.DRAFT);
}
if (isChanged(oldFlags, newFlags, Flags.Flag.FLAGGED)) {
modifiedFlags.add(Flags.Flag.FLAGGED);
}
if (isChanged(oldFlags, newFlags, Flags.Flag.RECENT)) {
modifiedFlags.add(Flags.Flag.RECENT);
}
if (isChanged(oldFlags, newFlags, Flags.Flag.SEEN)) {
modifiedFlags.add(Flags.Flag.SEEN);
}
}
public void setFlag(String flagString, Flags flags) {
if (flagString.equalsIgnoreCase(MessageFlags.ANSWERED)) {
flags.add(Flags.Flag.ANSWERED);
} else if (flagString.equalsIgnoreCase(MessageFlags.DELETED)) {
flags.add(Flags.Flag.DELETED);
} else if (flagString.equalsIgnoreCase(MessageFlags.DRAFT)) {
flags.add(Flags.Flag.DRAFT);
} else if (flagString.equalsIgnoreCase(MessageFlags.FLAGGED)) {
flags.add(Flags.Flag.FLAGGED);
} else if (flagString.equalsIgnoreCase(MessageFlags.SEEN)) {
flags.add(Flags.Flag.SEEN);
} else if (flagString.equalsIgnoreCase(MessageFlags.RECENT)) {
flags.add(Flags.Flag.RECENT);
} else {
// User flag
flags.add(flagString);
}
}
/**
* Takes a String which is "Maildir encoded" and translates it
* into a {@link Flags} object.
* @param flagsString The String with the flags
* @return A Flags object containing the flags read form the String
*/
public Flags decodeFlags(String flagsString) {
Flags localFlags = new Flags();
if (flagsString.contains(FLAG_DRAFT)) {
localFlags.add(Flags.Flag.DRAFT);
}
if (flagsString.contains(FLAG_FLAGGED)) {
localFlags.add(Flags.Flag.FLAGGED);
}
if (flagsString.contains(FLAG_ANSWERD)) {
localFlags.add(Flags.Flag.ANSWERED);
}
if (flagsString.contains(FLAG_SEEN)) {
localFlags.add(Flags.Flag.SEEN);
}
if (flagsString.contains(FLAG_DELETED)) {
localFlags.add(Flags.Flag.DELETED);
}
return localFlags;
}
@Test
void parseFromLocalFileDataShouldParseByteDataWhenOffsetSet() {
String bufferContent = "\\ANSWERED%\\SEEN%myFlags";
Flags flags = new Flags("myFlags");
flags.add(Flags.Flag.SEEN);
FlagsExtraField testee = new FlagsExtraField(new Flags());
testee.parseFromLocalFileData(bufferContent
.getBytes(StandardCharsets.UTF_8), 10, 13);
assertThat(testee.getValue()).contains("\\SEEN%myFlags");
}
@Test
void parseFromCentralDirectoryDataShouldParseByteDataWhenOffsetSet() {
String bufferContent = "\\ANSWERED%\\SEEN%myFlags";
Flags flags = new Flags("myFlags");
flags.add(Flags.Flag.SEEN);
FlagsExtraField testee = new FlagsExtraField(new Flags());
testee.parseFromCentralDirectoryData(bufferContent
.getBytes(StandardCharsets.UTF_8), 10, 13);
assertThat(testee.getValue()).contains("\\SEEN%myFlags");
}
@Test
public void getMailboxesShouldReturnCorrectUnreadMessagesCount() throws Exception {
MailboxPath mailboxPath = MailboxPath.forUser(USERNAME, "name");
MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME);
mailboxManager.createMailbox(mailboxPath, mailboxSession);
MessageManager messageManager = mailboxManager.getMailbox(mailboxPath, mailboxSession);
Flags defaultUnseenFlag = new Flags();
Flags readMessageFlag = new Flags();
readMessageFlag.add(Flags.Flag.SEEN);
messageManager.appendMessage(MessageManager.AppendCommand.builder()
.withFlags(defaultUnseenFlag)
.build(Message.Builder.of()
.setSubject("test")
.setBody("testmail", StandardCharsets.UTF_8)), mailboxSession);
messageManager.appendMessage(MessageManager.AppendCommand.builder()
.withFlags(defaultUnseenFlag)
.build(Message.Builder.of()
.setSubject("test2")
.setBody("testmail", StandardCharsets.UTF_8)), mailboxSession);
messageManager.appendMessage(MessageManager.AppendCommand.builder()
.withFlags(readMessageFlag)
.build(Message.Builder.of()
.setSubject("test3")
.setBody("testmail", StandardCharsets.UTF_8)), mailboxSession);
GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
.build();
List<JmapResponse> getMailboxesResponse = getMailboxesMethod.processToStream(getMailboxesRequest, methodCallId, mailboxSession).collect(Collectors.toList());
assertThat(getMailboxesResponse)
.hasSize(1)
.extracting(JmapResponse::getResponse)
.hasOnlyElementsOfType(GetMailboxesResponse.class)
.extracting(GetMailboxesResponse.class::cast)
.flatExtracting(GetMailboxesResponse::getList)
.extracting(Mailbox::getUnreadMessages)
.containsExactly(Number.fromLong(2L));
}
private static SearchTerm createFlagSearchTerm(String pFlagName, boolean pValue) {
Flags.Flag flag = toFlag(pFlagName);
Flags flags = new javax.mail.Flags();
if (null == flag) { // user flags
flags.add(pFlagName);
} else {
flags.add(flag);
}
return new FlagTerm(flags, pValue);
}
@Test
void shouldKeepBigMessageFlagWhenAlreadySet() throws Exception {
Flags appendMessageFlag = new Flags();
appendMessageFlag.add(BIG_MESSAGE);
ComposedMessageId composedId = inboxMessageManager.appendMessage(
MessageManager.AppendCommand.builder()
.withFlags(appendMessageFlag)
.build(bigMessage()),
mailboxSession).getId();
assertThat(getMessageFlags(composedId.getUid()))
.allSatisfy(flags -> assertThat(flags.contains(BIG_MESSAGE)).isTrue());
}
public Flags applyToState(Flags currentFlags) {
Flags newStateFlags = new Flags();
if (isFlagged().orElse(currentFlags.contains(Flags.Flag.FLAGGED))) {
newStateFlags.add(Flags.Flag.FLAGGED);
}
if (isAnswered().orElse(currentFlags.contains(Flags.Flag.ANSWERED))) {
newStateFlags.add(Flags.Flag.ANSWERED);
}
if (isDraft().orElse(currentFlags.contains(Flags.Flag.DRAFT))) {
newStateFlags.add(Flags.Flag.DRAFT);
}
if (isForwarded().orElse(currentFlags.contains(new Flags("$Forwarded")))) {
newStateFlags.add(new Flags("$Forwarded"));
}
boolean shouldMessageBeMarkSeen = isUnread().map(b -> !b).orElse(currentFlags.contains(Flags.Flag.SEEN));
if (shouldMessageBeMarkSeen) {
newStateFlags.add(Flags.Flag.SEEN);
}
Arrays.stream(currentFlags.getUserFlags())
.forEach(newStateFlags::add);
if (currentFlags.contains(Flags.Flag.RECENT)) {
newStateFlags.add(Flags.Flag.RECENT);
}
if (currentFlags.contains(Flags.Flag.DELETED)) {
newStateFlags.add(Flags.Flag.DELETED);
}
return newStateFlags;
}
@Test
public void testShouldParseSilentDraftFlagged() throws Exception {
IdRange[] ranges = { new IdRange(1) };
Flags flags = new Flags();
flags.add(Flags.Flag.DRAFT);
flags.add(Flags.Flag.FLAGGED);
check("1 FLAGS.SILENT (\\Draft \\Flagged)\r\n", ranges, true, null,
flags, false, TAG);
}
@Test
void getCentralDirectoryLengthShouldReturnIntegerSizeWhenSystemFlagSet() {
Flags flags = new Flags();
flags.add(Flags.Flag.SEEN);
FlagsExtraField testee = new FlagsExtraField(flags);
assertThat(testee.getCentralDirectoryLength().getValue())
.isEqualTo(5);
}
/**
* Support user flags
*/
@Override
protected Flags getPermanentFlags(MailboxSession session) {
Flags flags = super.getPermanentFlags(session);
flags.add(Flags.Flag.USER);
return flags;
}
public Flags buildNewFlags(Flags oldFlags) {
Flags updatedFlags = new Flags(oldFlags);
switch (mode) {
case REPLACE:
return new Flags(providedFlags);
case ADD:
updatedFlags.add(providedFlags);
break;
case REMOVE:
updatedFlags.remove(providedFlags);
break;
}
return updatedFlags;
}
@Test
void getLocalFileDataLengthShouldReturnIntegerSizeWhenSystemAndUserFlagSet() {
Flags flags = new Flags("myFlags");
flags.add(Flags.Flag.ANSWERED);
FlagsExtraField testee = new FlagsExtraField(flags);
assertThat(testee.getLocalFileDataLength().getValue())
.isEqualTo(17);
}
/**
* Support user flags
*/
@Override
protected Flags getPermanentFlags(MailboxSession session) {
Flags flags = super.getPermanentFlags(session);
flags.add(Flags.Flag.USER);
return flags;
}
@Override
protected Flags getPermanentFlags(MailboxSession session) {
Flags permanentFlags = new Flags(super.getPermanentFlags(session));
permanentFlags.add(Flags.Flag.USER);
return permanentFlags;
}