Skip to content

Commit 7a4b082

Browse files
author
Tamas Balog
committed
Deduplicate string building logic in Customization
1 parent 9a62815 commit 7a4b082

File tree

1 file changed

+30
-29
lines changed

1 file changed

+30
-29
lines changed

src/main/java/org/skyscreamer/jsonassert/Customization.java

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,7 @@ private String buildPatternLevel1(String path) {
2424
String regex = "\\*\\*\\.";
2525
String replacement = "(?:.+\\.)?";
2626

27-
StringBuilder sb = new StringBuilder();
28-
String[] parts = path.split(regex);
29-
for (int i = 0; i < parts.length; i++) {
30-
String part = parts[i];
31-
32-
sb.append(buildPatternLevel2(part));
33-
if (i < parts.length - 1) {
34-
sb.append(replacement);
35-
}
36-
}
37-
38-
return sb.toString();
27+
return buildPattern(path, regex, replacement, 1);
3928
}
4029

4130
private String buildPatternLevel2(String s) {
@@ -45,17 +34,7 @@ private String buildPatternLevel2(String s) {
4534
String regex = "\\*\\*";
4635
String replacement = ".+";
4736

48-
StringBuilder sb = new StringBuilder();
49-
String[] parts = s.split(regex);
50-
for (int i = 0; i < parts.length; i++) {
51-
String part = parts[i];
52-
53-
sb.append(buildPatternLevel3(part));
54-
if (i < parts.length - 1) {
55-
sb.append(replacement);
56-
}
57-
}
58-
return sb.toString();
37+
return buildPattern(s, regex, replacement, 2);
5938
}
6039

6140
private String buildPatternLevel3(String s) {
@@ -66,19 +45,41 @@ private String buildPatternLevel3(String s) {
6645
String regex = "\\*";
6746
String replacement = "[^\\.]+";
6847

48+
return buildPattern(s, regex, replacement, 3);
49+
}
50+
51+
private String buildPattern(String path, String regex, String replacement, int level) {
6952
StringBuilder sb = new StringBuilder();
70-
String[] parts = s.split(regex);
53+
String[] parts = path.split(regex);
7154
for (int i = 0; i < parts.length; i++) {
72-
String part = parts[i];
73-
74-
sb.append(Pattern.quote(part));
55+
sb.append(buildPatternForLevel(level, parts[i]));
7556
if (i < parts.length - 1) {
7657
sb.append(replacement);
77-
}
78-
}
58+
}
59+
}
7960
return sb.toString();
8061
}
8162

63+
private String buildPatternForLevel(int level, String part) {
64+
switch (level) {
65+
case 1:
66+
return buildPatternLevel2(part);
67+
case 2:
68+
return buildPatternLevel3(part);
69+
case 3:
70+
return Pattern.quote(part);
71+
default:
72+
return "Incorrect level.";
73+
}
74+
}
75+
76+
/**
77+
* Creates a new {@link Customization} instance for {@code path} and {@code comparator}.
78+
*
79+
* @param path the json path
80+
* @param comparator the comparator
81+
* @return a new Customization
82+
*/
8283
public static Customization customization(String path, ValueMatcher<Object> comparator) {
8384
return new Customization(path, comparator);
8485
}

0 commit comments

Comments
 (0)