[2/2] james-project git commit: JAMES-1922 Introduce LDAP usersRepository tests

2017-02-07 Thread btellier
JAMES-1922 Introduce LDAP usersRepository tests


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/11b9eeef
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/11b9eeef
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/11b9eeef

Branch: refs/heads/master
Commit: 11b9eeeffdbfd512f7b80e9407598d35a3b4f670
Parents: ed25623
Author: Antoine Duprat 
Authored: Tue Jan 31 14:40:25 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 8 09:10:24 2017 +0700

--
 .../util/streams/SwarmGenericContainer.java |   5 +
 .../data/data-ldap-integration-testing/pom.xml  | 233 +++
 .../james/user/ldap/LdapGenericContainer.java   |  91 
 .../ldap/ReadOnlyUsersLDAPRepositoryTest.java   |  99 
 .../src/test/resources/ldif-files/Dockerfile|   3 +
 .../src/test/resources/ldif-files/populate.ldif |  11 +
 .../src/test/resources/logback.xml  |  22 ++
 server/pom.xml  |   6 +
 8 files changed, 470 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/11b9eeef/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
--
diff --git 
a/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
 
b/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
index 6bbe0af..2c70aa1 100644
--- 
a/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
+++ 
b/server/container/util-java8/src/test/java/org/apache/james/util/streams/SwarmGenericContainer.java
@@ -24,6 +24,7 @@ import java.util.List;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testcontainers.containers.GenericContainer;
+import org.testcontainers.images.builder.ImageFromDockerfile;
 
 import com.google.common.base.Strings;
 
@@ -36,6 +37,10 @@ public class SwarmGenericContainer extends 
GenericContainerhttp://git-wip-us.apache.org/repos/asf/james-project/blob/11b9eeef/server/data/data-ldap-integration-testing/pom.xml
--
diff --git a/server/data/data-ldap-integration-testing/pom.xml 
b/server/data/data-ldap-integration-testing/pom.xml
new file mode 100644
index 000..9527b91
--- /dev/null
+++ b/server/data/data-ldap-integration-testing/pom.xml
@@ -0,0 +1,233 @@
+
+
+http://maven.apache.org/POM/4.0.0; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd;>
+4.0.0
+
+
+james-server
+org.apache.james
+3.0.0-beta6-SNAPSHOT
+../../pom.xml
+
+
+james-server-data-ldap-integration-testing
+bundle
+
+Apache James :: Server :: Data :: LDAP Implementation :: Integration 
testing
+
+
+
+disable-build-for-older-jdk
+
+(,1.8)
+
+
+
+
+maven-jar-plugin
+
+
+default-jar
+none
+
+
+jar
+none
+
+
+test-jar
+none
+
+
+
+
+maven-compiler-plugin
+
+
+default-compile
+none
+
+
+default-testCompile
+none
+
+
+
+
+maven-surefire-plugin
+
+
+default-test
+none
+
+
+
+
+maven-source-plugin
+
+
+attach-sources
+none
+
+
+
+
+

[1/2] james-project git commit: JAMES-1922 Fix typo in security documentation

2017-02-07 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master df6ad23db -> 11b9eeeff


JAMES-1922 Fix typo in security documentation


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ed25623b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ed25623b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ed25623b

Branch: refs/heads/master
Commit: ed25623b435985b645476ba39245792054531432
Parents: df6ad23
Author: Antoine Duprat 
Authored: Tue Jan 31 09:57:51 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 8 09:10:18 2017 +0700

--
 server/src/site/xdoc/feature-security.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/ed25623b/server/src/site/xdoc/feature-security.xml
--
diff --git a/server/src/site/xdoc/feature-security.xml 
b/server/src/site/xdoc/feature-security.xml
index 70ed6dc..89d2620 100644
--- a/server/src/site/xdoc/feature-security.xml
+++ b/server/src/site/xdoc/feature-security.xml
@@ -41,7 +41,7 @@
   
   
 
-Apache James Server supports different user storage (read more) - LDAP support is partail (work in 
progress).
+Apache James Server supports different user storage (read more) - LDAP support is partial (work in 
progress).
 
   
   


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



[08/12] james-project git commit: JAMES-1901 Create a ElasticSearch backend project

2017-02-03 Thread btellier
http://git-wip-us.apache.org/repos/asf/james-project/blob/1688bc6f/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
--
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
new file mode 100644
index 000..1cfce9b
--- /dev/null
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
@@ -0,0 +1,229 @@
+/
+ * 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.elasticsearch;
+
+import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
+
+import java.io.IOException;
+
+import org.apache.james.backends.es.ElasticSearchIndexer;
+import org.apache.james.backends.es.IndexCreationFactory;
+import org.apache.james.backends.es.NodeMappingFactory;
+import org.apache.james.mailbox.elasticsearch.json.JsonMessageConstants;
+import org.elasticsearch.common.xcontent.XContentBuilder;
+
+import com.google.common.base.Throwables;
+
+public class MailboxMappingFactory {
+
+public static XContentBuilder getMappingContent() {
+try {
+return jsonBuilder()
+.startObject()
+
+.startObject(MailboxElasticsearchConstants.MESSAGE_TYPE)
+.startObject(NodeMappingFactory.PROPERTIES)
+.startObject(JsonMessageConstants.MESSAGE_ID)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.STRING)
+.field(NodeMappingFactory.INDEX, 
NodeMappingFactory.NOT_ANALYZED)
+.endObject()
+.startObject(JsonMessageConstants.UID)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.LONG)
+.endObject()
+.startObject(JsonMessageConstants.MODSEQ)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.LONG)
+.endObject()
+.startObject(JsonMessageConstants.SIZE)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.LONG)
+.endObject()
+.startObject(JsonMessageConstants.IS_ANSWERED)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.BOOLEAN)
+.endObject()
+.startObject(JsonMessageConstants.IS_DELETED)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.BOOLEAN)
+.endObject()
+.startObject(JsonMessageConstants.IS_DRAFT)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.BOOLEAN)
+.endObject()
+.startObject(JsonMessageConstants.IS_FLAGGED)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.BOOLEAN)
+.endObject()
+.startObject(JsonMessageConstants.IS_RECENT)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.BOOLEAN)
+.endObject()
+.startObject(JsonMessageConstants.IS_UNREAD)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.BOOLEAN)
+.endObject()
+.startObject(JsonMessageConstants.DATE)
+

[03/12] james-project git commit: JAMES-1917 Improve inMemory guice documentation

2017-02-03 Thread btellier
JAMES-1917 Improve inMemory guice documentation

Configuration was outdated.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/31ef8219
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/31ef8219
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/31ef8219

Branch: refs/heads/master
Commit: 31ef8219f3358e1022faf446ac8ff97306fcba95
Parents: a615668
Author: Benoit Tellier 
Authored: Wed Jan 25 09:44:20 2017 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:40:44 2017 +0700

--
 .../sample-configuration/lmtpserver.xml | 41 
 server/container/guice/memory-guice/README.adoc | 21 ---
 .../sample-configuration/jmap.properties|  2 +-
 .../sample-configuration/jwt_publickey  |  9 +++
 .../sample-configuration/logback.xml| 15 +
 .../sample-configuration/mailetcontainer.xml|  9 +--
 .../sample-configuration/managesieveserver.xml  | 65 
 .../memory-guice/sample-configuration/quota.xml | 53 
 .../sample-configuration/webadmin.properties| 22 +++
 9 files changed, 184 insertions(+), 53 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/31ef8219/server/container/guice/cassandra-guice/sample-configuration/lmtpserver.xml
--
diff --git 
a/server/container/guice/cassandra-guice/sample-configuration/lmtpserver.xml 
b/server/container/guice/cassandra-guice/sample-configuration/lmtpserver.xml
deleted file mode 100644
index 87a0caa..000
--- a/server/container/guice/cassandra-guice/sample-configuration/lmtpserver.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-lmtpserver
-
-127.0.0.1:1024
-200
-1200
-
-0
-
-0
-
-
-0
-
-
-
-
-
-

http://git-wip-us.apache.org/repos/asf/james-project/blob/31ef8219/server/container/guice/memory-guice/README.adoc
--
diff --git a/server/container/guice/memory-guice/README.adoc 
b/server/container/guice/memory-guice/README.adoc
index b896354..36be5f4 100644
--- a/server/container/guice/memory-guice/README.adoc
+++ b/server/container/guice/memory-guice/README.adoc
@@ -6,33 +6,40 @@
 
  * Java 8 SDK
  * Docker
- * Maven
+ * Maven 3
 
 === Building the artifacts
 
-An usual compilation using maven will produce two artifacts into target 
directory :
+An usual compilation using maven will produce two artifacts into target 
directory:
 
  * james-server-memory-guice-${version}.jar
  * james-server-memory-guice-${version}.lib
 
+ You can for example run in the base of this git repository:
+
+ ```
+ mvn clean install
+ ```
+
 == Running
 
 === James Launch
 
 To run james, you have to create a directory containing required configuration 
files.
 
-A sample directory (appropriately named sample-directory) is provided with some
-default values you may need to replace.
+James requires the configuration to be in a subfolder of working directory 
that is called **conf**. A sample directory
+(appropriately named sample-directory) is provided with some default values 
you may need to replace. You will need to
+rename it into **conf** if you intend to use it.
 
-You also need to generate a keystore with the following command :
+You also need to generate a keystore with the following command:
 [source]
 
 $ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
 
 
-Once everything is set up, you just have to run the jar with :
+Once everything is set up, you just have to run the jar with:
 
 [source]
 
-$ java -Dworking.directory=sample-configuration -jar 
target/james-server-memory-guice-${version}.jar
+$ java -Dworking.directory=. -jar 
target/james-server-memory-guice-${version}.jar
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/31ef8219/server/container/guice/memory-guice/sample-configuration/jmap.properties
--
diff --git 
a/server/container/guice/memory-guice/sample-configuration/jmap.properties 
b/server/container/guice/memory-guice/sample-configuration/jmap.properties
index d785ccd..071bafb 100644
--- a/server/container/guice/memory-guice/sample-configuration/jmap.properties
+++ b/server/container/guice/memory-guice/sample-configuration/jmap.properties
@@ -8,4 +8,4 @@ tls.secret=james72laBalle
 # The following entry specify the link to the URL of the public key file,
 # which should be a PEM format file.
 #
-jwt.publickeypem.url=
\ No newline at end of file
+jwt.publickeypem.url=file://conf/jwt_publickey
\ No newline 

[05/12] james-project git commit: JAMES-1901 Enable reporting in ES for Guice/Cassandra

2017-02-03 Thread btellier
JAMES-1901 Enable reporting in ES for Guice/Cassandra


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6f38dcbb
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6f38dcbb
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6f38dcbb

Branch: refs/heads/master
Commit: 6f38dcbb4480465ff146284f1fa4211d575dadfb
Parents: 894f4c4
Author: Benoit Tellier 
Authored: Fri Dec 30 16:14:02 2016 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:42:50 2017 +0700

--
 .../destination/conf/elasticsearch.properties   |   6 +
 .../apache/james/CassandraJamesServerMain.java  |   4 +-
 .../mailbox/ElasticSearchMailboxModule.java |   9 +-
 .../modules/server/ESMetricReporterModule.java  | 117 +++
 4 files changed, 132 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/6f38dcbb/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
--
diff --git 
a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties 
b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
index a10cd3f..06e1852 100644
--- a/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
+++ b/dockerfiles/run/guice/cassandra/destination/conf/elasticsearch.properties
@@ -28,3 +28,9 @@ elasticsearch.retryConnection.maxRetries=7
 elasticsearch.retryConnection.minDelay=3000
 # Index or not attachments (default value: true)
 elasticsearch.indexAttachments=true
+
+# Reports for metrics into ElasticSearch
+elasticsearch.http.port=9200
+elasticsearch.metrics.reports.enabled=true
+elasticsearch.metrics.reports.period=30
+elasticsearch.metrics.reports.index=james-metrics
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/6f38dcbb/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
index c269263..431ea6b 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -29,6 +29,7 @@ import 
org.apache.james.modules.mailbox.CassandraSessionModule;
 import org.apache.james.modules.mailbox.ElasticSearchMailboxModule;
 import org.apache.james.modules.protocols.JMAPServerModule;
 import org.apache.james.modules.server.ActiveMQQueueModule;
+import org.apache.james.modules.server.ESMetricReporterModule;
 import org.apache.james.modules.server.JMXServerModule;
 import org.apache.james.modules.server.QuotaModule;
 
