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

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


The following commit(s) were added to refs/heads/dev-1.3.2 by this push:
     new 6f18fb061 Udf function transformation (#3828)
6f18fb061 is described below

commit 6f18fb0619b48317258409e782d3a30501e10939
Author: huangKai-2323 <[email protected]>
AuthorDate: Wed Nov 30 22:47:03 2022 +0800

    Udf function transformation (#3828)
---
 .../org/apache/linkis/udf/api/UDFRestfulApi.java   | 88 +++++++++++++++++++++-
 .../java/org/apache/linkis/udf/dao/UDFDao.java     |  3 +
 .../org/apache/linkis/udf/dao/UDFVersionDao.java   |  3 +
 .../java/org/apache/linkis/udf/dao/impl/UDFDao.xml | 21 ++++++
 .../apache/linkis/udf/dao/impl/UDFVersionDao.xml   |  7 ++
 .../org/apache/linkis/udf/service/UDFService.java  | 20 ++++-
 .../linkis/udf/service/impl/UDFServiceImpl.java    | 42 ++++++++++-
 .../apache/linkis/udf/utils/UdfConfiguration.scala |  6 ++
 8 files changed, 185 insertions(+), 5 deletions(-)

diff --git 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/api/UDFRestfulApi.java
 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/api/UDFRestfulApi.java
index dc73007a2..81f24565d 100644
--- 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/api/UDFRestfulApi.java
+++ 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/api/UDFRestfulApi.java
@@ -25,6 +25,7 @@ import org.apache.linkis.udf.excepiton.UDFException;
 import org.apache.linkis.udf.service.UDFService;
 import org.apache.linkis.udf.service.UDFTreeService;
 import org.apache.linkis.udf.utils.ConstantVar;
+import org.apache.linkis.udf.utils.UdfConfiguration;
 import org.apache.linkis.udf.vo.*;
 
 import org.apache.commons.collections.CollectionUtils;
@@ -217,9 +218,7 @@ public class UDFRestfulApi {
       udfvo.setCreateUser(userName);
       udfvo.setCreateTime(new Date());
       udfvo.setUpdateTime(new Date());
-      udfService.addUDF(udfvo, userName);
-      message = Message.ok();
-      //            message.data("udf", udfvo);
+      message = Message.ok().data("udfId", udfService.addUDF(udfvo, userName));
     } catch (Exception e) {
       logger.error("Failed to add UDF: ", e);
       message = Message.error(e.getMessage());
@@ -924,4 +923,87 @@ public class UDFRestfulApi {
     }
     return message;
   }
+
+  /** get UDF info by nameList */
+  @ApiOperation(value = "getUdfList", notes = "get user directory", response = 
Message.class)
+  @ApiImplicitParams({
+    @ApiImplicitParam(name = "nameList", required = true, dataType = "String", 
value = "category"),
+    @ApiImplicitParam(
+        name = "createUser",
+        required = true,
+        dataType = "String",
+        value = "category"),
+  })
+  @RequestMapping(path = "/getUdfByNameList", method = RequestMethod.GET)
+  public Message getUdfList(
+      HttpServletRequest req,
+      @RequestParam("nameList") String nameList,
+      @RequestParam("createUser") String createUser) {
+    Message message = null;
+    try {
+      //      String userName = ModuleUserUtils.getOperationUser(req, 
"getUdfByNameList ");
+      String userName = "hadoop";
+      if (StringUtils.isEmpty(userName)) {
+        throw new UDFException("username is empty!");
+      }
+      if (StringUtils.isEmpty(nameList)) {
+        throw new UDFException("nameList is empty!");
+      }
+      if (!UdfConfiguration.nameRegexPattern().matcher(nameList).matches()) {
+        throw new UDFException("nameList is invalid!");
+      }
+      if (StringUtils.isEmpty(createUser)) {
+        throw new UDFException("creator is empty!");
+      }
+      List<String> collect = 
Arrays.stream(nameList.split(",")).collect(Collectors.toList());
+      List<UDFAddVo> udfInfoList = udfService.getUdfByNameList(collect, 
createUser);
+      message = Message.ok().data("infoList", udfInfoList);
+    } catch (Throwable e) {
+      logger.error("Failed to get user udfinfo : ", e);
+      message = Message.error(e.getMessage());
+    }
+    return message;
+  }
+
+  /** get version info by udfName && createUser */
+  @ApiOperation(value = "versionInfo", notes = "version list", response = 
Message.class)
+  @ApiImplicitParams({
+    @ApiImplicitParam(name = "udfName", required = true, dataType = "String", 
value = "udf name"),
+    @ApiImplicitParam(
+        name = "createUser",
+        required = true,
+        dataType = "String",
+        value = "create user")
+  })
+  @RequestMapping(path = "/versionInfo", method = RequestMethod.GET)
+  public Message versionInfo(
+      HttpServletRequest req,
+      @RequestParam("udfName") String udfName,
+      @RequestParam("createUser") String createUser) {
+    Message message = null;
+    try {
+      String userName = ModuleUserUtils.getOperationUser(req, "versionInfo ");
+      if (StringUtils.isEmpty(userName)) {
+        throw new UDFException("userName is empty!");
+      }
+      if (StringUtils.isEmpty(udfName)) {
+        throw new UDFException("udfName is empty!");
+      }
+      if (StringUtils.isEmpty(createUser)) {
+        throw new UDFException("createUser is empty!");
+      }
+      if (!UdfConfiguration.nameRegexPattern().matcher(udfName).matches()) {
+        throw new UDFException("udfName is invalid!");
+      }
+      if (!UdfConfiguration.nameRegexPattern().matcher(createUser).matches()) {
+        throw new UDFException("createUser is invalid!");
+      }
+      UDFVersionVo versionList = udfService.getUdfVersionInfo(udfName, 
createUser);
+      message = Message.ok().data("versionInfo", versionList);
+    } catch (Throwable e) {
+      logger.error("Failed to get udf versionInfo: ", e);
+      message = Message.error(e.getMessage());
+    }
+    return message;
+  }
 }
