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 rc...@apache.org on 2020/03/17 04:52:27 UTC

[james-project] branch master updated (e76b529 -> d3eb619)

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

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


    from e76b529  JAMES-3072: MailboxesBackup ExportService
     new fa35a53  JAMES-3118 Be more explicit when an alias creation fails
     new c51bab6  JAMES-3118 Minor fixes in manage-webadmin.md
     new 019e294  [Refactoring] unnecessary explicit generics
     new 5a86a8d  [Refactoring] replace inner class by a lambda
     new f4e8cda  [Refactoring] replace Guava Function by java Function
     new 413e5b5  [Refactoring] replace loops by removeIf
     new 093dd2c  [Refactoring] replace stream on Map by forEach
     new d3eb619  [Refactoring] replace old-school Guava FP with Java 8 Streams

The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../java/org/apache/james/mailbox/model/Quota.java |  4 +--
 .../mailbox/jpa/mail/JPAAnnotationMapper.java      | 16 ++++-----
 .../inmemory/mail/InMemoryAnnotationMapper.java    | 26 ++++++++-------
 .../inmemory/mail/InMemoryMessageMapper.java       |  6 +---
 .../james/vault/DeletedMessageZipperTest.java      |  2 +-
 .../store/mail/model/impl/PropertyBuilder.java     | 22 ++-----------
 .../james/transport/mailets/RemoveMimeHeader.java  | 12 ++-----
 .../mailets/RemoveMimeHeaderByPrefix.java          | 14 +++-----
 .../apache/james/imap/processor/IdleProcessor.java | 38 ++++++++++------------
 .../james/managesieve/core/CoreProcessor.java      | 18 ++++++----
 .../transport/mailets/jsieve/SieveMailAdapter.java |  7 ++--
 .../transport/mailets/jsieve/VacationAction.java   | 12 ++++---
 .../james/mock/smtp/server/model/Operator.java     |  2 +-
 .../methods/SetMailboxesCreationProcessor.java     | 14 ++++----
 .../apache/james/webadmin/routes/AliasRoutes.java  | 22 +++++++++++--
 .../james/webadmin/routes/AliasRoutesTest.java     | 27 +++++++++++++--
 src/site/markdown/server/manage-webadmin.md        |  8 ++---
 17 files changed, 130 insertions(+), 120 deletions(-)


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


[james-project] 05/08: [Refactoring] replace Guava Function by java Function

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f4e8cdafe1c23ffa7619dd5cc1846f183849b3d2
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Fri Feb 28 18:05:08 2020 +0100

    [Refactoring] replace Guava Function by java Function
---
 .../src/main/java/org/apache/james/mock/smtp/server/model/Operator.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Operator.java b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Operator.java
index 6e44451..6999a50 100644
--- a/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Operator.java
+++ b/server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Operator.java
@@ -21,10 +21,10 @@ package org.apache.james.mock.smtp.server.model;
 
 import java.util.Arrays;
 import java.util.Optional;
+import java.util.function.Function;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonValue;
-import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 
 public interface Operator {


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


[james-project] 03/08: [Refactoring] unnecessary explicit generics

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 019e29477ba75b5f68adb2f35d71ee0ee5bb449c
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Fri Feb 28 17:59:02 2020 +0100

    [Refactoring] unnecessary explicit generics
---
 mailbox/api/src/main/java/org/apache/james/mailbox/model/Quota.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/Quota.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/Quota.java
index 565f12e..0a2c75c 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/Quota.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/Quota.java
@@ -78,7 +78,7 @@ public class Quota<T extends QuotaLimitValue<T>, U extends QuotaUsageValue<U, T>
         public Quota<T, U> build() {
             Preconditions.checkState(used != null);
             Preconditions.checkState(computedLimit != null);
-            return new Quota<T, U>(used, computedLimit, limitsByScope.build());
+            return new Quota<>(used, computedLimit, limitsByScope.build());
         }
 
     }
