You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2018/09/06 07:54:49 UTC
[6/6] james-project git commit: JAMES-2420 Add a DLPConfiguration
object
JAMES-2420 Add a DLPConfiguration object
Represent a collection of rules. This allow to share Id duplication checks
between WebAdmin and rule storage.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e6ef1744
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e6ef1744
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e6ef1744
Branch: refs/heads/master
Commit: e6ef1744d7a3d639d0c77df574c7064f2ba1e75d
Parents: b1062f3
Author: Benoit Tellier <bt...@linagora.com>
Authored: Tue Sep 4 10:20:25 2018 +0700
Committer: Antoine Duprat <ad...@linagora.com>
Committed: Thu Sep 6 09:54:20 2018 +0200
----------------------------------------------------------------------
.../apache/james/util/streams/Iterables.java | 30 +++++++
.../james/dlp/api/DLPConfigurationLoader.java | 4 +-
.../james/dlp/api/DLPConfigurationStore.java | 15 ++--
.../java/org/apache/james/dlp/api/DLPRules.java | 84 ++++++++++++++++++++
.../dlp/api/DLPConfigurationStoreContract.java | 4 +-
server/data/data-library/pom.xml | 4 +
.../EventSourcingDLPConfigurationStore.java | 10 +--
.../aggregates/DLPDomainConfiguration.java | 23 ++----
.../eventsourcing/commands/StoreCommand.java | 9 +--
.../commands/StoreCommandTest.java | 3 +-
.../transport/matchers/dlp/DlpRulesLoader.java | 6 +-
.../james/webadmin/dto/DLPConfigurationDTO.java | 18 ++---
.../webadmin/routes/DLPConfigurationRoutes.java | 28 +++----
13 files changed, 165 insertions(+), 73 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/container/util/src/main/java/org/apache/james/util/streams/Iterables.java
----------------------------------------------------------------------
diff --git a/server/container/util/src/main/java/org/apache/james/util/streams/Iterables.java b/server/container/util/src/main/java/org/apache/james/util/streams/Iterables.java
new file mode 100644
index 0000000..b3730ba
--- /dev/null
+++ b/server/container/util/src/main/java/org/apache/james/util/streams/Iterables.java
@@ -0,0 +1,30 @@
+/****************************************************************
+ * 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.util.streams;
+
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+public class Iterables {
+
+ public static <T> Stream<T> toStream(Iterable<T> iterable) {
+ return StreamSupport.stream(iterable.spliterator(), false);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationLoader.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationLoader.java b/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationLoader.java
index e2d27f5..ccd7223 100644
--- a/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationLoader.java
+++ b/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationLoader.java
@@ -19,10 +19,8 @@
package org.apache.james.dlp.api;
-import java.util.stream.Stream;
-
import org.apache.james.core.Domain;
public interface DLPConfigurationLoader {
- Stream<DLPConfigurationItem> list(Domain domain);
+ DLPRules list(Domain domain);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationStore.java b/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationStore.java
index 2404b1e..b766d7f 100644
--- a/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationStore.java
+++ b/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationStore.java
@@ -20,9 +20,7 @@
package org.apache.james.dlp.api;
import java.util.Arrays;
-import java.util.List;
import java.util.Optional;
-import java.util.stream.Stream;
import org.apache.james.core.Domain;
@@ -30,13 +28,14 @@ import com.google.common.collect.ImmutableList;
public interface DLPConfigurationStore extends DLPConfigurationLoader {
- void store(Domain domain, List<DLPConfigurationItem> rule);
+ void store(Domain domain, DLPRules rule);
- default void store(Domain domain, DLPConfigurationItem firstRules, DLPConfigurationItem... rules) {
- store(domain, Stream.concat(
- Stream.of(firstRules),
- Arrays.stream(rules))
- .collect(ImmutableList.toImmutableList()));
+ default void store(Domain domain, DLPConfigurationItem firstRule, DLPConfigurationItem... rules) {
+ store(domain, new DLPRules(
+ ImmutableList.<DLPConfigurationItem>builder()
+ .add(firstRule)
+ .addAll(Arrays.asList(rules))
+ .build()));
}
void clear(Domain domain);
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPRules.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPRules.java b/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPRules.java
new file mode 100644
index 0000000..a048116
--- /dev/null
+++ b/server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPRules.java
@@ -0,0 +1,84 @@
+/****************************************************************
+ * 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.dlp.api;
+
+import java.util.Iterator;
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+
+public class DLPRules implements Iterable<DLPConfigurationItem> {
+
+ public static final class DuplicateRulesIdsException extends RuntimeException {
+ }
+
+ private final ImmutableList<DLPConfigurationItem> items;
+
+ public DLPRules(ImmutableList<DLPConfigurationItem> items) throws DuplicateRulesIdsException {
+ Preconditions.checkNotNull(items);
+ checkNotContainDuplicateIds(items);
+
+ this.items = items;
+ }
+
+ private void checkNotContainDuplicateIds(ImmutableList<DLPConfigurationItem> items) throws DuplicateRulesIdsException {
+ long uniqueIdCount = items.stream()
+ .map(DLPConfigurationItem::getId)
+ .distinct()
+ .count();
+
+ if (uniqueIdCount != items.size()) {
+ throw new DuplicateRulesIdsException();
+ }
+ }
+
+ public ImmutableList<DLPConfigurationItem> getItems() {
+ return items;
+ }
+
+ @Override
+ public Iterator<DLPConfigurationItem> iterator() {
+ return items.iterator();
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof DLPRules) {
+ DLPRules dlpConfiguration = (DLPRules) o;
+
+ return Objects.equals(this.items, dlpConfiguration.items);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(items);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("items", items)
+ .toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationStoreContract.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationStoreContract.java b/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationStoreContract.java
index e2e7251..6ed3b0d 100644
--- a/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationStoreContract.java
+++ b/server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationStoreContract.java
@@ -111,7 +111,7 @@ public interface DLPConfigurationStoreContract {
@Test
default void storeShouldRejectDuplicateIds(DLPConfigurationStore dlpConfigurationStore) {
assertThatThrownBy(() -> dlpConfigurationStore.store(Domain.LOCALHOST, RULE, RULE))
- .isInstanceOf(IllegalArgumentException.class);
+ .isInstanceOf(DLPRules.DuplicateRulesIdsException.class);
}
@Test
@@ -133,7 +133,7 @@ public interface DLPConfigurationStoreContract {
@Test
default void storeShouldClearRulesWhenEmpty(DLPConfigurationStore dlpConfigurationStore) {
dlpConfigurationStore.store(Domain.LOCALHOST, RULE);
- dlpConfigurationStore.store(Domain.LOCALHOST, ImmutableList.of());
+ dlpConfigurationStore.store(Domain.LOCALHOST, new DLPRules(ImmutableList.of()));
assertThat(dlpConfigurationStore.list(Domain.LOCALHOST)).isEmpty();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/data/data-library/pom.xml
----------------------------------------------------------------------
diff --git a/server/data/data-library/pom.xml b/server/data/data-library/pom.xml
index 8b18787..dffd557 100644
--- a/server/data/data-library/pom.xml
+++ b/server/data/data-library/pom.xml
@@ -74,6 +74,10 @@
<artifactId>james-server-lifecycle-api</artifactId>
</dependency>
<dependency>
+ <groupId>${james.groupId}</groupId>
+ <artifactId>james-server-util</artifactId>
+ </dependency>
+ <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>test</scope>
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/EventSourcingDLPConfigurationStore.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/EventSourcingDLPConfigurationStore.java b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/EventSourcingDLPConfigurationStore.java
index 0053ba0..1aeba39 100644
--- a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/EventSourcingDLPConfigurationStore.java
+++ b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/EventSourcingDLPConfigurationStore.java
@@ -19,9 +19,7 @@
package org.apache.james.dlp.eventsourcing;
-import java.util.List;
import java.util.Optional;
-import java.util.stream.Stream;
import javax.inject.Inject;
@@ -29,6 +27,7 @@ import org.apache.james.core.Domain;
import org.apache.james.dlp.api.DLPConfigurationItem;
import org.apache.james.dlp.api.DLPConfigurationItem.Id;
import org.apache.james.dlp.api.DLPConfigurationStore;
+import org.apache.james.dlp.api.DLPRules;
import org.apache.james.dlp.eventsourcing.aggregates.DLPAggregateId;
import org.apache.james.dlp.eventsourcing.aggregates.DLPDomainConfiguration;
import org.apache.james.dlp.eventsourcing.commands.ClearCommand;
@@ -38,6 +37,7 @@ import org.apache.james.dlp.eventsourcing.commands.StoreCommandHandler;
import org.apache.james.eventsourcing.EventSourcingSystem;
import org.apache.james.eventsourcing.Subscriber;
import org.apache.james.eventsourcing.eventstore.EventStore;
+import org.apache.james.util.streams.Iterables;
import com.google.common.collect.ImmutableSet;
@@ -60,7 +60,7 @@ public class EventSourcingDLPConfigurationStore implements DLPConfigurationStore
}
@Override
- public Stream<DLPConfigurationItem> list(Domain domain) {
+ public DLPRules list(Domain domain) {
DLPAggregateId aggregateId = new DLPAggregateId(domain);
@@ -71,7 +71,7 @@ public class EventSourcingDLPConfigurationStore implements DLPConfigurationStore
}
@Override
- public void store(Domain domain, List<DLPConfigurationItem> rules) {
+ public void store(Domain domain, DLPRules rules) {
eventSourcingSystem.dispatch(new StoreCommand(domain, rules));
}
@@ -82,7 +82,7 @@ public class EventSourcingDLPConfigurationStore implements DLPConfigurationStore
@Override
public Optional<DLPConfigurationItem> fetch(Domain domain, Id ruleId) {
- return list(domain)
+ return Iterables.toStream(list(domain))
.filter((DLPConfigurationItem item) -> item.getId().equals(ruleId))
.findFirst();
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
index 0666fbd..385b8fd 100644
--- a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
+++ b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
@@ -19,13 +19,13 @@
package org.apache.james.dlp.eventsourcing.aggregates;
-import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;
import org.apache.james.dlp.api.DLPConfigurationItem;
+import org.apache.james.dlp.api.DLPRules;
import org.apache.james.dlp.eventsourcing.events.ConfigurationItemsAdded;
import org.apache.james.dlp.eventsourcing.events.ConfigurationItemsRemoved;
import org.apache.james.eventsourcing.Event;
@@ -34,7 +34,6 @@ import org.apache.james.eventsourcing.eventstore.History;
import org.apache.james.util.OptionalUtils;
import com.github.steveash.guavate.Guavate;
-import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
@@ -79,12 +78,12 @@ public class DLPDomainConfiguration {
this.history = history;
}
- public Stream<DLPConfigurationItem> retrieveRules() {
- return state.rules.stream();
+ public DLPRules retrieveRules() {
+ return new DLPRules(ImmutableList.copyOf(state.rules));
}
public List<Event> clear() {
- ImmutableList<DLPConfigurationItem> rules = retrieveRules().collect(Guavate.toImmutableList());
+ ImmutableList<DLPConfigurationItem> rules = retrieveRules().getItems();
if (!rules.isEmpty()) {
ImmutableList<Event> events = ImmutableList.of(new ConfigurationItemsRemoved(aggregateId, history.getNextEventId(), rules));
events.forEach(this::apply);
@@ -94,10 +93,8 @@ public class DLPDomainConfiguration {
}
}
- public List<Event> store(List<DLPConfigurationItem> updatedRules) {
- Preconditions.checkArgument(shouldNotContainDuplicates(updatedRules));
-
- ImmutableSet<DLPConfigurationItem> existingRules = retrieveRules().collect(Guavate.toImmutableSet());
+ public List<Event> store(DLPRules updatedRules) {
+ ImmutableSet<DLPConfigurationItem> existingRules = retrieveRules().getItems().stream().collect(Guavate.toImmutableSet());
ImmutableSet<DLPConfigurationItem> updatedRulesSet = ImmutableSet.copyOf(updatedRules);
Optional<Event> removedRulesEvent = generateRemovedRulesEvent(existingRules, updatedRulesSet);
@@ -112,14 +109,6 @@ public class DLPDomainConfiguration {
return events;
}
- private boolean shouldNotContainDuplicates(Collection<DLPConfigurationItem> items) {
- long uniqueIdCount = items.stream()
- .map(DLPConfigurationItem::getId)
- .distinct()
- .count();
- return uniqueIdCount == items.size();
- }
-
private EventId computeNextEventId(Optional<Event> removedRulesEvent) {
return removedRulesEvent
.map(Event::eventId)
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/StoreCommand.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/StoreCommand.java b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/StoreCommand.java
index d48bfa4..5188b35 100644
--- a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/StoreCommand.java
+++ b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/StoreCommand.java
@@ -19,11 +19,10 @@
package org.apache.james.dlp.eventsourcing.commands;
-import java.util.List;
import java.util.Objects;
import org.apache.james.core.Domain;
-import org.apache.james.dlp.api.DLPConfigurationItem;
+import org.apache.james.dlp.api.DLPRules;
import org.apache.james.eventsourcing.Command;
import com.google.common.base.MoreObjects;
@@ -31,9 +30,9 @@ import com.google.common.base.Preconditions;
public class StoreCommand implements Command {
private final Domain domain;
- private final List<DLPConfigurationItem> rules;
+ private final DLPRules rules;
- public StoreCommand(Domain domain, List<DLPConfigurationItem> rules) {
+ public StoreCommand(Domain domain, DLPRules rules) {
Preconditions.checkNotNull(domain);
Preconditions.checkNotNull(rules);
@@ -45,7 +44,7 @@ public class StoreCommand implements Command {
return domain;
}
- public List<DLPConfigurationItem> getRules() {
+ public DLPRules getRules() {
return rules;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/commands/StoreCommandTest.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/commands/StoreCommandTest.java b/server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/commands/StoreCommandTest.java
index b8be60f..f327caf 100644
--- a/server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/commands/StoreCommandTest.java
+++ b/server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/commands/StoreCommandTest.java
@@ -23,6 +23,7 @@ import static org.apache.james.dlp.api.DLPFixture.RULE;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import org.apache.james.core.Domain;
+import org.apache.james.dlp.api.DLPRules;
import org.junit.Test;
import com.google.common.collect.ImmutableList;
@@ -39,7 +40,7 @@ public class StoreCommandTest {
@Test
public void constructorShouldThrowWhenNullDomain() {
- assertThatThrownBy(() -> new StoreCommand(null, ImmutableList.of(RULE)))
+ assertThatThrownBy(() -> new StoreCommand(null, new DLPRules(ImmutableList.of(RULE))))
.isInstanceOf(NullPointerException.class);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpRulesLoader.java
----------------------------------------------------------------------
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpRulesLoader.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpRulesLoader.java
index 13430d9..08e3c4d 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpRulesLoader.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpRulesLoader.java
@@ -19,13 +19,11 @@
package org.apache.james.transport.matchers.dlp;
-import java.util.stream.Stream;
-
import javax.inject.Inject;
import org.apache.james.core.Domain;
-import org.apache.james.dlp.api.DLPConfigurationItem;
import org.apache.james.dlp.api.DLPConfigurationStore;
+import org.apache.james.dlp.api.DLPRules;
public interface DlpRulesLoader {
@@ -45,7 +43,7 @@ public interface DlpRulesLoader {
return toRules(configurationStore.list(domain));
}
- private DlpDomainRules toRules(Stream<DLPConfigurationItem> items) {
+ private DlpDomainRules toRules(DLPRules items) {
DlpDomainRules.DlpDomainRulesBuilder builder = DlpDomainRules.builder();
items.forEach(item ->
item.getTargets().list().forEach(type ->
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DLPConfigurationDTO.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DLPConfigurationDTO.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DLPConfigurationDTO.java
index 913ccea..b696abd 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DLPConfigurationDTO.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DLPConfigurationDTO.java
@@ -19,10 +19,9 @@
package org.apache.james.webadmin.dto;
-import java.util.List;
-import java.util.stream.Stream;
-
-import org.apache.james.dlp.api.DLPConfigurationItem;
+import org.apache.james.dlp.api.DLPRules;
+import org.apache.james.dlp.api.DLPRules.DuplicateRulesIdsException;
+import org.apache.james.util.streams.Iterables;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -33,11 +32,12 @@ import com.google.common.collect.ImmutableList;
public class DLPConfigurationDTO {
- public static DLPConfigurationDTO toDTO(Stream<DLPConfigurationItem> dlpConfigurations) {
+ public static DLPConfigurationDTO toDTO(DLPRules dlpConfigurations) {
Preconditions.checkNotNull(dlpConfigurations);
return new DLPConfigurationDTO(
- dlpConfigurations.map(DLPConfigurationItemDTO::toDTO)
+ Iterables.toStream(dlpConfigurations)
+ .map(DLPConfigurationItemDTO::toDTO)
.collect(Guavate.toImmutableList()));
}
@@ -54,9 +54,9 @@ public class DLPConfigurationDTO {
}
@JsonIgnore
- public List<DLPConfigurationItem> toDLPConfigurations() {
- return rules.stream()
+ public DLPRules toDLPConfiguration() throws DuplicateRulesIdsException {
+ return new DLPRules(rules.stream()
.map(DLPConfigurationItemDTO::toDLPConfiguration)
- .collect(Guavate.toImmutableList());
+ .collect(Guavate.toImmutableList()));
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/e6ef1744/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DLPConfigurationRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DLPConfigurationRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DLPConfigurationRoutes.java
index bb257db..1b550b9 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DLPConfigurationRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DLPConfigurationRoutes.java
@@ -24,10 +24,6 @@ import static org.apache.james.webadmin.Constants.EMPTY_BODY;
import static org.apache.james.webadmin.Constants.JSON_CONTENT_TYPE;
import static org.apache.james.webadmin.Constants.SEPARATOR;
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Stream;
-
import javax.inject.Inject;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
@@ -39,6 +35,8 @@ import org.apache.james.core.Domain;
import org.apache.james.dlp.api.DLPConfigurationItem;
import org.apache.james.dlp.api.DLPConfigurationItem.Id;
import org.apache.james.dlp.api.DLPConfigurationStore;
+import org.apache.james.dlp.api.DLPRules;
+import org.apache.james.dlp.api.DLPRules.DuplicateRulesIdsException;
import org.apache.james.domainlist.api.DomainList;
import org.apache.james.domainlist.api.DomainListException;
import org.apache.james.webadmin.Routes;
@@ -129,8 +127,7 @@ public class DLPConfigurationRoutes implements Routes {
Domain senderDomain = parseDomain(request);
DLPConfigurationDTO dto = jsonExtractor.parse(request.body());
- List<DLPConfigurationItem> rules = dto.toDLPConfigurations();
- shouldNotContainDuplicates(rules);
+ DLPRules rules = constructRules(dto);
dlpConfigurationStore.store(senderDomain, rules);
@@ -139,9 +136,11 @@ public class DLPConfigurationRoutes implements Routes {
});
}
- private void shouldNotContainDuplicates(Collection<DLPConfigurationItem> items) {
- if (containsDuplicate(items)) {
- ErrorResponder.builder()
+ private DLPRules constructRules(DLPConfigurationDTO dto) {
+ try {
+ return dto.toDLPConfiguration();
+ } catch (DuplicateRulesIdsException e) {
+ throw ErrorResponder.builder()
.statusCode(HttpStatus.BAD_REQUEST_400)
.type(ErrorType.INVALID_ARGUMENT)
.message("'id' duplicates are not allowed in DLP rules")
@@ -149,15 +148,6 @@ public class DLPConfigurationRoutes implements Routes {
}
}
- private boolean containsDuplicate(Collection<DLPConfigurationItem> items) {
- long uniqueIdCount = items.stream()
- .map(DLPConfigurationItem::getId)
- .distinct()
- .count();
-
- return uniqueIdCount != items.size();
- }
-
@GET
@Path("/{senderDomain}")
@ApiOperation(value = "Return a DLP configuration for a given senderDomain")
@@ -177,7 +167,7 @@ public class DLPConfigurationRoutes implements Routes {
public void defineList(Service service) {
service.get(SPECIFIC_DLP_RULE_DOMAIN, (request, response) -> {
Domain senderDomain = parseDomain(request);
- Stream<DLPConfigurationItem> dlpConfigurations = dlpConfigurationStore.list(senderDomain);
+ DLPRules dlpConfigurations = dlpConfigurationStore.list(senderDomain);
DLPConfigurationDTO dto = DLPConfigurationDTO.toDTO(dlpConfigurations);
response.status(HttpStatus.OK_200);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org