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