MAILBOX-316 MailboxMapper should return an aclDiff when updateACL and later on we use aclDiff for listener
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/fdeaa5f1 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fdeaa5f1 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fdeaa5f1 Branch: refs/heads/master Commit: fdeaa5f15ed0c2efcfafdc777c2268fd41e79734 Parents: 2462904 Author: quynhn <qngu...@linagora.com> Authored: Tue Nov 7 18:09:47 2017 +0700 Committer: quynhn <qngu...@linagora.com> Committed: Wed Nov 15 09:35:58 2017 +0700 ---------------------------------------------------------------------- .../james/mailbox/acl/PositiveUserACLDiff.java | 2 +- .../mailbox/caching/CachingMailboxMapper.java | 8 ++++-- .../cassandra/mail/CassandraACLMapper.java | 24 +++++++++-------- .../cassandra/mail/CassandraMailboxMapper.java | 5 ++-- .../mail/CassandraUserMailboxRightsDAO.java | 12 ++++----- .../mail/CassandraUserMailboxRightsDAOTest.java | 27 ++++++++++++-------- .../mailbox/hbase/mail/HBaseMailboxMapper.java | 8 ++++-- .../mailbox/jcr/mail/JCRMailboxMapper.java | 8 ++++-- .../mailbox/jpa/mail/JPAMailboxMapper.java | 8 ++++-- .../jpa/mail/TransactionalMailboxMapper.java | 5 ++-- .../maildir/mail/MaildirMailboxMapper.java | 5 +++- .../inmemory/mail/InMemoryMailboxMapper.java | 8 ++++-- .../james/mailbox/store/StoreRightManager.java | 3 +-- .../james/mailbox/store/mail/MailboxMapper.java | 3 ++- .../store/TestMailboxSessionMapperFactory.java | 3 ++- 15 files changed, 82 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLDiff.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLDiff.java b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLDiff.java index 062a6a1..bfe3aa7 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLDiff.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLDiff.java @@ -25,7 +25,7 @@ import org.apache.james.mailbox.model.MailboxACL; public class PositiveUserACLDiff { private final ACLDiff aclDiff; - private PositiveUserACLDiff(ACLDiff aclDiff) { + public PositiveUserACLDiff(ACLDiff aclDiff) { this.aclDiff = aclDiff; } http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java index c368a75..3e8cb23 100644 --- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java +++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMailboxMapper.java @@ -21,6 +21,7 @@ package org.apache.james.mailbox.caching; import java.util.List; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.MailboxACL; @@ -108,8 +109,11 @@ public class CachingMailboxMapper implements MailboxMapper { } @Override - public void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { - mailbox.setACL(mailbox.getACL().apply(mailboxACLCommand)); + public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { + MailboxACL oldACL = mailbox.getACL(); + MailboxACL newACL = mailbox.getACL().apply(mailboxACLCommand); + mailbox.setACL(newACL); + return ACLDiff.computeDiff(oldACL, newACL); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java index cd92520..5503f4b 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java @@ -37,7 +37,7 @@ import org.apache.james.backends.cassandra.init.CassandraConfiguration; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry; import org.apache.james.backends.cassandra.utils.LightweightTransactionException; -import org.apache.james.mailbox.acl.PositiveUserACLChanged; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.cassandra.ids.CassandraId; import org.apache.james.mailbox.cassandra.table.CassandraACLTable; import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable; @@ -126,23 +126,27 @@ public class CassandraACLMapper { return deserializeACL(cassandraId, serializedACL); } - public void updateACL(CassandraId cassandraId, MailboxACL.ACLCommand command) throws MailboxException { + public ACLDiff updateACL(CassandraId cassandraId, MailboxACL.ACLCommand command) throws MailboxException { MailboxACL replacement = MailboxACL.EMPTY.apply(command); - PositiveUserACLChanged positiveUserAclChanged = updateAcl(cassandraId, aclWithVersion -> aclWithVersion.apply(command), replacement); + ACLDiff aclDiff = updateAcl(cassandraId, aclWithVersion -> aclWithVersion.apply(command), replacement); - userMailboxRightsDAO.update(cassandraId, positiveUserAclChanged).join(); + return userMailboxRightsDAO.update(cassandraId, aclDiff) + .thenApply(any -> aclDiff) + .join(); } - public void setACL(CassandraId cassandraId, MailboxACL mailboxACL) throws MailboxException { - PositiveUserACLChanged positiveUserAclChanged = updateAcl(cassandraId, + public ACLDiff setACL(CassandraId cassandraId, MailboxACL mailboxACL) throws MailboxException { + ACLDiff aclDiff = updateAcl(cassandraId, acl -> new ACLWithVersion(acl.version, mailboxACL), mailboxACL); - userMailboxRightsDAO.update(cassandraId, positiveUserAclChanged).join(); + return userMailboxRightsDAO.update(cassandraId, aclDiff) + .thenApply(any -> aclDiff) + .join(); } - private PositiveUserACLChanged updateAcl(CassandraId cassandraId, Function<ACLWithVersion, ACLWithVersion> aclTransformation, MailboxACL replacement) throws MailboxException { + private ACLDiff updateAcl(CassandraId cassandraId, Function<ACLWithVersion, ACLWithVersion> aclTransformation, MailboxACL replacement) throws MailboxException { try { return new FunctionRunnerWithRetry(maxRetry) .executeAndRetrieveObject( @@ -151,9 +155,9 @@ public class CassandraACLMapper { return getAclWithVersion(cassandraId) .map(aclWithVersion -> updateStoredACL(cassandraId, aclTransformation.apply(aclWithVersion)) - .map(newACL -> new PositiveUserACLChanged(aclWithVersion.mailboxACL, newACL))) + .map(newACL -> ACLDiff.computeDiff(aclWithVersion.mailboxACL, newACL))) .orElseGet(() -> insertACL(cassandraId, replacement) - .map(newACL -> new PositiveUserACLChanged(MailboxACL.EMPTY, newACL))); + .map(newACL -> ACLDiff.computeDiff(MailboxACL.EMPTY, newACL))); }); } catch (LightweightTransactionException e) { throw new MailboxException("Exception during lightweight transaction", e); http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java index 25723ff..05b9440 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java @@ -34,6 +34,7 @@ import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; import org.apache.james.backends.cassandra.init.CassandraConfiguration; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.cassandra.ids.CassandraId; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxExistsException; @@ -221,9 +222,9 @@ public class CassandraMailboxMapper implements MailboxMapper { } @Override - public void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { + public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { CassandraId cassandraId = (CassandraId) mailbox.getMailboxId(); - cassandraACLMapper.updateACL(cassandraId, mailboxACLCommand); + return cassandraACLMapper.updateACL(cassandraId, mailboxACLCommand); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java index 89173de..7f93150 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java @@ -38,7 +38,7 @@ import javax.inject.Inject; import org.apache.commons.lang3.tuple.Pair; import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor; import org.apache.james.backends.cassandra.utils.CassandraUtils; -import org.apache.james.mailbox.acl.PositiveUserACLChanged; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.acl.PositiveUserACLDiff; import org.apache.james.mailbox.cassandra.ids.CassandraId; import org.apache.james.mailbox.exception.UnsupportedRightException; @@ -98,12 +98,12 @@ public class CassandraUserMailboxRightsDAO { .where(eq(USER_NAME, bindMarker(USER_NAME)))); } - public CompletableFuture<Void> update(CassandraId cassandraId, PositiveUserACLChanged positiveUserAclChanged) { - PositiveUserACLDiff positiveUserAclDiff = PositiveUserACLDiff.computeDiff(positiveUserAclChanged.getOldACL(), positiveUserAclChanged.getNewACL()); + public CompletableFuture<Void> update(CassandraId cassandraId, ACLDiff aclDiff) { + PositiveUserACLDiff userACLDiff = new PositiveUserACLDiff(aclDiff); return CompletableFuture.allOf( - addAll(cassandraId, positiveUserAclDiff.addedEntries()), - removeAll(cassandraId, positiveUserAclDiff.removedEntries()), - addAll(cassandraId, positiveUserAclDiff.changedEntries())); + addAll(cassandraId, userACLDiff.addedEntries()), + removeAll(cassandraId, userACLDiff.removedEntries()), + addAll(cassandraId, userACLDiff.changedEntries())); } private CompletableFuture<Stream<Void>> removeAll(CassandraId cassandraId, Stream<MailboxACL.Entry> removedEntries) { http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAOTest.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAOTest.java index 6690eae..bb309cd 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAOTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAOTest.java @@ -23,7 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.backends.cassandra.utils.CassandraUtils; -import org.apache.james.mailbox.acl.PositiveUserACLChanged; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.cassandra.ids.CassandraId; import org.apache.james.mailbox.cassandra.modules.CassandraAclModule; import org.apache.james.mailbox.model.MailboxACL; @@ -63,9 +63,10 @@ public class CassandraUserMailboxRightsDAOTest { @Test public void saveShouldInsertNewEntry() throws Exception { - testee.update(MAILBOX_ID, new PositiveUserACLChanged( + testee.update(MAILBOX_ID, ACLDiff.computeDiff( MailboxACL.EMPTY, - new MailboxACL(new Entry(ENTRY_KEY, RIGHTS)))).join(); + new MailboxACL(new Entry(ENTRY_KEY, RIGHTS)))) + .join(); assertThat(testee.retrieve(USER_NAME, MAILBOX_ID).join()) .contains(RIGHTS); @@ -73,13 +74,15 @@ public class CassandraUserMailboxRightsDAOTest { @Test public void saveOnSecondShouldOverwrite() throws Exception { - testee.update(MAILBOX_ID, new PositiveUserACLChanged( + testee.update(MAILBOX_ID, ACLDiff.computeDiff( MailboxACL.EMPTY, - new MailboxACL(new Entry(ENTRY_KEY, RIGHTS)))).join(); + new MailboxACL(new Entry(ENTRY_KEY, RIGHTS)))) + .join(); - testee.update(MAILBOX_ID, new PositiveUserACLChanged( + testee.update(MAILBOX_ID, ACLDiff.computeDiff( new MailboxACL(new Entry(ENTRY_KEY, RIGHTS)), - new MailboxACL(new Entry(ENTRY_KEY, OTHER_RIGHTS)))).join(); + new MailboxACL(new Entry(ENTRY_KEY, OTHER_RIGHTS)))) + .join(); assertThat(testee.retrieve(USER_NAME, MAILBOX_ID).join()) .contains(OTHER_RIGHTS); @@ -93,14 +96,16 @@ public class CassandraUserMailboxRightsDAOTest { @Test public void deleteShouldDeleteWhenExisting() throws Exception { - testee.update(MAILBOX_ID, new PositiveUserACLChanged( + testee.update(MAILBOX_ID, ACLDiff.computeDiff( MailboxACL.EMPTY, - new MailboxACL(new Entry(ENTRY_KEY, RIGHTS)))).join(); + new MailboxACL(new Entry(ENTRY_KEY, RIGHTS)))) + .join(); - testee.update(MAILBOX_ID, new PositiveUserACLChanged( + testee.update(MAILBOX_ID, ACLDiff.computeDiff( new MailboxACL(new Entry(ENTRY_KEY, RIGHTS)), - MailboxACL.EMPTY)).join(); + MailboxACL.EMPTY)) + .join(); assertThat(testee.retrieve(USER_NAME, MAILBOX_ID).join()) .isEmpty(); http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java index 77244e2..a58e01a 100644 --- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java +++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMapper.java @@ -49,6 +49,7 @@ import org.apache.hadoop.hbase.filter.SingleColumnValueFilter; import org.apache.hadoop.hbase.filter.SubstringComparator; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.io.IOUtils; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.hbase.HBaseId; @@ -417,8 +418,11 @@ public class HBaseMailboxMapper extends HBaseNonTransactionalMapper implements M } @Override - public void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { - mailbox.setACL(mailbox.getACL().apply(mailboxACLCommand)); + public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { + MailboxACL oldACL = mailbox.getACL(); + MailboxACL newACL = mailbox.getACL().apply(mailboxACLCommand); + mailbox.setACL(newACL); + return ACLDiff.computeDiff(oldACL, newACL); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java index 4eeb0f2..099178b 100644 --- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java +++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMailboxMapper.java @@ -34,6 +34,7 @@ import org.apache.jackrabbit.commons.JcrUtils; import org.apache.jackrabbit.util.ISO9075; import org.apache.jackrabbit.util.Text; import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.jcr.AbstractJCRScalingMapper; @@ -254,8 +255,11 @@ public class JCRMailboxMapper extends AbstractJCRScalingMapper implements Mailbo } @Override - public void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { - mailbox.setACL(mailbox.getACL().apply(mailboxACLCommand)); + public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { + MailboxACL oldACL = mailbox.getACL(); + MailboxACL newACL = mailbox.getACL().apply(mailboxACLCommand); + mailbox.setACL(newACL); + return ACLDiff.computeDiff(oldACL, newACL); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java index d103528..4077bc9 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java @@ -27,6 +27,7 @@ import javax.persistence.NoResultException; import javax.persistence.PersistenceException; import javax.persistence.RollbackException; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxExistsException; import org.apache.james.mailbox.exception.MailboxNotFoundException; @@ -223,8 +224,11 @@ public class JPAMailboxMapper extends JPATransactionalMapper implements MailboxM } @Override - public void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { - mailbox.setACL(mailbox.getACL().apply(mailboxACLCommand)); + public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { + MailboxACL oldACL = mailbox.getACL(); + MailboxACL newACL = mailbox.getACL().apply(mailboxACLCommand); + mailbox.setACL(newACL); + return ACLDiff.computeDiff(oldACL, newACL); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java index b1f2cca..6149f5c 100644 --- a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java +++ b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java @@ -22,6 +22,7 @@ package org.apache.james.mailbox.jpa.mail; import java.util.List; import org.apache.commons.lang.NotImplementedException; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.MailboxACL; @@ -80,8 +81,8 @@ public class TransactionalMailboxMapper implements MailboxMapper { } @Override - public void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { - wrapped.updateACL(mailbox, mailboxACLCommand); + public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { + return wrapped.updateACL(mailbox, mailboxACLCommand); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java index 16ed62a..d8c541f 100644 --- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java +++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMailboxMapper.java @@ -27,6 +27,7 @@ import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxExistsException; import org.apache.james.mailbox.exception.MailboxNotFoundException; @@ -336,11 +337,13 @@ public class MaildirMailboxMapper extends NonTransactionalMapper implements Mail } @Override - public void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { + public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { MaildirFolder folder = maildirStore.createMaildirFolder(mailbox); + MailboxACL oldACL = mailbox.getACL(); MailboxACL newACL = mailbox.getACL().apply(mailboxACLCommand); folder.setACL(session, newACL); mailbox.setACL(newACL); + return ACLDiff.computeDiff(oldACL, newACL); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java index deca945..de29e84 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java @@ -24,6 +24,7 @@ import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxExistsException; import org.apache.james.mailbox.exception.MailboxNotFoundException; @@ -158,8 +159,11 @@ public class InMemoryMailboxMapper implements MailboxMapper { } @Override - public void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException{ - mailboxesByPath.get(mailbox.generateAssociatedPath()).setACL(mailbox.getACL().apply(mailboxACLCommand)); + public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException{ + MailboxACL oldACL = mailbox.getACL(); + MailboxACL newACL = mailbox.getACL().apply(mailboxACLCommand); + mailboxesByPath.get(mailbox.generateAssociatedPath()).setACL(newACL); + return ACLDiff.computeDiff(oldACL, newACL); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java index 66516c4..6ccff13 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java @@ -129,9 +129,8 @@ public class StoreRightManager implements RightManager { assertSharesBelongsToUserDomain(mailboxPath.getUser(), mailboxACLCommand); MailboxMapper mapper = mailboxSessionMapperFactory.getMailboxMapper(session); Mailbox mailbox = mapper.findMailboxByPath(mailboxPath); - mapper.execute(Mapper.toTransaction(() -> mapper.updateACL(mailbox, mailboxACLCommand))); + ACLDiff aclDiff = mapper.updateACL(mailbox, mailboxACLCommand); - ACLDiff aclDiff = ACLDiff.computeDiff(mailbox.getACL(), mailbox.getACL().apply(mailboxACLCommand)); dispatcher.aclUpdated(session, mailboxPath, aclDiff); } http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java index 0409f88..d419e7a 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java @@ -20,6 +20,7 @@ package org.apache.james.mailbox.store.mail; import java.util.List; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.MailboxACL; @@ -112,7 +113,7 @@ public interface MailboxMapper extends Mapper { * @param mailbox Mailbox for whom we want to update ACL * @param mailboxACLCommand Update to perform */ - void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException; + ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException; /** * Reset the ACL of the stored mailbox. http://git-wip-us.apache.org/repos/asf/james-project/blob/fdeaa5f1/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java index 66d3cf4..f82f66e 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/TestMailboxSessionMapperFactory.java @@ -37,6 +37,7 @@ import org.apache.commons.lang3.NotImplementedException; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.acl.ACLDiff; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.exception.SubscriptionException; @@ -138,7 +139,7 @@ public class TestMailboxSessionMapperFactory extends MailboxSessionMapperFactory } @Override - public void updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { + public ACLDiff updateACL(Mailbox mailbox, MailboxACL.ACLCommand mailboxACLCommand) throws MailboxException { throw new NotImplementedException("Not implemented"); } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org