From 012235d05d8dc7c2decdc7229d93033b0399ecbb Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期日, 10 十一月 2024 15:49:53 +0800
Subject: [PATCH] 集成获取mdm分发通用数据格式接口集成
---
Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/PlaceholderUtil.java | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 152 insertions(+), 0 deletions(-)
diff --git a/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/PlaceholderUtil.java b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/PlaceholderUtil.java
new file mode 100644
index 0000000..9c55108
--- /dev/null
+++ b/Source/BladeX-Tool/blade-core-tool/src/main/java/org/springblade/core/tool/utils/PlaceholderUtil.java
@@ -0,0 +1,152 @@
+package org.springblade.core.tool.utils;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+/**
+ * 鍗犱綅绗﹁В鏋愬櫒
+ *
+ * @author meilin.huang, chill
+ */
+public class PlaceholderUtil {
+ /**
+ * 榛樿鍓嶇紑鍗犱綅绗�
+ */
+ public static final String DEFAULT_PLACEHOLDER_PREFIX = "${";
+
+ /**
+ * 榛樿鍚庣紑鍗犱綅绗�
+ */
+ public static final String DEFAULT_PLACEHOLDER_SUFFIX = "}";
+
+ /**
+ * 榛樿鍗曚緥瑙f瀽鍣�
+ */
+ private static final PlaceholderUtil DEFAULT_RESOLVER = new PlaceholderUtil();
+
+ /**
+ * 鍗犱綅绗﹀墠缂�
+ */
+ private String placeholderPrefix = DEFAULT_PLACEHOLDER_PREFIX;
+
+ /**
+ * 鍗犱綅绗﹀悗缂�
+ */
+ private String placeholderSuffix = DEFAULT_PLACEHOLDER_SUFFIX;
+
+
+ private PlaceholderUtil() {
+ }
+
+ private PlaceholderUtil(String placeholderPrefix, String placeholderSuffix) {
+ this.placeholderPrefix = placeholderPrefix;
+ this.placeholderSuffix = placeholderSuffix;
+ }
+
+ /**
+ * 鑾峰彇榛樿鐨勫崰浣嶇瑙f瀽鍣紝鍗冲崰浣嶇鍓嶇紑涓�"${", 鍚庣紑涓�"}"
+ *
+ * @return PlaceholderUtil
+ */
+ public static PlaceholderUtil getDefaultResolver() {
+ return DEFAULT_RESOLVER;
+ }
+
+ public static PlaceholderUtil getResolver(String placeholderPrefix, String placeholderSuffix) {
+ return new PlaceholderUtil(placeholderPrefix, placeholderSuffix);
+ }
+
+ /**
+ * 瑙f瀽甯︽湁鎸囧畾鍗犱綅绗︾殑妯℃澘瀛楃涓诧紝榛樿鍗犱綅绗︿负鍓嶇紑锛�${ 鍚庣紑锛殅<br/><br/>
+ * 濡傦細template = category:${}:product:${}<br/>
+ * values = {"1", "2"}<br/>
+ * 杩斿洖 category:1:product:2<br/>
+ *
+ * @param content 瑕佽В鏋愮殑甯︽湁鍗犱綅绗︾殑妯℃澘瀛楃涓�
+ * @param values 鎸夌収妯℃澘鍗犱綅绗︾储寮曚綅缃缃搴旂殑鍊�
+ * @return {String}
+ */
+ public String resolve(String content, String... values) {
+ int start = content.indexOf(this.placeholderPrefix);
+ if (start == -1) {
+ return content;
+ }
+ //鍊肩储寮�
+ int valueIndex = 0;
+ StringBuilder result = new StringBuilder(content);
+ while (start != -1) {
+ int end = result.indexOf(this.placeholderSuffix);
+ String replaceContent = values[valueIndex++];
+ result.replace(start, end + this.placeholderSuffix.length(), replaceContent);
+ start = result.indexOf(this.placeholderPrefix, start + replaceContent.length());
+ }
+ return result.toString();
+ }
+
+ /**
+ * 瑙f瀽甯︽湁鎸囧畾鍗犱綅绗︾殑妯℃澘瀛楃涓诧紝榛樿鍗犱綅绗︿负鍓嶇紑锛�${ 鍚庣紑锛殅<br/><br/>
+ * 濡傦細template = category:${}:product:${}<br/>
+ * values = {"1", "2"}<br/>
+ * 杩斿洖 category:1:product:2<br/>
+ *
+ * @param content 瑕佽В鏋愮殑甯︽湁鍗犱綅绗︾殑妯℃澘瀛楃涓�
+ * @param values 鎸夌収妯℃澘鍗犱綅绗︾储寮曚綅缃缃搴旂殑鍊�
+ * @return {String}
+ */
+ public String resolve(String content, Object[] values) {
+ return resolve(content, Stream.of(values).map(String::valueOf).toArray(String[]::new));
+ }
+
+ /**
+ * 鏍规嵁鏇挎崲瑙勫垯鏉ユ浛鎹㈡寚瀹氭ā鏉夸腑鐨勫崰浣嶇鍊�
+ *
+ * @param content 瑕佽В鏋愮殑瀛楃涓�
+ * @param rule 瑙f瀽瑙勫垯鍥炶皟
+ * @return {String}
+ */
+ public String resolveByRule(String content, Function<String, String> rule) {
+ int start = content.indexOf(this.placeholderPrefix);
+ if (start == -1) {
+ return content;
+ }
+ StringBuilder result = new StringBuilder(content);
+ while (start != -1) {
+ int end = result.indexOf(this.placeholderSuffix, start + 1);
+ //鑾峰彇鍗犱綅绗﹀睘鎬у�硷紝濡�${id}, 鍗宠幏鍙杋d
+ String placeholder = result.substring(start + this.placeholderPrefix.length(), end);
+ //鏇挎崲鏁翠釜鍗犱綅绗﹀唴瀹癸紝鍗冲皢${id}鍊兼浛鎹负鏇挎崲瑙勫垯鍥炶皟涓殑鍐呭
+ String replaceContent = placeholder.trim().isEmpty() ? "" : rule.apply(placeholder);
+ result.replace(start, end + this.placeholderSuffix.length(), replaceContent);
+ start = result.indexOf(this.placeholderPrefix, start + replaceContent.length());
+ }
+ return result.toString();
+ }
+
+ /**
+ * 鏇挎崲妯℃澘涓崰浣嶇鍐呭锛屽崰浣嶇鐨勫唴瀹瑰嵆涓簃ap key瀵瑰簲鐨勫�硷紝key涓哄崰浣嶇涓殑鍐呭銆�<br/><br/>
+ * 濡傦細content = product:${id}:detail:${did}<br/>
+ * valueMap = id -> 1; pid -> 2<br/>
+ * 缁忚繃瑙f瀽杩斿洖 product:1:detail:2<br/>
+ *
+ * @param content 妯℃澘鍐呭
+ * @param valueMap 鍊兼槧灏�
+ * @return 鏇挎崲瀹屾垚鍚庣殑瀛楃涓�
+ */
+ public String resolveByMap(String content, final Map<String, Object> valueMap) {
+ return resolveByRule(content, placeholderValue -> String.valueOf(valueMap.get(placeholderValue)));
+ }
+
+ /**
+ * 鏍规嵁properties鏂囦欢鏇挎崲鍗犱綅绗﹀唴瀹�
+ *
+ * @param content 妯℃澘鍐呭
+ * @param properties 閰嶇疆
+ * @return {String}
+ */
+ public String resolveByProperties(String content, final Properties properties) {
+ return resolveByRule(content, properties::getProperty);
+ }
+
+}
--
Gitblit v1.9.3