diff --git 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFDao.java
 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFDao.java
index b94e42876..98028be80 100644
--- 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFDao.java
+++ 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFDao.java
@@ -132,4 +132,7 @@ public interface UDFDao {
   List<UDFInfoVo> getLatesetPublishedUDF(
       @Param("userName") String userName,
       @Param("categoryCodes") Collection<Integer> categoryCodes);
+
+  List<UDFAddVo> getUdfInfoByNameList(
+      @Param("udfNameList") Collection<String> udfNameList, 
@Param("createUser") String createUser);
 }
diff --git 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFVersionDao.java
 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFVersionDao.java
index 2c9d0a8e9..efb73e992 100644
--- 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFVersionDao.java
+++ 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/UDFVersionDao.java
@@ -56,4 +56,7 @@ public interface UDFVersionDao {
       @Param("newUser") String newUser);
 
   void updateUDFVersion(UDFVersion udfVersion);
+
+  UDFVersionVo getUdfVersionInfoByName(
+      @Param("udfName") String udfName, @Param("createUser") String 
createUser);
 }
diff --git 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFDao.xml
 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFDao.xml
index 081a2d108..17133345b 100644
--- 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFDao.xml
+++ 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFDao.xml
@@ -365,4 +365,25 @@
     <select id="getSharedUDFIdsByUser" resultType="java.lang.Long">
         select udf_id from linkis_ps_udf_shared_info where 
user_name=#{userName}
     </select>
+
+    <select id="getUdfInfoByNameList" 
resultType="org.apache.linkis.udf.vo.UDFAddVo">
+        select 
a.*,b.description,b.path,b.register_format,b.use_format,b.bml_resource_version 
from(
+        select pu.*,put.name as directory
+        from linkis_ps_udf_baseinfo pu join linkis_ps_udf_tree put  on 
pu.tree_id=put.id
+        <where>
+            <if test="1 == 1">1 = 1</if>
+            <if test="createUser != null">and pu.create_user = 
#{createUser}</if>
+            <if test="udfNameList != null">and pu.udf_name in
+                <foreach collection="udfNameList" open="(" close=")" 
item="item" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        ) a join
+        (select 
udf_id,description,path,register_format,use_format,bml_resource_version
+        from linkis_ps_udf_version as puv1 where bml_resource_version = 
(select max(puv2.bml_resource_version)
+        from linkis_ps_udf_version as puv2 where puv1.udf_id =puv2.udf_id)
+        ) b on a.id=b.udf_id
+        order by id desc
+    </select>
 </mapper>
\ No newline at end of file
diff --git 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFVersionDao.xml
 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFVersionDao.xml
index 7e8ab6d5e..71f1ad203 100644
--- 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFVersionDao.xml
+++ 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/dao/impl/UDFVersionDao.xml
@@ -104,4 +104,11 @@
         description=#{description,jdbcType=VARCHAR}
         WHERE id = #{id,jdbcType=BIGINT}
     </update>
+
+    <select id="getUdfVersionInfoByName" 
resultType="org.apache.linkis.udf.vo.UDFVersionVo">
+        select
+        puv.*, is_expire, create_user
+        from linkis_ps_udf_baseinfo pu join linkis_ps_udf_version puv on 
pu.id=puv.udf_id and pu.udf_name=#{udfName} and pu.create_user=#{createUser}
+        order by puv.bml_resource_version desc  limit 1
+    </select>
 </mapper>
\ No newline at end of file
diff --git 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/UDFService.java
 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/UDFService.java
