in mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java [312:374]
private BoundStatement updateBoundStatement(ComposedMessageId id, UpdatedFlags updatedFlags, ModSeq previousModeq) {
final BoundStatementBuilder statementBuilder = update.boundStatementBuilder()
.setLong(MOD_SEQ, updatedFlags.getModSeq().asLong())
.setUuid(MESSAGE_ID, ((CassandraMessageId) id.getMessageId()).get())
.setUuid(MAILBOX_ID, ((CassandraId) id.getMailboxId()).asUuid())
.setLong(IMAP_UID, id.getUid().asLong());
if (updatedFlags.isChanged(Flag.ANSWERED)) {
statementBuilder.setBoolean(ANSWERED, updatedFlags.isModifiedToSet(Flag.ANSWERED));
} else {
statementBuilder.unset(ANSWERED);
}
if (updatedFlags.isChanged(Flag.DRAFT)) {
statementBuilder.setBoolean(DRAFT, updatedFlags.isModifiedToSet(Flag.DRAFT));
} else {
statementBuilder.unset(DRAFT);
}
if (updatedFlags.isChanged(Flag.FLAGGED)) {
statementBuilder.setBoolean(FLAGGED, updatedFlags.isModifiedToSet(Flag.FLAGGED));
} else {
statementBuilder.unset(FLAGGED);
}
if (updatedFlags.isChanged(Flag.DELETED)) {
statementBuilder.setBoolean(DELETED, updatedFlags.isModifiedToSet(Flag.DELETED));
} else {
statementBuilder.unset(DELETED);
}
if (updatedFlags.isChanged(Flag.RECENT)) {
statementBuilder.setBoolean(RECENT, updatedFlags.getNewFlags().contains(Flag.RECENT));
} else {
statementBuilder.unset(RECENT);
}
if (updatedFlags.isChanged(Flag.SEEN)) {
statementBuilder.setBoolean(SEEN, updatedFlags.isModifiedToSet(Flag.SEEN));
} else {
statementBuilder.unset(SEEN);
}
if (updatedFlags.isChanged(Flag.USER)) {
statementBuilder.setBoolean(USER, updatedFlags.isModifiedToSet(Flag.USER));
} else {
statementBuilder.unset(USER);
}
Sets.SetView<String> removedFlags = Sets.difference(
ImmutableSet.copyOf(updatedFlags.getOldFlags().getUserFlags()),
ImmutableSet.copyOf(updatedFlags.getNewFlags().getUserFlags()));
Sets.SetView<String> addedFlags = Sets.difference(
ImmutableSet.copyOf(updatedFlags.getNewFlags().getUserFlags()),
ImmutableSet.copyOf(updatedFlags.getOldFlags().getUserFlags()));
if (addedFlags.isEmpty()) {
statementBuilder.unset(ADDED_USERS_FLAGS);
} else {
statementBuilder.setSet(ADDED_USERS_FLAGS, addedFlags, String.class);
}
if (removedFlags.isEmpty()) {
statementBuilder.unset(REMOVED_USERS_FLAGS);
} else {
statementBuilder.setSet(REMOVED_USERS_FLAGS, removedFlags, String.class);
}
if (cassandraConfiguration.isMessageWriteStrongConsistency()) {
statementBuilder.setLong(MOD_SEQ_CONDITION, previousModeq.asLong());
}
return statementBuilder.build();
}