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

kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 8fabcdb  [Improve][Config] Refactor StringTemplate to unify variables 
substitute util (#1442)
8fabcdb is described below

commit 8fabcdb46a788573a4cf42e11297e3a684a8c466
Author: Simon <[email protected]>
AuthorDate: Thu Mar 24 19:19:20 2022 +0800

    [Improve][Config] Refactor StringTemplate to unify variables substitute 
util (#1442)
---
 .../seatunnel/common/utils/StringTemplate.java     | 28 +++----------
 ...tringTemplate.java => VariablesSubstitute.java} | 30 +++++++++-----
 .../common/utils/VariablesSubstituteTest.java      | 47 ++++++++++++++++++++++
 .../org/apache/seatunnel/core/sql/job/JobInfo.java | 19 ++++-----
 .../core/sql/SqlVariableSubstitutionTest.java      |  4 +-
 .../src/test/resources/flink.sql.conf.template     |  4 +-
 6 files changed, 84 insertions(+), 48 deletions(-)

diff --git 
a/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/StringTemplate.java
 
b/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/StringTemplate.java
index f8bb912..c072f9b 100644
--- 
a/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/StringTemplate.java
+++ 
b/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/StringTemplate.java
@@ -17,35 +17,17 @@
 
 package org.apache.seatunnel.common.utils;
 
-import org.apache.commons.lang3.text.StrSubstitutor;
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
+/**
+ * please using {@link VariablesSubstitute} instead, since 2.0.5
+ */
+@Deprecated
 public final class StringTemplate {
 
     private StringTemplate() {
     }
 
-    /**
-     * @param str        raw string
-     * @param timeFormat example : "yyyy-MM-dd HH:mm:ss"
-     * @return replaced string
-     */
     public static String substitute(String str, String timeFormat) {
-
-        final SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
-        final String formattedDate = sdf.format(new Date());
-
-        final Map<String, String> valuesMap = new HashMap<>(3);
-        valuesMap.put("uuid", UUID.randomUUID().toString());
-        valuesMap.put("now", formattedDate);
-        valuesMap.put(timeFormat, formattedDate);
-        final StrSubstitutor sub = new StrSubstitutor(valuesMap);
-        return sub.replace(str);
+        return VariablesSubstitute.substitute(str, timeFormat);
     }
 }
 
diff --git 
a/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/StringTemplate.java
 
b/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/VariablesSubstitute.java
similarity index 64%
copy from 
seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/StringTemplate.java
copy to 
seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/VariablesSubstitute.java
index f8bb912..671d9ee 100644
--- 
a/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/StringTemplate.java
+++ 
b/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/VariablesSubstitute.java
@@ -19,33 +19,41 @@ package org.apache.seatunnel.common.utils;
 
 import org.apache.commons.lang3.text.StrSubstitutor;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
-public final class StringTemplate {
+public final class VariablesSubstitute {
 
-    private StringTemplate() {
+    private VariablesSubstitute() {
     }
 
     /**
-     * @param str        raw string
+     * @param text       raw string
      * @param timeFormat example : "yyyy-MM-dd HH:mm:ss"
-     * @return replaced string
+     * @return replaced text
      */
-    public static String substitute(String str, String timeFormat) {
-
-        final SimpleDateFormat sdf = new SimpleDateFormat(timeFormat);
-        final String formattedDate = sdf.format(new Date());
+    public static String substitute(String text, String timeFormat) {
+        DateTimeFormatter df = DateTimeFormatter.ofPattern(timeFormat);
+        final String formattedDate = df.format(ZonedDateTime.now());
 
         final Map<String, String> valuesMap = new HashMap<>(3);
         valuesMap.put("uuid", UUID.randomUUID().toString());
         valuesMap.put("now", formattedDate);
         valuesMap.put(timeFormat, formattedDate);
+        return substitute(text, valuesMap);
+    }
+
+    /**
+     * @param text       raw string
+     * @param valuesMap  key is variable name, value is substituted string.
+     * @return replaced text
+     */
+    public static String substitute(String text, Map<String, String> 
valuesMap) {
         final StrSubstitutor sub = new StrSubstitutor(valuesMap);
-        return sub.replace(str);
+        return sub.replace(text);
     }
 }
 
diff --git 
a/seatunnel-common/src/test/java/org/apache/seatunnel/common/utils/VariablesSubstituteTest.java
 
b/seatunnel-common/src/test/java/org/apache/seatunnel/common/utils/VariablesSubstituteTest.java
new file mode 100644
index 0000000..a1731c3
--- /dev/null
+++ 
b/seatunnel-common/src/test/java/org/apache/seatunnel/common/utils/VariablesSubstituteTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.seatunnel.common.utils;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+
+public class VariablesSubstituteTest {
+
+    @Test
+    public void testSubstitute() {
+        String timeFormat = "yyyyMMddHHmmss";
+        DateTimeFormatter df = DateTimeFormatter.ofPattern(timeFormat);
+        String formattedDate = df.format(ZonedDateTime.now());
+        String path = "data_${now}_${uuid}.parquet";
+        String newPath = VariablesSubstitute.substitute(path, timeFormat);
+        Assert.assertTrue(newPath.contains(formattedDate));
+
+        String text = "${var1} is a distributed, high-performance data 
integration platform for " +
+                "the synchronization and ${var2} of massive data (offline & 
real-time).";
+
+        HashMap<String, String> valuesMap = new HashMap<>();
+        valuesMap.put("var1", "SeaTunnel");
+        valuesMap.put("var2", "transformation");
+        String newText = VariablesSubstitute.substitute(text, valuesMap);
+        Assert.assertTrue(newText.contains("SeaTunnel") && 
newText.contains("transformation"));
+    }
+}
diff --git 
a/seatunnel-core/seatunnel-core-sql/src/main/java/org/apache/seatunnel/core/sql/job/JobInfo.java
 
b/seatunnel-core/seatunnel-core-sql/src/main/java/org/apache/seatunnel/core/sql/job/JobInfo.java
index db87424..d46fbcd 100644
--- 
a/seatunnel-core/seatunnel-core-sql/src/main/java/org/apache/seatunnel/core/sql/job/JobInfo.java
+++ 
b/seatunnel-core/seatunnel-core-sql/src/main/java/org/apache/seatunnel/core/sql/job/JobInfo.java
@@ -17,11 +17,14 @@
 
 package org.apache.seatunnel.core.sql.job;
 
+import org.apache.seatunnel.common.utils.VariablesSubstitute;
+
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 public class JobInfo {
 
-    private static final String VAR_REGEX = "\\$\\{%s}";
     private static final String DELIMITER = "=";
 
     private String jobContent;
@@ -35,15 +38,9 @@ public class JobInfo {
     }
 
     public void substitute(List<String> variables) {
-        if (variables == null) {
-            return;
-        }
-        for (String variable : variables) {
-            String[] s = variable.split(DELIMITER);
-            if (s.length == 2) {
-                jobContent = jobContent.replaceAll(String.format(VAR_REGEX, 
s[0].trim()), s[1].trim());
-            }
-        }
+        Map<String, String> substituteMap = variables.stream()
+                .filter(v -> v.contains(DELIMITER))
+                .collect(Collectors.toMap(v -> v.split(DELIMITER)[0], v -> 
v.split(DELIMITER)[1]));
+        jobContent = VariablesSubstitute.substitute(jobContent, substituteMap);
     }
-
 }
diff --git 
a/seatunnel-core/seatunnel-core-sql/src/test/java/org/apache/seatunnel/core/sql/SqlVariableSubstitutionTest.java
 
b/seatunnel-core/seatunnel-core-sql/src/test/java/org/apache/seatunnel/core/sql/SqlVariableSubstitutionTest.java
index 63f8ed8..95a0354 100644
--- 
a/seatunnel-core/seatunnel-core-sql/src/test/java/org/apache/seatunnel/core/sql/SqlVariableSubstitutionTest.java
+++ 
b/seatunnel-core/seatunnel-core-sql/src/test/java/org/apache/seatunnel/core/sql/SqlVariableSubstitutionTest.java
@@ -34,16 +34,18 @@ public class SqlVariableSubstitutionTest {
     @Test
     public void normalizeStatementsWithMultiSqls() throws Exception {
         String[] args = {"-c", System.getProperty("user.dir") + 
TEST_RESOURCE_DIR + "flink.sql.conf.template",
-            "-t", "-i", "table_name=events"};
+            "-t", "-i", "table_name=events", "-i", "table_name2=print_table"};
 
         FlinkCommandArgs flinkArgs = CommandLineUtils.parseFlinkArgs(args);
         String configFilePath = flinkArgs.getConfigFile();
         String jobContent = FileUtils.readFileToString(new 
File(configFilePath), StandardCharsets.UTF_8);
         JobInfo jobInfo = new JobInfo(jobContent);
         Assert.assertFalse(jobInfo.getJobContent().contains("events"));
+        Assert.assertFalse(jobInfo.getJobContent().contains("print_table"));
 
         jobInfo.substitute(flinkArgs.getVariables());
         Assert.assertTrue(jobInfo.getJobContent().contains("events"));
+        Assert.assertTrue(jobInfo.getJobContent().contains("print_table"));
     }
 
 }
diff --git 
a/seatunnel-core/seatunnel-core-sql/src/test/resources/flink.sql.conf.template 
b/seatunnel-core/seatunnel-core-sql/src/test/resources/flink.sql.conf.template
index 2d7f9d4..5ca6023 100644
--- 
a/seatunnel-core/seatunnel-core-sql/src/test/resources/flink.sql.conf.template
+++ 
b/seatunnel-core/seatunnel-core-sql/src/test/resources/flink.sql.conf.template
@@ -37,7 +37,7 @@ CREATE TABLE ${table_name} (
   'fields.f_uid.max'='1000'
 );
 
-CREATE TABLE print_table (
+CREATE TABLE ${table_name2} (
   type INT,
   uid INT,
   lstmt TIMESTAMP
@@ -46,4 +46,4 @@ CREATE TABLE print_table (
   'sink.parallelism' = '1'
 );
 
-INSERT INTO print_table SELECT * FROM ${table_name} where f_type = 1;
+INSERT INTO ${table_name2} SELECT * FROM ${table_name} where f_type = 1;

Reply via email to