index 325d71522..5b25b744e 100644
--- 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/UDFService.java
+++ 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/UDFService.java
@@ -28,7 +28,7 @@ import com.github.pagehelper.PageInfo;
 
 public interface UDFService {
 
-  void addUDF(UDFAddVo udfInfo, String userName) throws Exception;
+  long addUDF(UDFAddVo udfInfo, String userName) throws Exception;
 
   void updateUDF(UDFUpdateVo udfUpdateVo, String userName) throws Exception;
 
@@ -115,4 +115,22 @@ public interface UDFService {
   List<String> getUserDirectory(String user, String category);
 
   List<UDFInfoVo> getAllUDFSByUserName(String userName) throws UDFException;
+
+  /**
+   * * Get udf information according to udfnameList
+   *
+   * @param userNameList
+   * @param createUser
+   * @return
+   */
+  List<UDFAddVo> getUdfByNameList(List<String> userNameList, String 
createUser);
+
+  /**
+   * * Get the udf version information according to udfname and creator
+   *
+   * @param udfName
+   * @param createUser
+   * @return
+   */
+  UDFVersionVo getUdfVersionInfo(String udfName, String createUser);
 }
diff --git 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/impl/UDFServiceImpl.java
 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/impl/UDFServiceImpl.java
index f4ad874fb..5446d9148 100644
--- 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/impl/UDFServiceImpl.java
+++ 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/java/org/apache/linkis/udf/service/impl/UDFServiceImpl.java
@@ -108,7 +108,7 @@ public class UDFServiceImpl implements UDFService {
 
   @Override
   @Transactional(rollbackFor = Exception.class)
-  public void addUDF(UDFAddVo udfVo, String userName) throws Exception {
+  public long addUDF(UDFAddVo udfVo, String userName) throws Exception {
     logger.info(userName + " add udfVo: " + udfVo.getUdfName());
     // 锁同一用户
     CommonLock commonLock = new CommonLock();
@@ -186,6 +186,7 @@ public class UDFServiceImpl implements UDFService {
         addLoadInfo(udfInfo.getId(), userName);
       }
       logger.info("end for " + userName + " add udfVo: " + udfVo.getUdfName());
+      return udfInfo.getId();
     } finally {
       commonLockService.unlock(commonLock);
     }
@@ -1048,4 +1049,43 @@ public class UDFServiceImpl implements UDFService {
       udfDao.deleteLoadInfo(udfId, oldsharedUser);
     }
   }
+
+  @Override
+  public List<UDFAddVo> getUdfByNameList(List<String> udfNameList, String 
creator) {
+    logger.info("begin to get managerPages.");
+    List<UDFAddVo> retList = new ArrayList<>();
+    retList = udfDao.getUdfInfoByNameList(udfNameList, creator);
+    retList.forEach(
+        udfInfo -> {
+          String createUser = udfInfo.getCreateUser();
+          boolean ismanager = isUDFManager(createUser);
+          List<Long> loadedUdf = udfDao.getLoadedUDFIds(createUser);
+          udfInfo.setLoad(loadedUdf.contains(udfInfo.getId()));
+          boolean canExpire = false;
+          if (Boolean.TRUE.equals(udfInfo.getShared())) {
+            long loadCount = udfDao.getUserLoadCountByUdfId(udfInfo.getId(), 
createUser);
+            if (loadCount > 0) {
+              canExpire = true;
+            }
+          }
+          boolean finalCanExpire = canExpire;
+          udfInfo.setOperationStatus(
+              new HashMap<String, Boolean>() {
+                {
+                  put("canUpdate", true);
+                  put("canDelete", !finalCanExpire);
+                  put("canExpire", finalCanExpire);
+                  put("canShare", ismanager);
+                  put("canPublish", ismanager && 
Boolean.TRUE.equals(udfInfo.getShared()));
+                  put("canHandover", true);
+                }
+              });
+        });
+    return retList;
+  }
+
+  @Override
+  public UDFVersionVo getUdfVersionInfo(String udfName, String createUser) {
+    return udfVersionDao.getUdfVersionInfoByName(udfName, createUser);
+  }
 }
diff --git 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/scala/org/apache/linkis/udf/utils/UdfConfiguration.scala
 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/scala/org/apache/linkis/udf/utils/UdfConfiguration.scala
index d6da301f5..30275ed74 100644
--- 
a/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/scala/org/apache/linkis/udf/utils/UdfConfiguration.scala
+++ 
b/linkis-public-enhancements/linkis-udf/linkis-udf-service/src/main/scala/org/apache/linkis/udf/utils/UdfConfiguration.scala
@@ -19,6 +19,8 @@ package org.apache.linkis.udf.utils
 
 import org.apache.linkis.common.conf.CommonVars
 
+import java.util.regex.Pattern
+
 object UdfConfiguration {
 
   val UDF_HIVE_EXEC_PATH = CommonVars(
@@ -30,4 +32,8 @@ object UdfConfiguration {
   val UDF_SHARE_PATH = CommonVars("wds.linkis.udf.share.path", 
"/mnt/bdap/udf/")
   val UDF_SHARE_PROXY_USER = CommonVars("wds.linkis.udf.share.proxy.user", 
"hadoop")
 
+  val NAME_REGEX: String = "^[a-zA-Z\\-\\d_\\.=/,]+$"
+
+  val nameRegexPattern: Pattern = Pattern.compile(NAME_REGEX)
+
 }


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

Reply via email to