1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.shardingsphere.infra.url.core.arg;
19
20 import com.google.common.base.Strings;
21 import lombok.AccessLevel;
22 import lombok.RequiredArgsConstructor;
23
24 import java.util.Optional;
25 import java.util.regex.Matcher;
26 import java.util.regex.Pattern;
27
28
29
30
31 @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
32 public final class URLArgumentLine {
33
34 private static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("\\$\\$\\{(.*?)::(.*?)}");
35
36 private final Matcher placeholderMatcher;
37
38
39
40
41
42
43
44 public static Optional<URLArgumentLine> parse(final String line) {
45 Matcher matcher = PLACEHOLDER_PATTERN.matcher(line);
46 if (!matcher.find()) {
47 return Optional.empty();
48 }
49 return Optional.of(new URLArgumentLine(matcher));
50 }
51
52
53
54
55
56
57
58 public String replaceArgument(final URLArgumentPlaceholderType type) {
59 placeholderMatcher.reset();
60 StringBuffer result = new StringBuffer();
61 while (placeholderMatcher.find()) {
62 String variableName = placeholderMatcher.group(1);
63 String defaultValue = placeholderMatcher.group(2);
64 String argumentValue = getArgumentValue(variableName, type);
65 if (Strings.isNullOrEmpty(argumentValue)) {
66 argumentValue = defaultValue;
67 }
68 placeholderMatcher.appendReplacement(result, argumentValue);
69 }
70 placeholderMatcher.appendTail(result);
71 return rightTrim(result);
72 }
73
74 private String rightTrim(final StringBuffer buffer) {
75 while (buffer.length() > 0 && Character.isWhitespace(buffer.charAt(buffer.length() - 1))) {
76 buffer.deleteCharAt(buffer.length() - 1);
77 }
78 return buffer.toString();
79 }
80
81 private String getArgumentValue(final String argName, final URLArgumentPlaceholderType type) {
82 if (URLArgumentPlaceholderType.ENVIRONMENT == type) {
83 return System.getenv(argName);
84 }
85 if (URLArgumentPlaceholderType.SYSTEM_PROPS == type) {
86 return System.getProperty(argName);
87 }
88 return null;
89 }
90 }