You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2020/12/07 03:57:39 UTC

[james-project] 09/13: JAMES-3435 Merge ACLReseted and ACLUpdated events

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit fa3db02bbde84cfa4774890ea2c74d2b05471269
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sat Dec 5 08:54:36 2020 +0700

    JAMES-3435 Merge ACLReseted and ACLUpdated events
    
    Less code, but also shipping commands in events sounds
    like an eventSourcing anti-pattern...
---
 .../java/org/apache/james/mailbox/acl/ACLDiff.java |  16 +++
 .../mailbox/cassandra/mail/CassandraACLDAOV2.java  |  21 ----
 .../mailbox/cassandra/mail/CassandraACLMapper.java |   7 +-
 .../mail/eventsourcing/acl/ACLCommandDTO.java      |  94 ------------------
 .../mail/eventsourcing/acl/ACLModule.java          |   9 --
 .../mail/eventsourcing/acl/ACLReseted.java         |  75 ---------------
 .../mail/eventsourcing/acl/ACLResetedDTO.java      | 107 ---------------------
 .../mail/eventsourcing/acl/ACLUpdated.java         |  12 +--
 .../mail/eventsourcing/acl/ACLUpdatedDTO.java      |  16 +--
 .../mail/eventsourcing/acl/AclV2DAOSubscriber.java |  15 +--
 .../eventsourcing/acl/MailboxACLAggregate.java     |  15 +--
 .../eventsourcing/acl/UserRightsDAOSubscriber.java |   5 -
 .../cassandra/CassandraMailboxManagerTest.java     |   2 +-
 .../cassandra/mail/CassandraACLMapperV1Test.java   |   2 +-
 .../cassandra/mail/CassandraACLMapperV2Test.java   |   6 +-
 .../cassandra/mail/CassandraMailboxMapperTest.java |   2 +-
 .../mail/CassandraMailboxMapperV10Test.java        |   2 +-
 .../mail/migration/AclV2MigrationTest.java         |   2 +-
 .../mail/migration/MailboxPathV2MigrationTest.java |   2 +-
 .../mailbox/cassandra/mail/utils/GuiceUtils.java   |   4 -
 .../modules/mailbox/CassandraMailboxModule.java    |   2 -
 21 files changed, 44 insertions(+), 372 deletions(-)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/ACLDiff.java b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/ACLDiff.java
index 7631261..7b5643d 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/acl/ACLDiff.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/acl/ACLDiff.java
@@ -70,6 +70,22 @@ public class ACLDiff {
             && !oldEntries.get(entry.getKey()).equals(entry.getValue());
     }
 
+    public Stream<MailboxACL.ACLCommand> commands() {
+        return Stream.concat(
+            addedEntries()
+                .map(entry -> MailboxACL.command()
+                    .mode(MailboxACL.EditMode.ADD)
+                    .key(entry.getKey())
+                    .rights(entry.getValue())
+                    .build()),
+            removedEntries()
+                .map(entry -> MailboxACL.command()
+                    .mode(MailboxACL.EditMode.REMOVE)
+                    .key(entry.getKey())
+                    .rights(entry.getValue())
+                    .build()));
+    }
+
     public MailboxACL getOldACL() {
         return oldACL;
     }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLDAOV2.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLDAOV2.java
index 8357650..e3a59a6 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLDAOV2.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLDAOV2.java
@@ -36,7 +36,6 @@ import org.apache.james.mailbox.cassandra.table.CassandraACLTable;
 import org.apache.james.mailbox.cassandra.table.CassandraACLV2Table;
 import org.apache.james.mailbox.model.MailboxACL;
 
