[2/2] james-project git commit: JAMES-1922 Introduce LDAP usersRepository tests
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 DupratAuthored: 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
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 DupratAuthored: 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
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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 DUZANAuthored: 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
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 DUZANAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 DupratAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 DupratAuthored: 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
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 TellierAuthored: 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
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 DupratAuthored: 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
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 DupratAuthored: 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
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 TellierAuthored: 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
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
[11/15] james-project git commit: JAMES-1785 Update message documentation
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 NguyenAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 NguyenAuthored: 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
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 NguyenAuthored: 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
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 NguyenAuthored: 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
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 NguyenAuthored: 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
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 TellierAuthored: 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
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 NguyenAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 NguyenAuthored: 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
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 NguyenAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 OuazanaAuthored: 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
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 TellierAuthored: 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
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 BenoitAuthored: 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)
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 DUZANAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 BenoitAuthored: 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
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 BaechlerAuthored: 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
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 BaechlerAuthored: 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
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: benwaAuthored: 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
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: benwaAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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: benwaAuthored: 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
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: benwaAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 DUZANAuthored: 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
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 DUZANAuthored: 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
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 TellierAuthored: 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
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 DUZANAuthored: 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
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 DUZANAuthored: 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
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 TellierAuthored: 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
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 DUZANAuthored: 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
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 TellierAuthored: 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
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 DUZANAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 DUZANAuthored: 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
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 DUZANAuthored: 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
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 OuazanaAuthored: 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
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 NguyenAuthored: 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
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 NguyenAuthored: 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
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 TellierAuthored: 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
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 TellierAuthored: 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
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 NguyenAuthored: 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,