@@ -48,7 +49,8 @@ public class CassandraJamesServerMain {
 new CassandraSessionModule(),
 new ElasticSearchMailboxModule(),
 new QuotaModule(),
-new ActiveMQQueueModule());
+new ActiveMQQueueModule(),
+new ESMetricReporterModule());
 
 
 public static void main(String[] args) throws Exception {

http://git-wip-us.apache.org/repos/asf/james-project/blob/6f38dcbb/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
index 15878dd..eb979a2 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/ElasticSearchMailboxModule.java
@@ -50,6 +50,9 @@ public class ElasticSearchMailboxModule extends 
AbstractModule {
 private static final int DEFAULT_CONNECTION_MAX_RETRIES = 7;
 private static final int DEFAULT_CONNECTION_MIN_DELAY = 3000;
 private static final boolean DEFAULT_INDEX_ATTACHMENTS = true;
+public static final String ES_CONFIG_FILE = 
FileSystem.FILE_PROTOCOL_AND_CONF + "elasticsearch.properties";
+public static final String ELASTICSEARCH_MASTER_HOST = 
"elasticsearch.masterHost";
+public static final String ELASTICSEARCH_PORT = "elasticsearch.port";
 
 @Override
 protected void configure() {
@@ -64,10 +67,10 @@ public class 

[11/12] james-project git commit: JAMES-1901 Introduce a builder for ESReporterConfiguration

2017-02-03 Thread btellier
JAMES-1901 Introduce a builder for ESReporterConfiguration


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/263976aa
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/263976aa
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/263976aa

Branch: refs/heads/master
Commit: 263976aa4be8936fabee7c10bdbe456ee32cd519
Parents: 649b62d
Author: Benoit Tellier 
Authored: Thu Feb 2 11:08:36 2017 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:43:43 2017 +0700

--
 .../modules/server/ESMetricReporterModule.java  | 17 ++--
 .../metrics/metrics-es-reporter/pom.xml |  6 ++
 .../metrics/es/ESReporterConfiguration.java | 63 +
 .../metric/es/ESReportedConfigurationTest.java  | 95 
 .../apache/james/metric/es/ESReporterTest.java  | 12 ++-
 5 files changed, 164 insertions(+), 29 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/263976aa/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
index 06cf7a7..f43c5cf 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
@@ -21,7 +21,6 @@ package org.apache.james.modules.server;
 
 import java.io.FileNotFoundException;
 import java.util.List;
-import java.util.Optional;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
@@ -60,16 +59,20 @@ public class ESMetricReporterModule extends AbstractModule {
 PropertiesConfiguration propertiesReader = 
getPropertiesConfiguration(fileSystem);
 
 if (isMetricEnable(propertiesReader)) {
-return ESReporterConfiguration.enabled(
-
propertiesReader.getString(ElasticSearchMailboxModule.ELASTICSEARCH_MASTER_HOST),
-propertiesReader.getInt("elasticsearch.http.port", 
DEFAULT_ES_HTTP_PORT),
-
Optional.ofNullable(propertiesReader.getString("elasticsearch.metrics.reports.index",
 null)),
-
Optional.ofNullable(propertiesReader.getLong("elasticsearch.metrics.reports.period",
 null)));
+return ESReporterConfiguration.builder()
+.enabled()
+
.onHost(propertiesReader.getString(ElasticSearchMailboxModule.ELASTICSEARCH_MASTER_HOST),
+propertiesReader.getInt("elasticsearch.http.port", 
DEFAULT_ES_HTTP_PORT))
+
.onIndex(propertiesReader.getString("elasticsearch.metrics.reports.index", 
null))
+
.periodInSecond(propertiesReader.getLong("elasticsearch.metrics.reports.period",
 null))
+.build();
 }
 } catch (FileNotFoundException e) {
 LOGGER.info("Can not locate " + 
ElasticSearchMailboxModule.ES_CONFIG_FILE);
 }
-return ESReporterConfiguration.disabled();
+return ESReporterConfiguration.builder()
+.disabled()
+.build();
 }
 
 private boolean isMetricEnable(PropertiesConfiguration propertiesReader) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/263976aa/server/container/metrics/metrics-es-reporter/pom.xml
--
diff --git a/server/container/metrics/metrics-es-reporter/pom.xml 
b/server/container/metrics/metrics-es-reporter/pom.xml
index 97f2500..a4a9fce 100644
--- a/server/container/metrics/metrics-es-reporter/pom.xml
+++ b/server/container/metrics/metrics-es-reporter/pom.xml
@@ -159,6 +159,12 @@
 test
 
 
+org.assertj
+assertj-core
+${assertj-3.version}
+test
+
+
 org.elasticsearch
 metrics-elasticsearch-reporter
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/263976aa/server/container/metrics/metrics-es-reporter/src/main/java/org/apache/james/metrics/es/ESReporterConfiguration.java
--
diff --git 

[10/12] james-project git commit: JAMES-1901 Add integration test from publishing metrics on ElasticSearch

2017-02-03 Thread btellier
JAMES-1901 Add integration test from publishing metrics on ElasticSearch


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/649b62d2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/649b62d2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/649b62d2

Branch: refs/heads/master
Commit: 649b62d2cd6a2509d1f28d9f1bf87d4000538237
Parents: 1688bc6
Author: Benoit Tellier 
Authored: Mon Jan 23 18:46:31 2017 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:43:43 2017 +0700

--
 .../metrics/metrics-es-reporter/pom.xml |  25 
 .../apache/james/metric/es/ESReporterTest.java  | 120 +++
 2 files changed, 145 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/649b62d2/server/container/metrics/metrics-es-reporter/pom.xml
--
diff --git a/server/container/metrics/metrics-es-reporter/pom.xml 
b/server/container/metrics/metrics-es-reporter/pom.xml
index 5373502..97f2500 100644
--- a/server/container/metrics/metrics-es-reporter/pom.xml
+++ b/server/container/metrics/metrics-es-reporter/pom.xml
@@ -127,6 +127,21 @@
 
 
 
+org.apache.james
+apache-james-backends-es
+
+
+org.apache.james
+james-server-metrics-dropwizard
+test
+
+
+org.apache.james
+james-server-util-java8
+test-jar
+test
+
+
 com.google.guava
 guava
 
@@ -147,6 +162,16 @@
 org.elasticsearch
 metrics-elasticsearch-reporter
 
+
+org.elasticsearch
+elasticsearch
+2.2.1
+
+
+org.testcontainers
+testcontainers
+test
+
 
 
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/649b62d2/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
--
diff --git 
a/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
 
b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
new file mode 100644
index 000..633a62c
--- /dev/null
+++ 
b/server/container/metrics/metrics-es-reporter/src/test/java/org/apache/james/metric/es/ESReporterTest.java
@@ -0,0 +1,120 @@
+/
+ * 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.metric.es;
+
+import static com.jayway.awaitility.Awaitility.await;
+
+import java.util.Optional;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.apache.james.backends.es.ClientProvider;
+import org.apache.james.backends.es.ClientProviderImpl;
+import org.apache.james.metrics.api.Metric;
+import org.apache.james.metrics.dropwizard.DropWizardMetricFactory;
+import org.apache.james.metrics.es.ESMetricReporter;
+import org.apache.james.metrics.es.ESReporterConfiguration;
+import org.apache.james.util.streams.SwarmGenericContainer;
+import org.elasticsearch.client.Client;
+import 

[12/12] james-project git commit: JAMES-1901 Strong typing for Index and Types

2017-02-03 Thread btellier
JAMES-1901 Strong typing for Index and Types


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b54f9604
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b54f9604
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b54f9604

Branch: refs/heads/master
Commit: b54f9604d69be4fb268e9c98e25fd115f7cd0112
Parents: 263976a
Author: Benoit Tellier 
Authored: Thu Feb 2 11:51:55 2017 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:43:43 2017 +0700

--
 .../backends/es/DeleteByQueryPerformer.java | 16 -
 .../james/backends/es/ElasticSearchIndexer.java | 20 +++
 .../james/backends/es/IndexCreationFactory.java |  8 ++---
 .../org/apache/james/backends/es/IndexName.java | 32 +
 .../james/backends/es/NodeMappingFactory.java   |  6 ++--
 .../org/apache/james/backends/es/TypeName.java  | 32 +
 .../backends/es/ElasticSearchIndexerTest.java   | 32 -
 .../backends/es/EmbeddedElasticSearch.java  | 10 +++---
 .../backends/es/search/ScrollIterableTest.java  | 38 ++--
 .../MailboxElasticsearchConstants.java  |  7 ++--
 .../elasticsearch/MailboxMappingFactory.java|  2 +-
 .../search/ElasticSearchSearcher.java   |  4 +--
 .../mailbox/ElasticSearchMailboxModule.java |  4 +++
 13 files changed, 146 insertions(+), 65 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/b54f9604/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/DeleteByQueryPerformer.java
--
diff --git 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/DeleteByQueryPerformer.java
 
b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/DeleteByQueryPerformer.java
index 065fe19..6a44754 100644
--- 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/DeleteByQueryPerformer.java
+++ 
b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/DeleteByQueryPerformer.java
@@ -43,16 +43,16 @@ public class DeleteByQueryPerformer {
 private final Client client;
 private final ExecutorService executor;
 private final int batchSize;
-private final String indexName;
-private final String typeName;
+private final IndexName indexName;
+private final TypeName typeName;
 
 @Inject
-public DeleteByQueryPerformer(Client client, @Named("AsyncExecutor") 
ExecutorService executor, String indexName, String typeName) {
+public DeleteByQueryPerformer(Client client, @Named("AsyncExecutor") 
ExecutorService executor, IndexName indexName, TypeName typeName) {
 this(client, executor, DEFAULT_BATCH_SIZE, indexName, typeName);
 }
 
 @VisibleForTesting
-public DeleteByQueryPerformer(Client client, @Named("AsyncExecutor") 
ExecutorService executor, int batchSize, String indexName, String typeName) {
+public DeleteByQueryPerformer(Client client, @Named("AsyncExecutor") 
ExecutorService executor, int batchSize, IndexName indexName, TypeName 
typeName) {
 this.client = client;
 this.executor = executor;
 this.batchSize = batchSize;
@@ -66,8 +66,8 @@ public class DeleteByQueryPerformer {
 
 protected void doDeleteByQuery(QueryBuilder queryBuilder) {
 new ScrollIterable(client,
-client.prepareSearch(indexName)
-.setTypes(typeName)
+client.prepareSearch(indexName.getValue())
+.setTypes(typeName.getValue())
 .setScroll(TIMEOUT)
 .setNoFields()
 .setQuery(queryBuilder)
@@ -80,8 +80,8 @@ public class DeleteByQueryPerformer {
 BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
 for (SearchHit hit : searchResponse.getHits()) {
 bulkRequestBuilder.add(client.prepareDelete()
-.setIndex(indexName)
-.setType(typeName)
+.setIndex(indexName.getValue())
+.setType(typeName.getValue())
 .setId(hit.getId()));
 }
 return bulkRequestBuilder.execute();

http://git-wip-us.apache.org/repos/asf/james-project/blob/b54f9604/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java
--
diff --git 
a/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java
 
b/backends-common/elasticsearch/src/main/java/org/apache/james/backends/es/ElasticSearchIndexer.java
index 5cbf1f4..f1df1d7 100644
--- 

[01/12] james-project git commit: JAMES-1918 apache-james-backends-cassandra test jar was bound without scope test

2017-02-03 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master eeb04abaa -> b54f9604d


JAMES-1918 apache-james-backends-cassandra test jar was bound without scope test


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/80245f1a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/80245f1a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/80245f1a

Branch: refs/heads/master
Commit: 80245f1a66caf8bc1290849d3016cfc9948cb743
Parents: eeb04ab
Author: Benoit Tellier 
Authored: Tue Jan 24 11:03:17 2017 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:40:26 2017 +0700

--
 server/container/guice/cassandra-guice/pom.xml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/80245f1a/server/container/guice/cassandra-guice/pom.xml
--
diff --git a/server/container/guice/cassandra-guice/pom.xml 
b/server/container/guice/cassandra-guice/pom.xml
index be98559..f4699c3 100644
--- a/server/container/guice/cassandra-guice/pom.xml
+++ b/server/container/guice/cassandra-guice/pom.xml
@@ -195,6 +195,7 @@
 ${project.groupId}
 apache-james-backends-cassandra
 test-jar
+test
 
 
 ${project.groupId}
@@ -230,7 +231,7 @@
 james-server-data-cassandra
 
 
-org.apache.james
+${project.groupId}
 james-server-data-jmap-cassandra
 
 


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



[07/12] james-project git commit: JAMES-1901 Create a ElasticSearch backend project

2017-02-03 Thread btellier
http://git-wip-us.apache.org/repos/asf/james-project/blob/1688bc6f/server/container/guice/cassandra-guice/src/test/java/org/apache/james/EmbeddedElasticSearchRule.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/EmbeddedElasticSearchRule.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/EmbeddedElasticSearchRule.java
index efb5508..3568efb 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/EmbeddedElasticSearchRule.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/EmbeddedElasticSearchRule.java
@@ -18,7 +18,9 @@
  /
 
 package org.apache.james;
-import org.apache.james.mailbox.elasticsearch.EmbeddedElasticSearch;
+
+import org.apache.james.backends.es.EmbeddedElasticSearch;
+import org.apache.james.mailbox.elasticsearch.MailboxElasticsearchConstants;
 import org.apache.james.modules.TestElasticSearchModule;
 import org.junit.rules.RuleChain;
 import org.junit.rules.TemporaryFolder;
@@ -31,7 +33,7 @@ import com.google.inject.Module;
 public class EmbeddedElasticSearchRule implements GuiceModuleTestRule {
 
 private final TemporaryFolder temporaryFolder = new TemporaryFolder();
-private final EmbeddedElasticSearch embeddedElasticSearch = new 
EmbeddedElasticSearch(temporaryFolder);
+private final EmbeddedElasticSearch embeddedElasticSearch = new 
EmbeddedElasticSearch(temporaryFolder, 
MailboxElasticsearchConstants.MAILBOX_INDEX);
 
 private final RuleChain chain = RuleChain
 .outerRule(temporaryFolder)

http://git-wip-us.apache.org/repos/asf/james-project/blob/1688bc6f/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
index 3642f6e..150308d 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
@@ -26,9 +26,10 @@ import java.util.EnumSet;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.components.CassandraModule;
+import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.apache.james.jmap.methods.GetMessageListMethod;
 import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.mailbox.elasticsearch.EmbeddedElasticSearch;
+import org.apache.james.mailbox.elasticsearch.MailboxElasticsearchConstants;
 import org.apache.james.modules.TestElasticSearchModule;
 import org.apache.james.modules.TestFilesystemModule;
 import org.apache.james.modules.TestJMAPServerModule;
@@ -48,7 +49,7 @@ public class JamesCapabilitiesServerTest {
 
 private GuiceJamesServerImpl server;
 private TemporaryFolder temporaryFolder = new TemporaryFolder();
-private EmbeddedElasticSearch embeddedElasticSearch = new 
EmbeddedElasticSearch(temporaryFolder);
+private EmbeddedElasticSearch embeddedElasticSearch = new 
EmbeddedElasticSearch(temporaryFolder, 
MailboxElasticsearchConstants.MAILBOX_INDEX);
 
 @Rule
 public RuleChain chain = 
RuleChain.outerRule(temporaryFolder).around(embeddedElasticSearch);

http://git-wip-us.apache.org/repos/asf/james-project/blob/1688bc6f/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
index 69de08a..140f0a7 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/CassandraJmapServerModule.java
@@ -26,7 +26,7 @@ import javax.inject.Singleton;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.EmbeddedCassandra;
-import org.apache.james.mailbox.elasticsearch.EmbeddedElasticSearch;
+import org.apache.james.backends.es.EmbeddedElasticSearch;
 import org.junit.rules.TemporaryFolder;
 
 import com.datastax.driver.core.Session;

http://git-wip-us.apache.org/repos/asf/james-project/blob/1688bc6f/server/container/guice/cassandra-guice/src/test/java/org/apache/james/modules/TestElasticSearchModule.java

[06/12] james-project git commit: JAMES-1901 Move ES metrics reporter to a dedicated project

2017-02-03 Thread btellier
JAMES-1901 Move ES metrics reporter to a dedicated project


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ea114d7a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ea114d7a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ea114d7a

Branch: refs/heads/master
Commit: ea114d7a0e31ca1eb8b88076efcd03fa8c0d5e4e
Parents: 6f38dcb
Author: Benoit Tellier 
Authored: Mon Jan 23 14:14:58 2017 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:43:35 2017 +0700

--
 server/container/guice/cassandra-guice/pom.xml  |   5 +
 .../modules/server/ESMetricReporterModule.java  |  17 +-
 .../metrics/metrics-dropwizard/pom.xml  |   4 -
 .../dropwizard/DropWizardMetricFactory.java |  10 +-
 .../metrics/dropwizard/ESMetricReporter.java|  69 ---
 .../dropwizard/ESReporterConfiguration.java |  81 
 .../metrics/metrics-es-reporter/pom.xml | 205 +++
 .../james/metrics/es/ESMetricReporter.java  |  69 +++
 .../metrics/es/ESReporterConfiguration.java |  82 
 .../META-INF/org/apache/james/spring-server.xml |   6 +-
 server/pom.xml  |   1 +
 11 files changed, 376 insertions(+), 173 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/ea114d7a/server/container/guice/cassandra-guice/pom.xml
--
diff --git a/server/container/guice/cassandra-guice/pom.xml 
b/server/container/guice/cassandra-guice/pom.xml
index f4699c3..522d6bc 100644
--- a/server/container/guice/cassandra-guice/pom.xml
+++ b/server/container/guice/cassandra-guice/pom.xml
@@ -235,6 +235,11 @@
 james-server-data-jmap-cassandra
 
 
+org.apache.james
+metrics-es-reporter
+${project.version}
+
+
 ${project.groupId}
 james-server-guice-common
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/ea114d7a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
index fcf0eb7..06cf7a7 100644
--- 
a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
+++ 
b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/server/ESMetricReporterModule.java
@@ -21,7 +21,7 @@ package org.apache.james.modules.server;
 
 import java.io.FileNotFoundException;
 import java.util.List;
-import java.util.concurrent.ExecutionException;
+import java.util.Optional;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
@@ -29,15 +29,13 @@ import 
org.apache.commons.configuration.PropertiesConfiguration;
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.lifecycle.api.Configurable;
-import org.apache.james.metrics.dropwizard.DropWizardMetricFactory;
-import org.apache.james.metrics.dropwizard.ESMetricReporter;
-import org.apache.james.metrics.dropwizard.ESReporterConfiguration;
+import org.apache.james.metrics.es.ESMetricReporter;
+import org.apache.james.metrics.es.ESReporterConfiguration;
 import org.apache.james.modules.mailbox.ElasticSearchMailboxModule;
 import org.apache.james.utils.ConfigurationPerformer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
@@ -65,8 +63,8 @@ public class ESMetricReporterModule extends AbstractModule {
 return ESReporterConfiguration.enabled(
 
propertiesReader.getString(ElasticSearchMailboxModule.ELASTICSEARCH_MASTER_HOST),
 propertiesReader.getInt("elasticsearch.http.port", 
DEFAULT_ES_HTTP_PORT),
-
Optional.fromNullable(propertiesReader.getString("elasticsearch.metrics.reports.index",
 null)),
-
Optional.fromNullable(propertiesReader.getLong("elasticsearch.metrics.reports.period",
 null)));
+
Optional.ofNullable(propertiesReader.getString("elasticsearch.metrics.reports.index",
 

[09/12] james-project git commit: JAMES-1901 Create a ElasticSearch backend project

2017-02-03 Thread btellier
JAMES-1901 Create a ElasticSearch backend project


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1688bc6f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1688bc6f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1688bc6f

Branch: refs/heads/master
Commit: 1688bc6f98c217fdf82475e47d1636c7b78d3533
Parents: ea114d7
Author: Benoit Tellier 
Authored: Mon Jan 23 18:51:49 2017 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:43:39 2017 +0700

--
 backends-common/elasticsearch/pom.xml   | 222 
 .../james/backends/es/ClientProvider.java   |  26 ++
 .../james/backends/es/ClientProviderImpl.java   |  48 
 .../backends/es/DeleteByQueryPerformer.java |  90 +++
 .../james/backends/es/ElasticSearchIndexer.java | 102 
 .../james/backends/es/IndexCreationFactory.java |  84 ++
 .../james/backends/es/NodeMappingFactory.java   |  55 
 .../backends/es/search/ScrollIterable.java  |  81 ++
 .../backends/es/ElasticSearchIndexerTest.java   | 244 +
 .../backends/es/EmbeddedElasticSearch.java  | 118 +
 .../backends/es/search/ScrollIterableTest.java  | 174 +
 .../es/utils/TestingClientProvider.java |  37 +++
 backends-common/pom.xml |  13 +
 mailbox/elasticsearch/pom.xml   |  15 +-
 .../mailbox/elasticsearch/ClientProvider.java   |  26 --
 .../elasticsearch/ClientProviderImpl.java   |  48 
 .../elasticsearch/DeleteByQueryPerformer.java   |  86 --
 .../elasticsearch/ElasticSearchIndexer.java | 100 ---
 .../elasticsearch/IndexCreationFactory.java |  84 --
 .../MailboxElasticsearchConstants.java  |  25 ++
 .../elasticsearch/MailboxMappingFactory.java| 229 
 .../elasticsearch/NodeMappingFactory.java   | 259 ---
 ...lasticSearchListeningMessageSearchIndex.java |   2 +-
 .../elasticsearch/query/SortConverter.java  |   3 +-
 .../search/ElasticSearchSearcher.java   |   7 +-
 .../elasticsearch/search/ScrollIterable.java|  81 --
 .../elasticsearch/ElasticSearchIndexerTest.java | 238 -
 .../ElasticSearchIntegrationTest.java   |  27 +-
 .../elasticsearch/EmbeddedElasticSearch.java| 116 -
 ...hListeningMailboxMessageSearchIndexTest.java |   2 +-
 .../search/ScrollIterableTest.java  | 173 -
 .../utils/TestingClientProvider.java|  37 ---
 mailbox/pom.xml |  19 ++
 mpt/impl/imap-mailbox/elasticsearch/pom.xml |  18 +-
 .../host/ElasticSearchHostSystem.java   |  23 +-
 mpt/impl/smtp/cassandra/pom.xml |   6 +-
 .../smtp/host/CassandraJamesSmtpHostSystem.java |   5 +-
 mpt/pom.xml |   7 +
 server/container/guice/cassandra-guice/pom.xml  |   6 +
 .../mailbox/ElasticSearchMailboxModule.java |  22 +-
 .../apache/james/EmbeddedElasticSearchRule.java |   6 +-
 .../james/JamesCapabilitiesServerTest.java  |   5 +-
 .../modules/CassandraJmapServerModule.java  |   2 +-
 .../james/modules/TestElasticSearchModule.java  |  20 +-
 server/pom.xml  |  11 +
 .../cassandra-jmap-integration-testing/pom.xml  |   6 +
 .../cassandra/cucumber/CassandraStepdefs.java   |   5 +-
 .../protocols/jmap-integration-testing/pom.xml  |   1 +
 .../protocols/webadmin-integration-test/pom.xml |   6 +
 49 files changed, 1717 insertions(+), 1303 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/1688bc6f/backends-common/elasticsearch/pom.xml
--
diff --git a/backends-common/elasticsearch/pom.xml 
b/backends-common/elasticsearch/pom.xml
new file mode 100644
index 000..624ec16
--- /dev/null
+++ b/backends-common/elasticsearch/pom.xml
@@ -0,0 +1,222 @@
+
+
+http://maven.apache.org/POM/4.0.0;
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance;
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd;>
+
+james-backends-common
+org.apache.james
+3.0.0-beta6-SNAPSHOT
+
+4.0.0
+
+apache-james-backends-es
+
+
+
+disable-build-for-older-jdk
+
+(,1.8)
+
+
+
+
+maven-jar-plugin
+
+
+default-jar
+none
+
+
+jar
+

[02/12] james-project git commit: JAMES-1917 Lighten documentation for Guice JPA and Cassandra

2017-02-03 Thread btellier
JAMES-1917 Lighten documentation for Guice JPA and Cassandra

Configuration is already present and automatically up to date in docker related 
folders. Better to use it.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a615668c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a615668c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a615668c

Branch: refs/heads/master
Commit: a615668c9707c6fac05c7975f271c768b2ccf6bb
Parents: 80245f1
Author: Benoit Tellier 
Authored: Tue Jan 24 11:01:13 2017 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:40:39 2017 +0700

--
 .../container/guice/cassandra-guice/README.adoc |  33 +++--
 .../sample-configuration/cassandra.properties   |   5 -
 .../sample-configuration/dnsservice.xml |  29 
 .../sample-configuration/domainlist.xml |  28 
 .../elasticsearch.properties|  28 
 .../sample-configuration/imapserver.xml |  54 
 .../sample-configuration/jmap.properties|  11 --
 .../sample-configuration/jmx.properties |  28 
 .../sample-configuration/mailetcontainer.xml| 138 ---
 .../mailrepositorystore.xml |  34 -
 .../sample-configuration/pop3server.xml |  42 --
 .../recipientrewritetable.xml   |  27 
 .../sample-configuration/smtpserver.xml | 105 --
 .../sample-configuration/usersrepository.xml|  27 
 server/container/guice/jpa-guice/README.adoc|  26 ++--
 .../sample-configuration/dnsservice.xml |  29 
 .../sample-configuration/domainlist.xml |  28 
 .../sample-configuration/imapserver.xml |  54 
 .../james-database.properties   |  40 --
 .../sample-configuration/jmx.properties |  28 
 .../sample-configuration/lmtpserver.xml |  41 --
 .../sample-configuration/mailetcontainer.xml| 137 --
 .../mailrepositorystore.xml |  34 -
 .../sample-configuration/pop3server.xml |  42 --
 .../recipientrewritetable.xml   |  27 
 .../sample-configuration/smtpserver.xml | 105 --
 .../sample-configuration/usersrepository.xml|  27 
 27 files changed, 37 insertions(+), 1170 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/a615668c/server/container/guice/cassandra-guice/README.adoc
--
diff --git a/server/container/guice/cassandra-guice/README.adoc 
b/server/container/guice/cassandra-guice/README.adoc
index e3648ff..f930b89 100644
--- a/server/container/guice/cassandra-guice/README.adoc
+++ b/server/container/guice/cassandra-guice/README.adoc
@@ -5,15 +5,21 @@
 === Requirements
 
  * Java 8 SDK
- * Docker
- * Maven
+ * Docker ∕ ElasticSearch 2.2.1 and Cassandra 2.2.3
+ * Maven 3
 
 === Building the artifacts
 
-An usual compilation using maven will produce two artifacts into target 
directory :
+An usual compilation using maven will produce two artifacts into target 
directory:
 
- * james-server-cassandra-guice-${version}.jar
- * james-server-cassandra-guice-${version}.lib
+ * james-server-cassandra-guice.jar
+ * james-server-cassandra-guice.lib
+
+You can for example run in the base of this git repository:
+
+```
+mvn clean install
+```
 
 == Running
 
@@ -26,20 +32,25 @@ An usual compilation using maven will produce two artifacts 
into target director
 
 To run james, you have to create a directory containing required configuration 
files.
 
-A sample directory (appropriately named sample-directory) is provided with some
-default value you may need to replace.
+James requires the configuration to be in a subfolder of working directory 
that is called **conf**. You can get a sample
+directory for configuration from 
dockerfiles/run/guice/cassandra/destination/conf. You might need to adapt it to 
your needs.
 
-You also need to generate a keystore with the following command :
+You also need to generate a keystore in your conf folder with the following 
command:
 [source]
 
 $ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
 
 
-You need to have a Cassandra and an ElasticSearch instance running.
+You need to have a Cassandra and an ElasticSearch instance running. You can 
either install the servers or launch them via docker:
+
+```bash
+$ docker run -d --port 9042:9042 --name=cassandra cassandra:2.2.3
+$ docker run -d --port 9200:9200 --port 9300:9300 --name=elasticsearch 
elasticsearch:2.2.1
+```
 
-Once everything is set up, you just have to run the jar with :
+Once everything is set up, you just have to 

[04/12] james-project git commit: JAMES-1901 Wrap EsMetric reporter and configure it

2017-02-03 Thread btellier
JAMES-1901 Wrap EsMetric reporter and configure it


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/894f4c48
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/894f4c48
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/894f4c48

Branch: refs/heads/master
Commit: 894f4c484e80cb33bf86c31d4f8872185483fdb6
Parents: 31ef821
Author: Benoit Tellier 
Authored: Fri Dec 30 15:22:49 2016 +0700
Committer: Benoit Tellier 
Committed: Fri Feb 3 16:42:50 2017 +0700

--
 .../metrics/metrics-dropwizard/pom.xml  |  4 +
 .../dropwizard/DropWizardMetricFactory.java |  4 +
 .../metrics/dropwizard/ESMetricReporter.java| 69 +
 .../dropwizard/ESReporterConfiguration.java | 81 
 server/pom.xml  |  5 ++
 5 files changed, 163 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/894f4c48/server/container/metrics/metrics-dropwizard/pom.xml
--
diff --git a/server/container/metrics/metrics-dropwizard/pom.xml 
b/server/container/metrics/metrics-dropwizard/pom.xml
index 3d40daf..5ad3440 100644
--- a/server/container/metrics/metrics-dropwizard/pom.xml
+++ b/server/container/metrics/metrics-dropwizard/pom.xml
@@ -57,6 +57,10 @@
 javax.inject
 javax.inject
 
+
+org.elasticsearch
+metrics-elasticsearch-reporter
+
 
 
 
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/894f4c48/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
--
diff --git 
a/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
 
b/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
index 8c7f731..005ae34 100644
--- 
a/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
+++ 
b/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
@@ -39,6 +39,10 @@ public class DropWizardMetricFactory implements 
MetricFactory {
 .build();
 }
 
+public ESMetricReporter provideEsReporter(ESReporterConfiguration 
esReporterConfiguration) {
+return new ESMetricReporter(esReporterConfiguration, metricRegistry);
+}
+
 @Override
 public Metric generate(String name) {
 return new DropWizardMetric(metricRegistry.counter(name));

http://git-wip-us.apache.org/repos/asf/james-project/blob/894f4c48/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/ESMetricReporter.java
--
diff --git 
a/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/ESMetricReporter.java
 
b/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/ESMetricReporter.java
new file mode 100644
index 000..6d782ce
--- /dev/null
+++ 
b/server/container/metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/ESMetricReporter.java
@@ -0,0 +1,69 @@
+/
+ * 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.metrics.dropwizard;
+
+import 

[2/2] james-project git commit: JAMES-1908 add support for multiple cassandra node ip in configuration

2017-01-22 Thread btellier
JAMES-1908 add support for multiple cassandra node ip in configuration


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/fabccf51
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fabccf51
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fabccf51

Branch: refs/heads/master
Commit: fabccf51c74bdc3361a0abea919b22421a617f45
Parents: 3581696
Author: Luc DUZAN 
Authored: Thu Jan 19 14:51:26 2017 +0100
Committer: Benoit Tellier 
Committed: Mon Jan 23 13:17:21 2017 +0700

--
 .../cassandra/init/CassandraNodeIpAndPort.java  |  95 +++
 .../backends/cassandra/init/ClusterFactory.java |  25 ++--
 .../init/CassandraNodeIpAndPortTest.java|  94 +++
 .../destination/conf/cassandra.properties   |   4 +-
 server/container/guice/cassandra-guice/pom.xml  |   6 +
 .../sample-configuration/cassandra.properties   |   3 +-
 .../mailbox/CassandraSessionConfiguration.java  |  31 +
 .../modules/mailbox/CassandraSessionModule.java |  34 --
 .../org/apache/james/CassandraConfTest.java | 119 +++
 .../org/apache/james/DockerCassandraRule.java   |  92 ++
 .../src/test/resources/test.properties  |   3 +-
 server/src/site/xdoc/config-cassandra.xml   |   6 +-
 12 files changed, 474 insertions(+), 38 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/fabccf51/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraNodeIpAndPort.java
--
diff --git 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraNodeIpAndPort.java
 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraNodeIpAndPort.java
new file mode 100644
index 000..b9b3f19
--- /dev/null
+++ 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraNodeIpAndPort.java
@@ -0,0 +1,95 @@
+/
+ * 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.backends.cassandra.init;
+
+import java.util.List;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Splitter;
+
+public class CassandraNodeIpAndPort {
+public static final int DEFAULT_CASSANDRA_PORT = 9042;
+
+public static CassandraNodeIpAndPort parseConfString(String ipAndPort) {
+Preconditions.checkNotNull(ipAndPort);
+Preconditions.checkArgument(!ipAndPort.isEmpty());
+
+List parts = Splitter.on(':')
+.trimResults()
+.splitToList(ipAndPort);
+
+if (parts.size() < 1 || parts.size() > 2) {
+throw new IllegalArgumentException(ipAndPort + " is not a valid 
cassandra node");
+}
+
+String ip = parts.get(0);
+int port = getPortFromConfPart(parts);
+
+return new CassandraNodeIpAndPort(ip, port);
+}
+
+private static int getPortFromConfPart(List parts) {
+if (parts.size() == 2) {
+return Integer.valueOf(parts.get(1));
+} else {
+return DEFAULT_CASSANDRA_PORT;
+}
+}
+
+private final String ip;
+private final int port;
+
+public CassandraNodeIpAndPort(String ip, int port) {
+this.ip = ip;
+this.port = port;
+}
+
+public CassandraNodeIpAndPort(String ip) {
+this(ip, DEFAULT_CASSANDRA_PORT);
+}
+
+public String getIp() {
+return ip;
+}
+
+public int getPort() {
+return 

[1/2] james-project git commit: JAMES-1908 make CassandraJmapTestRule composable

2017-01-22 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 9ca2ca736 -> fabccf51c


JAMES-1908 make CassandraJmapTestRule composable


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/35816961
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/35816961
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/35816961

Branch: refs/heads/master
Commit: 3581696113c82011236f11151a9647f4fccbdccc
Parents: 9ca2ca7
Author: Luc DUZAN 
Authored: Thu Jan 19 14:49:51 2017 +0100
Committer: Benoit Tellier 
Committed: Mon Jan 23 13:17:04 2017 +0700

--
 server/container/guice/cassandra-guice/pom.xml  |  5 ++
 .../james/AggregateGuiceModuleTestRule.java | 82 
 .../apache/james/CassandraJamesServerTest.java  |  2 +-
 .../org/apache/james/CassandraJmapTestRule.java | 45 +--
 .../CassandraMessageIdManagerInjectionTest.java |  2 +-
 .../org/apache/james/EmbeddedCassandraRule.java | 75 ++
 .../apache/james/EmbeddedElasticSearchRule.java | 55 +
 .../org/apache/james/GuiceModuleTestRule.java   | 29 +++
 .../apache/james/TempFilesystemTestRule.java| 51 
 .../java/org/apache/james/JmapJamesServer.java  |  7 +-
 .../CassandraGetMailboxesMethodTest.java|  2 +-
 .../CassandraGetMessageListMethodTest.java  |  2 +-
 .../CassandraGetVacationResponseTest.java   |  2 +-
 .../CassandraJmapAuthenticationTest.java|  2 +-
 .../CassandraSetMailboxesMethodTest.java|  2 +-
 .../CassandraSetMessagesMethodTest.java |  2 +-
 .../CassandraSetVacationResponseTest.java   |  2 +-
 .../CassandraVacationIntegrationTest.java   |  2 +-
 .../WebAdminServerIntegrationTest.java  |  2 +-
 19 files changed, 334 insertions(+), 37 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/35816961/server/container/guice/cassandra-guice/pom.xml
--
diff --git a/server/container/guice/cassandra-guice/pom.xml 
b/server/container/guice/cassandra-guice/pom.xml
index 2f49a97..b1bc20f 100644
--- a/server/container/guice/cassandra-guice/pom.xml
+++ b/server/container/guice/cassandra-guice/pom.xml
@@ -278,6 +278,11 @@
 mockito-core
 test
 
+
+org.testcontainers
+testcontainers
+test
+
 
 
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/35816961/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AggregateGuiceModuleTestRule.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AggregateGuiceModuleTestRule.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AggregateGuiceModuleTestRule.java
new file mode 100644
index 000..b3c4f71
--- /dev/null
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/AggregateGuiceModuleTestRule.java
@@ -0,0 +1,82 @@
+/
+ * 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;
+
+import java.util.List;
+
+import org.junit.rules.RuleChain;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableList;
+import com.google.inject.Module;
+import com.google.inject.util.Modules;
+
+
+public class 

james-project git commit: JAMES-1915 Using concurrent safe collection for ConcurrentTestRunnerTest

2017-01-23 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 84ed5a28a -> 8813d2e57


JAMES-1915 Using concurrent safe collection for ConcurrentTestRunnerTest


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8813d2e5
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8813d2e5
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8813d2e5

Branch: refs/heads/master
Commit: 8813d2e57195ef60dc2403fedc341e7018059de4
Parents: 84ed5a2
Author: Benoit Tellier 
Authored: Mon Jan 23 09:47:31 2017 +0700
Committer: Benoit Tellier 
Committed: Tue Jan 24 08:33:14 2017 +0700

--
 .../mail/model/concurrency/ConcurrentTestRunnerTest.java  | 10 --
 1 file changed, 4 insertions(+), 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/8813d2e5/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunnerTest.java
--
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunnerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunnerTest.java
index 60fa367..302ed9e 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunnerTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/concurrency/ConcurrentTestRunnerTest.java
@@ -21,15 +21,13 @@ package 
org.apache.james.mailbox.store.mail.model.concurrency;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.util.List;
+import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.TimeUnit;
 
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-import com.google.common.collect.Lists;
-
 public class ConcurrentTestRunnerTest {
 
 public static final ConcurrentTestRunner.BiConsumer EMPTY_BI_CONSUMER = 
new ConcurrentTestRunner.BiConsumer() {
@@ -120,18 +118,18 @@ public class ConcurrentTestRunnerTest {
 public void runShouldPerformAllOperations() throws Exception {
 int operationCount = 2;
 int threadCount = 2;
-final List list = Lists.newArrayList();
+final ConcurrentLinkedQueue queue = new 
ConcurrentLinkedQueue();
 
 ConcurrentTestRunner concurrentTestRunner = new 
ConcurrentTestRunner(threadCount, operationCount,
 new ConcurrentTestRunner.BiConsumer() {
 @Override
 public void consume(int threadNumber, int step) throws 
Exception {
-list.add(threadNumber + ":" + step);
+queue.add(threadNumber + ":" + step);
 }
 })
 .run();
 
 assertThat(concurrentTestRunner.awaitTermination(DEFAULT_AWAIT_TIME, 
TimeUnit.MILLISECONDS)).isTrue();
-assertThat(list).containsOnly("0:0", "0:1", "1:0", "1:1");
+assertThat(queue).containsOnly("0:0", "0:1", "1:0", "1:1");
 }
 }


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



[08/10] james-project git commit: MAILET-149 Decode file names in StripAttachment

2017-01-23 Thread btellier
MAILET-149 Decode file names in StripAttachment


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/229c4d38
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/229c4d38
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/229c4d38

Branch: refs/heads/master
Commit: 229c4d382db5f6884d1f2c136ab6feb5a3071dd7
Parents: f195524
Author: Benoit Tellier 
Authored: Fri Jan 20 14:36:48 2017 +0700
Committer: Antoine Duprat 
Committed: Mon Jan 23 16:19:25 2017 +0100

--
 .../mailet/base/test/MimeMessageBuilder.java|   4 +
 .../transport/mailets/StripAttachment.java  |   9 +-
 .../transport/mailets/StripAttachmentTest.java  |  36 +
 .../standard/src/test/resources/mime/gmail.mime | 153 +++
 4 files changed, 199 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/229c4d38/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
--
diff --git 
a/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java 
b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
index 40a7e18..c75136d 100644
--- 
a/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
+++ 
b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
@@ -186,6 +186,10 @@ public class MimeMessageBuilder {
 return new MimeMessage(Session.getDefaultInstance(new Properties()));
 }
 
+public static MimeMessage mimeMessageFromStream(InputStream inputStream) 
throws MessagingException {
+return new MimeMessage(Session.getDefaultInstance(new Properties()), 
inputStream);
+}
+
 public static MimeMessageBuilder mimeMessageBuilder() {
 return new MimeMessageBuilder();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/229c4d38/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
--
diff --git 
a/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
 
b/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
index 20ff946..4bf7a5c 100644
--- 
a/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
+++ 
b/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
@@ -43,6 +43,8 @@ import javax.mail.internet.MimeUtility;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.james.mime4j.codec.DecodeMonitor;
+import org.apache.james.mime4j.codec.DecoderUtil;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetException;
 import org.apache.mailet.base.GenericMailet;
@@ -313,9 +315,10 @@ public class StripAttachment extends GenericMailet {
 }
 
 boolean shouldRemove = removeAttachments.equals(REMOVE_ALL);
-if (isMatching(bodyPart, fileName)) {
-storeBodyPartAsFile(bodyPart, mail, fileName);
-storeBodyPartAsMailAttribute(bodyPart, mail, fileName);
+String decodedName = DecoderUtil.decodeEncodedWords(fileName, 
DecodeMonitor.SILENT);
+if (isMatching(bodyPart, decodedName)) {
+storeBodyPartAsFile(bodyPart, mail, decodedName);
+storeBodyPartAsMailAttribute(bodyPart, mail, decodedName);
 if (removeAttachments.equals(REMOVE_MATCHED)) {
 shouldRemove = true;
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/229c4d38/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
--
diff --git 
a/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
 
b/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
index d888c44..0c481c9 100644
--- 
a/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
+++ 
b/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
@@ -310,6 +310,42 @@ public class StripAttachmentTest {
 }
 
 @Test
+public void serviceShouldDecodeHeaderFilenames() throws 
MessagingException, IOException {
+StripAttachment mailet = new StripAttachment();
+
+String customAttribute = "my.custom.attribute";
+FakeMailetConfig mci = FakeMailetConfig.builder()
+.mailetName("Test")
+.setProperty("pattern", ".*\\.tmp")
+.setProperty("attribute", customAttribute)
+.build();
+ 

[04/10] james-project git commit: MAILET-149 Use a test rule for AMQP queue

2017-01-23 Thread btellier
MAILET-149 Use a test rule for AMQP queue


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6d1f913e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6d1f913e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6d1f913e

Branch: refs/heads/master
Commit: 6d1f913e9865c0f26f73bfff9f5c9cf8b37fad40
Parents: 28eedd5
Author: Benoit Tellier 
Authored: Fri Jan 20 10:03:30 2017 +0700
Committer: Antoine Duprat 
Committed: Mon Jan 23 16:19:24 2017 +0100

--
 server/mailet/integration-testing/pom.xml   |   2 +-
 .../mailets/AmqpForwardAttachmentTest.java  |  66 ++-
 .../mailets/ICSAttachmentWorkflowTest.java  |  76 +++-
 .../james/transport/mailets/amqp/AmqpRule.java  | 115 +++
 4 files changed, 142 insertions(+), 117 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/6d1f913e/server/mailet/integration-testing/pom.xml
--
diff --git a/server/mailet/integration-testing/pom.xml 
b/server/mailet/integration-testing/pom.xml
index 31eb20c..be3cd62 100644
--- a/server/mailet/integration-testing/pom.xml
+++ b/server/mailet/integration-testing/pom.xml
@@ -220,7 +220,7 @@
   
   org.assertj
   assertj-core
-  ${assertj-1.version}
+  ${assertj-3.version}
   test
   
   

http://git-wip-us.apache.org/repos/asf/james-project/blob/6d1f913e/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
--
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
index 67f63cd..400f965 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
@@ -22,12 +22,8 @@ package org.apache.james.transport.mailets;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.ByteArrayInputStream;
-import java.io.IOException;
 import java.io.UnsupportedEncodingException;
-import java.net.InetAddress;
 import java.util.Properties;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 
 import javax.mail.MessagingException;
 import javax.mail.Session;
@@ -43,6 +39,7 @@ import org.apache.james.mailets.configuration.MailetContainer;
 import org.apache.james.mailets.configuration.ProcessorConfiguration;
 import org.apache.james.mailets.utils.IMAPMessageReader;
 import org.apache.james.mailets.utils.SMTPMessageSender;
+import org.apache.james.transport.mailets.amqp.AmqpRule;
 import org.apache.james.util.streams.SwarmGenericContainer;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
@@ -55,16 +52,10 @@ import org.junit.rules.RuleChain;
 import org.junit.rules.TemporaryFolder;
 
 import com.google.common.base.Charsets;
-import com.google.common.net.InetAddresses;
 import com.google.common.primitives.Bytes;
 import com.jayway.awaitility.Awaitility;
 import com.jayway.awaitility.Duration;
 import com.jayway.awaitility.core.ConditionFactory;
-import com.rabbitmq.client.BuiltinExchangeType;
-import com.rabbitmq.client.Channel;
-import com.rabbitmq.client.Connection;
-import com.rabbitmq.client.ConnectionFactory;
-import com.rabbitmq.client.GetResponse;
 
 public class AmqpForwardAttachmentTest {
 
@@ -88,22 +79,16 @@ public class AmqpForwardAttachmentTest {
 .withAffinityToContainer();
 
 public TemporaryFolder temporaryFolder = new TemporaryFolder();
+public AmqpRule amqpRule = new AmqpRule(rabbitMqContainer, EXCHANGE_NAME, 
ROUTING_KEY);
 
 @Rule
-public final RuleChain chain = 
RuleChain.outerRule(temporaryFolder).around(rabbitMqContainer);
+public final RuleChain chain = 
RuleChain.outerRule(temporaryFolder).around(rabbitMqContainer).around(amqpRule);
 
 private TemporaryJamesServer jamesServer;
 private ConditionFactory calmlyAwait;
-private Channel channel;
-private String queueName;
-private Connection connection;
 
 @Before
 public void setup() throws Exception {
-@SuppressWarnings("deprecation")
-InetAddress containerIp = 
InetAddresses.forString(rabbitMqContainer.getContainerInfo().getNetworkSettings().getIpAddress());
-String amqpUri = "amqp://" + 

[03/10] james-project git commit: MAILET-149 Use MimeMessageBuilder for mailet integration tests

2017-01-23 Thread btellier
MAILET-149 Use MimeMessageBuilder for mailet integration tests


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b1b46312
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b1b46312
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b1b46312

Branch: refs/heads/master
Commit: b1b4631251096146492554f6063a2e5906366ea7
Parents: 6d1f913
Author: Benoit Tellier 
Authored: Fri Jan 20 10:29:55 2017 +0700
Committer: Antoine Duprat 
Committed: Mon Jan 23 16:19:24 2017 +0100

--
 .../mailet/base/test/MimeMessageBuilder.java|  34 +++--
 .../mailets/AmqpForwardAttachmentTest.java  |  49 ++-
 .../mailets/ICSAttachmentWorkflowTest.java  | 146 +++
 .../transport/mailets/StripAttachmentTest.java  |  54 +++
 4 files changed, 114 insertions(+), 169 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/b1b46312/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
--
diff --git 
a/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java 
b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
index 42a2339..1246bf7 100644
--- 
a/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
+++ 
b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
@@ -91,7 +91,8 @@ public class MimeMessageBuilder {
 private Optional filename = Optional.absent();
 private ImmutableList.Builder headers = 
ImmutableList.builder();
 private Optional disposition = Optional.absent();
-private Optional data = Optional.absent();
+private Optional dataAsString = Optional.absent();
+private Optional dataAsBytes = Optional.absent();
 private Optional type = Optional.absent();
 
 public BodyPartBuilder cid(String cid) {
@@ -110,7 +111,12 @@ public class MimeMessageBuilder {
 }
 
 public BodyPartBuilder data(String data) {
-this.data = Optional.of(data);
+this.dataAsString = Optional.of(data);
+return this;
+}
+
+public BodyPartBuilder data(byte[] data) {
+this.dataAsBytes = Optional.of(data);
 return this;
 }
 
@@ -130,14 +136,24 @@ public class MimeMessageBuilder {
 }
 
 public BodyPart build() throws IOException, MessagingException {
-Preconditions.checkNotNull(data);
+Preconditions.checkState(dataAsString.isPresent() ^ 
dataAsBytes.isPresent(), "one and only one of data as string or data as bytes 
should be specified");
 MimeBodyPart bodyPart = new MimeBodyPart();
-bodyPart.setDataHandler(
-new DataHandler(
-new ByteArrayDataSource(
-data.or(DEFAULT_VALUE),
-type.or(DEFAULT_TEXT_PLAIN_UTF8_TYPE))
-));
+if (dataAsString.isPresent()) {
+bodyPart.setDataHandler(
+new DataHandler(
+new ByteArrayDataSource(
+dataAsString.or(DEFAULT_VALUE),
+type.or(DEFAULT_TEXT_PLAIN_UTF8_TYPE))
+));
+}
+if (dataAsBytes.isPresent()) {
+bodyPart.setDataHandler(
+new DataHandler(
+new ByteArrayDataSource(
+dataAsBytes.get(),
+type.or(DEFAULT_TEXT_PLAIN_UTF8_TYPE))
+));
+}
 if (filename.isPresent()) {
 bodyPart.setFileName(filename.get());
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/b1b46312/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
--
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
index 400f965..2ebc972 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
@@ -21,15 +21,7 @@ package org.apache.james.transport.mailets;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.io.ByteArrayInputStream;
-import 

[02/10] james-project git commit: Fix Eclipse warnings

2017-01-23 Thread btellier
Fix Eclipse warnings


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/4a59c1b2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/4a59c1b2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/4a59c1b2

Branch: refs/heads/master
Commit: 4a59c1b216bd8cd7c284cb6c472cf5cadaa97e32
Parents: 35b7fe3
Author: Antoine Duprat 
Authored: Thu Jan 19 10:27:45 2017 +0100
Committer: Antoine Duprat 
Committed: Mon Jan 23 10:05:14 2017 +0100

--
 .../cassandra/mail/CassandraMessageIdDAO.java |  1 -
 .../CassandraCombinationManagerTestSystem.java|  6 ++
 .../store/AbstractCombinationManagerTest.java |  1 +
 mailet/icalendar/pom.xml  |  5 +
 .../james/transport/mailets/ICalendarParser.java  |  2 ++
 .../mailets/ICALToJsonAttributeTest.java  |  3 +--
 .../transport/mailets/ICalendarParserTest.java| 18 --
 mailet/standard/pom.xml   |  1 -
 8 files changed, 11 insertions(+), 26 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/4a59c1b2/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
index 9a6acc7..e7d5a34 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
@@ -69,7 +69,6 @@ import com.google.common.collect.ImmutableSet;
 
 public class CassandraMessageIdDAO {
 
-private static final String MOD_SEQ_CONDITION = "modSeqCondition";
 private static final String IMAP_UID_GTE = IMAP_UID + "_GTE";
 private static final String IMAP_UID_LTE = IMAP_UID + "_LTE";
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/4a59c1b2/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
--
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
index d3387fd..42ef8e5 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
@@ -31,7 +31,7 @@ import 
org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 
 public class CassandraCombinationManagerTestSystem extends 
CombinationManagerTestSystem {
-private final CassandraMessageId.Factory messageIdFactory;
+
 private final CassandraMailboxSessionMapperFactory mapperFactory;
 private final CassandraMailboxManager cassandraMailboxManager;
 
@@ -39,14 +39,12 @@ public class CassandraCombinationManagerTestSystem extends 
CombinationManagerTes
 CassandraMailboxSessionMapperFactory mapperFactory = 
CassandraTestSystemFixture.createMapperFactory();
 
 return new 
CassandraCombinationManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory,
 quotaManager, dispatcher),
-new CassandraMessageId.Factory(),
 mapperFactory,
 CassandraTestSystemFixture.createMailboxManager(mapperFactory));
 }
 
-private CassandraCombinationManagerTestSystem(MessageIdManager 
messageIdManager, CassandraMessageId.Factory messageIdFactory, 
CassandraMailboxSessionMapperFactory mapperFactory, MailboxManager 
cassandraMailboxManager) {
+private CassandraCombinationManagerTestSystem(MessageIdManager 
messageIdManager, CassandraMailboxSessionMapperFactory mapperFactory, 
MailboxManager cassandraMailboxManager) {
 super(cassandraMailboxManager, messageIdManager);
-this.messageIdFactory = messageIdFactory;
 this.mapperFactory = mapperFactory;
 this.cassandraMailboxManager = 
(CassandraMailboxManager)cassandraMailboxManager;
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/4a59c1b2/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
--
diff --git 

[06/10] james-project git commit: MAILET-149 Adding integration tests for Base64 ICS attachments

2017-01-23 Thread btellier
MAILET-149 Adding integration tests for Base64 ICS attachments


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f1955243
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f1955243
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f1955243

Branch: refs/heads/master
Commit: f19552431b9c751f3c1342f79cefd51d53d4ae6c
Parents: 03c8f69
Author: Benoit Tellier 
Authored: Fri Jan 20 11:05:15 2017 +0700
Committer: Antoine Duprat 
Committed: Mon Jan 23 16:19:24 2017 +0100

--
 .../mailet/base/test/MimeMessageBuilder.java| 16 ++--
 .../mailets/ICSAttachmentWorkflowTest.java  | 89 
 2 files changed, 99 insertions(+), 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/f1955243/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
--
diff --git 
a/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java 
b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
index 1246bf7..40a7e18 100644
--- 
a/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
+++ 
b/mailet/base/src/test/java/org/apache/mailet/base/test/MimeMessageBuilder.java
@@ -21,6 +21,7 @@ package org.apache.mailet.base.test;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Properties;
@@ -136,21 +137,20 @@ public class MimeMessageBuilder {
 }
 
 public BodyPart build() throws IOException, MessagingException {
-Preconditions.checkState(dataAsString.isPresent() ^ 
dataAsBytes.isPresent(), "one and only one of data as string or data as bytes 
should be specified");
+Preconditions.checkState(!(dataAsString.isPresent() && 
dataAsBytes.isPresent()), "Can not specify data as bytes and data as string at 
the same time");
 MimeBodyPart bodyPart = new MimeBodyPart();
-if (dataAsString.isPresent()) {
+if (dataAsBytes.isPresent()) {
 bodyPart.setDataHandler(
 new DataHandler(
 new ByteArrayDataSource(
-dataAsString.or(DEFAULT_VALUE),
+dataAsBytes.get(),
 type.or(DEFAULT_TEXT_PLAIN_UTF8_TYPE))
 ));
-}
-if (dataAsBytes.isPresent()) {
+} else {
 bodyPart.setDataHandler(
 new DataHandler(
 new ByteArrayDataSource(
-dataAsBytes.get(),
+dataAsString.or(DEFAULT_VALUE),
 type.or(DEFAULT_TEXT_PLAIN_UTF8_TYPE))
 ));
 }
@@ -198,6 +198,10 @@ public class MimeMessageBuilder {
 return new BodyPartBuilder();
 }
 
+public static BodyPart bodyPartFromBytes(byte[] bytes) throws 
MessagingException {
+return new MimeBodyPart(new ByteArrayInputStream(bytes));
+}
+
 private Optional text = Optional.absent();
 private Optional subject = Optional.absent();
 private Optional sender = Optional.absent();

http://git-wip-us.apache.org/repos/asf/james-project/blob/f1955243/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
--
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
index 2a6ffe1..376f5fe 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -201,6 +201,35 @@ public class ICSAttachmentWorkflowTest {
 "END:VEVENT\n" +
 "END:VCALENDAR\n";
 
+private static final String ICS_BASE64 = "Content-Type: 
application/ics;\n" +
+" name=\"invite.ics\"\n" +
+"Content-Transfer-Encoding: base64\n" +
+"Content-Disposition: attachment;\n" +
+" filename=\"invite.ics\"\n" +
+"\n" +
+
"QkVHSU46VkNBTEVOREFSDQpQUk9ESUQ6LS8vR29vZ2xlIEluYy8vR29vZ2xlIENhbGVuZGFy\n" +
+
"IDcwLjkwNTQvL0VODQpWRVJTSU9OOjIuMA0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6\n" +
+

[09/10] james-project git commit: MAILET-149 Integration test for multiple out of order ICS publish when several attachments

2017-01-23 Thread btellier
MAILET-149 Integration test for multiple out of order ICS publish when several 
attachments


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d0b61696
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d0b61696
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d0b61696

Branch: refs/heads/master
Commit: d0b6169635417f66c7495e12f6e857955288edb5
Parents: 229c4d3
Author: Benoit Tellier 
Authored: Fri Jan 20 15:03:33 2017 +0700
Committer: Antoine Duprat 
Committed: Mon Jan 23 16:19:25 2017 +0100

--
 .../mailets/ICSAttachmentWorkflowTest.java  | 86 ++--
 1 file changed, 63 insertions(+), 23 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/d0b61696/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
--
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
index 376f5fe..9302fe7 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -47,6 +47,7 @@ import org.junit.rules.RuleChain;
 import org.junit.rules.TemporaryFolder;
 
 import com.google.common.base.Charsets;
+import com.google.common.collect.ImmutableList;
 import com.jayway.awaitility.Awaitility;
 import com.jayway.awaitility.Duration;
 import com.jayway.awaitility.core.ConditionFactory;
@@ -243,6 +244,7 @@ public class ICSAttachmentWorkflowTest {
 private MimeMessage messageWithoutICSAttached;
 private MimeMessage messageWithICSAttached;
 private MimeMessage messageWithICSBase64Attached;
+private MimeMessage messageWithThreeICSAttached;
 
 @Before
 public void setup() throws Exception {
@@ -349,6 +351,29 @@ public class ICSAttachmentWorkflowTest {
 
MimeMessageBuilder.bodyPartFromBytes(ICS_BASE64.getBytes(Charsets.UTF_8)))
 .setSubject("test")
 .build();
+
+messageWithThreeICSAttached = MimeMessageBuilder.mimeMessageBuilder()
+.setMultipartWithBodyParts(
+MimeMessageBuilder.bodyPartBuilder()
+.data("simple text")
+.build(),
+MimeMessageBuilder.bodyPartBuilder()
+.data(ICS_1.getBytes(Charsets.UTF_8))
+.filename("test1.txt")
+.disposition("attachment")
+.build(),
+MimeMessageBuilder.bodyPartBuilder()
+.data(ICS_2.getBytes(Charsets.UTF_8))
+.filename("test2.txt")
+.disposition("attachment")
+.build(),
+MimeMessageBuilder.bodyPartBuilder()
+.data(ICS_3.getBytes(Charsets.UTF_8))
+.filename("test3.txt")
+.disposition("attachment")
+.build())
+.setSubject("test")
+.build();
 }
 
 @After
@@ -507,29 +532,6 @@ public class ICSAttachmentWorkflowTest {
 
 @Test
 public void 
headersShouldBeFilledOnlyWithOneICalAttachmentWhenMailHasSeveral() throws 
Exception {
-MimeMessage messageWithThreeICSAttached = 
MimeMessageBuilder.mimeMessageBuilder()
-.setMultipartWithBodyParts(
-MimeMessageBuilder.bodyPartBuilder()
-.data("simple text")
-.build(),
-MimeMessageBuilder.bodyPartBuilder()
-.data(ICS_1.getBytes(Charsets.UTF_8))
-.filename("test1.txt")
-.disposition("attachment")
-.build(),
-MimeMessageBuilder.bodyPartBuilder()
-.data(ICS_2.getBytes(Charsets.UTF_8))
-.filename("test2.txt")
-.disposition("attachment")
-.build(),
-MimeMessageBuilder.bodyPartBuilder()
-.data(ICS_3.getBytes(Charsets.UTF_8))
-.filename("test3.txt")
-.disposition("attachment")
-.build())
-.setSubject("test")
-.build();
-
 Mail mail = FakeMail.builder()
   .mimeMessage(messageWithThreeICSAttached)
   .sender(new MailAddress(FROM))
@@ -551,4 +553,42 @@ public class 

[05/10] james-project git commit: MAILET-149 Introduce ICS mailets workflow tests

2017-01-23 Thread btellier
MAILET-149 Introduce ICS mailets workflow tests


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/28eedd5d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/28eedd5d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/28eedd5d

Branch: refs/heads/master
Commit: 28eedd5d7f48f5b2b9c721349c7f8e90e42c5c9e
Parents: 4a59c1b
Author: Antoine Duprat 
Authored: Tue Jan 17 10:14:50 2017 +0100
Committer: Antoine Duprat 
Committed: Mon Jan 23 16:19:24 2017 +0100

--
 server/mailet/integration-testing/pom.xml   |  10 +
 .../james/mailets/utils/IMAPMessageReader.java  |  10 +-
 .../mailets/ICSAttachmentWorkflowTest.java  | 550 +++
 3 files changed, 569 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/28eedd5d/server/mailet/integration-testing/pom.xml
--
diff --git a/server/mailet/integration-testing/pom.xml 
b/server/mailet/integration-testing/pom.xml
index 7395aa7..31eb20c 100644
--- a/server/mailet/integration-testing/pom.xml
+++ b/server/mailet/integration-testing/pom.xml
@@ -161,6 +161,11 @@
   
   
   org.apache.james
+  apache-mailet-icalendar
+  ${project.version}
+  
+  
+  org.apache.james
   james-server-data-memory
   
   
@@ -194,6 +199,11 @@
   test
   
   
+  com.jayway.jsonpath
+  json-path
+  test
+  
+  
   com.rabbitmq
   amqp-client
   test

http://git-wip-us.apache.org/repos/asf/james-project/blob/28eedd5d/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/utils/IMAPMessageReader.java
--
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/utils/IMAPMessageReader.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/utils/IMAPMessageReader.java
index 17c7afd..931df1a 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/utils/IMAPMessageReader.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/mailets/utils/IMAPMessageReader.java
@@ -54,9 +54,17 @@ public class IMAPMessageReader implements Closeable {
 }
 
 public String readFirstMessageInInbox(String user, String password) throws 
IOException {
+return readFirstMessageInInbox(user, password, "(BODY[])");
+}
+
+public String readFirstMessageHeadersInInbox(String user, String password) 
throws IOException {
+return readFirstMessageInInbox(user, password, "(RFC822.HEADER)");
+}
+
+private String readFirstMessageInInbox(String user, String password, 
String parameters) throws IOException {
 imapClient.login(user, password);
 imapClient.select("INBOX");
-imapClient.fetch("1:1", "(BODY[])");
+imapClient.fetch("1:1", parameters);
 return imapClient.getReplyString();
 }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/28eedd5d/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
--
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
new file mode 100644
index 000..51a23e2
--- /dev/null
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -0,0 +1,550 @@
+/
+ * 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,   *

[07/10] james-project git commit: MAILET-149 Solving ICS ordering issue

2017-01-23 Thread btellier
MAILET-149 Solving ICS ordering issue


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/03c8f69b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/03c8f69b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/03c8f69b

Branch: refs/heads/master
Commit: 03c8f69b209b2a0267bf390cb2ecd3e70c13c1d9
Parents: b1b4631
Author: Benoit Tellier 
Authored: Fri Jan 20 10:33:23 2017 +0700
Committer: Antoine Duprat 
Committed: Mon Jan 23 16:19:24 2017 +0100

--
 .../transport/mailets/ICSAttachmentWorkflowTest.java | 11 ---
 1 file changed, 4 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/03c8f69b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
--
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
index a6b03e5..2a6ffe1 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
@@ -41,7 +41,6 @@ import org.apache.mailet.base.test.FakeMail;
 import org.apache.mailet.base.test.MimeMessageBuilder;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
@@ -417,7 +416,6 @@ public class ICSAttachmentWorkflowTest {
 }
 }
 
-@Ignore("See JIRA issue MAILET-151")
 @Test
 public void 
headersShouldBeFilledOnlyWithOneICalAttachmentWhenMailHasSeveral() throws 
Exception {
 MimeMessage messageWithThreeICSAttached = 
MimeMessageBuilder.mimeMessageBuilder()
@@ -427,17 +425,17 @@ public class ICSAttachmentWorkflowTest {
 .build(),
 MimeMessageBuilder.bodyPartBuilder()
 .data(ICS_1.getBytes(Charsets.UTF_8))
-.filename("test.txt")
+.filename("test1.txt")
 .disposition("attachment")
 .build(),
 MimeMessageBuilder.bodyPartBuilder()
 .data(ICS_2.getBytes(Charsets.UTF_8))
-.filename("test.txt")
+.filename("test2.txt")
 .disposition("attachment")
 .build(),
 MimeMessageBuilder.bodyPartBuilder()
 .data(ICS_3.getBytes(Charsets.UTF_8))
-.filename("test.txt")
+.filename("test3.txt")
 .disposition("attachment")
 .build())
 .setSubject("test")
@@ -456,8 +454,7 @@ public class ICSAttachmentWorkflowTest {
 calmlyAwait.atMost(Duration.ONE_MINUTE).until(() -> 
imapMessageReader.userReceivedMessage(RECIPIENT, PASSWORD));
 
 String receivedHeaders = 
imapMessageReader.readFirstMessageHeadersInInbox(RECIPIENT, PASSWORD);
-
-//Here only the third ICal attachment is used to fill headers
+
 assertThat(receivedHeaders).contains("X-MEETING-UID: " + ICS_UID);
 assertThat(receivedHeaders).contains("X-MEETING-METHOD: " + 
ICS_METHOD);
 assertThat(receivedHeaders).contains("X-MEETING-SEQUENCE: " + 
ICS_SEQUENCE);


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



[10/10] james-project git commit: MAILET-149 Filename should be generated when none

2017-01-23 Thread btellier
MAILET-149 Filename should be generated when none


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/84ed5a28
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/84ed5a28
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/84ed5a28

Branch: refs/heads/master
Commit: 84ed5a28a266ec9102fc90896c52f62f10abf0db
Parents: d0b6169
Author: Antoine Duprat 
Authored: Mon Jan 23 10:09:37 2017 +0100
Committer: Antoine Duprat 
Committed: Mon Jan 23 16:19:26 2017 +0100

--
 .../transport/mailets/StripAttachment.java  |  6 +--
 .../transport/mailets/StripAttachmentTest.java  | 52 ++--
 .../mailets/AmqpForwardAttachmentTest.java  |  2 +-
 3 files changed, 51 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/84ed5a28/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
--
diff --git 
a/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
 
b/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
index 4bf7a5c..58b7304 100644
--- 
a/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
+++ 
b/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
@@ -31,6 +31,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.UUID;
 import java.util.regex.Pattern;
 
 import javax.mail.BodyPart;
@@ -310,9 +311,6 @@ public class StripAttachment extends GenericMailet {
 
 private boolean shouldBeRemoved(BodyPart bodyPart, Mail mail) throws 
MessagingException, Exception {
 String fileName = getFilename(bodyPart);
-if (fileName == null) {
-return false;
-}
 
 boolean shouldRemove = removeAttachments.equals(REMOVE_ALL);
 String decodedName = DecoderUtil.decodeEncodedWords(fileName, 
DecodeMonitor.SILENT);
@@ -379,7 +377,7 @@ public class StripAttachment extends GenericMailet {
 if (fileName != null) {
 return renameWithConfigurationPattern(decodeFilename(fileName));
 }
-return fileName;
+return UUID.randomUUID().toString();
 }
 
 private String renameWithConfigurationPattern(String fileName) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/84ed5a28/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
--
diff --git 
a/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
 
b/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
index 0c481c9..5995f98 100644
--- 
a/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
+++ 
b/mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
@@ -55,6 +55,8 @@ import org.junit.rules.TemporaryFolder;
 
 import com.google.common.base.Charsets;
 import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
 
 public class StripAttachmentTest {
 
@@ -217,7 +219,7 @@ public class StripAttachmentTest {
 MimeMessageBuilder.bodyPartBuilder()
 .data("simple text")
 .build(),
-createAttachmentBodyPart(expectedAttachmentContent, 
"temp.tmp", TEXT_HEADERS),
+createAttachmentBodyPart(expectedAttachmentContent, 
"temp_filname.tmp", TEXT_HEADERS),
 createAttachmentBodyPart("\u0014\u00A3\u00E1\u00E2\u00E4", 
"winmail.dat", TEXT_HEADERS))
 .build();
 
@@ -230,13 +232,26 @@ public class StripAttachmentTest {
 @SuppressWarnings("unchecked")
 Collection savedAttachments = (Collection) 
mail.getAttribute(StripAttachment.SAVED_ATTACHMENTS_ATTRIBUTE_KEY);
 assertThat(savedAttachments).isNotNull();
-assertThat(savedAttachments).hasSize(1);
-
-String attachmentFilename = savedAttachments.iterator().next();
+assertThat(savedAttachments).hasSize(2);
 
+String attachmentFilename = 
retrieveFilenameStartingWith(savedAttachments, "temp_filname");
+assertThat(attachmentFilename).isNotNull();
 assertThat(new File(folderPath + 
attachmentFilename)).hasContent(expectedAttachmentContent);
 }
 
+private String retrieveFilenameStartingWith(Collection 
savedAttachments, final String filename) {
+return FluentIterable.from(savedAttachments)
+.filter(new 

[01/10] james-project git commit: Fix Eclipse Neon.2 compilation error in lambdas

2017-01-23 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master fabccf51c -> 84ed5a28a


Fix Eclipse Neon.2 compilation error in lambdas


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/35b7fe34
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/35b7fe34
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/35b7fe34

Branch: refs/heads/master
Commit: 35b7fe34173f417a96acaaf377ce34d6e686b5fc
Parents: fabccf5
Author: Antoine Duprat 
Authored: Thu Jan 19 10:23:49 2017 +0100
Committer: Antoine Duprat 
Committed: Mon Jan 23 09:58:23 2017 +0100

--
 .../james/mailbox/cassandra/mail/CassandraMessageIdMapper.java | 2 +-
 .../james/mailbox/cassandra/mail/CassandraMessageMapper.java   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/35b7fe34/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
index 31fc26a..b4e0474 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
@@ -289,7 +289,7 @@ public class CassandraMessageIdMapper implements 
MessageIdMapper {
 return imapUidDAO.updateMetadata(newComposedId, 
oldComposedId.getModSeq())
 .thenCompose(updateSuccess -> Optional.of(updateSuccess)
 .filter(b -> b)
-.map(any -> 
messageIdDAO.updateMetadata(newComposedId).thenApply(v -> updateSuccess))
+.map((Boolean any) -> 
messageIdDAO.updateMetadata(newComposedId).thenApply(v -> updateSuccess))
 .orElse(CompletableFuture.completedFuture(updateSuccess)))
 .thenApply(success -> Optional.of(success)
 .filter(b -> b)

http://git-wip-us.apache.org/repos/asf/james-project/blob/35b7fe34/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index 339f9ab..79763ee 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -325,7 +325,7 @@ public class CassandraMessageMapper implements 
MessageMapper {
 return imapUidDAO.updateMetadata(composedMessageIdWithMetaData, 
oldModSeq)
 .thenCompose(success -> Optional.of(success)
 .filter(b -> b)
-.map(any -> 
messageIdDAO.updateMetadata(composedMessageIdWithMetaData)
+.map((Boolean any) -> 
messageIdDAO.updateMetadata(composedMessageIdWithMetaData)
 .thenApply(v -> success))
 .orElse(CompletableFuture.completedFuture(success)))
 .join();


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



james-project git commit: MAILET-149 Avoid build failures on rat plugin

2017-01-24 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 339880196 -> dc90ccda5


MAILET-149 Avoid build failures on rat plugin


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/dc90ccda
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/dc90ccda
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/dc90ccda

Branch: refs/heads/master
Commit: dc90ccda5182d2f8765e1f28a858fdf1bac374b3
Parents: 3398801
Author: Benoit Tellier 
Authored: Tue Jan 24 11:01:57 2017 +0700
Committer: Benoit Tellier 
Committed: Tue Jan 24 15:50:28 2017 +0700

--
 mailet/pom.xml | 1 +
 1 file changed, 1 insertion(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/dc90ccda/mailet/pom.xml
--
diff --git a/mailet/pom.xml b/mailet/pom.xml
index a9fcced..23b39cf 100644
--- a/mailet/pom.xml
+++ b/mailet/pom.xml
@@ -281,6 +281,7 @@
 **/target/**
 **/*.iml
 **/*.ics
+**/*.mime
 src/site/**
 
 


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



[12/15] james-project git commit: JAMES-1785 Improve SetMessagesMethodTest.java with indents

2017-01-23 Thread btellier
http://git-wip-us.apache.org/repos/asf/james-project/blob/91e352e4/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 587dec3..caf57a2 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -144,20 +144,20 @@ public abstract class SetMessagesMethodTest {
 
 private String getMailboxId(AccessToken accessToken, Role role) {
 return getAllMailboxesIds(accessToken).stream()
-.filter(x -> x.get("role").equals(role.serialize()))
-.map(x -> x.get("id"))
-.findFirst().get();
+.filter(x -> x.get("role").equals(role.serialize()))
+.map(x -> x.get("id"))
+.findFirst().get();
 }
 
 private List> getAllMailboxesIds(AccessToken 
accessToken) {
 return with()
-.header("Authorization", accessToken.serialize())
-.body("[[\"getMailboxes\", {\"properties\": [\"role\", 
\"id\"]}, \"#0\"]]")
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMailboxes\", {\"properties\": [\"role\", \"id\"]}, 
\"#0\"]]")
 .post("/jmap")
-.andReturn()
-.body()
-.jsonPath()
-.getList(ARGUMENTS + ".list");
+.andReturn()
+.body()
+.jsonPath()
+.getList(ARGUMENTS + ".list");
 }
 
 @Test
@@ -203,9 +203,9 @@ public abstract class SetMessagesMethodTest {
 .body(NAME, equalTo("messagesSet"))
 .body(ARGUMENTS + ".destroyed", empty())
 .body(ARGUMENTS + ".notDestroyed", 
hasEntry(equalTo(unknownMailboxMessageId), Matchers.allOf(
-hasEntry("type", "notFound"),
-hasEntry("description", "The message " + 
unknownMailboxMessageId + " can't be found"),
-hasEntry(equalTo("properties"), isEmptyOrNullString(
+hasEntry("type", "notFound"),
+hasEntry("description", "The message " + 
unknownMailboxMessageId + " can't be found"),
+hasEntry(equalTo("properties"), isEmptyOrNullString(
 );
 }
 
@@ -225,9 +225,9 @@ public abstract class SetMessagesMethodTest {
 .body(NAME, equalTo("messagesSet"))
 .body(ARGUMENTS + ".destroyed", empty())
 .body(ARGUMENTS + ".notDestroyed", hasEntry(equalTo(messageId), 
Matchers.allOf(
-hasEntry("type", "notFound"),
-hasEntry("description", "The message " + messageId + " 
can't be found"),
-hasEntry(equalTo("properties"), isEmptyOrNullString(
+hasEntry("type", "notFound"),
+hasEntry("description", "The message " + messageId + " can't 
be found"),
+hasEntry(equalTo("properties"), isEmptyOrNullString(
 );
 }
 
@@ -237,7 +237,7 @@ public abstract class SetMessagesMethodTest {
 
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
USERNAME, "mailbox");
 
 ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(USERNAME, USER_MAILBOX,
-new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), new Date(), false, new 
Flags());
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), new Date(), false, new 
Flags());
 await();
 
 given()
@@ -260,7 +260,7 @@ public abstract class SetMessagesMethodTest {
 
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
USERNAME, "mailbox");
 
 ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(USERNAME, USER_MAILBOX,
-new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), new Date(), false, new 
Flags());
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), new Date(), false, new 
Flags());
 await();
 
 // When
@@ -291,22 +291,22 @@ public abstract class SetMessagesMethodTest {
 
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 

[11/15] james-project git commit: JAMES-1785 Update message documentation

2017-01-23 Thread btellier
JAMES-1785 Update message documentation


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/33988019
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/33988019
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/33988019

Branch: refs/heads/master
Commit: 3398801964cebc727eac423b5ed64df6f73a0951
Parents: 91e352e
Author: Quynh Nguyen 
Authored: Thu Jan 19 12:56:11 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:58:20 2017 +0700

--
 server/protocols/jmap/doc/specs/spec/message.mdwn | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/33988019/server/protocols/jmap/doc/specs/spec/message.mdwn
--
diff --git a/server/protocols/jmap/doc/specs/spec/message.mdwn 
b/server/protocols/jmap/doc/specs/spec/message.mdwn
index ab144cb..debcd8a 100644
--- a/server/protocols/jmap/doc/specs/spec/message.mdwn
+++ b/server/protocols/jmap/doc/specs/spec/message.mdwn
@@ -247,7 +247,6 @@ The *setMessages* method encompasses:
 - Changing the flags of a message (unread/flagged status)
 
 - Adding/removing a message to/from mailboxes (moving a message)
-Not implemented
 - Deleting messages
 
 It takes the following arguments:
@@ -328,6 +327,7 @@ If any of the properties in the update are invalid 
(immutable and different to t
 If the *id* given does not correspond to a Message in the given account, 
reject the update with a `notFound` error.
 
 To **delete a message** to trash, simply change the `mailboxIds` property so 
it is now in the mailbox with `role == "trash"`. If the mailbox has the 
property `mustBeOnlyMailbox == true`, it must be removed from all other 
mailboxes. Otherwise, leave it in those mailboxes so that it will be restored 
to its previous state if undeleted.
+Not implemented
 
  Sending messages
 


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



[15/15] james-project git commit: JAMES-1785 GetMessages with multiple mailboxes integration tests

2017-01-23 Thread btellier
JAMES-1785 GetMessages with multiple mailboxes integration tests

Also includes builder enhancements


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9875a46b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9875a46b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9875a46b

Branch: refs/heads/master
Commit: 9875a46b7920371a9103eeb60306f3d54563d154
Parents: bd6bd22
Author: Benoit Tellier 
Authored: Wed Jan 18 10:25:04 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:58:20 2017 +0700

--
 .../org/apache/james/utils/JmapGuiceProbe.java  | 23 ++-
 .../cucumber/GetMessagesMethodStepdefs.java | 31 
 .../test/resources/cucumber/GetMessages.feature |  9 ++
 .../james/jmap/methods/GetMessagesMethod.java   |  1 +
 .../org/apache/james/jmap/model/Message.java|  8 +++--
 .../apache/james/jmap/model/MessageFactory.java | 11 +++
 .../james/jmap/model/MessageFactoryTest.java|  2 +-
 .../apache/james/jmap/model/MessageTest.java| 24 +++
 .../jmap/model/SetMessagesResponseTest.java |  4 +--
 9 files changed, 89 insertions(+), 24 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
--
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
index cf6..05e1646 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/utils/JmapGuiceProbe.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.utils;
 
+import java.util.Arrays;
+
 import javax.inject.Inject;
 
 import org.apache.james.jmap.JMAPServer;
@@ -26,16 +28,30 @@ import org.apache.james.jmap.api.vacation.AccountId;
 import org.apache.james.jmap.api.vacation.Vacation;
 import org.apache.james.jmap.api.vacation.VacationPatch;
 import org.apache.james.jmap.api.vacation.VacationRepository;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageIdManager;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MessageId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class JmapGuiceProbe implements GuiceProbe {
 
+private static final Logger LOGGER = 
LoggerFactory.getLogger(JmapGuiceProbe.class);
+
 private final VacationRepository vacationRepository;
 private final JMAPServer jmapServer;
+private final MessageIdManager messageIdManager;
+private final MailboxManager mailboxManager;
 
 @Inject
-private JmapGuiceProbe(VacationRepository vacationRepository, JMAPServer 
jmapServer) {
+private JmapGuiceProbe(VacationRepository vacationRepository, JMAPServer 
jmapServer, MessageIdManager messageIdManager, MailboxManager mailboxManager) {
 this.vacationRepository = vacationRepository;
 this.jmapServer = jmapServer;
+this.messageIdManager = messageIdManager;
+this.mailboxManager = mailboxManager;
 }
 
 public int getJmapPort() {
@@ -49,4 +65,9 @@ public class JmapGuiceProbe implements GuiceProbe {
 public Vacation retrieveVacation(AccountId accountId) {
 return vacationRepository.retrieveVacation(accountId).join();
 }
+
+public void setInMailboxes(MessageId messageId, String username, 
MailboxId... mailboxIds) throws MailboxException {
+MailboxSession mailboxSession = 
mailboxManager.createSystemSession(username, LOGGER);
+messageIdManager.setInMailboxes(messageId, Arrays.asList(mailboxIds), 
mailboxSession);
+}
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9875a46b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/cucumber/GetMessagesMethodStepdefs.java
index 26b1e29..85c38d8 100644
--- 

[01/15] james-project git commit: JAMES-1785 Improve constants in SetMessagesMethodTest

2017-01-23 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 8813d2e57 -> 339880196


JAMES-1785 Improve constants in SetMessagesMethodTest


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f96b6d2b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f96b6d2b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f96b6d2b

Branch: refs/heads/master
Commit: f96b6d2b5697d3ca862f5bc0c4cef34f11a105e0
Parents: 8813d2e
Author: Benoit Tellier 
Authored: Tue Jan 17 14:07:23 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:41:40 2017 +0700

--
 .../integration/SetMessagesMethodTest.java  | 194 +--
 1 file changed, 97 insertions(+), 97 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/f96b6d2b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 1cbfa7a..4eec224 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -88,6 +88,8 @@ public abstract class SetMessagesMethodTest {
 private static final String SECOND_NAME = "[1][0]";
 private static final String SECOND_ARGUMENTS = "[1][1]";
 private static final String USERS_DOMAIN = "domain.tld";
+private static final String USERNAME = "username@" + USERS_DOMAIN;
+public static final MailboxPath USER_MAILBOX = new 
MailboxPath(MailboxConstants.USER_NAMESPACE, USERNAME, "mailbox");
 private static final String NOT_UPDATED = ARGUMENTS + ".notUpdated";
 
 private ConditionFactory calmlyAwait;
@@ -99,7 +101,6 @@ public abstract class SetMessagesMethodTest {
 protected abstract void await();
 
 private AccessToken accessToken;
-private String username;
 private JmapJamesServer jmapServer;
 
 @Before
@@ -115,14 +116,13 @@ public abstract class SetMessagesMethodTest {
 .build();
 RestAssured.enableLoggingOfRequestAndResponseIfValidationFails();
 
-username = "username@" + USERS_DOMAIN;
 String password = "password";
 jmapServer.serverProbe().addDomain(USERS_DOMAIN);
-jmapServer.serverProbe().addUser(username, password);
-jmapServer.serverProbe().createMailbox("#private", username, "inbox");
-accessToken = JmapAuthentication.authenticateJamesUser(username, 
password);
+jmapServer.serverProbe().addUser(USERNAME, password);
+jmapServer.serverProbe().createMailbox("#private", USERNAME, "inbox");
+accessToken = JmapAuthentication.authenticateJamesUser(USERNAME, 
password);
 
-
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "outbox");
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
USERNAME, "outbox");
 await();
 
 Duration slowPacedPollInterval = Duration.FIVE_HUNDRED_MILLISECONDS;
@@ -207,7 +207,7 @@ public abstract class SetMessagesMethodTest {
 
 @Test
 public void setMessagesShouldReturnNotDestroyedWhenNoMatchingMessage() 
throws Exception {
-
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
USERNAME, "mailbox");
 
 String messageId = randomMessageId().serialize();
 given()
@@ -230,9 +230,9 @@ public abstract class SetMessagesMethodTest {
 @Test
 public void setMessagesShouldReturnDestroyedWhenMatchingMessage() throws 
Exception {
 // Given
-
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
USERNAME, "mailbox");
 
-ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(USERNAME, USER_MAILBOX,
 new 

[03/15] james-project git commit: JAMES-1785 Using SystemMailboxesProvider to look up role and remove the redundance code

2017-01-23 Thread btellier
JAMES-1785 Using SystemMailboxesProvider to look up role and remove the 
redundance code


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1acd459a
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1acd459a
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1acd459a

Branch: refs/heads/master
Commit: 1acd459ab233aa41a40cfd2985c5753b516cb452
Parents: c996365
Author: Quynh Nguyen 
Authored: Thu Jan 19 17:46:58 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:45:34 2017 +0700

--
 .../james/jmap/send/PostDequeueDecorator.java   | 38 +++-
 .../jmap/send/PostDequeueDecoratorFactory.java  | 10 +++---
 .../jmap/utils/SystemMailboxesProvider.java |  6 
 .../jmap/utils/SystemMailboxesProviderImpl.java |  3 +-
 .../SetMessagesCreationProcessorTest.java   |  1 +
 .../jmap/send/PostDequeueDecoratorTest.java |  3 +-
 6 files changed, 29 insertions(+), 32 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/1acd459a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
index 9179b7e..8a122db 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/send/PostDequeueDecorator.java
@@ -24,15 +24,13 @@ import java.util.List;
 import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
 import org.apache.james.jmap.model.mailbox.Role;
 import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException;
+import org.apache.james.jmap.utils.SystemMailboxesProvider;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.FetchGroupImpl;
 import org.apache.james.mailbox.model.MailboxId;
-import org.apache.james.mailbox.model.MailboxMetaData;
-import org.apache.james.mailbox.model.MailboxPath;
-import org.apache.james.mailbox.model.MailboxQuery;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.model.MessageResult;
@@ -51,15 +49,18 @@ public class PostDequeueDecorator extends 
MailQueueItemDecorator {
 private final MailboxManager mailboxManager;
 private final Factory messageIdFactory;
 private final MessageIdManager messageIdManager;
+private final SystemMailboxesProvider systemMailboxesProvider;
 
 public PostDequeueDecorator(MailQueueItem mailQueueItem,
-MailboxManager mailboxManager,
-MessageId.Factory messageIdFactory,
-MessageIdManager messageIdManager) {
+MailboxManager mailboxManager,
+Factory messageIdFactory,
+MessageIdManager messageIdManager,
+SystemMailboxesProvider 
systemMailboxesProvider) {
 super(mailQueueItem);
 this.mailboxManager = mailboxManager;
 this.messageIdFactory = messageIdFactory;
 this.messageIdManager = messageIdManager;
+this.systemMailboxesProvider = systemMailboxesProvider;
 }
 
 @Override
@@ -95,7 +96,7 @@ public class PostDequeueDecorator extends 
MailQueueItemDecorator {
 try {
 messageIdFactory.fromString((String) messageId);
 } catch (Exception e) {
-LOG.error("Invalid messageId: " + (String) messageId);
+LOG.error("Invalid messageId: " + messageId);
 return false;
 }
 return true;
@@ -123,28 +124,13 @@ public class PostDequeueDecorator extends 
MailQueueItemDecorator {
 }
 
 private MailboxId getSentMailboxId(MailboxSession session) throws 
MailboxRoleNotFoundException, MailboxException {
-return getMailboxIdForRole(Role.SENT, session);
+return systemMailboxesProvider.findMailbox(Role.SENT, session)
+.getId();
 }
 
 private MailboxId getOutboxMailboxId(MailboxSession session) throws 
MailboxRoleNotFoundException, MailboxException {
-return getMailboxIdForRole(Role.OUTBOX, session);
+return systemMailboxesProvider.findMailbox(Role.OUTBOX, session)
+.getId();
 }
 
-private MailboxId getMailboxIdForRole(Role role, MailboxSession session) 
throws 

[08/15] james-project git commit: JAMES-1785 Adding integration tests for inMailboxes

2017-01-23 Thread btellier
JAMES-1785 Adding integration tests for inMailboxes


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/17a1cb86
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/17a1cb86
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/17a1cb86

Branch: refs/heads/master
Commit: 17a1cb861427138defa47d2078141e6b5cbabcb4
Parents: b0e8e3e
Author: Quynh Nguyen 
Authored: Thu Jan 19 12:02:41 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:58:14 2017 +0700

--
 .../integration/SetMessagesMethodTest.java  | 375 +--
 .../methods/SetMessagesUpdateProcessor.java |   9 +-
 2 files changed, 350 insertions(+), 34 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/17a1cb86/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 93b7a50..587dec3 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -24,7 +24,9 @@ import static com.jayway.restassured.RestAssured.with;
 import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
 import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.notIn;
 import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.endsWith;
 import static org.hamcrest.Matchers.equalTo;
@@ -1641,7 +1643,37 @@ public abstract class SetMessagesMethodTest {
 }
 
 @Test
-public void movingShouldBeSupported() throws Exception {
+public void mailboxIdsShouldReturnUpdatedWhenNoChange() throws Exception {
+ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
+ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(USERNAME, new MailboxPath("#private", 
USERNAME, "inbox"),
+new ByteArrayInputStream("Subject: my test 
subject\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), 
Date.from(dateTime.toInstant()), false, new Flags());
+
+String messageToMoveId = message.getMessageId().serialize();
+String mailboxId = message.getMailboxId().serialize();
+String requestBody = "[" +
+"  [" +
+"\"setMessages\","+
+"{" +
+"  \"update\": { \"" + messageToMoveId + "\" : {" +
+"\"mailboxIds\": [\"" + mailboxId + "\"]" +
+"  }}" +
+"}," +
+"\"#0\"" +
+"  ]" +
+"]";
+
+given()
+.header("Authorization", accessToken.serialize())
+.body(requestBody)
+.when()
+.post("/jmap")
+.then()
+.log().ifValidationFails()
+.spec(getSetMessagesUpdateOKResponseAssertions(messageToMoveId));
+}
+
+@Test
+public void mailboxIdsShouldBeInDestinationWhenUsingForMove() throws 
Exception {
 String newMailboxName = "heartFolder";
 jmapServer.serverProbe().createMailbox("#private", USERNAME, 
newMailboxName);
 Mailbox heartFolder = jmapServer.serverProbe().getMailbox("#private", 
USERNAME, newMailboxName);
@@ -1649,54 +1681,105 @@ public abstract class SetMessagesMethodTest {
 
 ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
 ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(USERNAME, new MailboxPath("#private", 
USERNAME, "inbox"),
-new ByteArrayInputStream("Subject: my test 
subject\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), 
Date.from(dateTime.toInstant()), false, new Flags());
+new ByteArrayInputStream("Subject: my test 
subject\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), 
Date.from(dateTime.toInstant()), false, new Flags());
 
 String messageToMoveId = message.getMessageId().serialize();
 String requestBody = "[" +
- 

[10/15] james-project git commit: JAMES-1785 Improve UpdateMessagePatchValidator

2017-01-23 Thread btellier
JAMES-1785 Improve UpdateMessagePatchValidator


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d409d2b2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d409d2b2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d409d2b2

Branch: refs/heads/master
Commit: d409d2b2c7285a0737a5c63e52f0c4da747ce1ed
Parents: 17a1cb8
Author: Quynh Nguyen 
Authored: Thu Jan 19 10:42:29 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:58:20 2017 +0700

--
 .../james/jmap/methods/UpdateMessagePatchValidator.java   | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/d409d2b2/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/UpdateMessagePatchValidator.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/UpdateMessagePatchValidator.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/UpdateMessagePatchValidator.java
index 963c074..fc77821 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/UpdateMessagePatchValidator.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/UpdateMessagePatchValidator.java
@@ -50,20 +50,19 @@ public class UpdateMessagePatchValidator implements 
Validator {
 
 @Override
 public Set validate(ObjectNode json) {
-ImmutableSet compilation = ImmutableSet.of();
 try {
 parser.readValue(json.toString(), UpdateMessagePatch.class);
 } catch (JsonMappingException e) {
-compilation = ImmutableSet.of(ValidationResult.builder()
+return ImmutableSet.of(ValidationResult.builder()
 
.property(firstFieldFrom(e.getPath()).orElse(ValidationResult.UNDEFINED_PROPERTY))
 .message(e.getMessage())
 .build());
 } catch (IOException e) {
-compilation = ImmutableSet.of(ValidationResult.builder()
+return ImmutableSet.of(ValidationResult.builder()
 .message(e.getMessage())
 .build());
 }
-return compilation;
+return ImmutableSet.of();
 }
 
 private Optional 
firstFieldFrom(List references) {


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



[13/15] james-project git commit: JAMES-1785 Improve SetMessagesMethodTest.java with indents

2017-01-23 Thread btellier
JAMES-1785 Improve SetMessagesMethodTest.java
with indents


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/91e352e4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/91e352e4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/91e352e4

Branch: refs/heads/master
Commit: 91e352e41c0c325d1a3a624ba069c234253ae383
Parents: d30b24e
Author: Quynh Nguyen 
Authored: Thu Jan 19 12:46:31 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:58:20 2017 +0700

--
 .../integration/SetMessagesMethodTest.java  | 1404 +-
 1 file changed, 702 insertions(+), 702 deletions(-)
--



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



[14/15] james-project git commit: JAMES-1785 Adding tests for GetMessages on message in multiple mailboxes

2017-01-23 Thread btellier
JAMES-1785 Adding tests for GetMessages on message in multiple mailboxes


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bd6bd223
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bd6bd223
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bd6bd223

Branch: refs/heads/master
Commit: bd6bd22379434ca494ea774fad9b70f68d607c37
Parents: d409d2b
Author: Benoit Tellier 
Authored: Wed Jan 18 09:40:07 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:58:20 2017 +0700

--
 .../james/jmap/methods/GetMessagesMethod.java   | 22 +++---
 .../apache/james/jmap/methods/JmapResponse.java |  2 +-
 .../james/jmap/model/GetMessagesResponse.java   |  7 
 .../org/apache/james/jmap/model/Message.java|  7 
 .../apache/james/jmap/model/MessageFactory.java | 26 +++-
 .../jmap/methods/GetMessagesMethodTest.java | 42 
 6 files changed, 90 insertions(+), 16 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/bd6bd223/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
index 15fbceb..41f68ae 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMessagesMethod.java
@@ -39,7 +39,9 @@ import 
org.apache.james.jmap.model.MessageProperties.HeaderProperty;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.model.FetchGroupImpl;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.MessageResult;
 
 import com.fasterxml.jackson.databind.ser.PropertyFilter;
 import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
@@ -104,7 +106,7 @@ public class GetMessagesMethod implements Method {
 }
 
 private GetMessagesResponse getMessagesResponse(MailboxSession 
mailboxSession, GetMessagesRequest getMessagesRequest) {
-
getMessagesRequest.getAccountId().ifPresent(GetMessagesMethod::notImplemented);
+getMessagesRequest.getAccountId().ifPresent((input) -> 
notImplemented());
 
 Function loadMessages = 
loadMessage(mailboxSession);
 Function convertToJmapMessage = 
Throwing.function(messageFactory::fromMetaDataWithContent).sneakyThrow();
@@ -117,18 +119,28 @@ public class GetMessagesMethod implements Method {
 return 
GetMessagesResponse.builder().messages(result).expectedMessageIds(getMessagesRequest.getIds()).build();
 }
 
-private static void notImplemented(String input) {
+private static void notImplemented() {
 throw new NotImplementedException();
 }
 
 private Function 
loadMessage(MailboxSession mailboxSession) {
-ThrowingFunction 
toMetaDataWithContentStream = (MessageId messageId) -> {
-return messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.FULL_CONTENT, mailboxSession)
+ThrowingFunction 
toMetaDataWithContentStream =
+(MessageId messageId) -> {
+ImmutableList messageResults = 
messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.FULL_CONTENT, mailboxSession)
 .stream()
+.collect(Guavate.toImmutableList());
+List mailboxIds = messageResults.stream()
+.map(MessageResult::getMailboxId)
+.collect(Guavate.toImmutableList());
+return messageResults.stream()
+.findFirst()
+.map(Stream::of)
+.orElse(Stream.of())
 
.map(Throwing.function(MetaDataWithContent::builderFromMessageResult).sneakyThrow())
 .map(builder -> builder.messageId(messageId))
+.map(builder -> builder.mailboxIds(mailboxIds))
 .map(MetaDataWithContent.Builder::build);
-};
+};
 return Throwing.function(toMetaDataWithContentStream).sneakyThrow();
 }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/james-project/blob/bd6bd223/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/JmapResponse.java

[02/15] james-project git commit: JAMES-1785 Add more binding for SystemMailboxesProvider

2017-01-23 Thread btellier
JAMES-1785 Add more binding for SystemMailboxesProvider


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c996365e
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c996365e
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c996365e

Branch: refs/heads/master
Commit: c996365e12637ab8c5d13669e8b86b34bc377e6d
Parents: f96b6d2
Author: Quynh Nguyen 
Authored: Wed Jan 18 11:20:14 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:41:41 2017 +0700

--
 .../src/main/java/org/apache/james/jmap/JMAPModule.java | 1 +
 1 file changed, 1 insertion(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/c996365e/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java
--
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java
index af78a3a..7269cb1 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/jmap/JMAPModule.java
@@ -65,6 +65,7 @@ public class JMAPModule extends AbstractModule {
 bind(RequestHandler.class).in(Scopes.SINGLETON);
 bind(UploadHandler.class).in(Scopes.SINGLETON);
 bind(MailboxBasedHtmlTextExtractor.class).in(Scopes.SINGLETON);
+bind(SystemMailboxesProviderImpl.class).in(Scopes.SINGLETON);
 
 bind(HtmlTextExtractor.class).to(MailboxBasedHtmlTextExtractor.class);
 Multibinder.newSetBinder(binder(), 
ConfigurationPerformer.class).addBinding().to(RequiredCapabilitiesPrecondition.class);


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



[07/15] james-project git commit: JAMES-1785 Moving to trash is not yet supported

2017-01-23 Thread btellier
JAMES-1785 Moving to trash is not yet supported


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/52be7f03
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/52be7f03
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/52be7f03

Branch: refs/heads/master
Commit: 52be7f0373ad321574b08985d5b91bafa43e148d
Parents: 89994c3
Author: Benoit Tellier 
Authored: Tue Jan 17 14:41:16 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:46:06 2017 +0700

--
 .../integration/SetMessagesMethodTest.java  | 41 
 1 file changed, 41 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/52be7f03/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 4eec224..3fb43cd 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -123,6 +123,8 @@ public abstract class SetMessagesMethodTest {
 accessToken = JmapAuthentication.authenticateJamesUser(USERNAME, 
password);
 
 
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
USERNAME, "outbox");
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
USERNAME, "trash");
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
USERNAME, "draft");
 await();
 
 Duration slowPacedPollInterval = Duration.FIVE_HUNDRED_MILLISECONDS;
@@ -1677,6 +1679,45 @@ public abstract class SetMessagesMethodTest {
 + "(through reference chain: 
org.apache.james.jmap.model.Builder[\"mailboxIds\"])"))
.body(ARGUMENTS + ".updated", hasSize(0));
 }
+
+@Test
+public void moveToTrashIsNotYetSupported() throws Exception {
+String newMailboxName = "heartFolder";
+jmapServer.serverProbe().createMailbox("#private", USERNAME, 
newMailboxName);
+String trashId = jmapServer.serverProbe().getMailbox("#private", 
USERNAME, "trash").getMailboxId().serialize();
+
+ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
+ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(USERNAME, new MailboxPath("#private", 
USERNAME, "inbox"),
+new ByteArrayInputStream("Subject: my test 
subject\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), 
Date.from(dateTime.toInstant()), false, new Flags());
+
+String messageToMoveId = message.getMessageId().serialize();
+String requestBody = "[" +
+"  [" +
+"\"setMessages\","+
+"{" +
+"  \"update\": { \"" + messageToMoveId + "\" : {" +
+"\"mailboxIds\": [\"" + trashId + "\"]" +
+"  }}" +
+"}," +
+"\"#0\"" +
+"  ]" +
+"]";
+
+given()
+.header("Authorization", accessToken.serialize())
+.body(requestBody)
+.when()
+.post("/jmap")
+.then()
+.log().ifValidationFails()
+.statusCode(200)
+.body(NAME, equalTo("messagesSet"))
+.body(NOT_UPDATED, hasKey(messageToMoveId))
+.body(NOT_UPDATED + "[\""+messageToMoveId+"\"].type", 
equalTo("invalidProperties"))
+.body(NOT_UPDATED + "[\""+messageToMoveId+"\"].properties", 
hasSize(1))
+.body(NOT_UPDATED + "[\""+messageToMoveId+"\"].properties[0]", 
equalTo("inMailboxes"))
+.body(ARGUMENTS + ".updated", hasSize(0));
+}
 
 @Test
 public void 
setMessagesShouldReturnAttachmentsNotFoundWhenBlobIdDoesntExist() throws 
Exception {


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



[06/15] james-project git commit: JAMES-1785 Copying a message to trash is allowed

2017-01-23 Thread btellier
JAMES-1785 Copying a message to trash is allowed


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b0e8e3ed
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b0e8e3ed
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b0e8e3ed

Branch: refs/heads/master
Commit: b0e8e3ed38e2069acecc6fdf81e10e21ea5f87fa
Parents: 52be7f0
Author: Benoit Tellier 
Authored: Tue Jan 17 15:09:33 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:46:06 2017 +0700

--
 .../integration/SetMessagesMethodTest.java  | 44 
 1 file changed, 44 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/b0e8e3ed/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
index 3fb43cd..93b7a50 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java
@@ -1718,6 +1718,50 @@ public abstract class SetMessagesMethodTest {
 .body(NOT_UPDATED + "[\""+messageToMoveId+"\"].properties[0]", 
equalTo("inMailboxes"))
 .body(ARGUMENTS + ".updated", hasSize(0));
 }
+
+@Test
+public void copyToTrashShouldWork() throws Exception {
+String newMailboxName = "heartFolder";
+jmapServer.serverProbe().createMailbox("#private", USERNAME, 
newMailboxName);
+String trashId = jmapServer.serverProbe().getMailbox("#private", 
USERNAME, "trash").getMailboxId().serialize();
+
+ZonedDateTime dateTime = ZonedDateTime.parse("2014-10-30T14:12:00Z");
+ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(USERNAME, new MailboxPath("#private", 
USERNAME, "inbox"),
+new ByteArrayInputStream("Subject: my test 
subject\r\n\r\ntestmail".getBytes(Charsets.UTF_8)), 
Date.from(dateTime.toInstant()), false, new Flags());
+
+String messageToMoveId = message.getMessageId().serialize();
+String mailboxId = message.getMailboxId().serialize();
+String requestBody = "[" +
+"  [" +
+"\"setMessages\","+
+"{" +
+"  \"update\": { \"" + messageToMoveId + "\" : {" +
+"\"mailboxIds\": [\"" + trashId + "," + mailboxId + "\"]" +
+"  }}" +
+"}," +
+"\"#0\"" +
+"  ]" +
+"]";
+
+given()
+.header("Authorization", accessToken.serialize())
+.body(requestBody)
+.when()
+.post("/jmap");
+
+String firstMessage = ARGUMENTS + ".list[0]";
+given()
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMessages\", {\"ids\": [\"" + messageToMoveId + 
"\"]}, \"#0\"]]")
+.when()
+.post("/jmap")
+.then()
+.statusCode(200)
+.log().ifValidationFails()
+.body(NAME, equalTo("messages"))
+.body(ARGUMENTS + ".list", hasSize(1))
+.body(firstMessage + ".mailboxIds", contains(trashId, mailboxId));
+}
 
 @Test
 public void 
setMessagesShouldReturnAttachmentsNotFoundWhenBlobIdDoesntExist() throws 
Exception {


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



[05/15] james-project git commit: JAMES-1785 Implement move feature on JMAP using setInMailboxes

2017-01-23 Thread btellier
JAMES-1785 Implement move feature on JMAP using setInMailboxes


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/89994c30
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/89994c30
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/89994c30

Branch: refs/heads/master
Commit: 89994c30809c7a963938a7a6eebe9b62baa62774
Parents: 54fe9a4
Author: Quynh Nguyen 
Authored: Wed Jan 18 11:29:33 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:46:05 2017 +0700

--
 .../methods/SetMessagesUpdateProcessor.java | 49 ++--
 .../james/jmap/model/UpdateMessagePatch.java| 32 +++--
 .../methods/SetMessagesUpdateProcessorTest.java |  4 +-
 3 files changed, 64 insertions(+), 21 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/89994c30/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
index ba55a8d..f04e180 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMessagesUpdateProcessor.java
@@ -28,21 +28,28 @@ import java.util.stream.Stream;
 import javax.inject.Inject;
 import javax.mail.Flags;
 
+import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.jmap.model.MessageProperties;
 import org.apache.james.jmap.model.SetError;
 import org.apache.james.jmap.model.SetMessagesRequest;
 import org.apache.james.jmap.model.SetMessagesResponse;
 import org.apache.james.jmap.model.UpdateMessagePatch;
+import org.apache.james.jmap.model.mailbox.Role;
+import org.apache.james.jmap.utils.SystemMailboxesProvider;
+import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.FetchGroupImpl;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MailboxId.Factory;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
@@ -54,13 +61,21 @@ public class SetMessagesUpdateProcessor implements 
SetMessagesProcessor {
 
 private final UpdateMessagePatchConverter updatePatchConverter;
 private final MessageIdManager messageIdManager;
+private final Factory mailboxIdFactory;
+private final MailboxManager mailboxManager;
+private final SystemMailboxesProvider systemMailboxesProvider;
 
 @Inject
 @VisibleForTesting SetMessagesUpdateProcessor(
-UpdateMessagePatchConverter updatePatchConverter,
-MessageIdManager messageIdManager) {
+UpdateMessagePatchConverter updatePatchConverter,
+MessageIdManager messageIdManager,
+Factory mailboxIdFactory,
+MailboxManager mailboxManager, SystemMailboxesProvider 
systemMailboxesProvider) {
 this.updatePatchConverter = updatePatchConverter;
 this.messageIdManager = messageIdManager;
+this.mailboxIdFactory = mailboxIdFactory;
+this.mailboxManager = mailboxManager;
+this.systemMailboxesProvider = systemMailboxesProvider;
 }
 
 public SetMessagesResponse process(SetMessagesRequest request,  
MailboxSession mailboxSession) {
@@ -78,14 +93,16 @@ public class SetMessagesUpdateProcessor implements 
SetMessagesProcessor {
 SetMessagesResponse.Builder builder) {
 try {
 List messages = 
messageIdManager.getMessages(ImmutableList.of(messageId), 
FetchGroupImpl.MINIMAL, mailboxSession);
+
 if (messages.isEmpty()) {
 addMessageIdNotFoundToResponse(messageId, builder);
 } else {
+setInMailboxes(messageId, updateMessagePatch, mailboxSession);
 Optional updateError = messages.stream()
 .flatMap(message -> updateFlags(messageId, 
updateMessagePatch, mailboxSession, message))
 .findAny();
 if (updateError.isPresent()) {
-

[04/15] james-project git commit: JAMES-1785 Testing for SystemMailboxesProviderImpl

2017-01-23 Thread btellier
JAMES-1785 Testing for SystemMailboxesProviderImpl


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/54fe9a4b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/54fe9a4b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/54fe9a4b

Branch: refs/heads/master
Commit: 54fe9a4bd00b69cc048d554464ee987f3c302343
Parents: 1acd459
Author: Quynh Nguyen 
Authored: Wed Jan 18 16:29:53 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:46:01 2017 +0700

--
 .../utils/SystemMailboxesProviderImplTest.java  | 137 ++-
 1 file changed, 132 insertions(+), 5 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/54fe9a4b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
--
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
index 3ee868d..1d40c41 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
+++ 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/SystemMailboxesProviderImplTest.java
@@ -19,15 +19,142 @@
 
 package org.apache.james.jmap.utils;
 
-import org.junit.Ignore;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.stream.Stream;
+
+import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
+import org.apache.james.jmap.model.mailbox.Role;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.manager.MailboxManagerFixture;
+import org.apache.james.mailbox.mock.MockMailboxSession;
+import org.apache.james.mailbox.model.MailboxId;
+import org.apache.james.mailbox.model.MailboxMetaData;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MailboxQuery;
+import org.apache.james.mailbox.model.TestId;
+import org.apache.james.mailbox.store.SimpleMailboxMetaData;
+import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import com.google.common.collect.ImmutableList;
 
 public class SystemMailboxesProviderImplTest {
 
-@Ignore("1716 this class needs a test suite")
+private static final MailboxPath INBOX = 
MailboxManagerFixture.MAILBOX_PATH1;
+private static final MailboxPath OUTBOX = 
MailboxManagerFixture.MAILBOX_PATH2;
+private static final char DELIMITER = '.';
+
+private static final MailboxId inboxId = TestId.of(1);
+private static final MailboxId outboxId = TestId.of(2);
+
+private static final MailboxMetaData inboxMetadata = new 
SimpleMailboxMetaData(INBOX, inboxId, DELIMITER);
+private static final MailboxMetaData outboxMetadata = new 
SimpleMailboxMetaData(OUTBOX, outboxId, DELIMITER);
+
+private MailboxSession mailboxSession = new MockMailboxSession("user");
+private SystemMailboxesProviderImpl systemMailboxProvider;
+
+private MailboxManager mailboxManager;
+
+private MessageManager inboxMessageManager;
+private MessageManager outboxMessageManager;
+
+@Rule
+public ExpectedException expectedException = ExpectedException.none();
+
+@Before
+public void setUp() throws Exception {
+mailboxManager = mock(MailboxManager.class);
+inboxMessageManager = mock(MessageManager.class);
+outboxMessageManager = mock(MessageManager.class);
+
+systemMailboxProvider = new 
SystemMailboxesProviderImpl(mailboxManager);
+}
+
+@Test
+public void findMailboxesShouldReturnEmptyWhenEmptySearchResult() throws 
Exception {
+when(mailboxManager.search(any(MailboxQuery.class), 
eq(mailboxSession))).thenReturn(ImmutableList.of());
+
+assertThat(systemMailboxProvider.listMailboxes(Role.INBOX, 
mailboxSession)).isEmpty();
+}
+
+@Test
+public void findMailboxesShouldFilterTheMailboxByItsRole() throws 
Exception {
+when(mailboxManager.search(any(MailboxQuery.class), 
eq(mailboxSession))).thenReturn(ImmutableList.of(inboxMetadata, 
outboxMetadata));
+when(mailboxManager.getMailbox(eq(INBOX), 
eq(mailboxSession))).thenReturn(inboxMessageManager);
+
+Stream result = 
systemMailboxProvider.listMailboxes(Role.INBOX, 

[09/15] james-project git commit: JAMES-1785 Improve MailboxNotFoundException with an error message

2017-01-23 Thread btellier
JAMES-1785 Improve MailboxNotFoundException with an error message


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d30b24e4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d30b24e4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d30b24e4

Branch: refs/heads/master
Commit: d30b24e42cd902688fc4be4a6c9d623626e63f94
Parents: 9875a46
Author: Benoit Tellier 
Authored: Wed Jan 18 10:26:02 2017 +0700
Committer: Quynh Nguyen 
Committed: Tue Jan 24 09:58:20 2017 +0700

--
 .../apache/james/mailbox/exception/MailboxNotFoundException.java| 1 +
 1 file changed, 1 insertion(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/d30b24e4/mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxNotFoundException.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxNotFoundException.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxNotFoundException.java
index 8301d76..2e538cb 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxNotFoundException.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxNotFoundException.java
@@ -44,6 +44,7 @@ public class MailboxNotFoundException extends 
MailboxException {
  *name of the mailbox, not null
  */
 public MailboxNotFoundException(MailboxPath mailboxPath) {
+super(mailboxPath + " can not be found");
 this.mailboxName = mailboxPath.toString();
 }
 


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



[4/4] james-project git commit: MAILET-149 JSON created from ICAL should better use From when available and backup to sender envelope

2017-01-24 Thread btellier
MAILET-149 JSON created from ICAL should better use From when available and 
backup to sender envelope


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9ff71bd2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9ff71bd2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9ff71bd2

Branch: refs/heads/master
Commit: 9ff71bd26ccb4e54788ed70a61ff1aa13b06f5f5
Parents: 84ecf06
Author: Benoit Tellier 
Authored: Tue Jan 24 09:29:54 2017 +0700
Committer: Benoit Tellier 
Committed: Tue Jan 24 16:49:07 2017 +0700

--
 .../transport/mailets/ICALToJsonAttribute.java  |  34 +-
 .../james/transport/mailets/model/ICAL.java |   4 +-
 .../mailets/ICALToJsonAttributeTest.java| 109 +++
 .../james/transport/mailets/model/ICALTest.java |  14 +--
 .../mailets/ICSAttachmentWorkflowTest.java  |   5 +-
 5 files changed, 148 insertions(+), 18 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/9ff71bd2/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
--
diff --git 
a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
 
b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
index b62ab33..84ebabb 100644
--- 
a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
+++ 
b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
@@ -20,11 +20,16 @@
 package org.apache.james.transport.mailets;
 
 import java.io.Serializable;
+import java.util.Arrays;
 import java.util.Map;
+import java.util.Optional;
 import java.util.UUID;
 import java.util.stream.Stream;
 
+import javax.mail.Address;
 import javax.mail.MessagingException;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
 
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.james.transport.mailets.model.ICAL;
@@ -35,6 +40,7 @@ import org.apache.mailet.base.GenericMailet;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
+import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.base.Charsets;
 import com.google.common.base.Strings;
@@ -132,8 +138,9 @@ public class ICALToJsonAttribute extends GenericMailet {
 if (mail.getAttribute(rawSourceAttributeName) == null) {
 return;
 }
-if (mail.getSender() == null) {
-log("Skipping " + mail.getName() + " because no sender");
+Optional sender = retrieveSender(mail);
+if (!sender.isPresent()) {
+log("Skipping " + mail.getName() + " because no sender and no 
from");
 return;
 }
 try {
@@ -141,7 +148,7 @@ public class ICALToJsonAttribute extends GenericMailet {
 Map rawCalendars = getRawCalendarMap(mail);
 Map jsonsInByteForm = calendars.entrySet()
 .stream()
-.flatMap(calendar -> toJson(calendar, rawCalendars, mail))
+.flatMap(calendar -> toJson(calendar, rawCalendars, mail, 
sender.get()))
 .collect(Guavate.toImmutableMap(Pair::getKey, Pair::getValue));
 mail.setAttribute(destinationAttributeName, (Serializable) 
jsonsInByteForm);
 } catch (ClassCastException e) {
@@ -159,10 +166,10 @@ public class ICALToJsonAttribute extends GenericMailet {
 return (Map) mail.getAttribute(rawSourceAttributeName);
 }
 
-private Stream> toJson(Map.Entry 
entry, Map rawCalendars, Mail mail) {
+private Stream> toJson(Map.Entry 
entry, Map rawCalendars, Mail mail, String sender) {
 return mail.getRecipients()
 .stream()
-.flatMap(recipient -> toICAL(entry, rawCalendars, recipient, 
mail.getSender()))
+.flatMap(recipient -> toICAL(entry, rawCalendars, recipient, 
sender))
 .flatMap(ical -> toJson(ical, mail.getName()))
 .map(json -> Pair.of(UUID.randomUUID().toString(), 
json.getBytes(Charsets.UTF_8)));
 }
@@ -179,7 +186,7 @@ public class ICALToJsonAttribute extends GenericMailet {
 }
 }
 
-private Stream toICAL(Map.Entry entry, Map rawCalendars, MailAddress recipient, MailAddress sender) {
+private Stream toICAL(Map.Entry 

[2/4] james-project git commit: MAILET-149 Factorize uses of getIp on SwarmGenericContainer

2017-01-24 Thread btellier
MAILET-149 Factorize uses of getIp on SwarmGenericContainer


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/65cf1c8c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/65cf1c8c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/65cf1c8c

Branch: refs/heads/master
Commit: 65cf1c8cb704e6c1db930c943223f23abe6fd530
Parents: 6cdc4d5
Author: Benoit Tellier 
Authored: Tue Jan 24 08:45:01 2017 +0700
Committer: Benoit Tellier 
Committed: Tue Jan 24 16:49:03 2017 +0700

--
 .../main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java   | 6 ++
 .../src/test/java/org/apache/james/DockerCassandraRule.java| 6 ++
 .../org/apache/james/util/streams/SwarmGenericContainer.java   | 5 +
 .../java/org/apache/james/transport/mailets/amqp/AmqpRule.java | 6 +-
 4 files changed, 10 insertions(+), 13 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/65cf1c8c/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
--
diff --git 
a/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
 
b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
index e27c9e0..293e364 100644
--- 
a/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
+++ 
b/mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
@@ -35,7 +35,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.RuleChain;
 import org.junit.rules.TemporaryFolder;
-import org.testcontainers.containers.GenericContainer;
 
 import com.google.common.base.Charsets;
 import com.google.common.collect.ImmutableList;
@@ -52,7 +51,7 @@ public class ForwardSmtpTest extends 
AbstractSimpleScriptedTestProtocol {
 public static final String PASSWORD = "secret";
 
 private final TemporaryFolder folder = new TemporaryFolder();
-private final GenericContainer fakeSmtp = new 
SwarmGenericContainer("weave/rest-smtp-sink:latest")
+private final SwarmGenericContainer fakeSmtp = new 
SwarmGenericContainer("weave/rest-smtp-sink:latest")
 .withAffinityToContainer();
 
 @Rule
@@ -66,10 +65,9 @@ public class ForwardSmtpTest extends 
AbstractSimpleScriptedTestProtocol {
 }
 
 @Before
-@SuppressWarnings("deprecation")
 public void setUp() throws Exception {
 super.setUp();
-InetAddress containerIp = 
InetAddresses.forString(fakeSmtp.getContainerInfo().getNetworkSettings().getIpAddress());
+InetAddress containerIp = InetAddresses.forString(fakeSmtp.getIp());
 hostSystem.getInMemoryDnsService()
 .registerRecord("yopmail.com", new InetAddress[]{containerIp}, 
ImmutableList.of("yopmail.com"), ImmutableList.of());
 hostSystem.addAddressMapping(USER, DOMAIN, "r...@yopmail.com");

http://git-wip-us.apache.org/repos/asf/james-project/blob/65cf1c8c/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerCassandraRule.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerCassandraRule.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerCassandraRule.java
index fa01e1c..e482214 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerCassandraRule.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/DockerCassandraRule.java
@@ -25,7 +25,6 @@ import 
org.apache.james.modules.mailbox.CassandraSessionConfiguration;
 import org.apache.james.util.streams.SwarmGenericContainer;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
-import org.testcontainers.containers.GenericContainer;
 import org.testcontainers.shaded.com.github.dockerjava.api.model.ExposedPort;
 import org.testcontainers.shaded.com.github.dockerjava.api.model.Ports;
 import org.testcontainers.shaded.com.github.dockerjava.api.model.Ports.Binding;
@@ -54,7 +53,7 @@ public class DockerCassandraRule implements 
GuiceModuleTestRule {
 return configuration;
 }
 
-private GenericContainer cassandraContainer = new 
SwarmGenericContainer("cassandra:2.2");
+private SwarmGenericContainer cassandraContainer = new 
SwarmGenericContainer("cassandra:2.2");
 
 @Override
 public Statement apply(Statement base, Description description) {
@@ -70,9 +69,8 @@ public class DockerCassandraRule implements 
GuiceModuleTestRule {
 return (binder) -> 
binder.bind(CassandraSessionConfiguration.class).toInstance(this::getCassandraConfigurationForDocker);
   

[1/4] james-project git commit: MAILET-149 ICalToJson should not generate ICAL but take it from raw attachment

2017-01-24 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master dc90ccda5 -> 9ff71bd26


MAILET-149 ICalToJson should not generate ICAL but take it from raw attachment


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6cdc4d50
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6cdc4d50
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6cdc4d50

Branch: refs/heads/master
Commit: 6cdc4d503f071a1639b266595641d1d67877738e
Parents: dc90ccd
Author: Raphael Ouazana 
Authored: Mon Jan 23 17:15:04 2017 +0100
Committer: Benoit Tellier 
Committed: Tue Jan 24 16:48:58 2017 +0700

--
 .../transport/mailets/ICALToJsonAttribute.java  |  36 ++-
 .../james/transport/mailets/model/ICAL.java |   5 +-
 .../mailets/ICALToJsonAttributeTest.java| 227 +
 .../james/transport/mailets/model/ICALTest.java |  75 ++
 .../mailets/ICSAttachmentWorkflowTest.java  | 245 ++-
 .../src/test/resources/eml/yahooInvitation.eml  | 162 
 6 files changed, 585 insertions(+), 165 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/6cdc4d50/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
--
diff --git 
a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
 
b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
index 1e314af..b62ab33 100644
--- 
a/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
+++ 
b/mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
@@ -75,12 +75,15 @@ import net.fortuna.ical4j.model.Calendar;
 public class ICALToJsonAttribute extends GenericMailet {
 
 public static final String SOURCE_ATTRIBUTE_NAME = "source";
+public static final String RAW_SOURCE_ATTRIBUTE_NAME = "rawSource";
 public static final String DESTINATION_ATTRIBUTE_NAME = "destination";
 public static final String DEFAULT_SOURCE_ATTRIBUTE_NAME = "icalendar";
+public static final String DEFAULT_RAW_SOURCE_ATTRIBUTE_NAME = 
"attachments";
 public static final String DEFAULT_DESTINATION_ATTRIBUTE_NAME = 
"icalendarJson";
 
 private final ObjectMapper objectMapper;
 private String sourceAttributeName;
+private String rawSourceAttributeName;
 private String destinationAttributeName;
 
 public ICALToJsonAttribute() {
@@ -92,6 +95,10 @@ public class ICALToJsonAttribute extends GenericMailet {
 return sourceAttributeName;
 }
 
+public String getRawSourceAttributeName() {
+return rawSourceAttributeName;
+}
+
 public String getDestinationAttributeName() {
 return destinationAttributeName;
 }
@@ -104,10 +111,14 @@ public class ICALToJsonAttribute extends GenericMailet {
 @Override
 public void init() throws MessagingException {
 sourceAttributeName = getInitParameter(SOURCE_ATTRIBUTE_NAME, 
DEFAULT_SOURCE_ATTRIBUTE_NAME);
+rawSourceAttributeName = getInitParameter(RAW_SOURCE_ATTRIBUTE_NAME, 
DEFAULT_RAW_SOURCE_ATTRIBUTE_NAME);
 destinationAttributeName = 
getInitParameter(DESTINATION_ATTRIBUTE_NAME, 
DEFAULT_DESTINATION_ATTRIBUTE_NAME);
 if (Strings.isNullOrEmpty(sourceAttributeName)) {
 throw new MessagingException(SOURCE_ATTRIBUTE_NAME + " 
configuration parameter can not be null or empty");
 }
+if (Strings.isNullOrEmpty(rawSourceAttributeName)) {
+throw new MessagingException(RAW_SOURCE_ATTRIBUTE_NAME + " 
configuration parameter can not be null or empty");
+}
 if (Strings.isNullOrEmpty(destinationAttributeName)) {
 throw new MessagingException(DESTINATION_ATTRIBUTE_NAME + " 
configuration parameter can not be null or empty");
 }
@@ -118,15 +129,19 @@ public class ICALToJsonAttribute extends GenericMailet {
 if (mail.getAttribute(sourceAttributeName) == null) {
 return;
 }
+if (mail.getAttribute(rawSourceAttributeName) == null) {
+return;
+}
 if (mail.getSender() == null) {
 log("Skipping " + mail.getName() + " because no sender");
 return;
 }
 try {
 Map calendars = getCalendarMap(mail);
+Map rawCalendars = getRawCalendarMap(mail);
 Map jsonsInByteForm = calendars.entrySet()
 .stream()
-.flatMap(calendar -> toJson(calendar, mail))
+.flatMap(calendar -> toJson(calendar, rawCalendars, mail))
  

[3/4] james-project git commit: MAILET-149 Factorize exception handling in Amqp Junit rule

2017-01-24 Thread btellier
MAILET-149 Factorize exception handling in Amqp Junit rule


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/84ecf060
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/84ecf060
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/84ecf060

Branch: refs/heads/master
Commit: 84ecf060147204f1b3c0a1688bb73a87f933fbc2
Parents: 65cf1c8
Author: Benoit Tellier 
Authored: Tue Jan 24 08:48:00 2017 +0700
Committer: Benoit Tellier 
Committed: Tue Jan 24 16:49:07 2017 +0700

--
 .../java/org/apache/james/transport/mailets/amqp/AmqpRule.java   | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/84ecf060/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java
--
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java
index 08e831f..3923fc9 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpRule.java
@@ -102,9 +102,7 @@ public class AmqpRule extends ExternalResource {
 private boolean isReady(ConnectionFactory factory) {
 try (Connection connection = factory.newConnection()) {
 return true;
-} catch (IOException e) {
-return false;
-} catch (TimeoutException e) {
+} catch (IOException | TimeoutException e) {
 return false;
 }
 }


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



james-project git commit: Sprint #23 @linagora Updating progress to James release

2017-01-25 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master f2d4d61bf -> ab03b6309


Sprint #23 @linagora Updating progress to James release

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/ab03b630
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/ab03b630
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/ab03b630

Branch: refs/heads/master
Commit: ab03b63095fc5822aeba040b2e72c3a50c5925db
Parents: f2d4d61
Author: Tellier Benoit 
Authored: Wed Jan 25 17:49:48 2017 +0700
Committer: GitHub 
Committed: Wed Jan 25 17:49:48 2017 +0700

--
 james3-roadmap-progress/progress.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/ab03b630/james3-roadmap-progress/progress.json
--
diff --git a/james3-roadmap-progress/progress.json 
b/james3-roadmap-progress/progress.json
index 3d0d780..87f7d0b 100644
--- a/james3-roadmap-progress/progress.json
+++ b/james3-roadmap-progress/progress.json
@@ -13,12 +13,12 @@
},
{
  "name" : "Assign a unique Id to message entity (and handle move and move 
to trash)",
- "completion" : 80,
+ "completion" : 95,
  "complexity" : 50
},
{
  "name" : "Deploy James @ Linagora",
- "completion" : 70,
+ "completion" : 80,
  "complexity" : 10
},
{


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



[1/2] james-project git commit: JAMES-1874 Parallel reads on GetMessages (except attachments)

2017-02-21 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 1f6b54942 -> 322d5797a


JAMES-1874 Parallel reads on GetMessages (except attachments)


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b714e31f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b714e31f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b714e31f

Branch: refs/heads/master
Commit: b714e31fdd671c99114158eea532c3d727dfe886
Parents: 1f6b549
Author: Benoit Tellier 
Authored: Mon Feb 20 17:20:08 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 18:03:38 2017 +0700

--
 .../cassandra/mail/CassandraMessageIdMapper.java| 12 +++-
 1 file changed, 7 insertions(+), 5 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/b714e31f/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
index eec9340..984e2f3 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
@@ -50,6 +50,7 @@ import 
org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
+import org.apache.james.util.CompletableFutureUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -92,11 +93,12 @@ public class CassandraMessageIdMapper implements 
MessageIdMapper {
 }
 
 private Stream findAsStream(List 
messageIds, FetchType fetchType) {
-List composedMessageIds = 
messageIds.stream()
-.map(messageId -> imapUidDAO.retrieve((CassandraMessageId) 
messageId, Optional.empty()))
-.flatMap(CompletableFuture::join)
-.collect(Guavate.toImmutableList());
-return messageDAO.retrieveMessages(composedMessageIds, fetchType, 
Optional.empty()).join()
+return CompletableFutureUtil.allOf(
+messageIds.stream()
+.map(messageId -> imapUidDAO.retrieve((CassandraMessageId) 
messageId, Optional.empty(
+.thenApply(stream -> stream.flatMap(Function.identity()))
+.thenApply(stream -> stream.collect(Guavate.toImmutableList()))
+.thenCompose(composedMessageIds -> 
messageDAO.retrieveMessages(composedMessageIds, fetchType, 
Optional.empty())).join()
 .filter(pair -> mailboxExists(pair.getLeft()))
 .map(loadAttachments(fetchType))
 .map(toMailboxMessages())


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



[2/2] james-project git commit: JAMES-1874 Also parallelize in mailbox checking while doing GetMessages

2017-02-21 Thread btellier
JAMES-1874 Also parallelize in mailbox checking while doing GetMessages


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/322d5797
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/322d5797
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/322d5797

Branch: refs/heads/master
Commit: 322d5797ac045a8bce369bc94ffd10dcecc43f42
Parents: b714e31
Author: Benoit Tellier 
Authored: Mon Feb 20 17:57:25 2017 +0700
Committer: benwa 
Committed: Tue Feb 21 16:56:45 2017 +0700

--
 .../CassandraMailboxSessionMapperFactory.java   |  2 +-
 .../mail/CassandraMessageIdMapper.java  | 33 +---
 2 files changed, 23 insertions(+), 12 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/322d5797/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
index 07e51e7..782a4e2 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
@@ -104,7 +104,7 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
 
 @Override
 public MessageIdMapper createMessageIdMapper(MailboxSession 
mailboxSession) throws MailboxException {
-return new CassandraMessageIdMapper(getMailboxMapper(mailboxSession), 
getAttachmentMapper(mailboxSession),
+return new CassandraMessageIdMapper(getMailboxMapper(mailboxSession), 
mailboxDAO, getAttachmentMapper(mailboxSession),
 imapUidDAO, messageIdDAO, messageDAO, indexTableHandler, 
modSeqProvider, mailboxSession);
 }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/322d5797/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
index 984e2f3..17768cb 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
@@ -51,6 +51,7 @@ import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.util.CompletableFutureUtil;
+import org.apache.james.util.OptionalConverter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -65,6 +66,7 @@ public class CassandraMessageIdMapper implements 
MessageIdMapper {
 private static final Logger LOGGER = 
LoggerFactory.getLogger(CassandraMessageIdMapper.class);
 
 private final MailboxMapper mailboxMapper;
+private final CassandraMailboxDAO mailboxDAO;
 private final AttachmentMapper attachmentMapper;
 private final CassandraMessageIdToImapUidDAO imapUidDAO;
 private final CassandraMessageIdDAO messageIdDAO;
@@ -73,10 +75,11 @@ public class CassandraMessageIdMapper implements 
MessageIdMapper {
 private final ModSeqProvider modSeqProvider;
 private final MailboxSession mailboxSession;
 
-public CassandraMessageIdMapper(MailboxMapper mailboxMapper, 
AttachmentMapper attachmentMapper,
+public CassandraMessageIdMapper(MailboxMapper mailboxMapper, 
CassandraMailboxDAO mailboxDAO, AttachmentMapper attachmentMapper,
 CassandraMessageIdToImapUidDAO imapUidDAO, 
CassandraMessageIdDAO messageIdDAO, CassandraMessageDAO messageDAO,
 CassandraIndexTableHandler 
indexTableHandler, ModSeqProvider modSeqProvider, MailboxSession 
mailboxSession) {
 this.mailboxMapper = mailboxMapper;
+this.mailboxDAO = mailboxDAO;
 this.attachmentMapper = attachmentMapper;
 this.imapUidDAO = imapUidDAO;
 this.messageIdDAO = messageIdDAO;
@@ -98,21 +101,29 @@ public class CassandraMessageIdMapper implements 
MessageIdMapper {
 .map(messageId -> imapUidDAO.retrieve((CassandraMessageId) 
messageId, Optional.empty(
 

james-project git commit: PROTOCOLS-116 Add MPT test for UID<-> MSN handling by IMAP

2017-02-21 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 6b5d52789 -> c1379a10a


PROTOCOLS-116 Add MPT test for UID<-> MSN handling by IMAP


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c1379a10
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c1379a10
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c1379a10

Branch: refs/heads/master
Commit: c1379a10a019f3ea598d18ab9281ee674098ace6
Parents: 6b5d527
Author: Benoit Tellier 
Authored: Fri Feb 17 12:03:51 2017 +0700
Committer: benwa 
Committed: Wed Feb 22 09:00:36 2017 +0700

--
 .../imapmailbox/suite/ConcurrentSessions.java   |  10 ++
 .../ConcurrentAppendUIDToMSNMapping.test| 136 +++
 .../ConcurrentExpungeUIDToMSNMapping.test   | 172 +++
 3 files changed, 318 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/c1379a10/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ConcurrentSessions.java
--
diff --git 
a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ConcurrentSessions.java
 
b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ConcurrentSessions.java
index aebc136..4a55ed1 100644
--- 
a/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ConcurrentSessions.java
+++ 
b/mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ConcurrentSessions.java
@@ -140,4 +140,14 @@ public class ConcurrentSessions extends 
BaseAuthenticatedState {
 public void testConcurrentRenameSelectedITALY() throws Exception {
 scriptTest("ConcurrentRenameSelected", Locale.ITALY);
 }
+
+@Test
+public void expungeShouldNotBreakUIDToMSNMapping() throws Exception {
+scriptTest("ConcurrentExpungeUIDToMSNMapping", Locale.US);
+}
+
+@Test
+public void appendShouldNotBreakUIDToMSNMapping() throws Exception {
+scriptTest("ConcurrentAppendUIDToMSNMapping", Locale.US);
+}
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/c1379a10/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentAppendUIDToMSNMapping.test
--
diff --git 
a/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentAppendUIDToMSNMapping.test
 
b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentAppendUIDToMSNMapping.test
new file mode 100644
index 000..bed1e78
--- /dev/null
+++ 
b/mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentAppendUIDToMSNMapping.test
@@ -0,0 +1,136 @@
+
+# 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.   #
+
+
+#
+# Test : verify append do not break MSN <-> UID mapping
+#
+
+### PROVISIONING
+SESSION: 1
+C: 1a CREATE expungeresponse
+S: 1a OK CREATE completed.
+
+C: 1b APPEND expungeresponse (\Deleted) {254+}
+C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
+C: From: Fred Foobar 
+C: Subject: Test 01
+C: To: mo...@owatagu.siam.edu
+C: Message-Id: 
+C: MIME-Version: 1.0
+C: Content-Type: TEXT/PLAIN; CHARSET=US-ASCII
+C:
+C: Test 01
+C:
+S: 1b OK (\[.+\] )?APPEND completed.
+
+C: 1c APPEND expungeresponse {254+}
+C: Date: Mon, 7 Feb 1994 21:52:25 -0800 (PST)
+C: From: Fred Foobar 
+C: Subject: Test 02
+C: To: mo...@owatagu.siam.edu
+C: Message-Id: 

[2/3] james-project git commit: JAMES-1945 Also take FetchType into account for attachments into CassandraMessageIdMapper

2017-02-20 Thread btellier
JAMES-1945 Also take FetchType into account for attachments into 
CassandraMessageIdMapper


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/124749a3
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/124749a3
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/124749a3

Branch: refs/heads/master
Commit: 124749a37f8ceb3d7ae41941234a1f6b3ef490ad
Parents: d0cbaf1
Author: Benoit Tellier 
Authored: Mon Feb 20 09:00:47 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 17:40:00 2017 +0700

--
 .../cassandra/mail/CassandraMessageIdMapper.java| 16 ++--
 1 file changed, 10 insertions(+), 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/124749a3/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
index 61045d1..eec9340 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
@@ -98,7 +98,7 @@ public class CassandraMessageIdMapper implements 
MessageIdMapper {
 .collect(Guavate.toImmutableList());
 return messageDAO.retrieveMessages(composedMessageIds, fetchType, 
Optional.empty()).join()
 .filter(pair -> mailboxExists(pair.getLeft()))
-.map(loadAttachments())
+.map(loadAttachments(fetchType))
 .map(toMailboxMessages())
 .sorted(Comparator.comparing(MailboxMessage::getUid));
 }
@@ -113,11 +113,15 @@ public class CassandraMessageIdMapper implements 
MessageIdMapper {
 }
 }
 
-private Function, 
Pair> 
loadAttachments() {
-return pair -> Pair.of(pair.getLeft(),
-new AttachmentLoader(attachmentMapper)
-
.getAttachments(pair.getRight().collect(Guavate.toImmutableList()))
-.stream());
+private Function, 
Pair> 
loadAttachments(FetchType fetchType) {
+if (fetchType == FetchType.Full || fetchType == FetchType.Body) {
+return pair -> Pair.of(pair.getLeft(),
+new AttachmentLoader(attachmentMapper)
+
.getAttachments(pair.getRight().collect(Guavate.toImmutableList()))
+.stream());
+} else {
+return pair -> Pair.of(pair.getLeft(), Stream.of());
+}
 }
 
 private FunctionChainer, SimpleMailboxMessage> toMailboxMessages() {


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



[3/3] james-project git commit: JAMES-1945 Don't try to retrieve empty attachment list on Cassandra

2017-02-20 Thread btellier
JAMES-1945 Don't try to retrieve empty attachment list on Cassandra


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1f6b5494
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1f6b5494
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1f6b5494

Branch: refs/heads/master
Commit: 1f6b5494297e0f23ce4e6f174b412cdbe1c26366
Parents: 124749a
Author: Benoit Tellier 
Authored: Mon Feb 20 15:43:06 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 17:40:00 2017 +0700

--
 .../james/mailbox/cassandra/mail/CassandraAttachmentMapper.java   | 3 +++
 1 file changed, 3 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/1f6b5494/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
index 3be80dd..c1f9af0 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
@@ -94,6 +94,9 @@ public class CassandraAttachmentMapper implements 
AttachmentMapper {
 @Override
 public List getAttachments(Collection 
attachmentIds) {
 Preconditions.checkArgument(attachmentIds != null);
+if (attachmentIds.isEmpty()) {
+return ImmutableList.of();
+}
 List ids = attachmentIds.stream()
 .map(AttachmentId::getId)
 .collect(Guavate.toImmutableList());


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



[1/3] james-project git commit: JAMES-1945 Take into account the FetchType before composing with attachments

2017-02-20 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 2dd366d2a -> 1f6b54942


JAMES-1945 Take into account the FetchType before composing with attachments


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d0cbaf12
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d0cbaf12
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d0cbaf12

Branch: refs/heads/master
Commit: d0cbaf12580e914ceff2b2090e99eca206f18b5a
Parents: 2dd366d
Author: Benoit Tellier 
Authored: Mon Feb 20 08:22:05 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 17:39:55 2017 +0700

--
 .../cassandra/mail/CassandraMessageMapper.java  | 22 +---
 1 file changed, 14 insertions(+), 8 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/d0cbaf12/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index c36d9a0..c43f26b 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -162,14 +162,20 @@ public class CassandraMessageMapper implements 
MessageMapper {
 }
 
 private Stream 
retrieveMessages(List messageIds, FetchType 
fetchType, Optional limit) {
-return messageDAO.retrieveMessages(messageIds, fetchType, limit).join()
-.map(pair -> Pair.of(pair.getLeft(), new 
AttachmentLoader(attachmentMapper)
-.getAttachments(pair.getRight()
-.collect(Guavate.toImmutableList()
-.map(Throwing.function(pair -> pair.getLeft()
-.toMailboxMessage(pair.getRight()
-.stream()
-.collect(Guavate.toImmutableList();
+Stream>
+messageRepresentions = messageDAO.retrieveMessages(messageIds, 
fetchType, limit).join();
+if (fetchType == FetchType.Body || fetchType == FetchType.Full) {
+return messageRepresentions
+.map(pair -> Pair.of(pair.getLeft(), new 
AttachmentLoader(attachmentMapper)
+.getAttachments(pair.getRight()
+.collect(Guavate.toImmutableList()
+.map(Throwing.function(pair -> pair.getLeft()
+.toMailboxMessage(pair.getRight()
+.stream()
+.collect(Guavate.toImmutableList();
+} else {
+return messageRepresentions.map(pair -> 
pair.getLeft().toMailboxMessage(ImmutableList.of()));
+}
 }
 
 @Override


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



[04/13] james-project git commit: JAMES-1874 Adding tests for MailboxPath::getLevels

2017-02-20 Thread btellier
JAMES-1874 Adding tests for MailboxPath::getLevels


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/1fa1cd82
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/1fa1cd82
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/1fa1cd82

Branch: refs/heads/master
Commit: 1fa1cd824036e20c603741e2ddb1e299bed25abf
Parents: bdc76d1
Author: Benoit Tellier 
Authored: Mon Feb 13 09:29:26 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:05:39 2017 +0700

--
 .../apache/james/mailbox/model/MailboxPath.java |  5 ++
 .../james/mailbox/model/MailboxPathTest.java| 62 
 2 files changed, 67 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/1fa1cd82/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
index e4f132b..06a87b2 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
@@ -24,6 +24,8 @@ import java.util.List;
 
 import org.apache.james.mailbox.MailboxSession;
 
+import com.google.common.collect.ImmutableList;
+
 /**
  * The path to a mailbox.
  */
@@ -116,6 +118,9 @@ public class MailboxPath {
  * @return list of hierarchy levels
  */
 public List getHierarchyLevels(char delimiter) {
+if (name == null) {
+return ImmutableList.of(this);
+}
 ArrayList levels = new ArrayList();
 int index = name.indexOf(delimiter);
 while (index >= 0) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/1fa1cd82/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
new file mode 100644
index 000..b474aac
--- /dev/null
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
@@ -0,0 +1,62 @@
+/*
+ *   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.model;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class MailboxPathTest {
+
+@Test
+public void getHierarchyLevelsShouldBeOrdered() {
+assertThat(new MailboxPath("#private", "user", 
"inbox.folder.subfolder")
+.getHierarchyLevels('.'))
+.containsExactly(
+new MailboxPath("#private", "user", "inbox"),
+new MailboxPath("#private", "user", "inbox.folder"),
+new MailboxPath("#private", "user", "inbox.folder.subfolder"));
+}
+
+@Test
+public void getHierarchyLevelsShouldReturnPathWhenOneLevel() {
+assertThat(new MailboxPath("#private", "user", "inbox")
+.getHierarchyLevels('.'))
+.containsExactly(
+new MailboxPath("#private", "user", "inbox"));
+}
+
+@Test
+public void getHierarchyLevelsShouldReturnPathWhenEmptyName() {
+assertThat(new MailboxPath("#private", "user", "")
+.getHierarchyLevels('.'))
+.containsExactly(
+new MailboxPath("#private", "user", ""));
+}
+
+@Test
+public void getHierarchyLevelsShouldReturnPathWhenNullName() {
+assertThat(new MailboxPath("#private", "user", null)
+.getHierarchyLevels('.'))
+.containsExactly(
+new MailboxPath("#private", "user", null));
+}
+}


-
To unsubscribe, e-mail: 

[02/13] james-project git commit: JAMES-1874 MailboxId should be returned upon mailbox creation

2017-02-20 Thread btellier
JAMES-1874 MailboxId should be returned upon mailbox creation


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/45dfd908
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/45dfd908
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/45dfd908

Branch: refs/heads/master
Commit: 45dfd9084172ccb1cfcc9e9fc52e2c59e1ff71f0
Parents: 1fa1cd8
Author: Benoit Tellier 
Authored: Mon Feb 13 09:46:07 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:05:39 2017 +0700

--
 .../org/apache/james/mailbox/MailboxManager.java   |  6 +-
 .../apache/james/mailbox/MailboxManagerTest.java   | 17 -
 .../mailbox/caching/CachingMailboxMapper.java  |  4 ++--
 .../cassandra/mail/CassandraMailboxMapper.java |  3 ++-
 .../mailbox/hbase/mail/HBaseMailboxMapper.java |  3 ++-
 .../james/mailbox/jcr/mail/JCRMailboxMapper.java   |  3 ++-
 .../james/mailbox/jpa/mail/JPAMailboxMapper.java   |  3 ++-
 .../jpa/mail/TransactionalMailboxMapper.java   | 10 +-
 .../mailbox/maildir/mail/MaildirMailboxMapper.java |  5 +++--
 .../inmemory/mail/InMemoryMailboxMapper.java   |  3 ++-
 .../james/mailbox/store/StoreMailboxManager.java   |  9 +++--
 .../james/mailbox/store/mail/MailboxMapper.java|  2 +-
 .../store/TestMailboxSessionMapperFactory.java |  2 +-
 .../processor/base/MailboxEventAnalyserTest.java   |  3 ++-
 ...faultMailboxesProvisioningFilterThreadTest.java |  6 +-
 15 files changed, 57 insertions(+), 22 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/45dfd908/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index 0cf3e1a..3fcd03e 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -42,6 +42,8 @@ import 
org.apache.james.mailbox.model.MultimailboxesSearchQuery;
 import org.apache.james.mailbox.model.SimpleMailboxACL;
 import org.slf4j.Logger;
 
+import com.google.common.base.Optional;
+
 /**
  * 
  * Central MailboxManager which creates, lists, provides, renames and deletes
@@ -152,8 +154,10 @@ public interface MailboxManager extends RequestAware, 
MailboxListenerSupport {
  *the context for this call, not null
  * @throws MailboxException
  * when creation fails
+ * @return Empty optional when the name is empty. If mailbox is created, 
the id of the mailboxPath specified as
+ *  parameter is returned (and not potential mailboxIds of parent 
mailboxes created in the process will be omitted)
  */
-void createMailbox(MailboxPath mailboxPath, MailboxSession mailboxSession) 
throws MailboxException;
+Optional createMailbox(MailboxPath mailboxPath, MailboxSession 
mailboxSession) throws MailboxException;
 
 /**
  * Delete the mailbox with the name

http://git-wip-us.apache.org/repos/asf/james-project/blob/45dfd908/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
--
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
index 9986712..8024f26 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
@@ -35,6 +35,7 @@ import org.apache.james.mailbox.mock.MockMailboxManager;
 import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
 import org.apache.james.mailbox.model.MailboxConstants;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MailboxQuery;
@@ -47,6 +48,7 @@ import org.xenei.junit.contract.Contract;
 import org.xenei.junit.contract.ContractTest;
 import org.xenei.junit.contract.IProducer;
 
+import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 
@@ -114,7 +116,20 @@ public class MailboxManagerTest {
 MailboxPath inbox = MailboxPath.inbox(session);
 assertThat(mailboxManager.mailboxExists(inbox, session)).isFalse();
 }
-
+
+@ContractTest
+public void createMailboxShouldReturnRightId() throws 

[05/13] james-project git commit: JAMES-1874 Upon mailbox creation avoid retrieving mailbox by path

2017-02-20 Thread btellier
JAMES-1874 Upon mailbox creation avoid retrieving mailbox by path

Retrieving mailbox by path in Cassandra relies on an Index

Also subscripbe only if creation succeeded


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f2c58211
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f2c58211
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f2c58211

Branch: refs/heads/master
Commit: f2c58211c9f554b6ec97ba8a0a045d7b1e31829c
Parents: 45dfd90
Author: Benoit Tellier 
Authored: Mon Feb 13 09:54:57 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:06:24 2017 +0700

--
 .../org/apache/james/mailbox/MailboxManager.java  |  4 ++--
 .../apache/james/util/OptionalConverterTest.java  |  1 +
 .../james/jmap/methods/GetMailboxesMethod.java| 11 ++-
 .../methods/SetMailboxesCreationProcessor.java|  7 ---
 .../apache/james/jmap/model/MailboxFactory.java   | 14 --
 .../james/jmap/model/MailboxFactoryTest.java  | 18 --
 6 files changed, 13 insertions(+), 42 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/f2c58211/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index 3fcd03e..8e48df4 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -154,8 +154,8 @@ public interface MailboxManager extends RequestAware, 
MailboxListenerSupport {
  *the context for this call, not null
  * @throws MailboxException
  * when creation fails
- * @return Empty optional when the name is empty. If mailbox is created, 
the id of the mailboxPath specified as
- *  parameter is returned (and not potential mailboxIds of parent 
mailboxes created in the process will be omitted)
+ * @return Empty optional when the mailbox name is empty. If mailbox is 
created, the id of the mailboxPath specified as
+ *  parameter is returned (and potential mailboxIds of parent mailboxes 
created in the process will be omitted)
  */
 Optional createMailbox(MailboxPath mailboxPath, MailboxSession 
mailboxSession) throws MailboxException;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/f2c58211/server/container/util-java8/src/test/java/org/apache/james/util/OptionalConverterTest.java
--
diff --git 
a/server/container/util-java8/src/test/java/org/apache/james/util/OptionalConverterTest.java
 
b/server/container/util-java8/src/test/java/org/apache/james/util/OptionalConverterTest.java
index baa3aa0..5356f63 100644
--- 
a/server/container/util-java8/src/test/java/org/apache/james/util/OptionalConverterTest.java
+++ 
b/server/container/util-java8/src/test/java/org/apache/james/util/OptionalConverterTest.java
@@ -21,6 +21,7 @@ package org.apache.james.util;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 import org.junit.Rule;
 import org.junit.Test;

http://git-wip-us.apache.org/repos/asf/james-project/blob/f2c58211/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
index be59d6e..58954f3 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
@@ -39,6 +39,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.MailboxQuery;
+import org.apache.james.util.OptionalConverter;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
@@ -91,8 +92,6 @@ public class GetMailboxesMethod implements Method {
 try {
 Optional mailboxIds = 
mailboxesRequest.getIds();
 retrieveMailboxes(mailboxIds, mailboxSession)
-.filter(Optional::isPresent)
-.map(Optional::get)
 

[08/13] james-project git commit: JAMES-1943 Avoid passing a field as parameter in messageSearches

2017-02-20 Thread btellier
JAMES-1943 Avoid passing a field as parameter in messageSearches


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f415df20
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f415df20
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f415df20

Branch: refs/heads/master
Commit: f415df20237060b58db82b7c5bebad0cc38f7b8b
Parents: 55757ba
Author: Benoit Tellier 
Authored: Wed Feb 15 11:17:26 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:07:11 2017 +0700

--
 .../org/apache/james/mailbox/store/search/MessageSearches.java   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/f415df20/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
--
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
index c478a40..6edd1af 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
@@ -101,7 +101,7 @@ public class MessageSearches implements 
Iterablefalse otherwise
  * @throws MailboxException
  */
-private boolean isMatch(SearchQuery query, MailboxMessage message) throws 
MailboxException {
+private boolean isMatch(MailboxMessage message) throws MailboxException {
 final List criteria = query.getCriterias();
 final Collection recentMessageUids = 
query.getRecentMessageUids();
 boolean result = true;


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



[07/13] james-project git commit: JAMES-1874 add builder to Mailbox Factory

2017-02-20 Thread btellier
JAMES-1874 add builder to Mailbox Factory


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5acec718
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5acec718
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5acec718

Branch: refs/heads/master
Commit: 5acec718cbe15f9837c118406e126c9c10e5117b
Parents: f2c5821
Author: Luc DUZAN 
Authored: Tue Feb 14 16:05:43 2017 +0100
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:06:31 2017 +0700

--
 .../james/jmap/methods/GetMailboxesMethod.java  | 11 +++-
 .../methods/SetMailboxesCreationProcessor.java  |  5 +-
 .../SetMailboxesDestructionProcessor.java   |  5 +-
 .../methods/SetMailboxesUpdateProcessor.java|  5 +-
 .../apache/james/jmap/model/MailboxFactory.java | 57 ++--
 .../SetMailboxesUpdateProcessorTest.java| 18 +--
 .../james/jmap/model/MailboxFactoryTest.java| 12 -
 7 files changed, 87 insertions(+), 26 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
index 58954f3..2f4eea9 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
@@ -104,7 +104,10 @@ public class GetMailboxesMethod implements Method {
 if (mailboxIds.isPresent()) {
 return mailboxIds.get()
 .stream()
-.map(mailboxId -> mailboxFactory.fromMailboxId(mailboxId, 
mailboxSession))
+.map(mailboxId -> mailboxFactory.builder()
+.id(mailboxId)
+.session(mailboxSession)
+.build())
 .flatMap(OptionalConverter::toStream);
 } else {
 List userMailboxes = mailboxManager.search(
@@ -113,7 +116,11 @@ public class GetMailboxesMethod implements Method {
 return userMailboxes
 .stream()
 .map(MailboxMetaData::getId)
-.map(mailboxId -> mailboxFactory.fromMailboxId(mailboxId, 
userMailboxes, mailboxSession))
+.map(mailboxId -> mailboxFactory.builder()
+.id(mailboxId)
+.session(mailboxSession)
+.usingPreloadedMailboxesMetadata(userMailboxes)
+.build())
 .flatMap(OptionalConverter::toStream);
 }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
index 40221e9..cf7e676 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesCreationProcessor.java
@@ -106,7 +106,10 @@ public class SetMailboxesCreationProcessor implements 
SetMailboxesProcessor {
 ensureValidMailboxName(mailboxRequest, mailboxSession);
 MailboxPath mailboxPath = getMailboxPath(mailboxRequest, 
creationIdsToCreatedMailboxId, mailboxSession);
 Optional mailboxId = 
OptionalConverter.fromGuava(mailboxManager.createMailbox(mailboxPath, 
mailboxSession));
-Optional mailbox = mailboxId.flatMap(id -> 
mailboxFactory.fromMailboxId(id, mailboxSession));
+Optional mailbox = mailboxId.flatMap(id -> 
mailboxFactory.builder()
+.id(id)
+.session(mailboxSession)
+.build());
 if (mailbox.isPresent()) {
 subscriptionManager.subscribe(mailboxSession, 
mailboxPath.getName());
 builder.created(mailboxCreationId, mailbox.get());

http://git-wip-us.apache.org/repos/asf/james-project/blob/5acec718/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/SetMailboxesDestructionProcessor.java
--
diff --git 

[06/13] james-project git commit: JAMES-1925 Improve CassandraMailboxMapper::save reading

2017-02-20 Thread btellier
JAMES-1925 Improve CassandraMailboxMapper::save reading


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/55757ba8
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/55757ba8
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/55757ba8

Branch: refs/heads/master
Commit: 55757ba8a0f2d738d78e04ca077928d6a620db82
Parents: 5acec71
Author: Benoit Tellier 
Authored: Thu Feb 16 09:13:55 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:06:31 2017 +0700

--
 .../cassandra/mail/CassandraMailboxMapper.java  | 58 ++--
 .../SetMailboxesUpdateProcessorTest.java|  5 +-
 2 files changed, 33 insertions(+), 30 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/55757ba8/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
index 6850dcb..f863523 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
@@ -129,42 +129,42 @@ public class CassandraMailboxMapper implements 
MailboxMapper {
 CassandraId cassandraId = retrieveId(cassandraMailbox);
 cassandraMailbox.setMailboxId(cassandraId);
 try {
-boolean applied = 
mailboxPathDAO.save(mailbox.generateAssociatedPath(), cassandraId)
-.thenCompose(result -> {
-if (result) {
-return 
mailboxDAO.retrieveMailbox(cassandraId)
-.thenCompose(optional -> {
-CompletableFuture delete 
= optional
-.map(storedMailbox -> 
mailboxPathDAO
-
.delete(storedMailbox.generateAssociatedPath())
-)
-
.orElse(CompletableFuture.completedFuture(null));
-
-CompletableFuture save = 
mailboxDAO.save(cassandraMailbox);
-
-return 
CompletableFuture.allOf(delete, save).thenApply(any -> result);
-});
-}
-
-return 
CompletableFuture.completedFuture(result);
-}
-).join();
-
+boolean applied = trySave(cassandraMailbox, cassandraId).join();
 if (!applied) {
 throw new 
MailboxExistsException(mailbox.generateAssociatedPath().asString());
 }
 } catch (CompletionException e) {
-if (e.getCause() instanceof InvalidQueryException) {
-String errorMessage = e.getCause().getMessage();
-if (StringUtils.containsIgnoreCase(errorMessage, 
VALUES_MAY_NOT_BE_LARGER_THAN_64_K) ||
-StringUtils.containsIgnoreCase(errorMessage, 
CLUSTERING_COLUMNS_IS_TOO_LONG)) {
-throw new TooLongMailboxNameException("too long mailbox 
name");
+manageException(e);
+}
+return cassandraId;
+}
+
+private CompletableFuture trySave(SimpleMailbox cassandraMailbox, 
CassandraId cassandraId) {
+return mailboxPathDAO.save(cassandraMailbox.generateAssociatedPath(), 
cassandraId)
+.thenCompose(result -> {
+if (result) {
+return mailboxDAO.retrieveMailbox(cassandraId)
+.thenCompose(optional -> CompletableFuture
+.allOf(optional
+.map(storedMailbox -> 
mailboxPathDAO.delete(storedMailbox.generateAssociatedPath()))
+
.orElse(CompletableFuture.completedFuture(null)),
+mailboxDAO.save(cassandraMailbox))
+.thenApply(any -> result));
 }
-throw new MailboxException("It has error with cassandra 
storage", e.getCause());
+return CompletableFuture.completedFuture(result);
+});
+}
+
+private void manageException(CompletionException e) throws 
MailboxException {
+  

[09/13] james-project git commit: JAMES-1943 Correct JMAP GetMessageList flags filter convertion

2017-02-20 Thread btellier
JAMES-1943 Correct JMAP GetMessageList flags filter convertion


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c1ae26ed
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c1ae26ed
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c1ae26ed

Branch: refs/heads/master
Commit: c1ae26ede8b0a42c5ac3f4bcc694b29a7a19ea0c
Parents: 8048946
Author: Benoit Tellier 
Authored: Thu Feb 16 10:47:39 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:07:11 2017 +0700

--
 .../apache/james/mailbox/model/SearchQuery.java |  4 ++
 .../james/jmap/utils/FilterToSearchQuery.java   |  8 ++--
 .../jmap/utils/FilterToSearchQueryTest.java | 49 
 3 files changed, 57 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/c1ae26ed/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index 0c2203b..6c7e1cc 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -633,6 +633,10 @@ public class SearchQuery implements Serializable {
 return new FlagCriterion(flag, BooleanOperator.unset());
 }
 
+public static Criterion flag(Flag flag, boolean isSet) {
+return new FlagCriterion(flag, new BooleanOperator(isSet));
+}
+
 /**
  * Creates a filter on the given flag.
  * 

http://git-wip-us.apache.org/repos/asf/james-project/blob/c1ae26ed/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
index d30c692..b96d6a4 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
@@ -68,10 +68,10 @@ public class FilterToSearchQuery {
 filter.getAfter().ifPresent(after -> 
searchQuery.andCriteria(SearchQuery.internalDateAfter(Date.from(after.toInstant()),
 DateResolution.Second)));
 filter.getBefore().ifPresent(before -> 
searchQuery.andCriteria(SearchQuery.internalDateBefore(Date.from(before.toInstant()),
 DateResolution.Second)));
 filter.getHeader().ifPresent(header -> 
searchQuery.andCriteria(SearchQuery.headerContains(header.getName(), 
header.getValue().orElse(null;
-filter.getIsAnswered().ifPresent(isAnswered -> 
searchQuery.andCriteria(SearchQuery.flagIsSet(Flag.ANSWERED)));
-filter.getIsDraft().ifPresent(isDraft -> 
searchQuery.andCriteria(SearchQuery.flagIsSet(Flag.DRAFT)));
-filter.getIsFlagged().ifPresent(isFlagged -> 
searchQuery.andCriteria(SearchQuery.flagIsSet(Flag.FLAGGED)));
-filter.getIsUnread().ifPresent(isUnread -> 
searchQuery.andCriteria(SearchQuery.flagIsUnSet(Flag.SEEN)));
+filter.getIsAnswered().ifPresent(isAnswered -> 
searchQuery.andCriteria(SearchQuery.flag(Flag.ANSWERED, isAnswered)));
+filter.getIsDraft().ifPresent(isDraft -> 
searchQuery.andCriteria(SearchQuery.flag(Flag.DRAFT, isDraft)));
+filter.getIsFlagged().ifPresent(isFlagged -> 
searchQuery.andCriteria(SearchQuery.flag(Flag.FLAGGED, isFlagged)));
+filter.getIsUnread().ifPresent(isUnread -> 
searchQuery.andCriteria(SearchQuery.flag(Flag.SEEN, !isUnread)));
 filter.getMaxSize().ifPresent(maxSize -> 
searchQuery.andCriteria(SearchQuery.sizeLessThan(maxSize)));
 filter.getMinSize().ifPresent(minSize -> 
searchQuery.andCriteria(SearchQuery.sizeGreaterThan(minSize)));
 filter.getHasAttachment().ifPresent(hasAttachment -> 
searchQuery.andCriteria(SearchQuery.hasAttachment(hasAttachment)));

http://git-wip-us.apache.org/repos/asf/james-project/blob/c1ae26ed/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
--
diff --git 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
 
b/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
index 6b3f6bf..9b2eb17 100644
--- 
a/server/protocols/jmap/src/test/java/org/apache/james/jmap/utils/FilterToSearchQueryTest.java
+++ 

[03/13] james-project git commit: JAMES-1874 Avoid reading parent mailboxId when we already have it in memory

2017-02-20 Thread btellier
JAMES-1874 Avoid reading parent mailboxId when we already have it in memory


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bdc76d13
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bdc76d13
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bdc76d13

Branch: refs/heads/master
Commit: bdc76d13e2d6f4a02d8c27b6c2e738fbc25740d3
Parents: 052a344
Author: Benoit Tellier 
Authored: Mon Feb 13 09:09:35 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:05:39 2017 +0700

--
 .../james/jmap/methods/GetMailboxesMethod.java  | 11 +++---
 .../apache/james/jmap/model/MailboxFactory.java | 38 +++-
 .../james/jmap/model/MailboxFactoryTest.java| 27 --
 3 files changed, 59 insertions(+), 17 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/bdc76d13/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
index d926d21..be59d6e 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
@@ -90,8 +90,7 @@ public class GetMailboxesMethod implements Method {
 GetMailboxesResponse.Builder builder = GetMailboxesResponse.builder();
 try {
 Optional mailboxIds = 
mailboxesRequest.getIds();
-retrieveMailboxIds(mailboxIds, mailboxSession)
-.map(mailboxId -> mailboxFactory.fromMailboxId(mailboxId, 
mailboxSession))
+retrieveMailboxes(mailboxIds, mailboxSession)
 .filter(Optional::isPresent)
 .map(Optional::get)
 .sorted(Comparator.comparing(Mailbox::getSortOrder))
@@ -102,17 +101,19 @@ public class GetMailboxesMethod implements Method {
 }
 }
 
-private Stream 
retrieveMailboxIds(Optional mailboxIds, 
MailboxSession mailboxSession) throws MailboxException {
+private Stream 
retrieveMailboxes(Optional mailboxIds, MailboxSession 
mailboxSession) throws MailboxException {
 if (mailboxIds.isPresent()) {
 return mailboxIds.get()
-.stream();
+.stream()
+.map(mailboxId -> mailboxFactory.fromMailboxId(mailboxId, 
mailboxSession));
 } else {
 List userMailboxes = mailboxManager.search(
 
MailboxQuery.builder(mailboxSession).privateUserMailboxes().build(),
 mailboxSession);
 return userMailboxes
 .stream()
-.map(MailboxMetaData::getId);
+.map(MailboxMetaData::getId)
+.map(mailboxId -> mailboxFactory.fromMailboxId(mailboxId, 
userMailboxes, mailboxSession));
 }
 }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/bdc76d13/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
index 701d2fc..cb0c10b 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
@@ -53,7 +53,7 @@ public class MailboxFactory {
 public Optional fromMailboxPath(MailboxPath mailboxPath, 
MailboxSession mailboxSession) {
 try {
 MessageManager mailbox = mailboxManager.getMailbox(mailboxPath, 
mailboxSession);
-return fromMessageManager(mailbox, mailboxSession);
+return fromMessageManager(mailbox, Optional.empty(), 
mailboxSession);
 } catch (MailboxException e) {
 LOGGER.warn("Cannot find mailbox for: " + mailboxPath.getName(), 
e);
 return Optional.empty();
@@ -63,20 +63,30 @@ public class MailboxFactory {
 public Optional fromMailboxId(MailboxId mailboxId, MailboxSession 
mailboxSession) {
 try {
 MessageManager mailbox = mailboxManager.getMailbox(mailboxId, 
mailboxSession);
-return fromMessageManager(mailbox, mailboxSession);
+return fromMessageManager(mailbox, Optional.empty(), 
mailboxSession);
 } catch (MailboxException e) {

[01/13] james-project git commit: JAMES-1874 No need of two reads for COUNT and UNSEEN

2017-02-20 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 773210833 -> 2dd366d2a


JAMES-1874 No need of two reads for COUNT and UNSEEN


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/052a3447
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/052a3447
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/052a3447

Branch: refs/heads/master
Commit: 052a3447f170f35df181661e9b26a35a2cea0859
Parents: 7732108
Author: Benoit Tellier 
Authored: Mon Feb 13 08:58:55 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:05:33 2017 +0700

--
 .../apache/james/mailbox/MessageManager.java|  5 +-
 .../james/mailbox/model/MailboxCounters.java| 84 
 .../mailbox/model/MailboxCountersTest.java  | 33 
 .../mailbox/caching/CachingMessageMapper.java   |  9 +++
 .../mail/CassandraMailboxCounterDAO.java| 11 +++
 .../cassandra/mail/CassandraMessageMapper.java  | 12 +++
 .../mail/CassandraMailboxCounterDAOTest.java| 48 +++
 .../mailbox/hbase/mail/HBaseMessageMapper.java  |  9 +++
 .../mailbox/jpa/mail/JPAMessageMapper.java  |  9 +++
 .../jpa/mail/TransactionalMessageMapper.java|  9 +++
 .../mailbox/store/StoreMessageManager.java  |  7 +-
 .../store/mail/AbstractMessageMapper.java   |  9 +++
 .../james/mailbox/store/mail/MessageMapper.java |  2 +
 .../StoreMailboxMessageResultIteratorTest.java  |  9 +++
 .../base/MailboxEventAnalyserTest.java  | 13 +--
 .../apache/james/jmap/model/MailboxFactory.java |  7 +-
 16 files changed, 264 insertions(+), 12 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/052a3447/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
index 3f87ed4..972b33c 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
@@ -31,6 +31,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.exception.UnsupportedCriteriaException;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxACL;
+import org.apache.james.mailbox.model.MailboxCounters;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageRange;
@@ -39,6 +40,8 @@ import 
org.apache.james.mailbox.model.MessageResult.FetchGroup;
 import org.apache.james.mailbox.model.MessageResultIterator;
 import org.apache.james.mailbox.model.SearchQuery;
 
+import com.google.common.base.Objects;
+
 /**
  * Interface which represent a Mailbox
  * 
@@ -60,7 +63,7 @@ public interface MessageManager {
 /**
  * Return the count of unseen messages in the mailbox
  */
-long getUnseenMessageCount(MailboxSession mailboxSession) throws 
MailboxException;
+MailboxCounters getMailboxCounters(MailboxSession mailboxSession) throws 
MailboxException;
 
 /**
  * Return if the Mailbox is writable

http://git-wip-us.apache.org/repos/asf/james-project/blob/052a3447/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
new file mode 100644
index 000..d86e14a
--- /dev/null
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.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 

[13/13] james-project git commit: JAMES-1943 Integration tests about GetMessageList and messages in several mailboxes

2017-02-20 Thread btellier
JAMES-1943 Integration tests about GetMessageList and messages in several 
mailboxes


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/2dd366d2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/2dd366d2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/2dd366d2

Branch: refs/heads/master
Commit: 2dd366d2a20a95180651b7e20739b843da03c633
Parents: 39a649b
Author: Benoit Tellier 
Authored: Thu Feb 16 10:49:23 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:07:34 2017 +0700

--
 .../integration/GetMessageListMethodTest.java   | 91 
 1 file changed, 75 insertions(+), 16 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/2dd366d2/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
index b15a0ef..03b7bf2 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
@@ -22,11 +22,13 @@ package org.apache.james.jmap.methods.integration;
 import static com.jayway.restassured.RestAssured.given;
 import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
 import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
+import static org.hamcrest.Matchers.allOf;
 import static org.hamcrest.Matchers.contains;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.empty;
 import static org.hamcrest.Matchers.equalTo;
 import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.not;
 
 import java.io.ByteArrayInputStream;
 import java.time.LocalDate;
@@ -44,6 +46,7 @@ import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -102,6 +105,31 @@ public abstract class GetMessageListMethodTest {
 }
 
 @Test
+public void getMessageListShouldNotDuplicateMessagesInSeveralMailboxes() 
throws Exception {
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox2");
+Mailbox mailbox = 
jmapServer.serverProbe().getMailbox(MailboxConstants.USER_NAMESPACE, username, 
"mailbox");
+Mailbox mailbox2 = 
jmapServer.serverProbe().getMailbox(MailboxConstants.USER_NAMESPACE, username, 
"mailbox2");
+
+ComposedMessageId message = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+
+await();
+
+jmapServer.getJmapProbe().setInMailboxes(message.getMessageId(), 
username, mailbox.getMailboxId(), mailbox2.getMailboxId());
+
+given()
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMessageList\", {}, \"#0\"]]")
+.when()
+.post("/jmap")
+.then()
+.statusCode(200)
+.body(NAME, equalTo("messageList"))
+.body(ARGUMENTS + ".messageIds", hasSize(1));
+}
+
+@Test
 public void getMessageListSetFlaggedFilterShouldWork() throws Exception {
 
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
 
@@ -120,7 +148,9 @@ public abstract class GetMessageListMethodTest {
 .then()
 .statusCode(200)
 .body(NAME, equalTo("messageList"))
-.body(ARGUMENTS + ".messageIds", 
contains(messageFlagged.getMessageId().serialize()));
+.body(ARGUMENTS + ".messageIds", allOf(
+
containsInAnyOrder(messageFlagged.getMessageId().serialize()), 
+

[11/13] james-project git commit: JAMES-1943 Add JMAP integration tests for flags criterion convertions

2017-02-20 Thread btellier
JAMES-1943 Add JMAP integration tests for flags criterion convertions


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/35906597
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/35906597
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/35906597

Branch: refs/heads/master
Commit: 3590659793d1aee39debd0d4de9ce920be0e6a43
Parents: c1ae26e
Author: Benoit Tellier 
Authored: Thu Feb 16 10:47:17 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:07:12 2017 +0700

--
 .../integration/GetMessageListMethodTest.java   | 174 +++
 1 file changed, 174 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/35906597/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
index c45ff64..b15a0ef 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
@@ -102,6 +102,180 @@ public abstract class GetMessageListMethodTest {
 }
 
 @Test
+public void getMessageListSetFlaggedFilterShouldWork() throws Exception {
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
+ComposedMessageId messageNotFlagged = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+ComposedMessageId messageFlagged = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), 
new Date(), false, new Flags(Flags.Flag.FLAGGED));
+
+await();
+
+given()
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMessageList\", 
{\"filter\":{\"isFlagged\":\"true\"}}, \"#0\"]]")
+.when()
+.post("/jmap")
+.then()
+.statusCode(200)
+.body(NAME, equalTo("messageList"))
+.body(ARGUMENTS + ".messageIds", 
contains(messageFlagged.getMessageId().serialize()));
+}
+
+@Test
+public void getMessageListUnsetFlaggedFilterShouldWork() throws Exception {
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
+ComposedMessageId messageNotFlagged = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+ComposedMessageId messageFlagged = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), 
new Date(), false, new Flags(Flags.Flag.FLAGGED));
+
+await();
+
+given()
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMessageList\", 
{\"filter\":{\"isFlagged\":\"false\"}}, \"#0\"]]")
+.when()
+.post("/jmap")
+.then()
+.statusCode(200)
+.body(NAME, equalTo("messageList"))
+.body(ARGUMENTS + ".messageIds", 
contains(messageNotFlagged.getMessageId().serialize()));
+}
+
+@Test
+public void getMessageListReadFilterShouldWork() throws Exception {
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
+ComposedMessageId messageNotRead = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+ComposedMessageId messageRead = 
jmapServer.serverProbe().appendMessage(username, new 

[10/13] james-project git commit: JAMES-1943 Adding integration tests for FilterOperator on GetMessageList

2017-02-20 Thread btellier
JAMES-1943 Adding integration tests for FilterOperator on GetMessageList


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/80489461
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/80489461
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/80489461

Branch: refs/heads/master
Commit: 80489461e52710b4f6e0e33b82f0782625bdcb05
Parents: f415df2
Author: Benoit Tellier 
Authored: Thu Feb 16 10:45:36 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:07:11 2017 +0700

--
 .../integration/GetMessageListMethodTest.java   | 113 ++-
 1 file changed, 112 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/80489461/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
index 034575c..c45ff64 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
@@ -39,6 +39,7 @@ import org.apache.http.client.utils.URIBuilder;
 import org.apache.james.JmapJamesServer;
 import org.apache.james.jmap.HttpJmapAuthentication;
 import org.apache.james.jmap.api.access.AccessToken;
+import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.MailboxConstants;
 import org.apache.james.mailbox.model.MailboxId;
@@ -99,7 +100,117 @@ public abstract class GetMessageListMethodTest {
 public void teardown() {
 jmapServer.stop();
 }
-
+
+@Test
+public void getMessageListANDOperatorShouldWork() throws Exception {
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
+ComposedMessageId messageNotSeenNotFlagged = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+ComposedMessageId messageNotSeenFlagged = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), 
new Date(), false, new Flags(Flags.Flag.FLAGGED));
+ComposedMessageId messageSeenNotFlagged = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ClassLoader.getSystemResourceAsStream("eml/oneInlinedImage.eml"), 
new Date(), false, new Flags(Flags.Flag.SEEN));
+ComposedMessageId messageSeenFlagged = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ClassLoader.getSystemResourceAsStream("eml/oneInlinedImage.eml"), 
new Date(), false, FlagsBuilder.builder().add(Flags.Flag.SEEN, 
Flags.Flag.FLAGGED).build());
+
+await();
+
+given()
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMessageList\", 
{\"filter\":{\"operator\":\"AND\",\"conditions\":[{\"isFlagged\":\"true\"},{\"isUnread\":\"true\"}]}},
 \"#0\"]]")
+.when()
+.post("/jmap")
+.then()
+.statusCode(200)
+.body(NAME, equalTo("messageList"))
+.body(ARGUMENTS + ".messageIds", 
contains(messageNotSeenFlagged.getMessageId().serialize()));
+}
+
+@Test
+public void getMessageListOROperatorShouldWork() throws Exception {
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
+ComposedMessageId messageNotSeenNotFlagged = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+ComposedMessageId messageNotSeenFlagged = 

[12/13] james-project git commit: JAMES-1943 fix messageId duplication while doing multi-mailbox searches

2017-02-20 Thread btellier
JAMES-1943 fix messageId duplication while doing multi-mailbox searches

And test that fail and prove limit before unsing to set is not a good idea
Adding tests for multi-search mailbox ID duplication
Handle also combination with limit


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/39a649b2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/39a649b2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/39a649b2

Branch: refs/heads/master
Commit: 39a649b2e227e8d823fce41861705dad4a6c04fe
Parents: 3590659
Author: Benoit Tellier 
Authored: Thu Feb 16 10:49:48 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 20 16:07:29 2017 +0700

--
 ...lasticSearchListeningMessageSearchIndex.java |   4 +-
 .../ElasticSearchIntegrationTest.java   |   2 +
 .../lucene/search/LuceneMessageSearchIndex.java |   1 +
 .../search/LuceneMessageSearchIndexTest.java|   2 +
 .../search/SimpleMessageSearchIndexTest.java|   2 +
 .../james/mailbox/store/search/SearchUtil.java  |  15 +++
 .../store/search/SimpleMessageSearchIndex.java  |  21 +++-
 .../search/AbstractMessageSearchIndexTest.java  | 113 ++-
 8 files changed, 151 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/39a649b2/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
--
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
index aa6983d..55d3f2e 100644
--- 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
@@ -97,10 +97,12 @@ public class ElasticSearchListeningMessageSearchIndex 
extends ListeningMessageSe
 public List search(MailboxSession session, 
MultimailboxesSearchQuery searchQuery, long limit)
 throws MailboxException {
 Preconditions.checkArgument(session != null, "'session' is mandatory");
-return searcher.search(ImmutableList.of(session.getUser()), 
searchQuery, Optional.of(limit))
+return searcher.search(ImmutableList.of(session.getUser()), 
searchQuery, Optional.empty())
 .peek(this::logIfNoMessageId)
 .map(SearchResult::getMessageId)
 .map(com.google.common.base.Optional::get)
+.distinct()
+.limit(limit)
 .collect(Guavate.toImmutableList());
 }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/39a649b2/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
--
diff --git 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
index 7ae3d09..2495394 100644
--- 
a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
+++ 
b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java
@@ -39,6 +39,7 @@ import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.inmemory.InMemoryMessageId;
+import org.apache.james.mailbox.inmemory.InMemoryMessageIdManager;
 import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.FakeAuthorizator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
@@ -99,6 +100,7 @@ public class ElasticSearchIntegrationTest extends 
AbstractMessageSearchIndexTest
 new SimpleGroupMembershipResolver(),
 new MessageParser(),
 messageIdFactory);
+messageIdManager = new InMemoryMessageIdManager(storeMailboxManager);
 storeMailboxManager.setMessageSearchIndex(messageSearchIndex);
 storeMailboxManager.init();
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/39a649b2/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java

james-project git commit: Update progress.json

2017-02-16 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 7f6f70823 -> 773210833


Update progress.json

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/77321083
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/77321083
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/77321083

Branch: refs/heads/master
Commit: 773210833d690792139305a58cecc830d86691dd
Parents: 7f6f708
Author: Tellier Benoit 
Authored: Fri Feb 17 10:33:41 2017 +0700
Committer: GitHub 
Committed: Fri Feb 17 10:33:41 2017 +0700

--
 james3-roadmap-progress/progress.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/77321083/james3-roadmap-progress/progress.json
--
diff --git a/james3-roadmap-progress/progress.json 
b/james3-roadmap-progress/progress.json
index 12567fc..d4a6f0d 100644
--- a/james3-roadmap-progress/progress.json
+++ b/james3-roadmap-progress/progress.json
@@ -18,7 +18,7 @@
},
{
  "name" : "Deploy James @ Linagora",
- "completion" : 80,
+ "completion" : 95,
  "complexity" : 10
},
{


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



[1/2] james-project git commit: JAMES-1891 Make Spring also use embedded ActiveMQ

2017-02-23 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master e25335842 -> 7ac76b489


JAMES-1891 Make Spring also use embedded ActiveMQ


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7ac76b48
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7ac76b48
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7ac76b48

Branch: refs/heads/master
Commit: 7ac76b48988c1f1c48332f2a8eaf391895fa6234
Parents: 27d91f0
Author: Matthieu Baechler 
Authored: Mon Dec 26 18:06:59 2016 +0100
Committer: benwa 
Committed: Thu Feb 23 17:00:00 2017 +0700

--
 .../james/JamesCapabilitiesServerTest.java  |   3 +
 .../modules/server/ActiveMQQueueModule.java |   5 +
 .../james/modules/server/EmbeddedActiveMQ.java  | 105 --
 .../org/apache/james/MemoryJmapTestRule.java|   5 +-
 .../james/mailets/TemporaryJamesServer.java |   3 +
 .../cassandra/cucumber/CassandraStepdefs.java   |   5 +-
 .../jmap/memory/cucumber/MemoryStepdefs.java|   5 +-
 server/queue/queue-activemq/pom.xml |   7 +-
 .../activemq/ActiveMQMailQueueFactory.java  |   6 +-
 .../james/queue/activemq/EmbeddedActiveMQ.java  | 107 +++
 .../META-INF/spring/activemq-queue-context.xml  |  71 ++--
 11 files changed, 149 insertions(+), 173 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
--
diff --git 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
index 150308d..4fc103f 100644
--- 
a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
+++ 
b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
@@ -24,6 +24,8 @@ import static org.mockito.Mockito.when;
 
 import java.util.EnumSet;
 
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.activemq.store.memory.MemoryPersistenceAdapter;
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.es.EmbeddedElasticSearch;
@@ -64,6 +66,7 @@ public class JamesCapabilitiesServerTest {
 
 return new GuiceJamesServerImpl()
 .combineWith(CassandraJamesServerMain.cassandraServerModule)
+.overrideWith((binder) -> 
binder.bind(PersistenceAdapter.class).to(MemoryPersistenceAdapter.class))
 .overrideWith(new TestElasticSearchModule(embeddedElasticSearch),
 new TestFilesystemModule(temporaryFolder),
 new 
TestJMAPServerModule(GetMessageListMethod.DEFAULT_MAXIMUM_LIMIT),

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
--
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
index 1dae37f..1fe7018 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/ActiveMQQueueModule.java
@@ -21,7 +21,10 @@ package org.apache.james.modules.server;
 
 import javax.jms.ConnectionFactory;
 
+import org.apache.activemq.store.PersistenceAdapter;
+import org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter;
 import org.apache.james.queue.activemq.ActiveMQMailQueueFactory;
+import org.apache.james.queue.activemq.EmbeddedActiveMQ;
 import org.apache.james.queue.api.MailQueueFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -37,6 +40,8 @@ public class ActiveMQQueueModule extends AbstractModule {
 
 @Override
 protected void configure() {
+bind(PersistenceAdapter.class).to(KahaDBPersistenceAdapter.class);
+bind(KahaDBPersistenceAdapter.class).in(Scopes.SINGLETON);
 bind(EmbeddedActiveMQ.class).in(Scopes.SINGLETON);
 }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7ac76b48/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java

[2/2] james-project git commit: JAMES-1891 upgrade activemq and switch persistence engine

2017-02-23 Thread btellier
JAMES-1891 upgrade activemq and switch persistence engine

Version 5.10 of ActiveMQ is the last one to support java-6


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/27d91f0f
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/27d91f0f
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/27d91f0f

Branch: refs/heads/master
Commit: 27d91f0f18721ad6af5fdc589458d97eae9fb81d
Parents: e253358
Author: Matthieu Baechler 
Authored: Fri Dec 16 23:15:26 2016 +0100
Committer: benwa 
Committed: Thu Feb 23 17:00:00 2017 +0700

--
 .../org/apache/james/modules/server/EmbeddedActiveMQ.java | 4 ++--
 server/pom.xml| 4 ++--
 server/queue/queue-activemq/pom.xml   | 7 ++-
 .../main/resources/META-INF/spring/activemq-queue-context.xml | 2 +-
 server/queue/queue-jms/pom.xml| 2 +-
 5 files changed, 12 insertions(+), 7 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/27d91f0f/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
--
diff --git 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
index 2c38535..51d72db 100644
--- 
a/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
+++ 
b/server/container/guice/guice-common/src/main/java/org/apache/james/modules/server/EmbeddedActiveMQ.java
@@ -29,7 +29,7 @@ import org.apache.activemq.broker.BrokerPlugin;
 import org.apache.activemq.broker.BrokerService;
 import org.apache.activemq.broker.jmx.ManagementContext;
 import org.apache.activemq.plugin.StatisticsBrokerPlugin;
-import org.apache.activemq.store.amq.AMQPersistenceAdapter;
+import org.apache.activemq.store.kahadb.KahaDBPersistenceAdapter;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.queue.activemq.FileSystemBlobTransferPolicy;
 
@@ -94,7 +94,7 @@ public class EmbeddedActiveMQ {
 ManagementContext managementContext = new ManagementContext();
 managementContext.setCreateConnector(false);
 brokerService.setManagementContext(managementContext);
-brokerService.setPersistenceAdapter(new AMQPersistenceAdapter());
+brokerService.setPersistenceAdapter(new KahaDBPersistenceAdapter());
 BrokerPlugin[] brokerPlugins = {new StatisticsBrokerPlugin()};
 brokerService.setPlugins(brokerPlugins);
 String[] transportConnectorsURIs = {"tcp://localhost:0"};

http://git-wip-us.apache.org/repos/asf/james-project/blob/27d91f0f/server/pom.xml
--
diff --git a/server/pom.xml b/server/pom.xml
index 3259d60..7080631 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -123,7 +123,7 @@
 
 Apache-James Mail Server
 
-5.7.0
+5.10.2
 0.8.0
 2.13.4
 10.9.1.0
@@ -1304,7 +1304,7 @@
 
 
 org.apache.activemq
-activemq-core
+activemq-broker
 ${activemq.version}
 
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/27d91f0f/server/queue/queue-activemq/pom.xml
--
diff --git a/server/queue/queue-activemq/pom.xml 
b/server/queue/queue-activemq/pom.xml
index 9f8c0fe..a6c164c 100644
--- a/server/queue/queue-activemq/pom.xml
+++ b/server/queue/queue-activemq/pom.xml
@@ -55,9 +55,14 @@
 
 
 org.apache.activemq
-activemq-core
+activemq-broker
 
 
+  org.apache.activemq
+  activemq-kahadb-store
+  ${activemq.version}
+   
+
 org.springframework
 spring-jms
 compile

http://git-wip-us.apache.org/repos/asf/james-project/blob/27d91f0f/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
--
diff --git 
a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
 
b/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
index 4e8ca76..3903250 100644
--- 
a/server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
+++ 

[1/2] james-project git commit: JAMES-1945 Introduce JamesCollectors::chunker

2017-02-23 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master f3140967a -> e25335842


JAMES-1945 Introduce JamesCollectors::chunker


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/d43ce78c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/d43ce78c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/d43ce78c

Branch: refs/heads/master
Commit: d43ce78c6b20f4e38e69376fb77ad6003ae4bb8a
Parents: f314096
Author: benwa 
Authored: Wed Feb 22 10:59:51 2017 +0700
Committer: benwa 
Committed: Thu Feb 23 16:18:21 2017 +0700

--
 .../james/util/streams/JamesCollectors.java |  36 +
 .../james/util/streams/JamesCollectorsTest.java | 130 +++
 2 files changed, 166 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/d43ce78c/server/container/util-java8/src/main/java/org/apache/james/util/streams/JamesCollectors.java
--
diff --git 
a/server/container/util-java8/src/main/java/org/apache/james/util/streams/JamesCollectors.java
 
b/server/container/util-java8/src/main/java/org/apache/james/util/streams/JamesCollectors.java
new file mode 100644
index 000..10c34bd
--- /dev/null
+++ 
b/server/container/util-java8/src/main/java/org/apache/james/util/streams/JamesCollectors.java
@@ -0,0 +1,36 @@
+/
+ * 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.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
+
+import com.google.common.base.Preconditions;
+
+public class JamesCollectors {
+public static  Collector> chunker(int 
chunkSize) {
+Preconditions.checkArgument(chunkSize > 0, "ChunkSize should be 
strictly positive");
+AtomicInteger counter = new AtomicInteger(-1);
+return Collectors.groupingBy(x -> counter.incrementAndGet() / 
chunkSize);
+}
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/d43ce78c/server/container/util-java8/src/test/java/org/apache/james/util/streams/JamesCollectorsTest.java
--
diff --git 
a/server/container/util-java8/src/test/java/org/apache/james/util/streams/JamesCollectorsTest.java
 
b/server/container/util-java8/src/test/java/org/apache/james/util/streams/JamesCollectorsTest.java
new file mode 100644
index 000..4981735
--- /dev/null
+++ 
b/server/container/util-java8/src/test/java/org/apache/james/util/streams/JamesCollectorsTest.java
@@ -0,0 +1,130 @@
+/
+ * 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  

[2/2] james-project git commit: JAMES-1945 Cassandra : Use chunker while fetching messages

2017-02-23 Thread btellier
JAMES-1945 Cassandra : Use chunker while fetching messages

This removes the limitation of 65336 messages retieved maximum


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/e2533584
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/e2533584
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/e2533584

Branch: refs/heads/master
Commit: e25335842d565e4db2b72ce288b65ea6c7180c65
Parents: d43ce78
Author: benwa 
Authored: Wed Feb 22 11:00:32 2017 +0700
Committer: benwa 
Committed: Thu Feb 23 16:18:25 2017 +0700

--
 .../mailbox/cassandra/mail/CassandraMessageDAO.java   | 14 --
 1 file changed, 12 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/e2533584/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
index 1ac38e5..48828ef 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
@@ -47,6 +47,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.CompletableFuture;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -76,6 +77,8 @@ import 
org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleProperty;
+import org.apache.james.util.CompletableFutureUtil;
+import org.apache.james.util.streams.JamesCollectors;
 
 import com.datastax.driver.core.BoundStatement;
 import com.datastax.driver.core.PreparedStatement;
@@ -98,6 +101,7 @@ import com.google.common.primitives.Bytes;
 
 public class CassandraMessageDAO {
 
+public static final int CHUNK_SIZE_ON_READ = 5000;
 private final CassandraAsyncExecutor cassandraAsyncExecutor;
 private final CassandraTypesProvider typesProvider;
 private final Factory messageIdFactory;
@@ -182,8 +186,14 @@ public class CassandraMessageDAO {
 }
 
 public CompletableFuture>> 
retrieveMessages(List messageIds, FetchType 
fetchType, Optional limit) {
-return retrieveRows(messageIds, fetchType, limit)
-.thenApply(resultSet -> 
toMessagesWithAttachmentRepresentation(messageIds, fetchType, resultSet));
+return CompletableFutureUtil.allOf(
+messageIds.stream()
+.collect(JamesCollectors.chunker(CHUNK_SIZE_ON_READ))
+.values()
+.stream()
+.map(ids -> retrieveRows(ids, fetchType, limit)
+.thenApply(resultSet -> 
toMessagesWithAttachmentRepresentation(messageIds, fetchType, resultSet
+.thenApply(stream -> stream.flatMap(Function.identity()));
 }
 
 private Stream> 
toMessagesWithAttachmentRepresentation(List 
messageIds, FetchType fetchType, ResultSet resultSet) {


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



[3/4] james-project git commit: JAMES-1945 Parralelize UID update in CassandraUidProvider

2017-02-22 Thread btellier
JAMES-1945 Parralelize UID update in CassandraUidProvider


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/6d94a8fe
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/6d94a8fe
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/6d94a8fe

Branch: refs/heads/master
Commit: 6d94a8fe624160ee0dc0e42ed8be51c570347cc0
Parents: f2b7cd7
Author: Benoit Tellier 
Authored: Mon Feb 20 11:58:13 2017 +0700
Committer: benwa 
Committed: Thu Feb 23 10:38:02 2017 +0700

--
 .../cassandra/mail/CassandraUidProvider.java| 145 +++
 .../CassandraSubscriptionManagerTest.java   |   7 +-
 2 files changed, 87 insertions(+), 65 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/6d94a8fe/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
index a6bd980..4aeb483 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
@@ -19,46 +19,71 @@
 
 package org.apache.james.mailbox.cassandra.mail;
 
+import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable.MAILBOX_ID;
 import static 
org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable.NEXT_UID;
+import static 
org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable.TABLE_NAME;
 
 import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
 
 import javax.inject.Inject;
 
-import org.apache.james.backends.cassandra.utils.CassandraConstants;
+import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
-import 
org.apache.james.backends.cassandra.utils.LightweightTransactionException;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.cassandra.CassandraId;
-import org.apache.james.mailbox.cassandra.table.CassandraMessageUidTable;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.james.util.OptionalConverter;
 
-import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
-import com.datastax.driver.core.querybuilder.BuiltStatement;
-import com.google.common.base.Throwables;
 
 public class CassandraUidProvider implements UidProvider {
-public final static int DEFAULT_MAX_RETRY = 10;
-private static final Logger LOG = 
LoggerFactory.getLogger(CassandraUidProvider.class);
+private static final int DEFAULT_MAX_RETRY = 10;
+private static final String CONDITION = "Condition";
 
-private final Session session;
+private final CassandraAsyncExecutor executor;
 private final FunctionRunnerWithRetry runner;
+private final PreparedStatement insertStatement;
+private final PreparedStatement updateStatement;
+private final PreparedStatement selectStatement;
 
 public CassandraUidProvider(Session session, int maxRetry) {
-this.session = session;
+this.executor = new CassandraAsyncExecutor(session);
 this.runner = new FunctionRunnerWithRetry(maxRetry);
+this.selectStatement = prepareSelect(session);
+this.updateStatement = prepareUpdate(session);
+this.insertStatement = prepareInsert(session);
+}
+
+private PreparedStatement prepareSelect(Session session) {
+return session.prepare(select(NEXT_UID)
+.from(TABLE_NAME)
+.where(eq(MAILBOX_ID, bindMarker(MAILBOX_ID;
+}
+
+private PreparedStatement prepareUpdate(Session session) {
+return 

[2/4] james-project git commit: JAMES-1945 Handle modSeq computation as future

2017-02-22 Thread btellier
JAMES-1945 Handle modSeq computation as future

Prepare statements for Cassandra ModSeqs


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f2b7cd70
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f2b7cd70
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f2b7cd70

Branch: refs/heads/master
Commit: f2b7cd70787072ceccc13442951118272c56cc85
Parents: 9200405
Author: Benoit Tellier 
Authored: Mon Feb 20 10:47:03 2017 +0700
Committer: benwa 
Committed: Thu Feb 23 10:37:41 2017 +0700

--
 .../cassandra/mail/CassandraModSeqProvider.java | 173 ---
 1 file changed, 110 insertions(+), 63 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/f2b7cd70/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
index af4ca5d..1a6a885 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.cassandra.mail;
 
+import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
@@ -29,38 +30,87 @@ import static 
org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTab
 import static 
org.apache.james.mailbox.cassandra.table.CassandraMessageModseqTable.TABLE_NAME;
 
 import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionException;
 
 import javax.inject.Inject;
 
-import org.apache.james.backends.cassandra.utils.CassandraConstants;
+import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.backends.cassandra.utils.FunctionRunnerWithRetry;
-import 
org.apache.james.backends.cassandra.utils.LightweightTransactionException;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.cassandra.CassandraId;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.store.mail.ModSeqProvider;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Session;
-import com.datastax.driver.core.querybuilder.BuiltStatement;
-import com.google.common.base.Throwables;
+import com.google.common.base.Supplier;
 
 public class CassandraModSeqProvider implements ModSeqProvider {
 
+public static final String MOD_SEQ_CONDITION = "modSeqCondition";
+
+public static class ExceptionRelay extends RuntimeException {
+private final MailboxException underlying;
+
+public ExceptionRelay(MailboxException underlying) {
+super(underlying);
+this.underlying = underlying;
+}
+
+public MailboxException getUnderlying() {
+return underlying;
+}
+}
+
+private static  T unbox(Supplier supplier) throws MailboxException {
+try {
+return supplier.get();
+} catch (CompletionException e) {
+if (e.getCause() instanceof ExceptionRelay) {
+throw ((ExceptionRelay) e.getCause()).getUnderlying();
+}
+throw e;
+}
+}
+
 private static final int DEFAULT_MAX_RETRY = 10;
-private static final Logger LOG = 
LoggerFactory.getLogger(CassandraModSeqProvider.class);
 private static final ModSeq FIRST_MODSEQ = new ModSeq(0);
-
-private final Session session;
+
+private final CassandraAsyncExecutor cassandraAsyncExecutor;
 private final FunctionRunnerWithRetry runner;
+private final PreparedStatement select;
+private final PreparedStatement update;
+private final PreparedStatement insert;
 
 public CassandraModSeqProvider(Session session, int maxRetry) {
-this.session = session;
+this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
 this.runner = new FunctionRunnerWithRetry(maxRetry);
+this.insert = 

[1/4] james-project git commit: JAMES-1945 Async retrier for Cassandra

2017-02-22 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master fbb8b42b8 -> f3140967a


JAMES-1945 Async retrier for Cassandra


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9200405d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9200405d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9200405d

Branch: refs/heads/master
Commit: 9200405d39805a0494d4e366545817f958af5cf2
Parents: fbb8b42
Author: benwa 
Authored: Wed Feb 22 14:26:32 2017 +0700
Committer: benwa 
Committed: Thu Feb 23 10:37:37 2017 +0700

--
 .../utils/FunctionRunnerWithRetry.java  | 25 +-
 .../utils/FunctionRunnerWithRetryTest.java  | 89 
 2 files changed, 112 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/9200405d/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetry.java
--
diff --git 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetry.java
 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetry.java
index 314b81d..86e1aba 100644
--- 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetry.java
+++ 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetry.java
@@ -19,14 +19,18 @@
 
 package org.apache.james.backends.cassandra.utils;
 
-import com.google.common.base.Preconditions;
-
 import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
 import java.util.function.BooleanSupplier;
+import java.util.function.Supplier;
 import java.util.stream.IntStream;
 
+import com.google.common.base.Preconditions;
+
 public class FunctionRunnerWithRetry {
 
+public static class RelayingException extends RuntimeException {}
+
 @FunctionalInterface
 public interface OptionalSupplier {
 Optional getAsOptional();
@@ -54,4 +58,21 @@ public class FunctionRunnerWithRetry {
 .orElseThrow(() -> new LightweightTransactionException(maxRetry))
 .get();
 }
+
+public  CompletableFuture 
executeAsyncAndRetrieveObject(Supplier> 
futureSupplier) {
+return executeAsyncAndRetrieveObject(futureSupplier, 0);
+}
+
+public  CompletableFuture 
executeAsyncAndRetrieveObject(Supplier> 
futureSupplier, int tries) {
+if (tries >= maxRetry) {
+return CompletableFuture.completedFuture(Optional.empty());
+}
+return futureSupplier.get()
+.thenCompose(optional -> {
+if (optional.isPresent()) {
+return CompletableFuture.completedFuture(optional);
+}
+return executeAsyncAndRetrieveObject(futureSupplier, tries + 
1);
+});
+}
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9200405d/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetryTest.java
--
diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetryTest.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetryTest.java
index 2f85653..a2ae9a4 100644
--- 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetryTest.java
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/FunctionRunnerWithRetryTest.java
@@ -21,6 +21,10 @@ package org.apache.james.backends.cassandra.utils;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.atomic.AtomicInteger;
+
 import org.apache.commons.lang.mutable.MutableInt;
 import org.junit.Test;
 
@@ -80,5 +84,90 @@ public class FunctionRunnerWithRetryTest {
 );
 assertThat(value.getValue()).isEqualTo(MAX_RETRY);
 }
+
+@Test
+public void asyncFunctionRunnerShouldWorkIfSucceedFirstTry() throws 
Exception {
+int value = 18;
+
+Optional result = new FunctionRunnerWithRetry(MAX_RETRY)
+.executeAsyncAndRetrieveObject(
+() -> CompletableFuture.completedFuture(Optional.of(value)))
+.join();
+
+assertThat(result).contains(value);
+}
+
+@Test
+public void 

[4/4] james-project git commit: JAMES-1945 Compute modseq and uid in parallel when saving a message

2017-02-22 Thread btellier
JAMES-1945 Compute modseq and uid in parallel when saving a message


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f3140967
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f3140967
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f3140967

Branch: refs/heads/master
Commit: f3140967ab888bed8d1dfc1cd0a219ae92ec87b1
Parents: 6d94a8f
Author: benwa 
Authored: Wed Feb 22 14:39:06 2017 +0700
Committer: benwa 
Committed: Thu Feb 23 10:38:06 2017 +0700

--
 .../CassandraMailboxSessionMapperFactory.java   | 10 ++
 .../cassandra/mail/CassandraMessageMapper.java  | 21 
 2 files changed, 19 insertions(+), 12 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/f3140967/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
--
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
index a1a7ff3..9dde162 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
@@ -37,6 +37,8 @@ import 
org.apache.james.mailbox.cassandra.mail.CassandraMessageIdDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdMapper;
 import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraMessageMapper;
+import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
+import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
 import org.apache.james.mailbox.cassandra.user.CassandraSubscriptionMapper;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -58,8 +60,8 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
 public static final Integer DEFAULT_MAX_RETRY = 1000;
 
 private final Session session;
-private final UidProvider uidProvider;
-private final ModSeqProvider modSeqProvider;
+private final CassandraUidProvider uidProvider;
+private final CassandraModSeqProvider modSeqProvider;
 private final CassandraMessageDAO messageDAO;
 private final CassandraMessageIdDAO messageIdDAO;
 private final CassandraMessageIdToImapUidDAO imapUidDAO;
@@ -72,7 +74,7 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
 private int maxRetry;
 
 @Inject
-public CassandraMailboxSessionMapperFactory(UidProvider uidProvider, 
ModSeqProvider modSeqProvider, Session session,
+public CassandraMailboxSessionMapperFactory(CassandraUidProvider 
uidProvider, CassandraModSeqProvider modSeqProvider, Session session,
 CassandraMessageDAO 
messageDAO, CassandraMessageIdDAO messageIdDAO, CassandraMessageIdToImapUidDAO 
imapUidDAO,
 CassandraMailboxCounterDAO 
mailboxCounterDAO, CassandraMailboxRecentsDAO mailboxRecentsDAO, 
CassandraMailboxDAO mailboxDAO,
 CassandraMailboxPathDAO 
mailboxPathDAO, CassandraFirstUnseenDAO firstUnseenDAO, 
@Named(CassandraMailboxDAO.MAX_ACL_RETRY) Integer maxRetry) {
@@ -91,7 +93,7 @@ public class CassandraMailboxSessionMapperFactory extends 
MailboxSessionMapperFa
 this.maxRetry = maxRetry;
 }
 
-public CassandraMailboxSessionMapperFactory(UidProvider uidProvider, 
ModSeqProvider modSeqProvider, Session session,
+public CassandraMailboxSessionMapperFactory(CassandraUidProvider 
uidProvider, CassandraModSeqProvider modSeqProvider, Session session,
 CassandraMessageDAO 
messageDAO, CassandraMessageIdDAO messageIdDAO, CassandraMessageIdToImapUidDAO 
imapUidDAO,
 CassandraMailboxCounterDAO 
mailboxCounterDAO, CassandraMailboxRecentsDAO mailboxRecentsDAO, 
CassandraMailboxDAO mailboxDAO,
 CassandraMailboxPathDAO 
mailboxPathDAO, CassandraFirstUnseenDAO firstUnseenDAO) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/f3140967/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
--
diff --git 

james-project git commit: JAMES-1939 TestMessageHook should be thread safe

2017-02-13 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 3c8cec1de -> c4d797e0d


JAMES-1939 TestMessageHook should be thread safe


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c4d797e0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c4d797e0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c4d797e0

Branch: refs/heads/master
Commit: c4d797e0df535de1832321f02dc1ef605b509bba
Parents: 3c8cec1
Author: Benoit Tellier 
Authored: Mon Feb 13 17:43:12 2017 +0700
Committer: Benoit Tellier 
Committed: Tue Feb 14 07:31:10 2017 +0700

--
 .../protocols/smtp/utils/TestMessageHook.java   | 26 ++--
 1 file changed, 13 insertions(+), 13 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/c4d797e0/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/utils/TestMessageHook.java
--
diff --git 
a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/utils/TestMessageHook.java
 
b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/utils/TestMessageHook.java
index d9fffa1..0623356 100644
--- 
a/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/utils/TestMessageHook.java
+++ 
b/protocols/smtp/src/test/java/org/apache/james/protocols/smtp/utils/TestMessageHook.java
@@ -18,11 +18,11 @@
  /
 package org.apache.james.protocols.smtp.utils;
 
-import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
 import org.apache.james.protocols.smtp.MailEnvelope;
 import org.apache.james.protocols.smtp.SMTPSession;
 import org.apache.james.protocols.smtp.hook.HookResult;
@@ -31,7 +31,7 @@ import org.apache.james.protocols.smtp.hook.MessageHook;
 
 public class TestMessageHook implements MessageHook {
 
-private final List queued = new ArrayList();
+private final CopyOnWriteArrayList queued = new 
CopyOnWriteArrayList();
 
 public HookResult onMessage(SMTPSession session, MailEnvelope mail) {
 queued.add(mail);
@@ -42,13 +42,13 @@ public class TestMessageHook implements MessageHook {
 return queued;
 }
 
-@Override
-public void init(Configuration config) throws ConfigurationException {
-
-}
-
-@Override
-public void destroy() {
-
-}
+@Override
+public void init(Configuration config) throws ConfigurationException {
+
+}
+
+@Override
+public void destroy() {
+
+}
 }


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



[2/4] james-project git commit: JAMES-1888 We need PathLocker for flags update to be safe at the mapper layer for memory implementation

2017-02-13 Thread btellier
JAMES-1888 We need PathLocker for flags update to be safe at the mapper layer 
for memory implementation


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/fa590f69
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/fa590f69
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/fa590f69

Branch: refs/heads/master
Commit: fa590f6978b21b25773187f924eda652783e908e
Parents: 3c8e421
Author: Benoit Tellier 
Authored: Mon Feb 13 18:51:21 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 13 18:51:21 2017 +0700

--
 .../org/apache/james/mailbox/store/mail/model/MapperProvider.java | 3 ++-
 .../apache/james/mailbox/store/mail/model/MessageMapperTest.java  | 1 +
 2 files changed, 3 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/fa590f69/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
--
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
index b6b8f74..e8fb38d 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
@@ -38,7 +38,8 @@ public interface MapperProvider {
 ATTACHMENT,
 ANNOTATION,
 MOVE,
-UNIQUE_MESSAGE_ID
+UNIQUE_MESSAGE_ID,
+THREAD_SAFE_FLAGS_UPDATE
 }
 
 List getSupportedCapabilities();

http://git-wip-us.apache.org/repos/asf/james-project/blob/fa590f69/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
--
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index f7a315d..61d1d5d 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -784,6 +784,7 @@ public class MessageMapperTest {
 
 @ContractTest
 public void setFlagsShouldWorkWithConcurrencyWithRemove() throws Exception 
{
+
Assume.assumeTrue(mapperProvider.getSupportedCapabilities().contains(MapperProvider.Capabilities.THREAD_SAFE_FLAGS_UPDATE));
 saveMessages();
 
 final int threadCount = 4;


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



[1/4] james-project git commit: JAMES-1888 No MessageIdMapper implemented for memory

2017-02-13 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 47d29f1a8 -> 3c8cec1de


JAMES-1888 No MessageIdMapper implemented for memory


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3c8e421b
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3c8e421b
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3c8e421b

Branch: refs/heads/master
Commit: 3c8e421b6ba32cbe792c257a080b4e7f7fbe0a68
Parents: 47d29f1
Author: Benoit Tellier 
Authored: Mon Feb 13 18:48:39 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 13 18:48:39 2017 +0700

--
 mailbox/memory/pom.xml   | 5 +
 .../james/mailbox/inmemory/mail/InMemoryMapperProvider.java  | 8 ++--
 2 files changed, 11 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/3c8e421b/mailbox/memory/pom.xml
--
diff --git a/mailbox/memory/pom.xml b/mailbox/memory/pom.xml
index 98279e0..71ba2cb 100644
--- a/mailbox/memory/pom.xml
+++ b/mailbox/memory/pom.xml
@@ -66,6 +66,11 @@
 test
 
 
+org.apache.james
+james-server-util
+test
+
+
 junit
 junit
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3c8e421b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
--
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
index bc33491..1f2f65a 100644
--- 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
@@ -94,7 +94,12 @@ public class InMemoryMapperProvider implements 
MapperProvider {
 
 @Override
 public List getSupportedCapabilities() {
-return ImmutableList.copyOf(Capabilities.values());
+return ImmutableList.of(
+Capabilities.MESSAGE,
+Capabilities.MAILBOX,
+Capabilities.ATTACHMENT,
+Capabilities.ANNOTATION,
+Capabilities.MOVE);
 }
 
 @Override
@@ -103,7 +108,6 @@ public class InMemoryMapperProvider implements 
MapperProvider {
 .nextModSeq(new MockMailboxSession("user"), mailbox);
 }
 
-
 @Override
 public long highestModSeq(Mailbox mailbox) throws MailboxException {
 return inMemoryMailboxSessionMapperFactory.getModSeqProvider()


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



[3/4] james-project git commit: JAMES-1888 Correct a test for MessageIdMapperTest

2017-02-13 Thread btellier
JAMES-1888 Correct a test for MessageIdMapperTest


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/b6feaa01
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/b6feaa01
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/b6feaa01

Branch: refs/heads/master
Commit: b6feaa017534f9bbb3201f42c098e742a58dfa6e
Parents: fa590f6
Author: Benoit Tellier 
Authored: Mon Feb 13 18:51:53 2017 +0700
Committer: Benoit Tellier 
Committed: Mon Feb 13 18:51:53 2017 +0700

--
 .../james/mailbox/store/mail/model/MessageIdMapperTest.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/b6feaa01/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
--
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
index b5c1070..fed386c 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
@@ -488,13 +488,13 @@ public class MessageIdMapperTest {
 .newFlags(newFlags)
 .build();
 UpdatedFlags expectedUpdatedFlags2 = UpdatedFlags.builder()
-.uid(message1.getUid())
+.uid(message1InOtherMailbox.getUid())
 .modSeq(modSeqBenwaWorkMailbox)
 .oldFlags(new Flags())
 .newFlags(newFlags)
 .build();
 
assertThat(flags).containsOnly(MapEntry.entry(benwaInboxMailbox.getMailboxId(), 
expectedUpdatedFlags),
-MapEntry.entry(benwaWorkMailbox.getMailboxId(), 
expectedUpdatedFlags2));
+MapEntry.entry(message1InOtherMailbox.getMailboxId(), 
expectedUpdatedFlags2));
 }
 
 @ContractTest


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



[4/4] james-project git commit: JAMES-1888 missing jar for runtime while playing contract tests

2017-02-13 Thread btellier
JAMES-1888 missing jar for runtime while  playing contract tests


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3c8cec1d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3c8cec1d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3c8cec1d

Branch: refs/heads/master
Commit: 3c8cec1dec609f8ceab9c62c24bd9322da590e5a
Parents: b6feaa0
Author: Benoit Tellier 
Authored: Mon Feb 13 18:52:27 2017 +0700
Committer: Benoit Tellier 
Committed: Tue Feb 14 07:28:04 2017 +0700

--
 mailbox/cassandra/pom.xml | 5 +
 mailbox/jpa/pom.xml   | 5 +
 2 files changed, 10 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/3c8cec1d/mailbox/cassandra/pom.xml
--
diff --git a/mailbox/cassandra/pom.xml b/mailbox/cassandra/pom.xml
index 2622c77..862fb98 100644
--- a/mailbox/cassandra/pom.xml
+++ b/mailbox/cassandra/pom.xml
@@ -218,6 +218,11 @@
 test-jar
 
 
+${project.groupId}
+james-server-util
+test
+
+
 com.fasterxml.jackson.core
 jackson-databind
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3c8cec1d/mailbox/jpa/pom.xml
--
diff --git a/mailbox/jpa/pom.xml b/mailbox/jpa/pom.xml
index 906d820..6630dc5 100644
--- a/mailbox/jpa/pom.xml
+++ b/mailbox/jpa/pom.xml
@@ -76,6 +76,11 @@
 test
 
 
+org.apache.james
+james-server-util
+test
+
+
 org.assertj
 assertj-core
 ${assertj-1.version}


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



[08/13] james-project git commit: JAMES-1934 implements hasAttachment search for lucene

2017-02-14 Thread btellier
JAMES-1934 implements hasAttachment search for lucene


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/810c764d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/810c764d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/810c764d

Branch: refs/heads/master
Commit: 810c764dedb1a19a2d15c32c981545f390fcf807
Parents: c1357bc
Author: Luc DUZAN 
Authored: Thu Feb 9 12:57:49 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:45 2017 +0700

--
 .../lucene/search/LuceneMessageSearchIndex.java | 29 
 1 file changed, 23 insertions(+), 6 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/810c764d/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
--
diff --git 
a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
 
b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
index 9b3c0c1..eb7ec7c 100644
--- 
a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
+++ 
b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
@@ -52,6 +52,7 @@ import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
 import org.apache.james.mailbox.model.SearchQuery;
 import org.apache.james.mailbox.model.SearchQuery.AllCriterion;
+import org.apache.james.mailbox.model.SearchQuery.AttachmentCriterion;
 import org.apache.james.mailbox.model.SearchQuery.ContainsOperator;
 import org.apache.james.mailbox.model.SearchQuery.Criterion;
 import org.apache.james.mailbox.model.SearchQuery.CustomFlagCriterion;
@@ -67,6 +68,7 @@ import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SearchUtil;
@@ -162,6 +164,11 @@ public class LuceneMessageSearchIndex extends 
ListeningMessageSearchIndex {
 public final static String UID_FIELD = "uid";
 
 /**
+ * {@link Field} boolean field that say if the message as an attachment or 
not
+ */
+public final static String HAS_ATTACHMENT_FIELD = "hasAttachment";
+
+/**
  * {@link Field} which will contain the {@link Flags} of the {@link 
MailboxMessage}
  */
 public final static String FLAGS_FIELD = "flags";
@@ -553,7 +560,7 @@ public class LuceneMessageSearchIndex extends 
ListeningMessageSearchIndex {
 // TODO: Better handling
 doc.add(new Field(MAILBOX_ID_FIELD, 
membership.getMailboxId().serialize().toUpperCase(Locale.ENGLISH), Store.YES, 
Index.NOT_ANALYZED));
 doc.add(new NumericField(UID_FIELD,Store.YES, 
true).setLongValue(membership.getUid().asLong()));
-
+doc.add(new Field(HAS_ATTACHMENT_FIELD, 
Boolean.toString(hasAttachment(membership)), Store.YES, Index.NOT_ANALYZED));
 if (shouldIndexMessageId == IndexMessageId.Required) {
 doc.add(new Field(MESSAGE_ID_FIELD, 
membership.getMessageId().serialize(), Store.YES, Index.NOT_ANALYZED));
 }
@@ -575,6 +582,7 @@ public class LuceneMessageSearchIndex extends 
ListeningMessageSearchIndex {
 SimpleContentHandler handler = new SimpleContentHandler() {
 
 
+@Override
 public void headers(Header header) {
 
 Date sentDate = null;
@@ -756,6 +764,11 @@ public class LuceneMessageSearchIndex extends 
ListeningMessageSearchIndex {
 return doc;
 }
 
+private static boolean hasAttachment(MailboxMessage membership) {
+   return FluentIterable.from(membership.getProperties())
+.anyMatch(PropertyBuilder.isHasAttachmentProperty());
+}
+
 private String toSentDateField(DateResolution res) {
 String field;
 switch (res) {
@@ -972,6 +985,10 @@ public class LuceneMessageSearchIndex extends 
ListeningMessageSearchIndex {
 }
 }
 
+private Query createAttachmentQuery(boolean isSet, Query inMailboxes) 
throws MailboxException, UnsupportedSearchException {
+return new TermQuery(new Term(HAS_ATTACHMENT_FIELD, 
Boolean.toString(isSet)));
+}
+
 /**
  * Return a {@link Query} which is build 

[02/13] james-project git commit: JAMES-1934 Merge IndexableMessageWithId into IndexableMessage and make it immutable

2017-02-14 Thread btellier
JAMES-1934 Merge IndexableMessageWithId into IndexableMessage and make it 
immutable


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/83e9e0c4
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/83e9e0c4
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/83e9e0c4

Branch: refs/heads/master
Commit: 83e9e0c46de33800ef88fd9c5a8492acec000541
Parents: 98e7ccb
Author: Luc DUZAN 
Authored: Thu Feb 9 11:22:19 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:45 2017 +0700

--
 .../elasticsearch/json/IndexableMessage.java| 551 +++
 .../json/IndexableMessageWithMessageId.java |  72 ---
 .../json/MessageToElasticSearchJson.java|  32 +-
 .../json/IndexableMessageTest.java  | 166 +-
 .../json/MessageToElasticSearchJsonTest.java|   4 +-
 5 files changed, 495 insertions(+), 330 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/83e9e0c4/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
--
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
index 6150b19..c6e3ce7 100644
--- 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
@@ -48,186 +48,288 @@ import com.google.common.collect.Multimap;
 
 public class IndexableMessage {
 
-public static final SimpleProperty HAS_ATTACHMENT_PROPERTY = new 
SimpleProperty(PropertyBuilder.JAMES_INTERNALS, PropertyBuilder.HAS_ATTACHMENT, 
"true");
+public static class Builder {
+private static ZonedDateTime getSanitizedInternalDate(MailboxMessage 
message, ZoneId zoneId) {
+if (message.getInternalDate() == null) {
+return ZonedDateTime.now();
+}
+return ZonedDateTime.ofInstant(
+Instant.ofEpochMilli(message.getInternalDate().getTime()),
+zoneId);
+}
+private IndexAttachments indexAttachments;
+private MailboxMessage message;
+private TextExtractor textExtractor;
+private List users;
 
-public static IndexableMessage from(MailboxMessage message, List 
users, TextExtractor textExtractor,
-ZoneId zoneId, IndexAttachments 
indexAttachments) {
+private ZoneId zoneId;
 
-Preconditions.checkNotNull(message.getMailboxId());
-Preconditions.checkArgument(!users.isEmpty());
-IndexableMessage indexableMessage = new IndexableMessage();
-try {
-MimePart parsingResult = new MimePartParser(message, 
textExtractor).parse();
-indexableMessage.users = 
users.stream().map(User::getUserName).collect(Guavate.toImmutableList());
-indexableMessage.bodyText = parsingResult.locateFirstTextBody();
-indexableMessage.bodyHtml = parsingResult.locateFirstHtmlBody();
-indexableMessage.hasAttachment = message.getProperties()
-.stream()
-.anyMatch(property -> 
property.equals(HAS_ATTACHMENT_PROPERTY));
-indexableMessage.setFlattenedAttachments(parsingResult, 
indexAttachments);
-
indexableMessage.copyHeaderFields(parsingResult.getHeaderCollection(), 
getSanitizedInternalDate(message, zoneId));
-indexableMessage.generateText();
-} catch (IOException | MimeException e) {
-throw Throwables.propagate(e);
+private Builder() {
 }
-indexableMessage.copyMessageFields(message, zoneId);
-return indexableMessage;
-}
 
-private void setFlattenedAttachments(MimePart parsingResult, 
IndexAttachments indexAttachments) {
-List mimeparts = parsingResult.getAttachmentsStream()
+public IndexableMessage build() {
+Preconditions.checkNotNull(message.getMailboxId());
+Preconditions.checkNotNull(message.getMessageId());
+Preconditions.checkNotNull(users);
+Preconditions.checkNotNull(textExtractor);
+Preconditions.checkNotNull(indexAttachments);
+Preconditions.checkNotNull(zoneId);
+Preconditions.checkState(!users.isEmpty());
+
+try {
+return instanciateIndexedMessage();
+} catch (IOException | MimeException e) {
+throw Throwables.propagate(e);
+}

[10/13] james-project git commit: JAMES-1929 Adding integration tests for hasAttachment filter support

2017-02-14 Thread btellier
JAMES-1929 Adding integration tests for hasAttachment filter support


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/983de8dd
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/983de8dd
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/983de8dd

Branch: refs/heads/master
Commit: 983de8dd1e0714dbf5256d7be7bea21aa7123221
Parents: 46feedc
Author: Benoit Tellier 
Authored: Wed Feb 8 17:04:36 2017 +0700
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:46 2017 +0700

--
 .../integration/GetMessageListMethodTest.java   | 46 
 1 file changed, 46 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/983de8dd/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
--
diff --git 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
index be275d9..034575c 100644
--- 
a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
+++ 
b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMessageListMethodTest.java
@@ -127,6 +127,52 @@ public abstract class GetMessageListMethodTest {
 }
 
 @Test
+public void getMessageListShouldSupportHasAttachmentSetToTrue() throws 
Exception {
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
+jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+ComposedMessageId message2 = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), 
new Date(), false, new Flags());
+jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ClassLoader.getSystemResourceAsStream("eml/oneInlinedImage.eml"), 
new Date(), false, new Flags());
+await();
+
+given()
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMessageList\", 
{\"filter\":{\"hasAttachment\":\"true\"}}, \"#0\"]]")
+.when()
+.post("/jmap")
+.then()
+.statusCode(200)
+.body(NAME, equalTo("messageList"))
+.body(ARGUMENTS + ".messageIds", 
contains(message2.getMessageId().serialize()));
+}
+
+@Test
+public void getMessageListShouldSupportHasAttachmentSetToFalse() throws 
Exception {
+
jmapServer.serverProbe().createMailbox(MailboxConstants.USER_NAMESPACE, 
username, "mailbox");
+
+ComposedMessageId message1 = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+new ByteArrayInputStream("Subject: 
test\r\n\r\ntestmail".getBytes()), new Date(), false, new Flags());
+jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ClassLoader.getSystemResourceAsStream("eml/twoAttachments.eml"), 
new Date(), false, new Flags());
+ComposedMessageId message3 = 
jmapServer.serverProbe().appendMessage(username, new 
MailboxPath(MailboxConstants.USER_NAMESPACE, username, "mailbox"),
+ClassLoader.getSystemResourceAsStream("eml/oneInlinedImage.eml"), 
new Date(), false, new Flags());
+await();
+
+given()
+.header("Authorization", accessToken.serialize())
+.body("[[\"getMessageList\", 
{\"filter\":{\"hasAttachment\":\"false\"}}, \"#0\"]]")
+.when()
+.post("/jmap")
+.then()
+.statusCode(200)
+.body(NAME, equalTo("messageList"))
+.body(ARGUMENTS + ".messageIds", 
contains(message1.getMessageId().serialize(), 
message3.getMessageId().serialize()));
+}
+
+@Test
 public void getMessageListShouldNotFailWhenHeaderIsValid() throws 
Exception {
 given()
 

[09/13] james-project git commit: JAMES-1934 suppress eclipse warning

2017-02-14 Thread btellier
JAMES-1934 suppress eclipse warning


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/a275f62d
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/a275f62d
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/a275f62d

Branch: refs/heads/master
Commit: a275f62d7ef83952579c18b24897bcdbea2de952
Parents: cdfe3f7
Author: Luc DUZAN 
Authored: Mon Feb 13 18:23:26 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:46 2017 +0700

--
 .../java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java | 1 -
 1 file changed, 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/a275f62d/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
--
diff --git 
a/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
 
b/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
index b83e6c1..ca83271 100644
--- 
a/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
+++ 
b/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
@@ -23,7 +23,6 @@ import org.junit.Test;
 /**
  * TODO this test class needs to be reviewed.
  */
-@SuppressWarnings("unused")
 public class JpaMigratorTest {
 
 @Test()


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



[12/13] james-project git commit: JAMES-1934 indexation handle invalid messageId instead of looking for backend indexation support

2017-02-14 Thread btellier
JAMES-1934 indexation handle invalid messageId instead of looking for backend 
indexation support


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/cdfe3f71
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/cdfe3f71
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/cdfe3f71

Branch: refs/heads/master
Commit: cdfe3f71371c1cddc2be47d04d56380591823dd5
Parents: 983de8d
Author: Luc DUZAN 
Authored: Fri Feb 10 14:09:28 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:46 2017 +0700

--
 .../elasticsearch/json/IndexableMessage.java|  4 +-
 .../json/MessageToElasticSearchJson.java| 72 ---
 .../ElasticSearchIntegrationTest.java   |  5 +-
 .../json/IndexableMessageTest.java  | 93 +++
 .../json/MessageToElasticSearchJsonTest.java| 52 +--
 .../lucene/search/LuceneMessageSearchIndex.java | 28 +++---
 .../LuceneMailboxMessageSearchIndexTest.java|  3 +-
 .../store/search/MessageSearchIndex.java|  5 --
 .../james/mailbox/store/search/SearchUtil.java  | 14 +++
 .../mailbox/store/search/SearchUtilTest.java| 94 +++-
 .../host/ElasticSearchHostSystem.java   |  3 +-
 11 files changed, 255 insertions(+), 118 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
--
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
index c6e3ce7..e5ad24e 100644
--- 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
@@ -36,6 +36,7 @@ import 
org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleProperty;
+import org.apache.james.mailbox.store.search.SearchUtil;
 import org.apache.james.mime4j.MimeException;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -69,7 +70,6 @@ public class IndexableMessage {
 
 public IndexableMessage build() {
 Preconditions.checkNotNull(message.getMailboxId());
-Preconditions.checkNotNull(message.getMessageId());
 Preconditions.checkNotNull(users);
 Preconditions.checkNotNull(textExtractor);
 Preconditions.checkNotNull(indexAttachments);
@@ -115,7 +115,7 @@ public class IndexableMessage {
 }
 
 private IndexableMessage instanciateIndexedMessage() throws 
IOException, MimeException {
-String messageId = message.getMessageId().serialize();
+String messageId = 
SearchUtil.getSerializedMessageIdIfSupportedByUnderlyingStorageOrNull(message);
 MimePart parsingResult = new MimePartParser(message, 
textExtractor).parse();
 
 List stringifiedUsers = users.stream()

http://git-wip-us.apache.org/repos/asf/james-project/blob/cdfe3f71/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
--
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
index d4c896e..aacd790 100644
--- 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/MessageToElasticSearchJson.java
@@ -25,13 +25,11 @@ import java.util.List;
 import javax.inject.Inject;
 import javax.mail.Flags;
 
-import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession.User;
 import org.apache.james.mailbox.elasticsearch.IndexAttachments;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -45,81 +43,45 @@ 

[13/13] james-project git commit: JAMES-1929 JMAP wiring for GetMessageList::hasAttachment filter

2017-02-14 Thread btellier
JAMES-1929 JMAP wiring for GetMessageList::hasAttachment filter


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/46feedce
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/46feedce
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/46feedce

Branch: refs/heads/master
Commit: 46feedcea1b9f609279dc12c33921c5036c9bcb6
Parents: 9fb956b
Author: Benoit Tellier 
Authored: Wed Feb 8 16:44:07 2017 +0700
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:46 2017 +0700

--
 .../apache/james/mailbox/model/SearchQuery.java | 12 +--
 .../james/jmap/utils/FilterToSearchQuery.java   | 24 ++
 .../jmap/utils/FilterToSearchQueryTest.java | 33 ++--
 3 files changed, 44 insertions(+), 25 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/46feedce/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index 80764a5..0c2203b 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -593,12 +593,20 @@ public class SearchQuery implements Serializable {
 return result;
 }
 
+public static Criterion hasAttachment(boolean value) {
+if (value) {
+return new AttachmentCriterion(BooleanOperator.set());
+} else {
+return new AttachmentCriterion(BooleanOperator.unset());
+}
+}
+
 public static Criterion hasAttachment() {
-return new AttachmentCriterion(BooleanOperator.set());
+return hasAttachment(true);
 }
 
 public static Criterion hasNoAttachment() {
-return new AttachmentCriterion(BooleanOperator.unset());
+return hasAttachment(false);
 }
 
 /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/46feedce/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
--
diff --git 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
index db7b485..d30c692 100644
--- 
a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
+++ 
b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/FilterToSearchQuery.java
@@ -23,7 +23,6 @@ import java.util.Date;
 
 import javax.mail.Flags.Flag;
 
-import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.jmap.model.Filter;
 import org.apache.james.jmap.model.FilterCondition;
 import org.apache.james.jmap.model.FilterOperator;
@@ -32,7 +31,6 @@ import org.apache.james.mailbox.model.SearchQuery.AddressType;
 import org.apache.james.mailbox.model.SearchQuery.Criterion;
 import org.apache.james.mailbox.model.SearchQuery.DateResolution;
 
-import com.github.fge.lambdas.Throwing;
 import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 
@@ -52,17 +50,15 @@ public class FilterToSearchQuery {
 
 private SearchQuery convertCondition(FilterCondition filter) {
 SearchQuery searchQuery = new SearchQuery();
-filter.getText().ifPresent(text -> {
-searchQuery.andCriteria(
-SearchQuery.or(ImmutableList.of(
-SearchQuery.address(AddressType.From, text),
-SearchQuery.address(AddressType.To, text),
-SearchQuery.address(AddressType.Cc, text),
-SearchQuery.address(AddressType.Bcc, text),
-SearchQuery.headerContains("Subject", text),
-SearchQuery.bodyContains(text)))
-);
-});
+filter.getText().ifPresent(text -> searchQuery.andCriteria(
+SearchQuery.or(ImmutableList.of(
+SearchQuery.address(AddressType.From, text),
+SearchQuery.address(AddressType.To, text),
+SearchQuery.address(AddressType.Cc, text),
+SearchQuery.address(AddressType.Bcc, text),
+SearchQuery.headerContains("Subject", text),
+SearchQuery.bodyContains(text)))
+));
 filter.getFrom().ifPresent(from -> 
searchQuery.andCriteria(SearchQuery.address(AddressType.From, 

[07/13] james-project git commit: JAMES-1934 implemens hasAttachment search for ES

2017-02-14 Thread btellier
JAMES-1934 implemens hasAttachment search for ES


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/c1357bca
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/c1357bca
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/c1357bca

Branch: refs/heads/master
Commit: c1357bca59a99a5e422068782fef24f5195b86e8
Parents: 59cfd84
Author: Luc DUZAN 
Authored: Thu Feb 9 12:56:53 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:45 2017 +0700

--
 .../elasticsearch/MailboxMappingFactory.java|  4 +
 .../elasticsearch/json/IndexableMessage.java| 24 --
 .../json/IndexableMessageWithMessageId.java |  6 +-
 .../elasticsearch/query/CriterionConverter.java |  6 ++
 .../json/IndexableMessageTest.java  | 80 +++-
 .../src/test/resources/eml/Toto.eml | 41 --
 .../store/src/test/resources/eml/htmlMail.json  |  2 +-
 .../src/test/resources/eml/nonTextual.json  |  2 +-
 .../store/src/test/resources/eml/spamMail.json  |  2 +-
 9 files changed, 111 insertions(+), 56 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
--
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
index aaa0009..7c54b40 100644
--- 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/MailboxMappingFactory.java
@@ -212,6 +212,10 @@ public class MailboxMappingFactory {
 .endObject()
 .endObject()
 
+.startObject(JsonMessageConstants.HAS_ATTACHMENT)
+.field(NodeMappingFactory.TYPE, 
NodeMappingFactory.BOOLEAN)
+.endObject()
+
 .startObject(JsonMessageConstants.TEXT)
 .field(NodeMappingFactory.TYPE, 
NodeMappingFactory.STRING)
 .field(NodeMappingFactory.ANALYZER, 
NodeMappingFactory.SNOWBALL)

http://git-wip-us.apache.org/repos/asf/james-project/blob/c1357bca/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
--
diff --git 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
index 770f558..6150b19 100644
--- 
a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
+++ 
b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/json/IndexableMessage.java
@@ -34,6 +34,8 @@ import 
org.apache.james.mailbox.elasticsearch.query.DateResolutionFormater;
 import org.apache.james.mailbox.extractor.TextExtractor;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleProperty;
 import org.apache.james.mime4j.MimeException;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -46,6 +48,8 @@ import com.google.common.collect.Multimap;
 
 public class IndexableMessage {
 
+public static final SimpleProperty HAS_ATTACHMENT_PROPERTY = new 
SimpleProperty(PropertyBuilder.JAMES_INTERNALS, PropertyBuilder.HAS_ATTACHMENT, 
"true");
+
 public static IndexableMessage from(MailboxMessage message, List 
users, TextExtractor textExtractor,
 ZoneId zoneId, IndexAttachments 
indexAttachments) {
 
@@ -57,6 +61,9 @@ public class IndexableMessage {
 indexableMessage.users = 
users.stream().map(User::getUserName).collect(Guavate.toImmutableList());
 indexableMessage.bodyText = parsingResult.locateFirstTextBody();
 indexableMessage.bodyHtml = parsingResult.locateFirstHtmlBody();
+indexableMessage.hasAttachment = message.getProperties()
+.stream()
+.anyMatch(property -> 
property.equals(HAS_ATTACHMENT_PROPERTY));
 indexableMessage.setFlattenedAttachments(parsingResult, 
indexAttachments);
 

[06/13] james-project git commit: JAMES-1934 Adding test demonstrating HasAttachment criterion do not return inlined images

2017-02-14 Thread btellier
JAMES-1934 Adding test demonstrating HasAttachment criterion do not return 
inlined images


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/7d7665ab
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/7d7665ab
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/7d7665ab

Branch: refs/heads/master
Commit: 7d7665ab0b14b226f3c2a308345765ce25fa74b8
Parents: 810c764
Author: Benoit Tellier 
Authored: Wed Feb 8 17:36:02 2017 +0700
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:45 2017 +0700

--
 .../store/search/AbstractMessageSearchIndexTest.java  | 14 ++
 1 file changed, 10 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/7d7665ab/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
--
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
index f64f88d..4e1d4fc 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
@@ -68,6 +68,7 @@ public abstract class AbstractMessageSearchIndexTest {
 private ComposedMessageId m8;
 private ComposedMessageId m9;
 private ComposedMessageId mailWithAttachment;
+private ComposedMessageId mailWithInlinedAttachment;
 private ComposedMessageId mOther;
 
 @Before
@@ -155,8 +156,6 @@ public abstract class AbstractMessageSearchIndexTest {
 session,
 true,
 new Flags(Flags.Flag.SEEN));
-// sentDate: Tue, 2 Jun 2015 12:00:55 +0200
-// Internal date : 2014/09/02 00:00:00.000
 m9 = inboxMessageManager.appendMessage(
 ClassLoader.getSystemResourceAsStream("eml/frnog.eml"),
 new Date(140960880L),
@@ -171,6 +170,13 @@ public abstract class AbstractMessageSearchIndexTest {
 true,
 new Flags("Hello you"));
 
+mailWithInlinedAttachment = myFolderMessageManager.appendMessage(
+
ClassLoader.getSystemResourceAsStream("eml/oneInlinedAttachment.eml"),
+new Date(140960890L),
+session,
+true,
+new Flags("Hello you"));
+
 await();
 }
 
@@ -245,7 +251,7 @@ public abstract class AbstractMessageSearchIndexTest {
 SearchQuery searchQuery = new SearchQuery();
 searchQuery.andCriteria(SearchQuery.hasNoAttachment());
 assertThat(messageSearchIndex.search(session, mailbox2, searchQuery))
-.containsOnly(mOther.getUid());
+.containsOnly(mOther.getUid(), mailWithInlinedAttachment.getUid());
 }
 
 @Test
@@ -935,6 +941,6 @@ public abstract class AbstractMessageSearchIndexTest {
 List actual = messageSearchIndex.search(session, 
MultimailboxesSearchQuery.from(searchQuery).build(), LIMIT);
 
 assertThat(actual).containsOnly(m1.getMessageId(), m2.getMessageId(), 
m3.getMessageId(), m4.getMessageId(), m5.getMessageId(),
-m6.getMessageId(), m7.getMessageId(), m8.getMessageId(), 
m9.getMessageId(), mOther.getMessageId(), mailWithAttachment.getMessageId());
+m6.getMessageId(), m7.getMessageId(), m8.getMessageId(), 
m9.getMessageId(), mOther.getMessageId(), mailWithAttachment.getMessageId(), 
mailWithInlinedAttachment.getMessageId());
 }
 }


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



[11/13] james-project git commit: JAMES-1934 suppress useless import

2017-02-14 Thread btellier
JAMES-1934 suppress useless import


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9fb956bf
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9fb956bf
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9fb956bf

Branch: refs/heads/master
Commit: 9fb956bf9d53289cdc48861a4ad95ba90219ccbe
Parents: 83e9e0c
Author: Luc DUZAN 
Authored: Mon Feb 13 11:44:57 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:46 2017 +0700

--
 .../src/main/java/org/apache/james/mailbox/model/SearchQuery.java  | 2 --
 .../org/apache/james/mailbox/store/search/MessageSearches.java | 2 --
 .../org/apache/james/mailbox/store/SimpleMailboxMembership.java| 2 --
 .../org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java | 2 --
 4 files changed, 8 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/9fb956bf/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index fbf8002..80764a5 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -32,8 +32,6 @@ import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
 import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.model.SearchQuery.Sort;
-
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9fb956bf/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
--
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
index 6a440b2..c478a40 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
@@ -47,7 +47,6 @@ import 
org.apache.james.mailbox.model.SearchQuery.DateResolution;
 import org.apache.james.mailbox.model.SearchQuery.UidRange;
 import org.apache.james.mailbox.store.ResultUtils;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.mail.model.Property;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.search.comparator.CombinedComparator;
 import org.apache.james.mime4j.MimeException;
@@ -71,7 +70,6 @@ import org.apache.james.mime4j.utils.search.MessageMatcher;
 
 import com.google.common.base.Function;
 import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
 import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;

http://git-wip-us.apache.org/repos/asf/james-project/blob/9fb956bf/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
--
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
index c69e7aa..c99aaf0 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
@@ -25,7 +25,6 @@ import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.SequenceInputStream;
 import java.io.Writer;
-import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -44,7 +43,6 @@ import 
org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
 
 import com.google.common.base.Objects;
-import com.google.common.base.Optional;
 import com.google.common.collect.ImmutableList;
 
 public class SimpleMailboxMembership implements MailboxMessage {

http://git-wip-us.apache.org/repos/asf/james-project/blob/9fb956bf/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
--
diff --git 
a/mailbox/tool/src/test/java/org/apache/james/mailbox/jpa/migrator/JpaMigratorTest.java
 

[05/13] james-project git commit: JAMES-1934 add tests to PropertyBuilder

2017-02-14 Thread btellier
JAMES-1934 add tests to PropertyBuilder


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/59cfd844
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/59cfd844
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/59cfd844

Branch: refs/heads/master
Commit: 59cfd844b98cfeeced35234dbcd8c32abff1635e
Parents: 3705c18
Author: Benoit Tellier 
Authored: Wed Feb 8 11:48:12 2017 +0700
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:45 2017 +0700

--
 .../mailbox/store/SimpleMailboxMembership.java  |  8 +++-
 .../mail/model/impl/PropertyBuilderTest.java| 49 
 2 files changed, 56 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/59cfd844/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
--
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
index fd67f05..c69e7aa 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
@@ -44,6 +44,8 @@ import 
org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
 
 import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.collect.ImmutableList;
 
 public class SimpleMailboxMembership implements MailboxMessage {
 
@@ -233,7 +235,11 @@ public class SimpleMailboxMembership implements 
MailboxMessage {
 }
 
 public List getProperties() {
-return new ArrayList(properties);
+if (properties != null) {
+return ImmutableList.copyOf(properties);
+} else {
+return ImmutableList.of();
+}
 }
 
 public Long getTextualLineCount() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/59cfd844/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java
--
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java
new file mode 100644
index 000..79b1548
--- /dev/null
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java
@@ -0,0 +1,49 @@
+/
+ * 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.store.mail.model.impl;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Test;
+
+public class PropertyBuilderTest {
+
+@Test
+public void emptyPropertyBuilderShouldCreateEmptyProperties() {
+assertThat(new PropertyBuilder().toProperties()).isEmpty();
+}
+
+@Test
+public void setHasAttachmentShouldAddFalseWhenCalledWithFalse() {
+PropertyBuilder propertyBuilder = new PropertyBuilder();
+propertyBuilder.setHasAttachment(false);
+assertThat(propertyBuilder.toProperties())
+.containsOnly(new SimpleProperty(PropertyBuilder.JAMES_INTERNALS, 
PropertyBuilder.HAS_ATTACHMENT, "false"));
+}
+
+@Test
+public void setHasAttachmentShouldAddTrueWhenCalledWithTrue() {
+PropertyBuilder propertyBuilder 

[01/13] james-project git commit: JAMES-1934 StoreMessageManager should position a property for non inline attachment detection

2017-02-14 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 3c2e5eddb -> a275f62d7


JAMES-1934 StoreMessageManager should position a property for non inline 
attachment detection


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/de54a6ea
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/de54a6ea
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/de54a6ea

Branch: refs/heads/master
Commit: de54a6eaf73a90ce3cb9fa92ab22c731cceb7441
Parents: 3c2e5ed
Author: Benoit Tellier 
Authored: Wed Feb 8 10:41:29 2017 +0700
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:39 2017 +0700

--
 .../james/mailbox/store/StoreMessageManager.java   | 13 +
 .../mailbox/store/mail/model/impl/PropertyBuilder.java | 10 --
 2 files changed, 21 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/de54a6ea/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
--
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index a7febbe..60c7d19 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -94,6 +94,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
 import com.google.common.collect.ImmutableList;
 
 /**
@@ -398,6 +400,8 @@ public class StoreMessageManager implements 
org.apache.james.mailbox.MessageMana
 final int size = (int) file.length();
 
 final List attachments = 
extractAttachments(contentIn);
+
propertyBuilder.setHasAttachment(hasNonInlinedAttachment(attachments));
+
 final MailboxMessage message = createMessage(internalDate, size, 
bodyStartOctet, contentIn, flags, propertyBuilder, attachments);
 
 new QuotaChecker(quotaManager, quotaRootResolver, 
mailbox).tryAddition(1, size);
@@ -439,6 +443,15 @@ public class StoreMessageManager implements 
org.apache.james.mailbox.MessageMana
 
 }
 
+private boolean hasNonInlinedAttachment(List 
attachments) {
+return FluentIterable.from(attachments).anyMatch(new 
Predicate() {
+@Override
+public boolean apply(MessageAttachment input) {
+return !input.isInline();
+}
+});
+}
+
 private List extractAttachments(SharedFileInputStream 
contentIn) {
 try {
 return messageParser.retrieveAttachments(contentIn);

http://git-wip-us.apache.org/repos/asf/james-project/blob/de54a6ea/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
--
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 deac8ed..c42aa0c 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
@@ -53,8 +53,10 @@ import org.apache.james.mailbox.store.mail.model.Property;
  * Builds properties
  */
 public class PropertyBuilder {
-
+
 private static final int INITIAL_CAPACITY = 32;
+public static final String JAMES_INTERNALS = "JAMES_INTERNALS";
+public static final String HAS_ATTACHMENT = "HAS_ATTACHMENT";
 
 private Long textualLineCount;
 private final List properties;
@@ -218,7 +220,11 @@ public class PropertyBuilder {
 public void setMediaType(String value) {
 setProperty(MIME_MIME_TYPE_SPACE, MIME_MEDIA_TYPE_NAME, value);
 }
-
+
+public void setHasAttachment(boolean value) {
+setProperty(JAMES_INTERNALS, HAS_ATTACHMENT, Boolean.toString(value));
+}
+
 /**
  * Gets the MIME content subtype.
  * 


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



[03/13] james-project git commit: JAMES-1934 add missing override

2017-02-14 Thread btellier
JAMES-1934 add missing override


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/98e7ccb1
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/98e7ccb1
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/98e7ccb1

Branch: refs/heads/master
Commit: 98e7ccb113e645020ec0420907b2235c6145bc86
Parents: 7d7665a
Author: Luc DUZAN 
Authored: Wed Feb 8 16:27:10 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:45 2017 +0700

--
 .../apache/james/mailbox/model/SearchQuery.java  | 19 +++
 1 file changed, 19 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/98e7ccb1/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index a5eeca6..fbf8002 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -821,6 +821,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("lowValue", lowValue)
@@ -886,6 +887,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("lowValue", lowValue)
@@ -957,6 +959,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("criteria", criteria)
@@ -994,6 +997,7 @@ public class SearchQuery implements Serializable {
 return 1729;
 }
 
+@Override
 public String toString() {
 return "AllCriterion";
 }
@@ -1061,6 +1065,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("operator", operator)
@@ -1118,6 +1123,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("operator", operator)
@@ -1164,6 +1170,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("operator", operator)
@@ -1209,6 +1216,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("operator", operator)
@@ -1251,6 +1259,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("operator", operator)
@@ -1309,6 +1318,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("operator", operator)
@@ -1414,6 +1424,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("operator", operator)
@@ -1458,6 +1469,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("operator", operator)
@@ -1512,6 +1524,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return MoreObjects.toStringHelper(this)
 .add("address", address)
@@ -1557,6 +1570,7 @@ public class SearchQuery implements Serializable {
 return false;
 }
 
+@Override
 public String toString() {
 return 

[04/13] james-project git commit: JAMES-1934 add hasAttachment criterion

2017-02-14 Thread btellier
JAMES-1934 add hasAttachment criterion


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/3705c186
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/3705c186
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/3705c186

Branch: refs/heads/master
Commit: 3705c186061dd77a7387cd2ccef45dcaba2bd66d
Parents: de54a6e
Author: Luc DUZAN 
Authored: Thu Feb 9 12:54:34 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 15 06:59:45 2017 +0700

--
 .../apache/james/mailbox/model/SearchQuery.java | 53 
 .../store/mail/model/impl/PropertyBuilder.java  | 13 +
 .../mailbox/store/search/MessageSearches.java   | 13 +
 .../search/AbstractMessageSearchIndexTest.java  | 27 +-
 4 files changed, 105 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/3705c186/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
--
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
index 914a7b6..a5eeca6 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
@@ -32,6 +32,7 @@ import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.model.SearchQuery.Sort;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
@@ -594,6 +595,14 @@ public class SearchQuery implements Serializable {
 return result;
 }
 
+public static Criterion hasAttachment() {
+return new AttachmentCriterion(BooleanOperator.set());
+}
+
+public static Criterion hasNoAttachment() {
+return new AttachmentCriterion(BooleanOperator.unset());
+}
+
 /**
  * Creates a filter on the given flag selecting messages where the given
  * flag is selected.
@@ -1308,6 +1317,50 @@ public class SearchQuery implements Serializable {
 }
 }
 
+/***
+ * Filter on attachment presence
+ */
+public static class AttachmentCriterion extends Criterion {
+private final BooleanOperator operator;
+
+private AttachmentCriterion(BooleanOperator operator) {
+this.operator = operator;
+}
+
+/**
+ * Gets the test to be preformed.
+ *
+ * @return the BooleanOperator, not null
+ */
+public BooleanOperator getOperator() {
+return operator;
+}
+
+@Override
+public int hashCode() {
+return Objects.hashCode(operator);
+}
+
+@Override
+public boolean equals(Object obj) {
+if (obj instanceof AttachmentCriterion) {
+AttachmentCriterion that = (AttachmentCriterion) obj;
+
+return Objects.equal(this.operator, that.operator);
+}
+
+return false;
+}
+
+@Override
+public String toString() {
+return MoreObjects.toStringHelper(this)
+.add("operator", operator)
+.toString();
+}
+}
+
+
 /**
  * Filters on a standard flag.
  */

http://git-wip-us.apache.org/repos/asf/james-project/blob/3705c186/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
--
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 c42aa0c..152f874 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
@@ -49,6 +49,8 @@ import java.util.TreeMap;
 
 import org.apache.james.mailbox.store.mail.model.Property;
 
+import com.google.common.base.Predicate;
+
 /**
  * Builds properties
  */
@@ -58,6 +60,17 @@ public class PropertyBuilder {
 public static final String JAMES_INTERNALS = "JAMES_INTERNALS";
 public static final String HAS_ATTACHMENT = "HAS_ATTACHMENT";
 
+public static Predicate isHasAttachmentProperty() {
+return new Predicate() {
+@Override
+public boolean apply(Property input) {
+return 
input.getNamespace().equals(PropertyBuilder.JAMES_INTERNALS)
+&& 

james-project git commit: JAMES-1940 Update javadoc with new supportsVirtualHosting tag

2017-02-14 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master a275f62d7 -> adbec1a7d


JAMES-1940 Update javadoc with new supportsVirtualHosting tag


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/adbec1a7
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/adbec1a7
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/adbec1a7

Branch: refs/heads/master
Commit: adbec1a7d586f9323c333e96f0a17e93d4d33a5d
Parents: a275f62
Author: Raphael Ouazana 
Authored: Tue Feb 14 15:33:22 2017 +0100
Committer: Benoit Tellier 
Committed: Wed Feb 15 07:04:06 2017 +0700

--
 .../apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java | 9 +
 1 file changed, 9 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/adbec1a7/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
--
diff --git 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
index f828cb5..7d8ff6c 100644
--- 
a/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
+++ 
b/server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
@@ -220,6 +220,15 @@ import com.google.common.base.Optional;
  * administratorId: (optional) User identifier of the administrator 
user.
  * The administrator user is allowed to authenticate as other users.
  * 
+ * 
+ *
+ * 
+ * The supportsVirtualHosting tag allows you to define this repository 
as supporing
+ * virtual hosting. For this LDAP repository, it means users will be looked 
for by their email
+ * address instead of their unique identifier.
+ * Generally to make it work, you need to configure userIdAttribute 
attribute to map
+ * to a mail attribute such as mail instead of an unique id 
identifier.
+ * 
  *
  * @see ReadOnlyLDAPUser
  * @see ReadOnlyLDAPGroupRestriction


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



[1/2] james-project git commit: JAMES-1905: Make fixture test for cassandra

2017-01-18 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 40b25f848 -> 105b6da03


JAMES-1905: Make fixture test for cassandra


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/487825de
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/487825de
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/487825de

Branch: refs/heads/master
Commit: 487825de1864353d350d08ad2b16d051c532182c
Parents: 40b25f8
Author: Quynh Nguyen 
Authored: Mon Jan 9 10:38:40 2017 +0700
Committer: Benoit Tellier 
Committed: Thu Jan 19 09:22:43 2017 +0700

--
 .../CassandraMessageIdManagerTestSystem.java| 66 ++
 .../cassandra/CassandraTestSystemFixture.java   | 95 
 2 files changed, 102 insertions(+), 59 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/487825de/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
--
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
index b29a8d1..535e88d 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
@@ -19,90 +19,38 @@
 
 package org.apache.james.mailbox.cassandra;
 
-import static org.mockito.Mockito.mock;
-
 import java.util.Date;
 
 import javax.mail.Flags;
 import javax.mail.util.SharedByteArrayInputStream;
 
-import org.apache.james.backends.cassandra.CassandraCluster;
-import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraMessageIdToImapUidDAO;
-import org.apache.james.mailbox.cassandra.mail.CassandraModSeqProvider;
-import org.apache.james.mailbox.cassandra.mail.CassandraUidProvider;
-import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraAnnotationModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraAttachmentModule;
-import 
org.apache.james.mailbox.cassandra.modules.CassandraMailboxCounterModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraModSeqModule;
-import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.QuotaManager;
-import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.MessageIdManagerTestSystem;
-import org.apache.james.mailbox.store.NoMailboxPathLocker;
-import org.apache.james.mailbox.store.StoreMessageIdManager;
 import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
-import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
-import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver;
 
 import com.google.common.base.Charsets;
 import com.google.common.base.Throwables;
 
 public class CassandraMessageIdManagerTestSystem extends 
MessageIdManagerTestSystem {
 
-private static final CassandraCluster CASSANDRA = 
CassandraCluster.create(new CassandraModuleComposite(
-new CassandraAclModule(),
-new CassandraMailboxModule(),
-new CassandraMessageModule(),
-new CassandraMailboxCounterModule(),
-new CassandraUidModule(),
-new CassandraModSeqModule(),
-new CassandraAttachmentModule(),
-new CassandraAnnotationModule()));
-public static final int MOD_SEQ = 452;
-
 public static MessageIdManagerTestSystem createTestingData(QuotaManager 
quotaManager, 

[2/2] james-project git commit: JAMES-1905: Add some tests combining MessageIdManager and MessageManager

2017-01-18 Thread btellier
JAMES-1905: Add some tests combining MessageIdManager and MessageManager


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/105b6da0
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/105b6da0
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/105b6da0

Branch: refs/heads/master
Commit: 105b6da03f1d5b368196574b71d8c6f1177ce4ff
Parents: 487825d
Author: Quynh Nguyen 
Authored: Mon Jan 9 10:34:20 2017 +0700
Committer: Benoit Tellier 
Committed: Thu Jan 19 09:22:48 2017 +0700

--
 .../CassandraCombinationManagerTest.java|  35 ++
 .../CassandraCombinationManagerTestSystem.java  |  69 
 .../InMemoryCombinationManagerTest.java |  30 ++
 .../InMemoryCombinationManagerTestSystem.java   |  59 +++
 .../MessageIdManagerTestSystemProvider.java |   6 +
 .../store/AbstractCombinationManagerTest.java   | 372 +++
 .../store/CombinationManagerTestSystem.java |  52 +++
 7 files changed, 623 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/105b6da0/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
--
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
new file mode 100644
index 000..d642815
--- /dev/null
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
@@ -0,0 +1,35 @@
+/
+ * 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;
+
+import static org.mockito.Mockito.mock;
+
+import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.store.AbstractCombinationManagerTest;
+import org.apache.james.mailbox.store.CombinationManagerTestSystem;
+import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
+import org.apache.james.mailbox.store.quota.NoQuotaManager;
+
+public class CassandraCombinationManagerTest extends 
AbstractCombinationManagerTest {
+@Override
+public CombinationManagerTestSystem createTestingData() throws Exception {
+return CassandraCombinationManagerTestSystem.createTestingData(new 
NoQuotaManager(), 
MailboxEventDispatcher.ofListener(mock(MailboxListener.class)));
+}
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/105b6da0/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
--
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
new file mode 100644
index 000..d3387fd
--- /dev/null
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
@@ -0,0 +1,69 @@
+/
+ * 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   *
+ * *
+ * 

[2/2] james-project git commit: MAILET-150 Add the icalendar dependancy

2017-01-19 Thread btellier
MAILET-150 Add the icalendar dependancy


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9ca2ca73
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9ca2ca73
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9ca2ca73

Branch: refs/heads/master
Commit: 9ca2ca736557bf66c4a03da20b32d7194fbd6d73
Parents: 10fac2c
Author: Benoit Tellier 
Authored: Thu Jan 19 18:07:32 2017 +0700
Committer: Benoit Tellier 
Committed: Thu Jan 19 18:07:32 2017 +0700

--
 server/container/guice/cassandra-guice/pom.xml | 5 +
 1 file changed, 5 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/9ca2ca73/server/container/guice/cassandra-guice/pom.xml
--
diff --git a/server/container/guice/cassandra-guice/pom.xml 
b/server/container/guice/cassandra-guice/pom.xml
index 8474264..2f49a97 100644
--- a/server/container/guice/cassandra-guice/pom.xml
+++ b/server/container/guice/cassandra-guice/pom.xml
@@ -217,6 +217,11 @@
 test
 
 
+org.apache.james
+apache-mailet-icalendar
+${project.version}
+
+
 ${project.groupId}
 apache-james-mailbox-tika
 


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



[1/2] james-project git commit: MAILET-150 Correct rat plugin on ICS

2017-01-19 Thread btellier
Repository: james-project
Updated Branches:
  refs/heads/master 105b6da03 -> 9ca2ca736


MAILET-150 Correct rat plugin on ICS


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/10fac2c9
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/10fac2c9
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/10fac2c9

Branch: refs/heads/master
Commit: 10fac2c9f5cc209237f2cf127807bf3730251910
Parents: 105b6da
Author: Benoit Tellier 
Authored: Thu Jan 19 18:05:57 2017 +0700
Committer: Benoit Tellier 
Committed: Thu Jan 19 18:05:57 2017 +0700

--
 mailet/pom.xml | 1 +
 1 file changed, 1 insertion(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/10fac2c9/mailet/pom.xml
--
diff --git a/mailet/pom.xml b/mailet/pom.xml
index 8b443b0..a9fcced 100644
--- a/mailet/pom.xml
+++ b/mailet/pom.xml
@@ -280,6 +280,7 @@
 **/LICENSE*
 **/target/**
 **/*.iml
+**/*.ics
 src/site/**
 
 


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



[5/6] james-project git commit: JAMES-1947 Add more combination testing between MessageManager and MessageIdManager

2017-02-27 Thread btellier
JAMES-1947 Add more combination testing between MessageManager and 
MessageIdManager


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/adc2e3ba
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/adc2e3ba
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/adc2e3ba

Branch: refs/heads/master
Commit: adc2e3babd246048e6b8c7e225b621f9afc93e15
Parents: 443d0a4
Author: Quynh Nguyen 
Authored: Wed Feb 22 15:54:12 2017 +0700
Committer: benwa 
Committed: Tue Feb 28 10:37:10 2017 +0700

--
 .../store/AbstractCombinationManagerTest.java   | 72 
 .../store/TestMailboxSessionMapperFactory.java  |  5 ++
 2 files changed, 77 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/james-project/blob/adc2e3ba/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
--
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
index 2bfa4dd..bba5bc0 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
@@ -28,6 +28,7 @@ import java.util.List;
 import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 
+import org.apache.james.mailbox.FlagsBuilder;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageIdManager;
@@ -59,6 +60,9 @@ public abstract class AbstractCombinationManagerTest {
 private static final byte[] MAIL_CONTENT = "Subject: 
test\r\n\r\ntestmail".getBytes();
 private static final int DEFAULT_MAXIMUM_LIMIT = 256;
 
+private static final String USER_FLAGS_VALUE = "User Flags";
+private static final String ANOTHER_USER_FLAGS_VALUE = "Another User 
Flags";
+
 private MailboxManager mailboxManager;
 private MessageIdManager messageIdManager;
 private MessageManager messageManager1;
@@ -360,6 +364,74 @@ public abstract class AbstractCombinationManagerTest {
 .extractingResultOf("getMessageId").containsOnly(messageId);
 }
 
+@Test
+public void 
appendMessageFromMessageManagerAndSetInMailboxFromMessageIdManagerShouldUpdateApplicableFlag()
 throws Exception {
+Flags messageFlag = new FlagsBuilder()
+.add(Flag.ANSWERED)
+.add(USER_FLAGS_VALUE)
+.build();
+
+MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
messageFlag).getMessageId();
+
+messageIdManager.setInMailboxes(messageId, 
ImmutableList.of(mailbox1.getMailboxId(), mailbox2.getMailboxId()), session);
+
+assertThat(messageManager1.getApplicableFlag(session))
+.isEqualTo(messageFlag);
+assertThat(messageManager2.getApplicableFlag(session))
+.isEqualTo(messageFlag);
+}
+
+@Test
+public void 
appendMessageFromMessageManagerAndSetFlagsFromMessageIdManagerShouldUnionApplicableFlag()
 throws Exception {
+Flags messageFlag = new FlagsBuilder()
+.add(Flag.ANSWERED)
+.add(USER_FLAGS_VALUE)
+.build();
+
+Flags deleted = new FlagsBuilder()
+.add(Flag.DELETED)
+.add(USER_FLAGS_VALUE, ANOTHER_USER_FLAGS_VALUE)
+.build();
+
+MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
messageFlag).getMessageId();
+
+messageIdManager.setFlags(deleted, FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
+
+assertThat(messageManager1.getApplicableFlag(session))
+.isEqualTo(new FlagsBuilder()
+.add(Flag.ANSWERED, Flag.DELETED)
+.add(USER_FLAGS_VALUE, ANOTHER_USER_FLAGS_VALUE)
+.build());
+}
+
+@Test
+public void 
setFlagsFromMessageManagerAndSetFlagsFromMessageIdManagerShouldUpdateSameApplicableFlag()
 throws Exception {
+Flags messageFlag = new Flags(Flag.ANSWERED);
+Flags deleted = new Flags(Flag.DELETED);
+MessageId messageId = messageManager1.appendMessage(new 
ByteArrayInputStream(MAIL_CONTENT), new Date(), session, false, 
messageFlag).getMessageId();
+
+messageIdManager.setFlags(deleted, FlagsUpdateMode.ADD, messageId, 
ImmutableList.of(mailbox1.getMailboxId()), session);
+messageManager1.setFlags(deleted, FlagsUpdateMode.ADD, 

<    1   2   3   4   5   6   7   8   9   10   >