public Flags build() { FlagsFilter flagsFilter = this.flagsFilter.orElse(FlagsFilter.noFilter()); Flags flagsOrEmpty = this.flags.orElse(new Flags()); Stream<Flags.Flag> flagStream = toFlagStream(flagsOrEmpty) .filter(flagsFilter.getSystemFlagFilter()); Stream<String> userFlagsStream = Stream .concat( toUserFlagStream(flagsOrEmpty), userFlags.stream()) .distinct() .filter(s -> !Strings.isNullOrEmpty(s)) .filter(flagsFilter.getUserFlagFilter()); final Flags result = new Flags(); flagStream.forEach(result::add); userFlagsStream.forEach(result::add); return result; }
private void addMessageToMailboxes(MailboxMessage mailboxMessage, Set<MailboxId> mailboxIds, MailboxSession mailboxSession) throws MailboxException { MessageIdMapper messageIdMapper = mailboxSessionMapperFactory.getMessageIdMapper(mailboxSession); MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession); for (MailboxId mailboxId : mailboxIds) { boolean shouldPreserveFlags = mailboxManager.myRights(mailboxId, mailboxSession).contains(Right.Write); SimpleMailboxMessage copy = SimpleMailboxMessage.from(mailboxMessage) .mailboxId(mailboxId) .flags( FlagsFactory .builder() .flags(mailboxMessage.createFlags()) .filteringFlags( FlagsFilter.builder() .systemFlagFilter(f -> shouldPreserveFlags) .userFlagFilter(f -> shouldPreserveFlags) .build()) .build()) .build(); save(mailboxSession, messageIdMapper, copy); dispatcher.added(mailboxSession, mailboxMapper.findMailboxById(mailboxId), copy); } }
public static Flags empty() { return builder().build(); }
public static Builder builder() { return new Builder(); }
public static Flags createFlags(MailboxMessage mailboxMessage, String[] userFlags) { return builder() .flags(asFlags(mailboxMessage, userFlags)) .addUserFlags(userFlags) .build(); }
public SimpleMailboxMessage filterFlags(FlagsFilter filter) throws MailboxException { Flags flags = FlagsFactory .builder() .flags(createFlags()) .addUserFlags(createUserFlags()) .filteringFlags(filter) .build(); return from(this).flags(flags).build(); }