From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001 From: xiejun <xiejun@vci-tech.com> Date: 星期五, 01 十一月 2024 15:11:19 +0800 Subject: [PATCH] Revert "集成获取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