-import com.datastax.driver.core.BatchStatement;
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.querybuilder.QueryBuilder;
@@ -45,7 +44,6 @@ import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
-import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
 public class CassandraACLDAOV2 {
@@ -124,13 +122,6 @@ public class CassandraACLDAOV2 {
             .reduce(Throwing.biFunction(MailboxACL::union));
     }
 
-    public Mono<Void> setACL(CassandraId cassandraId, MailboxACL mailboxACL) {
-        return delete(cassandraId)
-                .then(Flux.fromIterable(mailboxACL.getEntries().entrySet())
-                    .concatMap(entry -> doSetACL(cassandraId, mailboxACL))
-                    .then());
-    }
-
     public Mono<Void> updateACL(CassandraId cassandraId, MailboxACL.ACLCommand command) {
         ImmutableSet<String> rightStrings = asStringSet(command.getRights());
         switch (command.getEditMode()) {
@@ -161,16 +152,4 @@ public class CassandraACLDAOV2 {
             .map(String::valueOf)
             .collect(Guavate.toImmutableSet());
     }
-
-    public Mono<Void> doSetACL(CassandraId cassandraId, MailboxACL mailboxACL) {
-        BatchStatement batchStatement = new BatchStatement();
-        mailboxACL.getEntries().entrySet()
-            .stream().map(entry -> replaceRights.bind()
-            .setUUID(CassandraACLV2Table.ID, cassandraId.asUuid())
-            .setString(CassandraACLV2Table.KEY, entry.getKey().serialize())
-            .setSet(CassandraACLV2Table.RIGHTS, asStringSet(entry.getValue()), String.class))
-            .forEach(batchStatement::add);
-
-        return executor.executeVoid(batchStatement);
-    }
 }
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 116c8fa..e91d2aa 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
@@ -32,7 +32,6 @@ import org.apache.james.eventsourcing.Subscriber;
 import org.apache.james.eventsourcing.eventstore.EventStore;
 import org.apache.james.mailbox.acl.ACLDiff;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
-import org.apache.james.mailbox.cassandra.mail.eventsourcing.acl.ACLReseted;
 import org.apache.james.mailbox.cassandra.mail.eventsourcing.acl.ACLUpdated;
 import org.apache.james.mailbox.cassandra.mail.eventsourcing.acl.AclV2DAOSubscriber;
 import org.apache.james.mailbox.cassandra.mail.eventsourcing.acl.DeleteMailboxCommand;
@@ -133,9 +132,9 @@ public class CassandraACLMapper {
         public Mono<ACLDiff> setACL(CassandraId cassandraId, MailboxACL mailboxACL) {
             return Mono.from(eventSourcingSystem.dispatch(new SetACLCommand(new MailboxAggregateId(cassandraId), mailboxACL)))
                 .flatMapIterable(events -> events)
-                .filter(ACLReseted.class::isInstance)
-                .map(ACLReseted.class::cast)
-                .map(ACLReseted::getAclDiff)
+                .filter(ACLUpdated.class::isInstance)
+                .map(ACLUpdated.class::cast)
+                .map(ACLUpdated::getAclDiff)
                 .next()
                 .switchIfEmpty(Mono.defer(() -> Mono.error(new MailboxException("Unable to set ACL"))));
         }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLCommandDTO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLCommandDTO.java
deleted file mode 100644
index 16f5e6f..0000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLCommandDTO.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailbox.cassandra.mail.eventsourcing.acl;
-
-import java.util.Objects;
-
-import org.apache.james.mailbox.exception.UnsupportedRightException;
-import org.apache.james.mailbox.model.MailboxACL;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class ACLCommandDTO {
-    public static ACLCommandDTO fromCommand(MailboxACL.ACLCommand command) {
-        return new ACLCommandDTO(command.getEditMode().name(),
-            command.getEntryKey().serialize(),
-            command.getRights().serialize());
-    }
-
-    private final String mode;
-    private final String entry;
-    private final String rights;
-
-    @JsonCreator
-    public ACLCommandDTO(@JsonProperty("mode") String mode,
-                         @JsonProperty("entry") String entry,
-                         @JsonProperty("rights") String rights) {
-        this.mode = mode;
-        this.entry = entry;
-        this.rights = rights;
-    }
-
-
-    @JsonProperty("mode")
-    public String getMode() {
-        return mode;
-    }
-
-    @JsonProperty("entry")
-    public String getEntry() {
-        return entry;
-    }
-
-    @JsonProperty("rights")
-    public String getRights() {
-        return rights;
-    }
-
-    public MailboxACL.ACLCommand asACLCommand() {
-        try {
-            return MailboxACL.command()
-                .key(MailboxACL.EntryKey.deserialize(entry))
-                .rights(MailboxACL.Rfc4314Rights.deserialize(rights))
-                .mode(MailboxACL.EditMode.parse(mode).orElseThrow(() -> new IllegalArgumentException(mode + " is not a supported EditMode")))
-                .build();
-        } catch (UnsupportedRightException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof ACLCommandDTO) {
-            ACLCommandDTO that = (ACLCommandDTO) o;
-
-            return Objects.equals(this.mode, that.mode)
-                && Objects.equals(this.entry, that.entry)
-                && Objects.equals(this.rights, that.rights);
-        }
-        return false;
-    }
-
-    @Override
-    public final int hashCode() {
-        return Objects.hash(mode, entry, rights);
-    }
-}
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLModule.java
index 64b72c7..60eaab8 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLModule.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLModule.java
@@ -24,17 +24,8 @@ import org.apache.james.json.DTOModule;
 
 public interface ACLModule {
 
-    String RESET_TYPE_NAME = "acl-reseted";
     String UPDATE_TYPE_NAME = "acl-updated";
 
-    EventDTOModule<ACLReseted, ACLResetedDTO> ACL_RESET =
-        new DTOModule.Builder<>(ACLReseted.class)
-            .convertToDTO(ACLResetedDTO.class)
-            .toDomainObjectConverter(ACLResetedDTO::toEvent)
-            .toDTOConverter(ACLResetedDTO::from)
-            .typeName(RESET_TYPE_NAME)
-            .withFactory(EventDTOModule::new);
-
     EventDTOModule<ACLUpdated, ACLUpdatedDTO> ACL_UPDATE =
         new DTOModule.Builder<>(ACLUpdated.class)
             .convertToDTO(ACLUpdatedDTO.class)
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLReseted.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLReseted.java
deleted file mode 100644
index 33ecadc..0000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLReseted.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailbox.cassandra.mail.eventsourcing.acl;
-
-import java.util.Objects;
-
-import org.apache.james.eventsourcing.AggregateId;
-import org.apache.james.eventsourcing.Event;
-import org.apache.james.eventsourcing.EventId;
-import org.apache.james.mailbox.acl.ACLDiff;
-import org.apache.james.mailbox.cassandra.ids.CassandraId;
-
-public class ACLReseted implements Event {
-    private final MailboxAggregateId id;
-    private final EventId eventId;
-    private final ACLDiff aclDiff;
-
-    public ACLReseted(MailboxAggregateId id, EventId eventId, ACLDiff aclDiff) {
-        this.id = id;
-        this.eventId = eventId;
-        this.aclDiff = aclDiff;
-    }
-
-    public CassandraId mailboxId() {
-        return id.asMailboxId();
-    }
-
-    public ACLDiff getAclDiff() {
-        return aclDiff;
-    }
-
-    @Override
-    public EventId eventId() {
-        return eventId;
-    }
-
-    @Override
-    public AggregateId getAggregateId() {
-        return id;
-    }
-
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof ACLReseted) {
-            ACLReseted that = (ACLReseted) o;
-
-            return Objects.equals(this.eventId, that.eventId)
-                && Objects.equals(this.id, that.id)
-                && Objects.equals(this.aclDiff, that.aclDiff);
-        }
-        return false;
-    }
-
-    @Override
-    public final int hashCode() {
-        return Objects.hash(eventId, id, aclDiff);
-    }
-}
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLResetedDTO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLResetedDTO.java
deleted file mode 100644
index 354d765..0000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLResetedDTO.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- * http://www.apache.org/licenses/LICENSE-2.0                   *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ***************************************************************/
-
-package org.apache.james.mailbox.cassandra.mail.eventsourcing.acl;
-
-import java.util.Objects;
-
-import org.apache.james.eventsourcing.EventId;
-import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTO;
-import org.apache.james.mailbox.cassandra.ids.CassandraId;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.common.base.Preconditions;
-
-class ACLResetedDTO implements EventDTO {
-
-    static ACLResetedDTO from(ACLReseted event, String type) {
-        Preconditions.checkNotNull(event);
-
-        return new ACLResetedDTO(
-                event.eventId().serialize(),
-                event.getAggregateId().asAggregateKey(),
-                type,
-                ACLDiffDTO.fromACLDiff(event.getAclDiff()));
-    }
-
-    static ACLResetedDTO from(ACLReseted event) {
-        return from(event, ACLModule.RESET_TYPE_NAME);
-    }
-
-    private final int eventId;
-    private final String aggregateKey;
-    private final String type;
-    private final ACLDiffDTO aclDiff;
-
-    @JsonCreator
-    ACLResetedDTO(
-            @JsonProperty("eventId") int eventId,
-            @JsonProperty("aggregateKey") String aggregateKey,
-            @JsonProperty("type") String type,
-            @JsonProperty("aclDiff") ACLDiffDTO aclDiff) {
-        this.eventId = eventId;
-        this.aggregateKey = aggregateKey;
-        this.type = type;
-        this.aclDiff = aclDiff;
-    }
-
-    @JsonIgnore
-    public ACLReseted toEvent() {
-        return new ACLReseted(
-            new MailboxAggregateId(CassandraId.of(aggregateKey)),
-            EventId.fromSerialized(eventId),
-            aclDiff.asACLDiff());
-    }
-
-    public int getEventId() {
-        return eventId;
-    }
-
-    public String getAggregateKey() {
-        return aggregateKey;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public ACLDiffDTO getAclDiff() {
-        return aclDiff;
-    }
-
-    @Override
-    public final boolean equals(Object o) {
-        if (o instanceof ACLResetedDTO) {
-            ACLResetedDTO that = (ACLResetedDTO) o;
-
-            return Objects.equals(this.eventId, that.eventId)
-                && Objects.equals(this.aggregateKey, that.aggregateKey)
-                && Objects.equals(this.type, that.type)
-                && Objects.equals(this.aclDiff, that.aclDiff);
-        }
-        return false;
-    }
-
-    @Override
-    public final int hashCode() {
-        return Objects.hash(eventId, aggregateKey, type, aclDiff);
-    }
-}
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdated.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdated.java
index 604209c..048b8b7 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdated.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdated.java
@@ -26,18 +26,15 @@ import org.apache.james.eventsourcing.Event;
 import org.apache.james.eventsourcing.EventId;
 import org.apache.james.mailbox.acl.ACLDiff;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
-import org.apache.james.mailbox.model.MailboxACL;
 
 public class ACLUpdated implements Event {
     private final MailboxAggregateId id;
     private final EventId eventId;
-    private final MailboxACL.ACLCommand command;
     private final ACLDiff aclDiff;
 
-    public ACLUpdated(MailboxAggregateId id, EventId eventId, MailboxACL.ACLCommand command, ACLDiff aclDiff) {
+    public ACLUpdated(MailboxAggregateId id, EventId eventId, ACLDiff aclDiff) {
         this.id = id;
         this.eventId = eventId;
-        this.command = command;
         this.aclDiff = aclDiff;
     }
 
@@ -59,10 +56,6 @@ public class ACLUpdated implements Event {
         return aclDiff;
     }
 
-    public MailboxACL.ACLCommand getCommand() {
-        return command;
-    }
-
     @Override
     public final boolean equals(Object o) {
         if (o instanceof ACLUpdated) {
@@ -70,7 +63,6 @@ public class ACLUpdated implements Event {
 
             return Objects.equals(this.eventId, that.eventId)
                 && Objects.equals(this.id, that.id)
-                && Objects.equals(this.command, that.command)
                 && Objects.equals(this.aclDiff, that.aclDiff);
         }
         return false;
@@ -78,6 +70,6 @@ public class ACLUpdated implements Event {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(eventId, id, aclDiff, command);
+        return Objects.hash(eventId, id, aclDiff);
     }
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdatedDTO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdatedDTO.java
index 8870745..a1a3b4f 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdatedDTO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdatedDTO.java
@@ -39,8 +39,7 @@ class ACLUpdatedDTO implements EventDTO {
                 event.eventId().serialize(),
                 event.getAggregateId().asAggregateKey(),
                 type,
-                ACLDiffDTO.fromACLDiff(event.getAclDiff()),
-                ACLCommandDTO.fromCommand(event.getCommand()));
+                ACLDiffDTO.fromACLDiff(event.getAclDiff()));
     }
 
     static ACLUpdatedDTO from(ACLUpdated event) {
@@ -51,19 +50,16 @@ class ACLUpdatedDTO implements EventDTO {
     private final String aggregateKey;
     private final String type;
     private final ACLDiffDTO aclDiff;
-    private final ACLCommandDTO command;
 
     @JsonCreator
     ACLUpdatedDTO(@JsonProperty("eventId") int eventId,
                   @JsonProperty("aggregateKey") String aggregateKey,
                   @JsonProperty("type") String type,
-                  @JsonProperty("aclDiff") ACLDiffDTO aclDiff,
-                  @JsonProperty("command") ACLCommandDTO command) {
+                  @JsonProperty("aclDiff") ACLDiffDTO aclDiff) {
         this.eventId = eventId;
         this.aggregateKey = aggregateKey;
         this.type = type;
         this.aclDiff = aclDiff;
-        this.command = command;
     }
 
     @JsonIgnore
@@ -71,7 +67,6 @@ class ACLUpdatedDTO implements EventDTO {
         return new ACLUpdated(
             new MailboxAggregateId(CassandraId.of(aggregateKey)),
             EventId.fromSerialized(eventId),
-            command.asACLCommand(),
             aclDiff.asACLDiff());
     }
 
@@ -91,10 +86,6 @@ class ACLUpdatedDTO implements EventDTO {
         return aclDiff;
     }
 
-    public ACLCommandDTO getCommand() {
-        return command;
-    }
-
     @Override
     public final boolean equals(Object o) {
         if (o instanceof ACLUpdatedDTO) {
@@ -103,7 +94,6 @@ class ACLUpdatedDTO implements EventDTO {
             return Objects.equals(this.eventId, that.eventId)
                 && Objects.equals(this.aggregateKey, that.aggregateKey)
                 && Objects.equals(this.type, that.type)
-                && Objects.equals(this.command, that.command)
                 && Objects.equals(this.aclDiff, that.aclDiff);
         }
         return false;
@@ -111,6 +101,6 @@ class ACLUpdatedDTO implements EventDTO {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(eventId, aggregateKey, type, aclDiff, command);
+        return Objects.hash(eventId, aggregateKey, type, aclDiff);
     }
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/AclV2DAOSubscriber.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/AclV2DAOSubscriber.java
index be41fa9..6c579ea 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/AclV2DAOSubscriber.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/AclV2DAOSubscriber.java
@@ -23,6 +23,8 @@ import org.apache.james.eventsourcing.Event;
 import org.apache.james.eventsourcing.Subscriber;
 import org.apache.james.mailbox.cassandra.mail.CassandraACLDAOV2;
 
+import reactor.core.publisher.Flux;
+
 public class AclV2DAOSubscriber implements Subscriber {
     private final CassandraACLDAOV2 acldaov2;
 
@@ -32,15 +34,14 @@ public class AclV2DAOSubscriber implements Subscriber {
 
     @Override
     public void handle(Event event) {
-        if (event instanceof ACLReseted) {
-            ACLReseted aclReseted = (ACLReseted) event;
-            acldaov2.setACL(aclReseted.mailboxId(), aclReseted.getAclDiff().getNewACL())
-                .block();
-        }
         if (event instanceof ACLUpdated) {
             ACLUpdated aclUpdated = (ACLUpdated) event;
-            acldaov2.updateACL(aclUpdated.mailboxId(), aclUpdated.getCommand())
-                .block();
+
+            Flux.fromStream(
+                aclUpdated.getAclDiff()
+                    .commands())
+                .flatMap(command -> acldaov2.updateACL(aclUpdated.mailboxId(), command))
+                .blockLast();
         }
     }
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/MailboxACLAggregate.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/MailboxACLAggregate.java
index 485d0d2..79ca0d5 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/MailboxACLAggregate.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/MailboxACLAggregate.java
@@ -66,32 +66,23 @@ public class MailboxACLAggregate {
     }
 
     public List<Event> deleteMailbox() {
-        return ImmutableList.of(new ACLReseted(aggregateId, history.getNextEventId(),
+        return ImmutableList.of(new ACLUpdated(aggregateId, history.getNextEventId(),
             ACLDiff.computeDiff(state.acl.orElse(MailboxACL.EMPTY), MailboxACL.EMPTY)));
     }
 
     public List<Event> set(SetACLCommand setACLCommand) {
-        return ImmutableList.of(new ACLReseted(aggregateId, history.getNextEventId(),
+        return ImmutableList.of(new ACLUpdated(aggregateId, history.getNextEventId(),
             ACLDiff.computeDiff(state.acl.orElse(MailboxACL.EMPTY), setACLCommand.getAcl())));
     }
 
     public List<Event> update(UpdateACLCommand command) throws UnsupportedRightException {
         MailboxACL oldACL = state.acl.orElse(MailboxACL.EMPTY);
-        return ImmutableList.of(new ACLUpdated(command.getId(), history.getNextEventId(), command.getAclCommand(),
+        return ImmutableList.of(new ACLUpdated(command.getId(), history.getNextEventId(),
             ACLDiff.computeDiff(oldACL,
                 oldACL.apply(command.getAclCommand()))));
     }
 
     private void apply(Event event) {
-        if (event instanceof ACLReseted) {
-            ACLReseted aclReseted = (ACLReseted) event;
-            MailboxACL newACL = aclReseted.getAclDiff().getNewACL();
-            if (newACL.getEntries().isEmpty()) {
-                state = State.initial();
-            } else {
-                state = State.forAcl(newACL);
-            }
-        }
         if (event instanceof ACLUpdated) {
             ACLUpdated aclUpdated = (ACLUpdated) event;
             state = State.forAcl(aclUpdated.getAclDiff().getNewACL());
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/UserRightsDAOSubscriber.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/UserRightsDAOSubscriber.java
index 3566b6a..4bdfb19 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/UserRightsDAOSubscriber.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/UserRightsDAOSubscriber.java
@@ -32,11 +32,6 @@ public class UserRightsDAOSubscriber implements Subscriber {
 
     @Override
     public void handle(Event event) {
-        if (event instanceof ACLReseted) {
-            ACLReseted aclReseted = (ACLReseted) event;
-            userRightsDAO.update(aclReseted.mailboxId(), aclReseted.getAclDiff())
-                .block();
-        }
         if (event instanceof ACLUpdated) {
             ACLUpdated aclUpdated = (ACLUpdated) event;
             userRightsDAO.update(aclUpdated.mailboxId(), aclUpdated.getAclDiff())
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
index 84dd5b1..6dc9026 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
@@ -801,7 +801,7 @@ public class CassandraMailboxManagerTest extends MailboxManagerTest<CassandraMai
             CassandraACLDAOV1 aclDAOV1 = new CassandraACLDAOV1(cassandraCluster.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION, CassandraConsistenciesConfiguration.DEFAULT);
             CassandraACLDAOV2 aclDAOv2 = new CassandraACLDAOV2(cassandraCluster.getConf());
             JsonEventSerializer jsonEventSerializer = JsonEventSerializer
-                .forModules(ACLModule.ACL_RESET, ACLModule.ACL_UPDATE)
+                .forModules(ACLModule.ACL_UPDATE)
                 .withoutNestedType();
             CassandraUserMailboxRightsDAO usersRightDAO = new CassandraUserMailboxRightsDAO(cassandraCluster.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
             CassandraEventStore eventStore = new CassandraEventStore(new EventStoreDao(cassandraCluster.getConf(), jsonEventSerializer, CassandraConsistenciesConfiguration.DEFAULT));
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV1Test.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV1Test.java
index 1d52765..e34e0b0 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV1Test.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV1Test.java
@@ -67,7 +67,7 @@ class CassandraACLMapperV1Test extends CassandraACLMapperContract {
         CassandraACLDAOV1 aclDAOV1 = new CassandraACLDAOV1(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION, CassandraConsistenciesConfiguration.DEFAULT);
         CassandraACLDAOV2 aclDAOv2 = new CassandraACLDAOV2(cassandra.getConf());
         JsonEventSerializer jsonEventSerializer = JsonEventSerializer
-            .forModules(ACLModule.ACL_RESET, ACLModule.ACL_UPDATE)
+            .forModules(ACLModule.ACL_UPDATE)
             .withoutNestedType();
         CassandraUserMailboxRightsDAO usersRightDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
         CassandraEventStore eventStore = new CassandraEventStore(new EventStoreDao(cassandra.getConf(), jsonEventSerializer, CassandraConsistenciesConfiguration.DEFAULT));
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV2Test.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV2Test.java
index a1367f1..5b2556f 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV2Test.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV2Test.java
@@ -66,7 +66,7 @@ class CassandraACLMapperV2Test extends CassandraACLMapperContract {
         CassandraACLDAOV1 aclDAOV1 = new CassandraACLDAOV1(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION, CassandraConsistenciesConfiguration.DEFAULT);
         CassandraACLDAOV2 aclDAOv2 = new CassandraACLDAOV2(cassandra.getConf());
         JsonEventSerializer jsonEventSerializer = JsonEventSerializer
-            .forModules(ACLModule.ACL_RESET, ACLModule.ACL_UPDATE)
+            .forModules(ACLModule.ACL_UPDATE)
             .withoutNestedType();
         CassandraUserMailboxRightsDAO usersRightDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
         CassandraEventStore eventStore = new CassandraEventStore(new EventStoreDao(cassandra.getConf(), jsonEventSerializer, CassandraConsistenciesConfiguration.DEFAULT));
@@ -88,7 +88,7 @@ class CassandraACLMapperV2Test extends CassandraACLMapperContract {
             .registerScenario(awaitOn(barrier)
                 .thenExecuteNormally()
                 .times(2)
-                .whenQueryStartsWith("SELECT * FROM aclv2 WHERE id=:id;"));
+                .whenQueryStartsWith("SELECT * FROM eventStore WHERE aggregateId=:aggregateId;"));
 
         MailboxACL.EntryKey keyBob = new MailboxACL.EntryKey("bob", MailboxACL.NameType.user, false);
         MailboxACL.Rfc4314Rights rights = new MailboxACL.Rfc4314Rights(MailboxACL.Right.Read);
@@ -116,7 +116,7 @@ class CassandraACLMapperV2Test extends CassandraACLMapperContract {
             .registerScenario(awaitOn(barrier)
                 .thenExecuteNormally()
                 .times(2)
-                .whenQueryStartsWith("SELECT * FROM aclv2 WHERE id=:id;"));
+                .whenQueryStartsWith("SELECT * FROM eventStore WHERE aggregateId=:aggregateId;"));
 
         MailboxACL.EntryKey keyBob = new MailboxACL.EntryKey("bob", MailboxACL.NameType.user, false);
         MailboxACL.EntryKey keyAlice = new MailboxACL.EntryKey("alice", MailboxACL.NameType.user, false);
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
index b2b5caa..7e9fb00 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
@@ -117,7 +117,7 @@ class CassandraMailboxMapperTest {
         CassandraACLDAOV1 aclDAOV1 = new CassandraACLDAOV1(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION, CassandraConsistenciesConfiguration.DEFAULT);
         CassandraACLDAOV2 aclDAOv2 = new CassandraACLDAOV2(cassandra.getConf());
         JsonEventSerializer jsonEventSerializer = JsonEventSerializer
-            .forModules(ACLModule.ACL_RESET, ACLModule.ACL_UPDATE)
+            .forModules(ACLModule.ACL_UPDATE)
             .withoutNestedType();
         CassandraUserMailboxRightsDAO usersRightDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
         CassandraEventStore eventStore = new CassandraEventStore(new EventStoreDao(cassandra.getConf(), jsonEventSerializer, CassandraConsistenciesConfiguration.DEFAULT));
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperV10Test.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperV10Test.java
index 6c70f72..a1a644a 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperV10Test.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperV10Test.java
@@ -117,7 +117,7 @@ class CassandraMailboxMapperV10Test {
         CassandraACLDAOV1 aclDAOV1 = new CassandraACLDAOV1(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION, CassandraConsistenciesConfiguration.DEFAULT);
         CassandraACLDAOV2 aclDAOv2 = new CassandraACLDAOV2(cassandra.getConf());
         JsonEventSerializer jsonEventSerializer = JsonEventSerializer
-            .forModules(ACLModule.ACL_RESET, ACLModule.ACL_UPDATE)
+            .forModules(ACLModule.ACL_UPDATE)
             .withoutNestedType();
         CassandraUserMailboxRightsDAO usersRightDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
         CassandraEventStore eventStore = new CassandraEventStore(new EventStoreDao(cassandra.getConf(), jsonEventSerializer, CassandraConsistenciesConfiguration.DEFAULT));
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AclV2MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AclV2MigrationTest.java
index 83c0c97..1a22a87 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AclV2MigrationTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AclV2MigrationTest.java
@@ -79,7 +79,7 @@ class AclV2MigrationTest {
         daoV1 = new CassandraACLDAOV1(cassandra.getConf(), CassandraConfiguration.DEFAULT_CONFIGURATION, CassandraConsistenciesConfiguration.DEFAULT);
         daoV2 = new CassandraACLDAOV2(cassandra.getConf());
         JsonEventSerializer jsonEventSerializer = JsonEventSerializer
-            .forModules(ACLModule.ACL_RESET, ACLModule.ACL_UPDATE)
+            .forModules(ACLModule.ACL_UPDATE)
             .withoutNestedType();
         CassandraEventStore eventStore = new CassandraEventStore(new EventStoreDao(cassandra.getConf(), jsonEventSerializer, CassandraConsistenciesConfiguration.DEFAULT));
         CassandraUserMailboxRightsDAO usersRightDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
index 86baa97..7d0a29a 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/MailboxPathV2MigrationTest.java
@@ -107,7 +107,7 @@ class MailboxPathV2MigrationTest {
             cassandraCluster.getCassandraConsistenciesConfiguration());
         CassandraACLDAOV2 aclDAOV2 = new CassandraACLDAOV2(cassandra.getConf());
         JsonEventSerializer jsonEventSerializer = JsonEventSerializer
-            .forModules(ACLModule.ACL_RESET, ACLModule.ACL_UPDATE)
+            .forModules(ACLModule.ACL_UPDATE)
             .withoutNestedType();
         CassandraEventStore eventStore = new CassandraEventStore(new EventStoreDao(cassandra.getConf(), jsonEventSerializer, CassandraConsistenciesConfiguration.DEFAULT));
         CassandraUserMailboxRightsDAO usersRightDAO = new CassandraUserMailboxRightsDAO(cassandra.getConf(), CassandraUtils.WITH_DEFAULT_CONFIGURATION);
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
index bb2d0c7..1c6481a 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
@@ -38,7 +38,6 @@ import org.apache.james.eventsourcing.eventstore.cassandra.dto.EventDTOModule;
 import org.apache.james.json.DTO;
 import org.apache.james.json.DTOModule;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
-import org.apache.james.mailbox.cassandra.mail.CassandraACLDAOV1;
 import org.apache.james.mailbox.cassandra.mail.eventsourcing.acl.ACLModule;
 import org.apache.james.mailbox.model.MessageId;
 
@@ -73,14 +72,11 @@ public class GuiceUtils {
                                         CassandraMessageId.Factory messageIdFactory,
                                         CassandraConfiguration configuration) {
         return Modules.combine(
-            binder -> binder.bind(CassandraACLDAO.class).to(CassandraACLDAOV1.class),
             binder -> binder.bind(MessageId.Factory.class).toInstance(messageIdFactory),
             binder -> binder.bind(BlobId.Factory.class).toInstance(new HashBlobId.Factory()),
             binder -> binder.bind(BlobStore.class).toProvider(() -> CassandraBlobStoreFactory.forTesting(session).passthrough()),
             binder -> binder.bind(Session.class).toInstance(session),
             binder -> Multibinder.newSetBinder(binder, new TypeLiteral<EventDTOModule<? extends Event, ? extends EventDTO>>() {})
-                .addBinding().toInstance(ACLModule.ACL_RESET),
-            binder -> Multibinder.newSetBinder(binder, new TypeLiteral<EventDTOModule<? extends Event, ? extends EventDTO>>() {})
                 .addBinding().toInstance(ACLModule.ACL_UPDATE),
             binder -> binder.bind(new TypeLiteral<Set<DTOModule<?, ? extends DTO>>>() {}).annotatedWith(Names.named(EventNestedTypes.EVENT_NESTED_TYPES_INJECTION_NAME))
                 .toInstance(ImmutableSet.of()),
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
index 23408f1..1ce6a3d 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
@@ -213,8 +213,6 @@ public class CassandraMailboxModule extends AbstractModule {
         bind(MailboxManager.class).annotatedWith(Names.named(MAILBOXMANAGER_NAME)).to(MailboxManager.class);
 
         Multibinder.newSetBinder(binder(), new TypeLiteral<EventDTOModule<? extends Event, ? extends EventDTO>>() {})
-            .addBinding().toInstance(ACLModule.ACL_RESET);
-        Multibinder.newSetBinder(binder(), new TypeLiteral<EventDTOModule<? extends Event, ? extends EventDTO>>() {})
             .addBinding().toInstance(ACLModule.ACL_UPDATE);
     }
     


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org