From 27ae30f218dee1fe45acf0955fdafc19852bdebe Mon Sep 17 00:00:00 2001 From: noear Date: Thu, 22 Dec 2022 14:59:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90=20liteflow?= =?UTF-8?q?-solon-plugin=20=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solon/config/LiteflowProperty.java | 3 +- .../liteflow/solon/config/PathsUtils.java | 67 +++++++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/PathsUtils.java diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/LiteflowProperty.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/LiteflowProperty.java index 4cad1a0d6..5bde0a62f 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/LiteflowProperty.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/LiteflowProperty.java @@ -1,7 +1,6 @@ package com.yomahub.liteflow.solon.config; -import org.noear.solon.Utils; import org.noear.solon.annotation.Configuration; import org.noear.solon.annotation.Inject; @@ -86,7 +85,7 @@ public class LiteflowProperty { public void setRuleSource(String ruleSource) { if (ruleSource.contains("*")) { - this.ruleSource = String.join(",", Utils.resolvePaths(ruleSource)); + this.ruleSource = String.join(",", PathsUtils.resolvePaths(ruleSource)); } else { this.ruleSource = ruleSource; } diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/PathsUtils.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/PathsUtils.java new file mode 100644 index 000000000..5381220a1 --- /dev/null +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/config/PathsUtils.java @@ -0,0 +1,67 @@ +package com.yomahub.liteflow.solon.config; + +import org.noear.solon.core.util.ScanUtil; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.regex.Pattern; + +/** + * solon 1.11.7 之后才有 Utils.resolvePaths;所以临时用下先 + * + * @author noear + * @since 1.11 + */ +public class PathsUtils { + public static Collection resolvePaths(String pathExpr) { + List paths = new ArrayList<>(); + + if (pathExpr.contains("/*") == false) { //说明没有*符 + paths.add(pathExpr); + return paths; + } + + //确定目录 + int dirIdx = pathExpr.indexOf("/*"); + String dir = pathExpr.substring(0, dirIdx); + + //确定后缀 + int sufIdx = pathExpr.lastIndexOf("."); + String suf = null; + if (sufIdx > 0) { + suf = pathExpr.substring(sufIdx); + if (suf.contains("*")) { + sufIdx = -1; + suf = null; + } + } + + int sufIdx2 = sufIdx; + String suf2 = suf; + + //匹配表达式 + String expr = pathExpr.replaceAll("/\\*\\.", "/[^\\.]*\\."); + expr = expr.replaceAll("/\\*\\*/", "(/[^/]*)*/"); + + Pattern pattern = Pattern.compile(expr); + + ScanUtil.scan(dir, n -> { + //进行后缀过滤,相对比较快 + if (sufIdx2 > 0) { + return n.endsWith(suf2); + } else { + return true; + } + }) + .forEach(uri -> { + //再进行表达式过滤 + if (pattern.matcher(uri).find()) { + paths.add(uri); + } + }); + + + return paths; + } +}