@@ -113,7 +113,7 @@ public class Quota<T extends QuotaLimitValue<T>, U extends QuotaUsageValue<U, T>
     }
 
     public Quota<T, U> addValueToQuota(U value) {
-        return new Quota<T, U>(used.add(value), limit, limitByScope);
+        return new Quota<>(used.add(value), limit, limitByScope);
     }
 
     /**


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


[james-project] 06/08: [Refactoring] replace loops by removeIf

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 413e5b54d1e0c8792516625e6320bdb104f428e1
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Fri Feb 28 18:08:51 2020 +0100

    [Refactoring] replace loops by removeIf
---
 .../inmemory/mail/InMemoryMessageMapper.java       |  6 +-----
 .../store/mail/model/impl/PropertyBuilder.java     | 22 +++-------------------
 .../james/transport/mailets/RemoveMimeHeader.java  | 12 +++---------
 .../mailets/RemoveMimeHeaderByPrefix.java          | 14 ++++----------
 4 files changed, 11 insertions(+), 43 deletions(-)

diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
index e2c991c..191266f 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
@@ -128,11 +128,7 @@ public class InMemoryMessageMapper extends AbstractMessageMapper {
     @Override
     public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, MessageRange set, FetchType ftype, int max) {
         List<MailboxMessage> results = new ArrayList<>(getMembershipByUidForMailbox(mailbox).values());
-        for (Iterator<MailboxMessage> it = results.iterator(); it.hasNext();) {
-            if (!set.includes(it.next().getUid())) {
-                it.remove();
-            }
-        }
+        results.removeIf(mailboxMessage -> !set.includes(mailboxMessage.getUid()));
         
         Collections.sort(results);
 
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
index 1a59241..90d5192 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
@@ -41,7 +41,6 @@ import static org.apache.james.mailbox.store.mail.model.StandardNames.MIME_MIME_
 import static org.apache.james.mailbox.store.mail.model.StandardNames.MIME_SUB_TYPE_NAME;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -138,12 +137,7 @@ public class PropertyBuilder {
      * @param value null to remove property
      */
     public void setProperty(String namespace, String localName, String value) {
-        for (Iterator<Property> it = properties.iterator();it.hasNext();) {
-            final Property property = it.next();
-            if (property.isNamed(namespace, localName)) {
-                it.remove();
-            }
-        }
+        properties.removeIf(property -> property.isNamed(namespace, localName));
         
         if (value != null) {
             properties.add(new Property(namespace, localName, value));
@@ -157,12 +151,7 @@ public class PropertyBuilder {
      * @param values null to remove property
      */
     public void setProperty(String namespace, String localName, List<String> values) {
-        for (Iterator<Property> it = properties.iterator();it.hasNext();) {
-            final Property property = it.next();
-            if (property.isNamed(namespace, localName)) {
-                it.remove();
-            }
-        }
+        properties.removeIf(property -> property.isNamed(namespace, localName));
         if (values != null) {
             for (String value:values) {
                 properties.add(new Property(namespace, localName, value));
@@ -193,12 +182,7 @@ public class PropertyBuilder {
      * @param valuesByLocalName not null
      */
     public void setProperties(String namespace, Map<String,String> valuesByLocalName) {
-        for (Iterator<Property> it = properties.iterator();it.hasNext();) {
-            final Property property = it.next();
-            if (property.isInSpace(namespace)) {
-                it.remove();
-            }
-        }
+        properties.removeIf(property -> property.isInSpace(namespace));
         for (Map.Entry<String, String> valueByLocalName:valuesByLocalName.entrySet()) {
             properties.add(new Property(namespace, valueByLocalName.getKey().toLowerCase(Locale.US), valueByLocalName.getValue()));
         }
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeader.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeader.java
index c728237..801e706 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeader.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeader.java
@@ -19,7 +19,6 @@
 
 package org.apache.james.transport.mailets;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -28,7 +27,6 @@ import javax.mail.internet.MimeMessage;
 
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetException;
-import org.apache.mailet.PerRecipientHeaders.Header;
 import org.apache.mailet.base.GenericMailet;
 
 import com.google.common.base.Splitter;
@@ -81,13 +79,9 @@ public class RemoveMimeHeader extends GenericMailet {
                 .stream()
                 .collect(Collectors.toList()) // Streaming for concurrent modifications
                 .forEach(recipient -> {
-                    Iterator<Header> it = mail.getPerRecipientSpecificHeaders().getHeadersForRecipient(recipient).iterator();
-                    while (it.hasNext()) {
-                        Header next = it.next();
-                        if (headers.contains(next.getName())) {
-                            it.remove();
-                        }
-                    }
+                    mail.getPerRecipientSpecificHeaders()
+                        .getHeadersForRecipient(recipient)
+                        .removeIf(next -> headers.contains(next.getName()));
                 });
     }
 }
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeaderByPrefix.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeaderByPrefix.java
index 0118e4d..131c32c 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeaderByPrefix.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeaderByPrefix.java
@@ -20,7 +20,6 @@
 
 package org.apache.james.transport.mailets;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -82,15 +81,10 @@ public class RemoveMimeHeaderByPrefix extends GenericMailet {
         mail.getPerRecipientSpecificHeaders().getRecipientsWithSpecificHeaders()
                 .stream()
                 .collect(Collectors.toList()) // Streaming for concurrent modifications
-                .forEach(recipient -> {
-                    Iterator<org.apache.mailet.PerRecipientHeaders.Header> it = mail.getPerRecipientSpecificHeaders().getHeadersForRecipient(recipient).iterator();
-                    while (it.hasNext()) {
-                        org.apache.mailet.PerRecipientHeaders.Header next = it.next();
-                        if (next.getName().startsWith(prefix)) {
-                            it.remove();
-                        }
-                    }
-                });
+                .forEach(recipient -> 
+                    mail.getPerRecipientSpecificHeaders()
+                        .getHeadersForRecipient(recipient)
+                        .removeIf(next -> next.getName().startsWith(prefix)));
     }
 
     private List<String> headerNamesStartingByPrefix(Mail mail) throws MessagingException {


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


[james-project] 07/08: [Refactoring] replace stream on Map by forEach

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 093dd2cc05eb8879fdbe2b1c95b66038c2d22dce
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Fri Feb 28 18:10:34 2020 +0100

    [Refactoring] replace stream on Map by forEach
---
 .../jmap/draft/methods/SetMailboxesCreationProcessor.java  | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMailboxesCreationProcessor.java b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMailboxesCreationProcessor.java
index 24f4e5c..90519c2 100644
--- a/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMailboxesCreationProcessor.java
+++ b/server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMailboxesCreationProcessor.java
@@ -104,13 +104,13 @@ public class SetMailboxesCreationProcessor implements SetMailboxesProcessor {
     }
 
     private void markRequestsAsNotCreatedDueToCycle(SetMailboxesRequest request, SetMailboxesResponse.Builder builder) {
-        request.getCreate().entrySet()
-            .forEach(entry ->
-                builder.notCreated(entry.getKey(),
-                        SetError.builder()
-                        .type(SetError.Type.INVALID_ARGUMENTS)
-                        .description("The created mailboxes introduce a cycle.")
-                        .build()));
+        request.getCreate().forEach((key, value) ->
+            builder.notCreated(
+                key,
+                SetError.builder()
+                    .type(SetError.Type.INVALID_ARGUMENTS)
+                    .description("The created mailboxes introduce a cycle.")
+                    .build()));
     }
 
     private void createMailbox(MailboxCreationId mailboxCreationId, MailboxCreateRequest mailboxRequest, MailboxSession mailboxSession,


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


[james-project] 08/08: [Refactoring] replace old-school Guava FP with Java 8 Streams

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d3eb619e3a702705b280ab6a0a4861a6a7c32ac0
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Fri Feb 28 18:20:32 2020 +0100

    [Refactoring] replace old-school Guava FP with Java 8 Streams
---
 .../mailbox/jpa/mail/JPAAnnotationMapper.java      | 16 ++++++-------
 .../inmemory/mail/InMemoryAnnotationMapper.java    | 26 ++++++++++++----------
 .../james/managesieve/core/CoreProcessor.java      | 18 +++++++++------
 .../transport/mailets/jsieve/SieveMailAdapter.java |  7 +++---
 .../transport/mailets/jsieve/VacationAction.java   | 12 +++++-----
 5 files changed, 44 insertions(+), 35 deletions(-)

diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java
index 3f194ab..031d14b 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java
@@ -44,7 +44,6 @@ 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.Iterables;
 
 public class JPAAnnotationMapper extends JPATransactionalMapper implements AnnotationMapper {
 
@@ -72,13 +71,14 @@ public class JPAAnnotationMapper extends JPATransactionalMapper implements Annot
     public List<MailboxAnnotation> getAnnotationsByKeys(MailboxId mailboxId, Set<MailboxAnnotationKey> keys) {
         try {
             final JPAId jpaId = (JPAId) mailboxId;
-            return ImmutableList.copyOf(Iterables.transform(keys,
-                input -> READ_ROW.apply(
-                    getEntityManager()
-                        .createNamedQuery("retrieveByKey", JPAMailboxAnnotation.class)
-                        .setParameter("idParam", jpaId.getRawId())
-                        .setParameter("keyParam", input.asString())
-                        .getSingleResult())));
+            return keys.stream()
+                .map(input -> READ_ROW.apply(
+                        getEntityManager()
+                            .createNamedQuery("retrieveByKey", JPAMailboxAnnotation.class)
+                            .setParameter("idParam", jpaId.getRawId())
+                            .setParameter("keyParam", input.asString())
+                            .getSingleResult()))
+                .collect(Guavate.toImmutableList());
         } catch (NoResultException e) {
             return ImmutableList.of();
         }
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java
index 62e8288..c4001c8 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java
@@ -32,13 +32,10 @@ import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
-import org.apache.james.util.streams.Iterators;
 
 import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.HashBasedTable;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
 import com.google.common.collect.Table;
 
 public class InMemoryAnnotationMapper implements AnnotationMapper {
@@ -59,12 +56,15 @@ public class InMemoryAnnotationMapper implements AnnotationMapper {
         return transaction.run();
     }
 
-    private Iterable<MailboxAnnotation> retrieveAllAnnotations(InMemoryId mailboxId) {
+    private List<MailboxAnnotation> retrieveAllAnnotations(InMemoryId mailboxId) {
         lock.readLock().lock();
         try {
-            return Iterables.transform(
-                mailboxesAnnotations.row(mailboxId).entrySet(),
-                input -> MailboxAnnotation.newInstance(new MailboxAnnotationKey(input.getKey()), input.getValue()));
+            return mailboxesAnnotations
+                .row(mailboxId)
+                .entrySet()
+                .stream()
+                .map(input -> MailboxAnnotation.newInstance(new MailboxAnnotationKey(input.getKey()), input.getValue()))
+                .collect(Guavate.toImmutableList());
         } finally {
             lock.readLock().unlock();
         }
@@ -72,19 +72,21 @@ public class InMemoryAnnotationMapper implements AnnotationMapper {
     
     @Override
     public List<MailboxAnnotation> getAllAnnotations(MailboxId mailboxId) {
-        return ImmutableList.copyOf(retrieveAllAnnotations((InMemoryId) mailboxId));
+        return retrieveAllAnnotations((InMemoryId) mailboxId);
     }
 
     @Override
     public List<MailboxAnnotation> getAnnotationsByKeys(MailboxId mailboxId, final Set<MailboxAnnotationKey> keys) {
-        return ImmutableList.copyOf(
-            Iterables.filter(retrieveAllAnnotations((InMemoryId) mailboxId),
-                input -> keys.contains(input.getKey())));
+        return retrieveAllAnnotations((InMemoryId) mailboxId)
+            .stream()
+            .filter(input -> keys.contains(input.getKey()))
+            .collect(Guavate.toImmutableList());
     }
 
     @Override
     public List<MailboxAnnotation> getAnnotationsByKeysWithAllDepth(MailboxId mailboxId, final Set<MailboxAnnotationKey> keys) {
-        return Iterators.toStream(retrieveAllAnnotations((InMemoryId) mailboxId).iterator())
+        return retrieveAllAnnotations((InMemoryId) mailboxId)
+            .stream()
             .filter(getPredicateFilterByAll(keys))
             .collect(Guavate.toImmutableList());
     }
diff --git a/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java b/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
index ef1e78e..bf28ac8 100644
--- a/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
+++ b/protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
@@ -26,6 +26,7 @@ import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
@@ -56,7 +57,6 @@ import org.apache.james.user.api.UsersRepository;
 import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
-import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
@@ -94,8 +94,11 @@ public class CoreProcessor implements CoreCommands {
     }
 
     private String convertCapabilityMapToString(Map<Capabilities, String> capabilitiesStringMap) {
-        return Joiner.on("\r\n").join(
-            Iterables.transform(capabilitiesStringMap.entrySet(), this::computeCapabilityEntryString));
+        return capabilitiesStringMap
+            .entrySet()
+            .stream()
+            .map(this::computeCapabilityEntryString)
+            .collect(Collectors.joining("\r\n"));
     }
 
     private Map<Capabilities, String> computeCapabilityMap(Session session) {
@@ -121,7 +124,7 @@ public class CoreProcessor implements CoreCommands {
 
     private String manageWarnings(List<String> warnings) {
         if (!warnings.isEmpty()) {
-            return "OK (WARNINGS) " + Joiner.on(' ').join(Iterables.transform(warnings, s -> '\"' + s + '"'));
+            return "OK (WARNINGS) " + warnings.stream().map(s -> '\"' + s + '"').collect(Collectors.joining(" "));
         } else {
             return "OK";
         }
@@ -161,9 +164,10 @@ public class CoreProcessor implements CoreCommands {
 
     private String listScriptsInternals(Session session) throws AuthenticationRequiredException, StorageException {
         authenticationCheck(session);
-        String list = Joiner.on("\r\n").join(
-            Iterables.transform(sieveRepository.listScripts(session.getUser()),
-                scriptSummary -> '"' + scriptSummary.getName().getValue() + '"' + (scriptSummary.isActive() ? " ACTIVE" : "")));
+        String list = sieveRepository.listScripts(session.getUser())
+            .stream()
+            .map(scriptSummary -> '"' + scriptSummary.getName().getValue() + '"' + (scriptSummary.isActive() ? " ACTIVE" : ""))
+            .collect(Collectors.joining("\r\n"));
         if (Strings.isNullOrEmpty(list)) {
             return "OK";
         } else {
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
index 03a4a66..7728a05 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
@@ -54,6 +54,7 @@ import org.apache.mailet.MailetContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 
 /**
@@ -383,7 +384,7 @@ public class SieveMailAdapter implements MailAdapter, EnvelopeAccessors, ActionC
                 .contentTypes(Lists.newArrayList("text/plain"))
                 .includeHeaders(false)
                 .caseInsensitive(false)
-                .searchContents(Lists.transform(phrasesCaseInsensitive, s -> s)).build()
+                .searchContents(ImmutableList.copyOf(phrasesCaseInsensitive)).build()
                 .messageMatches(getMail().getMessage().getInputStream());
         } catch (Exception e) {
             throw new SieveMailException("Error searching in the mail content", e);
@@ -397,7 +398,7 @@ public class SieveMailAdapter implements MailAdapter, EnvelopeAccessors, ActionC
                 .includeHeaders(false)
                 .caseInsensitive(false)
                 .ignoringMime(true)
-                .searchContents(Lists.transform(phrasesCaseInsensitive, s -> s)).build()
+                .searchContents(ImmutableList.copyOf(phrasesCaseInsensitive)).build()
                 .messageMatches(getMail().getMessage().getInputStream());
         } catch (Exception e) {
             throw new SieveMailException("Error searching in the mail content", e);
@@ -411,7 +412,7 @@ public class SieveMailAdapter implements MailAdapter, EnvelopeAccessors, ActionC
                 .contentTypes(contentTypes)
                 .includeHeaders(false)
                 .caseInsensitive(false)
-                .searchContents(Lists.transform(phrasesCaseInsensitive, s -> s)).build()
+                .searchContents(ImmutableList.copyOf(phrasesCaseInsensitive)).build()
                 .messageMatches(getMail().getMessage().getInputStream());
         } catch (Exception e) {
             throw new SieveMailException("Error searching in the mail content", e);
diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
index cc66005..35321a3 100644
--- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
+++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
@@ -22,6 +22,7 @@ package org.apache.james.transport.mailets.jsieve;
 import java.time.temporal.ChronoUnit;
 import java.util.Enumeration;
 import java.util.Set;
+import java.util.stream.Stream;
 
 import javax.mail.MessagingException;
 import javax.mail.internet.AddressException;
@@ -34,8 +35,8 @@ import org.apache.mailet.Mail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 public class VacationAction implements MailAction {
@@ -80,10 +81,11 @@ public class VacationAction implements MailAction {
 
     private boolean isValidForReply(final Mail mail, ActionVacation actionVacation, final ActionContext context) {
         Set<MailAddress> currentMailAddresses = ImmutableSet.copyOf(mail.getRecipients());
-        Set<MailAddress> allowedMailAddresses = ImmutableSet.<MailAddress>builder().addAll(
-            Lists.transform(actionVacation.getAddresses(), s -> retrieveAddressFromString(s, context)))
-            .add(context.getRecipient())
-            .build();
+        Set<MailAddress> allowedMailAddresses = Stream
+            .concat(
+                actionVacation.getAddresses().stream().map(s -> retrieveAddressFromString(s, context)),
+                Stream.of(context.getRecipient()))
+            .collect(Guavate.toImmutableSet());
         return !Sets.intersection(currentMailAddresses, allowedMailAddresses).isEmpty();
     }
 


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


[james-project] 04/08: [Refactoring] replace inner class by a lambda

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5a86a8dd08839b6e24b4d65a17a2299912bc583f
Author: Matthieu Baechler <ma...@apache.org>
AuthorDate: Fri Feb 28 18:01:07 2020 +0100

    [Refactoring] replace inner class by a lambda
---
 .../james/vault/DeletedMessageZipperTest.java      |  2 +-
 .../apache/james/imap/processor/IdleProcessor.java | 38 ++++++++++------------
 2 files changed, 18 insertions(+), 22 deletions(-)

diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java
index 195206f..07f7b7c 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java
@@ -182,8 +182,8 @@ class DeletedMessageZipperTest {
         @Test
         void zipShouldStopLoadingResourcesWhenGettingException() throws Exception {
             doThrow(new IOException("mocked exception")).when(zipper).createEntry(any(), any());
+            // lambdas are final and thus can't be spied
             DeletedMessageContentLoader contentLoader = spy(new DeletedMessageContentLoader() {
-                // lambdas are final and thus can't be spied
                 @Override
                 public Optional<InputStream> load(DeletedMessage deletedMessage) {
                     return Optional.of(new ByteArrayInputStream(CONTENT));
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
index 2af0936..58b95b4 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
@@ -36,7 +36,6 @@ import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.api.message.Capability;
 import org.apache.james.imap.api.message.response.StatusResponse;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
-import org.apache.james.imap.api.process.ImapLineHandler;
 import org.apache.james.imap.api.process.ImapProcessor;
 import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.api.process.SelectedMailbox;
@@ -96,29 +95,26 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme
 
         final AtomicBoolean idleActive = new AtomicBoolean(true);
 
-        session.pushLineHandler(new ImapLineHandler() {
-            @Override
-            public void onLine(ImapSession session, byte[] data) {
-                String line;
-                if (data.length > 2) {
-                    line = new String(data, 0, data.length - 2);
-                } else {
-                    line = "";
-                }
+        session.pushLineHandler((session1, data) -> {
+            String line;
+            if (data.length > 2) {
+                line = new String(data, 0, data.length - 2);
+            } else {
+                line = "";
+            }
 
-                if (registration != null) {
-                    registration.unregister();
-                }
-                session.popLineHandler();
-                if (!DONE.equals(line.toUpperCase(Locale.US))) {
-                    StatusResponse response = getStatusResponseFactory().taggedBad(request.getTag(), request.getCommand(), HumanReadableText.INVALID_COMMAND);
-                    responder.respond(response);
-                } else {
-                    okComplete(request, responder);
+            if (registration != null) {
+                registration.unregister();
+            }
+            session1.popLineHandler();
+            if (!DONE.equals(line.toUpperCase(Locale.US))) {
+                StatusResponse response = getStatusResponseFactory().taggedBad(request.getTag(), request.getCommand(), HumanReadableText.INVALID_COMMAND);
+                responder.respond(response);
+            } else {
+                okComplete(request, responder);
 
-                }
-                idleActive.set(false);
             }
+            idleActive.set(false);
         });
 
         // Check if we should send heartbeats


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


[james-project] 02/08: JAMES-3118 Minor fixes in manage-webadmin.md

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c51bab6a2c6c54dc0820decdde340fb194ecc9bb
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Mon Mar 16 14:30:40 2020 +0100

    JAMES-3118 Minor fixes in manage-webadmin.md
---
 src/site/markdown/server/manage-webadmin.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md
index 0a937fe..65ad585 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -299,7 +299,7 @@ Response codes:
    - [Create a user](#Create_a_user)
    - [Testing a user existence](#Testing_a_user_existence)
    - [Updating a user password](#Updating_a_user_password)
-   - [Deleting a domain](#Deleting_a_user)
+   - [Deleting a user](#Deleting_a_user)
    - [Retrieving the user list](#Retrieving_the_user_list)
    - [Retrieving the list of allowed `From` headers for a given user](Retrieving_the_list_of_allowed_From_headers_for_a_given_user)
 
@@ -743,11 +743,11 @@ Response codes:
 ### Testing existence of a mailbox
 
 ```
-curl -XGET http://ip:port/users/{usernameToBeUsed}/mailboxes/{mailboxNameToBeCreated}
+curl -XGET http://ip:port/users/{usernameToBeUsed}/mailboxes/{mailboxNameToBeTested}
 ```
 
 Resource name `usernameToBeUsed` should be an existing user
-Resource name `mailboxNameToBeCreated` should not be empty
+Resource name `mailboxNameToBeTested` should not be empty
 
 Response codes:
 


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


[james-project] 01/08: JAMES-3118 Be more explicit when an alias creation fails

Posted by rc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit fa35a53ef80501aca7b38bd23011afaec9c1460f
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Mon Mar 16 14:27:48 2020 +0100

    JAMES-3118 Be more explicit when an alias creation fails
---
 .../apache/james/webadmin/routes/AliasRoutes.java  | 22 +++++++++++++++---
 .../james/webadmin/routes/AliasRoutesTest.java     | 27 +++++++++++++++++++---
 src/site/markdown/server/manage-webadmin.md        |  2 +-
 3 files changed, 44 insertions(+), 7 deletions(-)

diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
index 5cd31ac..8905b3b 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
@@ -32,8 +32,11 @@ import javax.ws.rs.PUT;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 
+import org.apache.james.core.Domain;
 import org.apache.james.core.MailAddress;
 import org.apache.james.core.Username;
+import org.apache.james.domainlist.api.DomainList;
+import org.apache.james.domainlist.api.DomainListException;
 import org.apache.james.rrt.api.MappingAlreadyExistsException;
 import org.apache.james.rrt.api.RecipientRewriteTable;
 import org.apache.james.rrt.api.RecipientRewriteTableException;
@@ -83,13 +86,15 @@ public class AliasRoutes implements Routes {
     private static final String ADDRESS_TYPE = "alias";
 
     private final UsersRepository usersRepository;
+    private final DomainList domainList;
     private final JsonTransformer jsonTransformer;
     private final RecipientRewriteTable recipientRewriteTable;
 
     @Inject
     @VisibleForTesting
-    AliasRoutes(RecipientRewriteTable recipientRewriteTable, UsersRepository usersRepository, JsonTransformer jsonTransformer) {
+    AliasRoutes(RecipientRewriteTable recipientRewriteTable, UsersRepository usersRepository, DomainList domainList, JsonTransformer jsonTransformer) {
         this.usersRepository = usersRepository;
+        this.domainList = domainList;
         this.jsonTransformer = jsonTransformer;
         this.recipientRewriteTable = recipientRewriteTable;
     }
@@ -140,14 +145,15 @@ public class AliasRoutes implements Routes {
         @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = ALIAS_DESTINATION_ADDRESS + " or alias structure format is not valid"),
         @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "The alias source exists as an user already"),
         @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Source and destination can't be the same!"),
-        @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Domain in the source is not managed by the DomainList"),
+        @ApiResponse(code = HttpStatus.BAD_REQUEST_400, message = "Domain in the destination or source is not managed by the DomainList"),
         @ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500,
             message = "Internal server error - Something went bad on the server side.")
     })
-    public HaltException addAlias(Request request, Response response) throws UsersRepositoryException, RecipientRewriteTableException {
+    public HaltException addAlias(Request request, Response response) throws UsersRepositoryException, RecipientRewriteTableException, DomainListException {
         MailAddress aliasSourceAddress = MailAddressParser.parseMailAddress(request.params(ALIAS_SOURCE_ADDRESS), ADDRESS_TYPE);
         ensureUserDoesNotExist(aliasSourceAddress);
         MailAddress destinationAddress = MailAddressParser.parseMailAddress(request.params(ALIAS_DESTINATION_ADDRESS), ADDRESS_TYPE);
+        ensureDomainIsSupported(destinationAddress.getDomain());
         MappingSource source = MappingSource.fromUser(Username.fromMailAddress(aliasSourceAddress));
         addAlias(source, destinationAddress);
         return halt(HttpStatus.NO_CONTENT_204);
@@ -167,6 +173,16 @@ public class AliasRoutes implements Routes {
         }
     }
 
+    private void ensureDomainIsSupported(Domain domain) throws DomainListException {
+        if (!domainList.containsDomain(domain)) {
+            throw ErrorResponder.builder()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .type(ErrorResponder.ErrorType.INVALID_ARGUMENT)
+                .message("Domain in the destination is not managed by the DomainList")
+                .haltError();
+        }
+    }
+
     private void ensureUserDoesNotExist(MailAddress mailAddress) throws UsersRepositoryException {
         Username username = usersRepository.getUser(mailAddress);
 
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
index 64ebf18..2ef976e 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
@@ -123,7 +123,7 @@ class AliasRoutesTest {
             usersRepository.addUser(Username.of(BOB_WITH_SLASH), BOB_WITH_SLASH_PASSWORD);
             usersRepository.addUser(Username.of(ALICE), ALICE_PASSWORD);
 
-            createServer(new AliasRoutes(memoryRecipientRewriteTable, usersRepository, new JsonTransformer(module)));
+            createServer(new AliasRoutes(memoryRecipientRewriteTable, usersRepository, domainList, new JsonTransformer(module)));
         }
 
         @Test
@@ -424,13 +424,13 @@ class AliasRoutesTest {
             domainList = mock(DomainList.class);
             memoryRecipientRewriteTable.setDomainList(domainList);
             Mockito.when(domainList.containsDomain(any())).thenReturn(true);
-            createServer(new AliasRoutes(memoryRecipientRewriteTable, userRepository, new JsonTransformer()));
+            createServer(new AliasRoutes(memoryRecipientRewriteTable, userRepository, domainList, new JsonTransformer()));
         }
 
         @Test
         void putAliasSourceContainingNotManagedDomainShouldReturnBadRequest() throws Exception {
             Mockito.when(domainList.containsDomain(any()))
-                .thenReturn(false);
+                .thenAnswer(invocation -> invocation.getArgument(0, Domain.class).equals(DOMAIN));
 
             Map<String, Object> errors = when()
                 .put(BOB + SEPARATOR + "sources" + SEPARATOR + "bob@not-managed-domain.tld")
@@ -449,6 +449,27 @@ class AliasRoutesTest {
         }
 
         @Test
+        void putAliasDestinationContainingNotManagedDomainShouldReturnBadRequest() throws Exception {
+            Mockito.when(domainList.containsDomain(any()))
+                .thenAnswer(invocation -> invocation.getArgument(0, Domain.class).equals(DOMAIN));
+
+            Map<String, Object> errors = when()
+                .put("bob@not-managed-domain.tld" + SEPARATOR + "sources" + SEPARATOR + BOB)
+            .then()
+                .statusCode(HttpStatus.BAD_REQUEST_400)
+                .contentType(ContentType.JSON)
+                .extract()
+                .body()
+                .jsonPath()
+                .getMap(".");
+
+            assertThat(errors)
+                .containsEntry("statusCode", HttpStatus.BAD_REQUEST_400)
+                .containsEntry("type", "InvalidArgument")
+                .containsEntry("message", "Domain in the destination is not managed by the DomainList");
+        }
+
+        @Test
         void putMalformedUserDestinationShouldReturnBadRequest() {
             Map<String, Object> errors = when()
                 .put("not-an-address" + SEPARATOR + "sources" + SEPARATOR + BOB_ALIAS)
diff --git a/src/site/markdown/server/manage-webadmin.md b/src/site/markdown/server/manage-webadmin.md
index 0b84b2f..0a937fe 100644
--- a/src/site/markdown/server/manage-webadmin.md
+++ b/src/site/markdown/server/manage-webadmin.md
@@ -1859,7 +1859,7 @@ Response codes:
  - 400: Alias structure or member is not valid
  - 400: The alias source exists as an user already
  - 400: Source and destination can't be the same!
- - 400: Domain in the source is not managed by the DomainList
+ - 400: Domain in the destination or source is not managed by the DomainList
 
 ### Removing an alias of an user
 


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