You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streampark.apache.org by mu...@apache.org on 2023/03/05 06:28:33 UTC

[incubator-streampark] branch dev updated: string converter improvement (#2399)

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

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


The following commit(s) were added to refs/heads/dev by this push:
     new fcf227e98 string converter improvement (#2399)
fcf227e98 is described below

commit fcf227e989772873bbf0ae54da9fc5fdc1432ccd
Author: benjobs <be...@apache.org>
AuthorDate: Sun Mar 5 14:28:27 2023 +0800

    string converter improvement (#2399)
---
 .../streampark/common/conf/ConfigOption.scala      |  9 +++--
 ...{Converter.scala => InternalConfigHolder.scala} | 30 ++-------------
 .../apache/streampark/common/conf/Workspace.scala  |  6 +--
 .../org/apache/streampark/common/util/Utils.scala  | 44 +++++++++++++++++++++-
 4 files changed, 55 insertions(+), 34 deletions(-)

diff --git a/streampark-common/src/main/scala/org/apache/streampark/common/conf/ConfigOption.scala b/streampark-common/src/main/scala/org/apache/streampark/common/conf/ConfigOption.scala
index 76208ee4b..5046ed76c 100644
--- a/streampark-common/src/main/scala/org/apache/streampark/common/conf/ConfigOption.scala
+++ b/streampark-common/src/main/scala/org/apache/streampark/common/conf/ConfigOption.scala
@@ -16,8 +16,9 @@
  */
 package org.apache.streampark.common.conf
 
-import java.util.Properties
+import org.apache.streampark.common.util.Utils.StringCasts
 
+import java.util.Properties
 import scala.util.{Failure, Success, Try}
 
 /**
@@ -40,12 +41,12 @@ case class ConfigOption[T](key: String, defaultValue: T = null, required: Boolea
       if (required) {
         prop.get(fullKey) match {
           case null => throw error("is require")
-          case v => Converter.convert[T](v.toString, classType)
+          case v => v.toString.cast[T](classType)
         }
       } else {
         prop.getProperty(fullKey) match {
           case null => defaultValue
-          case v => Converter.convert[T](v, classType)
+          case v => v.cast[T](classType)
         }
       }
     case _ =>
@@ -57,7 +58,7 @@ case class ConfigOption[T](key: String, defaultValue: T = null, required: Boolea
       } else {
         Try(handle(fullKey)) match {
           case Success(v) => v
-          case Failure(e) => defaultValue
+          case Failure(_) => defaultValue
         }
       }
   }
diff --git a/streampark-common/src/main/scala/org/apache/streampark/common/conf/Converter.scala b/streampark-common/src/main/scala/org/apache/streampark/common/conf/InternalConfigHolder.scala
similarity index 81%
rename from streampark-common/src/main/scala/org/apache/streampark/common/conf/Converter.scala
rename to streampark-common/src/main/scala/org/apache/streampark/common/conf/InternalConfigHolder.scala
index abd90d2ec..893801c79 100644
--- a/streampark-common/src/main/scala/org/apache/streampark/common/conf/Converter.scala
+++ b/streampark-common/src/main/scala/org/apache/streampark/common/conf/InternalConfigHolder.scala
@@ -17,14 +17,13 @@
 
 package org.apache.streampark.common.conf
 
-import java.lang.{Boolean => JavaBool, Double => JavaDouble, Float => JavaFloat, Integer => JavaInt, Long => JavaLong}
+import org.apache.streampark.common.util.Utils.StringCasts
+
 import java.util
 import java.util.concurrent.ConcurrentHashMap
 import javax.annotation.{Nonnull, Nullable}
-
 import scala.collection.JavaConversions._
 import scala.language.postfixOps
-
 import org.apache.streampark.common.util.{Logger, SystemPropertyUtils}
 
 /**
@@ -80,7 +79,7 @@ object InternalConfigHolder extends Logger {
     confData.get(conf.key) match {
       case null =>
         SystemPropertyUtils.get(conf.key) match {
-          case v if v != null => Converter.convert[T](v, conf.classType)
+          case v if v != null => v.cast[T](conf.classType)
           case _ => conf.defaultValue.asInstanceOf[T]
         }
       case v: T => v
@@ -109,7 +108,7 @@ object InternalConfigHolder extends Logger {
           case null =>
             val config = getConfig(key)
             SystemPropertyUtils.get(key) match {
-              case v if v != null => Converter.convert[T](v, config.classType)
+              case v if v != null => v.cast[T](config.classType)
               case _ => throw new IllegalArgumentException(s"config key has not been registered: $key")
             }
           case conf: InternalOption => conf.defaultValue.asInstanceOf[T]
@@ -175,24 +174,3 @@ object InternalConfigHolder extends Logger {
   }
 
 }
-
-object Converter {
-
-  def convert[T](v: String, classType: Class[_]): T = {
-    classType match {
-      case c if c == classOf[Int] => v.toInt.asInstanceOf[T]
-      case c if c == classOf[Long] => v.toLong.asInstanceOf[T]
-      case c if c == classOf[Boolean] => v.toBoolean.asInstanceOf[T]
-      case c if c == classOf[Float] => v.toFloat.asInstanceOf[T]
-      case c if c == classOf[Double] => v.toDouble.asInstanceOf[T]
-      case c if c == classOf[String] => v.asInstanceOf[T]
-      case c if c == classOf[JavaInt] => JavaInt.valueOf(v).asInstanceOf[T]
-      case c if c == classOf[JavaLong] => JavaLong.valueOf(v).asInstanceOf[T]
-      case c if c == classOf[JavaBool] => JavaBool.valueOf(v).asInstanceOf[T]
-      case c if c == classOf[JavaFloat] => JavaFloat.valueOf(v).asInstanceOf[T]
-      case c if c == classOf[JavaDouble] => JavaDouble.valueOf(v).asInstanceOf[T]
-      case _ =>
-        throw new IllegalArgumentException(s"Unsupported type: $classType")
-    }
-  }
-}
diff --git a/streampark-common/src/main/scala/org/apache/streampark/common/conf/Workspace.scala b/streampark-common/src/main/scala/org/apache/streampark/common/conf/Workspace.scala
index 40a1009fb..57e7afc47 100644
--- a/streampark-common/src/main/scala/org/apache/streampark/common/conf/Workspace.scala
+++ b/streampark-common/src/main/scala/org/apache/streampark/common/conf/Workspace.scala
@@ -17,8 +17,8 @@
 package org.apache.streampark.common.conf
 
 import java.net.URI
-
 import org.apache.streampark.common.enums.StorageType
+import org.apache.streampark.common.util.Utils.StringCasts
 import org.apache.streampark.common.util.{HdfsUtils, SystemPropertyUtils}
 
 object Workspace {
@@ -72,8 +72,8 @@ case class Workspace(storageType: StorageType) {
     (s, v) match {
       case (null, null) => d
       case (null, b) => b
-      case (a, null) => Converter.convert(a, option.classType).asInstanceOf[T]
-      case (a, b) => if (b == d) Converter.convert(a, option.classType).asInstanceOf[T] else b
+      case (a, null) => a.cast[T](option.classType)
+      case (a, b) => if (b == d) a.cast[T](option.classType) else b
     }
   }
 
diff --git a/streampark-common/src/main/scala/org/apache/streampark/common/util/Utils.scala b/streampark-common/src/main/scala/org/apache/streampark/common/util/Utils.scala
index 1737c48ec..c1d3cf97c 100644
--- a/streampark-common/src/main/scala/org/apache/streampark/common/util/Utils.scala
+++ b/streampark-common/src/main/scala/org/apache/streampark/common/util/Utils.scala
@@ -16,7 +16,23 @@
  */
 package org.apache.streampark.common.util
 
-import java.io.{BufferedInputStream, File, FileInputStream, IOException, PrintWriter, StringWriter}
+import java.io.{
+  BufferedInputStream,
+  File,
+  FileInputStream,
+  IOException,
+  PrintWriter,
+  StringWriter
+}
+import java.lang.{
+  Boolean => JavaBool,
+  Double => JavaDouble,
+  Float => JavaFloat,
+  Integer => JavaInt,
+  Long => JavaLong,
+  Short => JavaShort,
+  Byte => JavaByte
+}
 import java.net.URL
 import java.util.{Properties, UUID, jar, Collection => JavaCollection, Map => JavaMap}
 import java.util.jar.{JarFile, JarInputStream}
@@ -164,4 +180,30 @@ object Utils {
     }
   }
 
+  implicit class StringCasts(v: String) {
+    def cast[T](classType: Class[_]): T = {
+      Utils.required(classType.isPrimitive, "target class must be a primitive type")
+      classType match {
+        case c if c == classOf[String] => v.asInstanceOf[T]
+        case c if c == classOf[Byte] => v.toByte.asInstanceOf[T]
+        case c if c == classOf[Int] => v.toInt.asInstanceOf[T]
+        case c if c == classOf[Long] => v.toLong.asInstanceOf[T]
+        case c if c == classOf[Float] => v.toFloat.asInstanceOf[T]
+        case c if c == classOf[Double] => v.toDouble.asInstanceOf[T]
+        case c if c == classOf[Short] => v.toShort.asInstanceOf[T]
+        case c if c == classOf[Boolean] => v.toBoolean.asInstanceOf[T]
+        case c if c == classOf[String] => v.asInstanceOf[T]
+        case c if c == classOf[JavaByte] => v.toByte.asInstanceOf[T]
+        case c if c == classOf[JavaInt] => JavaInt.valueOf(v).asInstanceOf[T]
+        case c if c == classOf[JavaLong] => JavaLong.valueOf(v).asInstanceOf[T]
+        case c if c == classOf[JavaFloat] => JavaFloat.valueOf(v).asInstanceOf[T]
+        case c if c == classOf[JavaDouble] => JavaDouble.valueOf(v).asInstanceOf[T]
+        case c if c == classOf[JavaShort] => JavaShort.valueOf(v).asInstanceOf[T]
+        case c if c == classOf[JavaBool] => JavaBool.valueOf(v).asInstanceOf[T]
+        case _ =>
+          throw new IllegalArgumentException(s"Unsupported type: $classType")
+      }
+    }
+  }
+
 }