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

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

commit 763ba7467af0d5d4812b1357785fa9129c94688b
Author: Matthieu Baechler <[email protected]>
AuthorDate: Mon Jul 22 17:01:07 2019 +0200

    JAMES-2813 simplify transition handling by providing a list function in 
SchemaVersion
---
 .../migration/CassandraMigrationService.java       | 20 +++++++--------
 .../backends/cassandra/versions/SchemaVersion.java | 13 ++++++++++
 .../cassandra/versions/SchemaVersionTest.java      | 29 ++++++++++++++++++++++
 3 files changed, 51 insertions(+), 11 deletions(-)

diff --git 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java
 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java
index 003d42a..7c71cbd 100644
--- 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java
+++ 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java
@@ -21,7 +21,6 @@ package org.apache.james.backends.cassandra.migration;
 
 import static 
org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager.DEFAULT_VERSION;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -37,6 +36,8 @@ import org.apache.james.task.Task;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.steveash.guavate.Guavate;
+
 public class CassandraMigrationService {
     public static final String LATEST_VERSION = "latestVersion";
     private final CassandraSchemaVersionDAO schemaVersionDAO;
@@ -59,18 +60,15 @@ public class CassandraMigrationService {
         return Optional.of(latestVersion);
     }
 
-    public Task upgradeToVersion(SchemaVersion newVersion) {
+    public Task upgradeToVersion(SchemaVersion target) {
         SchemaVersion currentVersion = 
getCurrentVersion().orElse(DEFAULT_VERSION);
 
-        List<Migration> migrations = new ArrayList<>();
-        SchemaVersion migrateTo = currentVersion.next();
-        while (newVersion.isAfterOrEquals(migrateTo)) {
-            SchemaTransition transition = SchemaTransition.to(migrateTo);
-            validateTransitionExists(transition);
-            migrations.add(toMigration(transition));
-            migrateTo = migrateTo.next();
-        }
-        return new MigrationTask(migrations, newVersion);
+        List<Migration> migrations = 
currentVersion.listTransitionsForTarget(target)
+                .stream()
+                .map(this::validateTransitionExists)
+                .map(this::toMigration)
+                .collect(Guavate.toImmutableList());
+        return new MigrationTask(migrations, target);
     }
 
     private SchemaTransition validateTransitionExists(SchemaTransition 
transition) {
diff --git 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java
 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java
index f1b3d41..dcf657b 100644
--- 
a/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java
+++ 
b/backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java
@@ -19,6 +19,8 @@
 
 package org.apache.james.backends.cassandra.versions;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Objects;
 
 import com.google.common.base.MoreObjects;
@@ -52,6 +54,17 @@ public class SchemaVersion {
         return this.value < other.value;
     }
 
+    public List<SchemaTransition> listTransitionsForTarget(SchemaVersion 
target) {
+        List<SchemaTransition> transitions = new ArrayList<>();
+        SchemaVersion migrateTo = next();
+        while (target.isAfterOrEquals(migrateTo)) {
+            SchemaTransition transition = SchemaTransition.to(migrateTo);
+            transitions.add(transition);
+            migrateTo = migrateTo.next();
+        }
+        return transitions;
+    }
+
     @Override
     public final boolean equals(Object o) {
         if (o instanceof SchemaVersion) {
diff --git 
a/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaVersionTest.java
 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaVersionTest.java
new file mode 100644
index 0000000..f53085c
--- /dev/null
+++ 
b/backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaVersionTest.java
@@ -0,0 +1,29 @@
+package org.apache.james.backends.cassandra.versions;
+
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class SchemaVersionTest {
+
+    static final SchemaVersion VERSION_1 = new SchemaVersion(1);
+    static final SchemaVersion VERSION_2 = new SchemaVersion(2);
+    static final SchemaVersion VERSION_3 = new SchemaVersion(3);
+    static final SchemaVersion VERSION_4 = new SchemaVersion(4);
+
+    @Test
+    void listTransitionsForTargetShouldReturnEmptyOnSameVersion() {
+        
Assertions.assertThat(VERSION_2.listTransitionsForTarget(VERSION_2)).isEmpty();
+    }
+
+    @Test
+    void listTransitionsForTargetShouldReturnEmptyOnSmallerVersion() {
+        
Assertions.assertThat(VERSION_2.listTransitionsForTarget(VERSION_1)).isEmpty();
+    }
+
+    @Test
+    void listTransitionsForTargetShouldReturnListOfVersionsWhenGreater() {
+        Assertions.assertThat(VERSION_2.listTransitionsForTarget(VERSION_4))
+                .containsExactly(SchemaTransition.to(VERSION_3), 
SchemaTransition.to(VERSION_4));
+    }
+
+}
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to