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

jkevan pushed a commit to branch improveMigrationSystem
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/improveMigrationSystem by this 
push:
     new 29a3f83b0 UNOMI-626: improve migration system to prepare Unomi 2.0.0 
data models migrations
29a3f83b0 is described below

commit 29a3f83b00e22e629f259f3dbd829c29c701bfbd
Author: Kevan <[email protected]>
AuthorDate: Fri Jul 8 15:49:48 2022 +0200

    UNOMI-626: improve migration system to prepare Unomi 2.0.0 data models 
migrations
---
 .../apache/unomi/shell/migration/Migration.java    |  2 +-
 .../{MigrateScript.java => MigrationScript.java}   | 35 ++++++++++++++++------
 .../unomi/shell/migration/actions/Migrate.java     | 26 ++++++++--------
 .../unomi/shell/migration/impl/MigrationTo122.java |  1 -
 4 files changed, 40 insertions(+), 24 deletions(-)

diff --git 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/Migration.java
 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/Migration.java
index 998ed3def..8a64882ce 100644
--- 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/Migration.java
+++ 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/Migration.java
@@ -25,7 +25,7 @@ import java.util.Map;
 
 /**
  * @author dgaillard
- * @deprecated do groovy script for implementing new migrations
+ * @deprecated use groovy script for implementing new migrations
  */
 public interface Migration {
     /**
diff --git 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrateScript.java
 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrationScript.java
similarity index 69%
rename from 
tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrateScript.java
rename to 
tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrationScript.java
index a8e6ef958..d2dc304ed 100644
--- 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrateScript.java
+++ 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/MigrationScript.java
@@ -18,6 +18,7 @@ package org.apache.unomi.shell.migration;
 
 import groovy.lang.Script;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.commons.lang3.builder.HashCodeBuilder;
 import org.osgi.framework.Bundle;
@@ -25,9 +26,20 @@ import org.osgi.framework.Version;
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
-public class MigrateScript implements Comparable<MigrateScript> {
+/**
+ * Java bean representing a migration script, current implementation support 
groovy script as migration script
+ * following file name pattern need to be respected:
+ * migrate-VERSION-PRIORITY-NAME.groovy
+ *
+ * example:
+ * migrate-2.0.0-01-segmentReindex.groovy
+ */
+public class MigrationScript implements Comparable<MigrationScript> {
 
+    private static final Pattern SCRIPT_FILENAME_PATTERN = 
Pattern.compile("^migrate-(\\d.\\d.\\d)-(\\d+)-(\\w+).groovy$");
 
     private final String script;
     private Script compiledScript;
@@ -36,16 +48,21 @@ public class MigrateScript implements 
Comparable<MigrateScript> {
     private final int priority;
     private final String name;
 
-    public MigrateScript(URL scriptURL, Bundle bundle) throws IOException {
+    public MigrationScript(URL scriptURL, Bundle bundle) throws IOException {
         this.bundle = bundle;
         this.script = IOUtils.toString(scriptURL);
 
-        // parse file name expected format is: 
migrate-VERSION-PRIORITY-NAME.groovy like: migrate-1.2.1-00-migrateTags.groovy
         String path = scriptURL.getPath();
-        String[] splitName = path.substring(path.lastIndexOf("/"), 
path.lastIndexOf(".groovy")).split("-");
-        this.version = new Version(splitName[1]);
-        this.priority = Integer.parseInt(splitName[2]);
-        this.name = splitName[3];
+        String fileName = StringUtils.substringAfterLast(path, "/");
+        Matcher m = SCRIPT_FILENAME_PATTERN.matcher(fileName);
+        if (m.find()) {
+            this.version = new Version(m.group(1));
+            this.priority = Integer.parseInt(m.group(2));
+            this.name = m.group(3);
+        } else {
+            throw new IllegalStateException("Migration script file name do not 
respect the expected format: " + fileName +
+                    ". Expected format is: 
migrate-VERSION-PRIORITY-NAME.groovy. Example: 
migrate-2.0.0-01-segmentReindex.groovy");
+        }
     }
 
     public Script getCompiledScript() {
@@ -86,7 +103,7 @@ public class MigrateScript implements 
Comparable<MigrateScript> {
     }
 
     @Override
-    public int compareTo(MigrateScript other) {
+    public int compareTo(MigrationScript other) {
         int result = version.compareTo(other.getVersion());
         if (result != 0) {
             return result;
@@ -106,7 +123,7 @@ public class MigrateScript implements 
Comparable<MigrateScript> {
 
         if (o == null || getClass() != o.getClass()) return false;
 
-        MigrateScript that = (MigrateScript) o;
+        MigrationScript that = (MigrationScript) o;
 
         return new EqualsBuilder().append(priority, 
that.priority).append(version, that.version).append(name, that.name).isEquals();
     }
diff --git 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/actions/Migrate.java
 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/actions/Migrate.java
index a8fcca430..d325cee56 100644
--- 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/actions/Migrate.java
+++ 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/actions/Migrate.java
@@ -26,7 +26,7 @@ import org.apache.karaf.shell.api.action.Command;
 import org.apache.karaf.shell.api.action.lifecycle.Reference;
 import org.apache.karaf.shell.api.action.lifecycle.Service;
 import org.apache.karaf.shell.api.console.Session;
-import org.apache.unomi.shell.migration.MigrateScript;
+import org.apache.unomi.shell.migration.MigrationScript;
 import org.apache.unomi.shell.migration.utils.ConsoleUtils;
 import org.apache.unomi.shell.migration.utils.HttpUtils;
 import org.osgi.framework.*;
@@ -58,7 +58,7 @@ public class Migrate implements Action {
 
     public Object execute() throws Exception {
         // Load migration scrips
-        Set<MigrateScript> scripts = loadOSGIScripts();
+        Set<MigrationScript> scripts = loadOSGIScripts();
         scripts.addAll(loadFileSystemScripts());
 
         if (originVersion == null) {
@@ -98,7 +98,7 @@ public class Migrate implements Action {
 
             // Start migration
             ConsoleUtils.printMessage(session, "Starting migration process 
from version: " + originVersion);
-            for (MigrateScript migrateScript : scripts) {
+            for (MigrationScript migrateScript : scripts) {
                 ConsoleUtils.printMessage(session, "Starting execution of: " + 
migrateScript);
                 try {
                     migrateScript.getCompiledScript().run();
@@ -114,9 +114,9 @@ public class Migrate implements Action {
         return null;
     }
 
-    private void displayMigrations(Set<MigrateScript> scripts) {
+    private void displayMigrations(Set<MigrationScript> scripts) {
         Version previousVersion = new Version("0.0.0");
-        for (MigrateScript migration : scripts) {
+        for (MigrationScript migration : scripts) {
             if (migration.getVersion().getMajor() > previousVersion.getMajor() 
|| migration.getVersion().getMinor() > previousVersion.getMinor()) {
                 ConsoleUtils.printMessage(session, "From " + 
migration.getVersion().getMajor() + "." + migration.getVersion().getMinor() + 
".0:");
             }
@@ -125,13 +125,13 @@ public class Migrate implements Action {
         }
     }
 
-    private Set<MigrateScript> filterScriptsFromVersion(Set<MigrateScript> 
scripts, Version fromVersion) {
+    private Set<MigrationScript> filterScriptsFromVersion(Set<MigrationScript> 
scripts, Version fromVersion) {
         return scripts.stream()
                 .filter(migrateScript -> 
fromVersion.compareTo(migrateScript.getVersion()) < 0)
                 .collect(Collectors.toCollection(TreeSet::new));
     }
 
-    private Set<MigrateScript> parseScripts(Set<MigrateScript> scripts, 
Session session, CloseableHttpClient httpClient, Map<String, Object> 
migrationConfig) {
+    private Set<MigrationScript> parseScripts(Set<MigrationScript> scripts, 
Session session, CloseableHttpClient httpClient, Map<String, Object> 
migrationConfig) {
         Map<String, GroovyShell> shellsPerBundle = new HashMap<>();
 
         return scripts.stream()
@@ -146,8 +146,8 @@ public class Migrate implements Action {
                 .collect(Collectors.toCollection(TreeSet::new));
     }
 
-    private Set<MigrateScript> loadOSGIScripts() throws IOException {
-        SortedSet<MigrateScript> migrationScripts = new TreeSet<>();
+    private Set<MigrationScript> loadOSGIScripts() throws IOException {
+        SortedSet<MigrationScript> migrationScripts = new TreeSet<>();
         for (Bundle bundle : bundleContext.getBundles()) {
             Enumeration<URL> scripts = 
bundle.findEntries("META-INF/cxs/migration", "*.groovy", true);
             if (scripts != null) {
@@ -155,7 +155,7 @@ public class Migrate implements Action {
 
                 while (scripts.hasMoreElements()) {
                     URL scriptURL = scripts.nextElement();
-                    migrationScripts.add(new MigrateScript(scriptURL, bundle));
+                    migrationScripts.add(new MigrationScript(scriptURL, 
bundle));
                 }
             }
         }
@@ -163,7 +163,7 @@ public class Migrate implements Action {
         return migrationScripts;
     }
 
-    private Set<MigrateScript> loadFileSystemScripts() throws IOException {
+    private Set<MigrationScript> loadFileSystemScripts() throws IOException {
         // check migration folder exists
         Path migrationFolder = Paths.get(System.getProperty( "karaf.data" ), 
"migration", "scripts");
         if (!Files.isDirectory(migrationFolder)) {
@@ -178,9 +178,9 @@ public class Migrate implements Action {
                     .collect(Collectors.toList());
         }
 
-        SortedSet<MigrateScript> migrationScripts = new TreeSet<>();
+        SortedSet<MigrationScript> migrationScripts = new TreeSet<>();
         for (Path path : paths) {
-            migrationScripts.add(new MigrateScript(path.toUri().toURL(), 
null));
+            migrationScripts.add(new MigrationScript(path.toUri().toURL(), 
null));
         }
         return migrationScripts;
     }
diff --git 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/impl/MigrationTo122.java
 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/impl/MigrationTo122.java
index 242a0d5f6..b371f8a0d 100644
--- 
a/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/impl/MigrationTo122.java
+++ 
b/tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/impl/MigrationTo122.java
@@ -28,7 +28,6 @@ import org.osgi.service.component.annotations.Component;
 import java.io.IOException;
 import java.util.Map;
 
-@Component
 public class MigrationTo122 implements Migration {
     private CloseableHttpClient httpClient;
     private Session session;

Reply via email to