Skip to content

Commit 0034321

Browse files
committed
Adjust builder, add more tests
1 parent 05aae50 commit 0034321

File tree

12 files changed

+161
-116
lines changed

12 files changed

+161
-116
lines changed

base/src/main/java/com/github/skjolber/jsonfilter/base/AbstractJsonFilterFactory.java

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package com.github.skjolber.jsonfilter.base;
1818

19+
import java.util.ArrayList;
1920
import java.util.List;
2021

2122
import com.github.skjolber.jsonfilter.JsonFilterFactory;
@@ -27,8 +28,8 @@ public abstract class AbstractJsonFilterFactory implements JsonFilterFactory {
2728
protected int maxPathMatches = -1;
2829
protected int maxSize = -1;
2930

30-
protected String[] anonymizeFilters;
31-
protected String[] pruneFilters;
31+
protected List<String> anonymizeFilters = new ArrayList<String>();
32+
protected List<String> pruneFilters = new ArrayList<String>();
3233

3334
/** Raw JSON */
3435
protected String pruneJsonValue;
@@ -41,16 +42,16 @@ public abstract class AbstractJsonFilterFactory implements JsonFilterFactory {
4142

4243
protected boolean isSinglePruneFilter() {
4344
return
44-
(anonymizeFilters == null || anonymizeFilters.length == 0)
45-
&& pruneFilters != null
46-
&& pruneFilters.length == 1;
45+
anonymizeFilters.isEmpty()
46+
&& !pruneFilters.isEmpty()
47+
&& pruneFilters.size() == 1;
4748
}
4849

4950
protected boolean isSingleAnonymizeFilter() {
5051
return
51-
(pruneFilters == null || pruneFilters.length == 0)
52-
&& anonymizeFilters != null
53-
&& anonymizeFilters.length == 1;
52+
pruneFilters.isEmpty()
53+
&& !anonymizeFilters.isEmpty()
54+
&& anonymizeFilters.size() == 1;
5455
}
5556

5657
protected boolean isActiveMaxStringLength() {
@@ -63,8 +64,7 @@ protected boolean isActiveMaxSize() {
6364

6465
protected boolean isActivePathFilters() {
6566
return
66-
(anonymizeFilters != null && anonymizeFilters.length > 0)
67-
|| (pruneFilters != null && pruneFilters.length > 0);
67+
!anonymizeFilters.isEmpty() || !pruneFilters.isEmpty();
6868
}
6969

7070
/**
@@ -112,12 +112,13 @@ public int getMaxPathMatches() {
112112
* @param filters array of prune expressions
113113
*/
114114

115-
public void setPruneFilters(String ... filters) {
115+
public void setPrune(String ... filters) {
116116
if(filters != null) {
117-
AbstractPathJsonFilter.validateAnonymizeExpressions(filters);
117+
AbstractPathJsonFilter.validatePruneExpressions(filters);
118+
}
119+
for(String filter : filters) {
120+
this.pruneFilters.add(filter);
118121
}
119-
120-
this.pruneFilters = filters;
121122
}
122123

123124
/**
@@ -126,15 +127,26 @@ public void setPruneFilters(String ... filters) {
126127
* @param filters list of prune expressions
127128
*/
128129

129-
public void setPruneFilters(List<String> filters) {
130-
if(filters != null && !filters.isEmpty()) {
131-
setPruneFilters(filters.toArray(new String[filters.size()]));
132-
} else {
133-
this.pruneFilters = new String[]{};
130+
public void setPrune(List<String> filters) {
131+
if(filters != null) {
132+
AbstractPathJsonFilter.validatePruneExpressions(filters);
134133
}
134+
this.pruneFilters.addAll(filters);
135135
}
136136

137-
public String[] getPruneFilters() {
137+
public void addPrune(String filter) {
138+
AbstractPathJsonFilter.validatePruneExpression(filter);
139+
140+
this.pruneFilters.add(filter);
141+
}
142+
143+
public void addAnonymize(String filter) {
144+
AbstractPathJsonFilter.validateAnonymizeExpression(filter);
145+
146+
this.anonymizeFilters.add(filter);
147+
}
148+
149+
public List<String> getPrune() {
138150
return pruneFilters;
139151
}
140152

@@ -144,12 +156,13 @@ public String[] getPruneFilters() {
144156
* @param filters array of anonymize filters
145157
*/
146158

147-
public void setAnonymizeFilters(String ... filters) {
159+
public void setAnonymize(String ... filters) {
148160
if(filters != null) {
149161
AbstractPathJsonFilter.validateAnonymizeExpressions(filters);
150162
}
151-
152-
this.anonymizeFilters = filters;
163+
for(String filter : filters) {
164+
this.anonymizeFilters.add(filter);
165+
}
153166
}
154167

155168
/**
@@ -159,15 +172,16 @@ public void setAnonymizeFilters(String ... filters) {
159172
* @param filters list of anonymize filters
160173
*/
161174

162-
public void setAnonymizeFilters(List<String> filters) {
175+
public void setAnonymize(List<String> filters) {
163176
if(filters != null && !filters.isEmpty()) {
164-
setAnonymizeFilters(filters.toArray(new String[filters.size()]));
165-
} else {
166-
this.anonymizeFilters = new String[]{};
177+
AbstractPathJsonFilter.validateAnonymizeExpressions(filters);
178+
}
179+
for(String filter : filters) {
180+
this.anonymizeFilters.add(filter);
167181
}
168182
}
169183

170-
public String[] getAnonymizeFilters() {
184+
public List<String> getAnonymize() {
171185
return anonymizeFilters;
172186
}
173187

@@ -205,23 +219,23 @@ public void setProperty(JsonFilterFactoryProperty p, Object value) {
205219
}
206220
case PRUNE : {
207221
if(value instanceof String[]) {
208-
setPruneFilters((String[]) value);
222+
setPrune((String[]) value);
209223
} else if(value instanceof String) {
210-
setPruneFilters((String) value);
224+
setPrune((String) value);
211225
} else if(value instanceof List) {
212-
setPruneFilters((List<String>) value);
226+
setPrune((List<String>) value);
213227
} else {
214228
throw new IllegalArgumentException("Cannot set prunes, unexpected value type");
215229
}
216230
break;
217231
}
218232
case ANONYMIZE : {
219233
if(value instanceof String[]) {
220-
setAnonymizeFilters((String[]) value);
234+
setAnonymize((String[]) value);
221235
} else if(value instanceof String) {
222-
setAnonymizeFilters((String) value);
236+
setAnonymize((String) value);
223237
} else if(value instanceof List) {
224-
setAnonymizeFilters((List<String>) value);
238+
setAnonymize((List<String>) value);
225239
} else {
226240
throw new IllegalArgumentException("Cannot set anonymize, unexpected value type");
227241
}

base/src/main/java/com/github/skjolber/jsonfilter/base/AbstractPathJsonFilter.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.nio.charset.StandardCharsets;
44
import java.util.Arrays;
5+
import java.util.List;
56

67
public abstract class AbstractPathJsonFilter extends AbstractJsonFilter {
78

@@ -100,6 +101,12 @@ public static void validateAnonymizeExpressions(String[] expressions) {
100101
validateAnonymizeExpression(expression);
101102
}
102103
}
104+
105+
public static void validateAnonymizeExpressions(List<String> expressions) {
106+
for(String expression : expressions) {
107+
validateAnonymizeExpression(expression);
108+
}
109+
}
103110

104111
public static void validateAnonymizeExpression(String expression) {
105112
if(!validateExpression(expression)) {
@@ -119,6 +126,12 @@ public static void validatePruneExpressions(String[] expressions) {
119126
validatePruneExpression(expression);
120127
}
121128
}
129+
130+
public static void validatePruneExpressions(List<String> expressions) {
131+
for(String expression : expressions) {
132+
validatePruneExpression(expression);
133+
}
134+
}
122135

123136
public static void validatePruneExpression(String expression) {
124137
if(!validateExpression(expression)) {

base/src/test/java/com/github/skjolber/jsonfilter/base/AbstractJsonFilterFactoryTest.java

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -46,46 +46,32 @@ public void testMaxPathMatches() {
4646

4747
@Test
4848
public void testAnonymize() {
49-
factory.setPruneFilters((List<String>)null);
5049
assertFalse(factory.isSingleAnonymizeFilter());
5150

52-
factory.setPruneFilters((String[])null);
51+
factory.setPrune(Collections.emptyList());
5352
assertFalse(factory.isSingleAnonymizeFilter());
5453

55-
factory.setPruneFilters(new String[0]);
56-
assertFalse(factory.isSingleAnonymizeFilter());
57-
58-
factory.setPruneFilters(Collections.emptyList());
59-
assertFalse(factory.isSingleAnonymizeFilter());
60-
61-
factory.setAnonymizeFilters(Collections.emptyList());
54+
factory.setAnonymize(Collections.emptyList());
6255
assertFalse(factory.isSingleAnonymizeFilter());
6356

64-
factory.setAnonymizeFilters("/abc");
65-
assertThat(factory.getAnonymizeFilters()).isEqualTo(new String[]{"/abc"});
57+
factory.setAnonymize("/abc");
58+
assertThat(factory.getAnonymize()).isEqualTo(Arrays.asList("/abc"));
6659
assertTrue(factory.isSingleAnonymizeFilter());
6760
assertTrue(factory.isActivePathFilters());
6861
}
6962

7063
@Test
7164
public void testPrune() {
72-
factory.setAnonymizeFilters((List<String>)null);
7365
assertFalse(factory.isSinglePruneFilter());
7466

75-
factory.setAnonymizeFilters((String[])null);
76-
assertFalse(factory.isSinglePruneFilter());
77-
78-
factory.setAnonymizeFilters(new String[0]);
79-
assertFalse(factory.isSinglePruneFilter());
80-
81-
factory.setAnonymizeFilters(Collections.emptyList());
67+
factory.setAnonymize(Collections.emptyList());
8268
assertFalse(factory.isSinglePruneFilter());
8369

84-
factory.setPruneFilters(Collections.emptyList());
70+
factory.setPrune(Collections.emptyList());
8571
assertFalse(factory.isSinglePruneFilter());
8672

87-
factory.setPruneFilters("/def");
88-
assertThat(factory.getPruneFilters()).isEqualTo(new String[]{"/def"});
73+
factory.setPrune("/def");
74+
assertThat(factory.getPrune()).isEqualTo(Arrays.asList("/def"));
8975
assertTrue(factory.isSinglePruneFilter());
9076
assertTrue(factory.isActivePathFilters());
9177
}
@@ -111,8 +97,8 @@ public void testUsingProperties() {
11197
factory.setProperty(JsonFilterFactoryProperty.TRUNCATE_MESSAGE.getPropertyName(), "truncate");
11298

11399
assertThat(factory.getMaxStringLength()).isEqualTo(123);
114-
assertThat(factory.getAnonymizeFilters()).isEqualTo(new String[]{"/abc"});
115-
assertThat(factory.getPruneFilters()).isEqualTo(new String[]{"//def"});
100+
assertThat(factory.getAnonymize()).isEqualTo(Arrays.asList("/abc"));
101+
assertThat(factory.getPrune()).isEqualTo(Arrays.asList("//def"));
116102
assertThat(factory.getMaxPathMatches()).isEqualTo(13);
117103
assertThat(factory.getPruneJsonValue()).isEqualTo("\"prune\"");
118104
assertThat(factory.getAnonymizeJsonValue()).isEqualTo("\"anon\"");
@@ -128,8 +114,8 @@ public void testUsingPropertiesAlternativeValues() {
128114
factory.setProperty(JsonFilterFactoryProperty.MAX_PATH_MATCHES.getPropertyName(), "13");
129115

130116
assertThat(factory.getMaxStringLength()).isEqualTo(123);
131-
assertThat(factory.getAnonymizeFilters()).isEqualTo(new String[]{"/abc"});
132-
assertThat(factory.getPruneFilters()).isEqualTo(new String[]{"//def"});
117+
assertThat(factory.getAnonymize()).isEqualTo(Arrays.asList("/abc"));
118+
assertThat(factory.getPrune()).isEqualTo(Arrays.asList("//def"));
133119
assertThat(factory.getMaxPathMatches()).isEqualTo(13);
134120
}
135121

@@ -138,8 +124,8 @@ public void testUsingPropertiesAlternativeValues2() {
138124
factory.setProperty(JsonFilterFactoryProperty.ANONYMIZE.getPropertyName(), new String[] {"/abc"});
139125
factory.setProperty(JsonFilterFactoryProperty.PRUNE.getPropertyName(), new String[] {"//def"});
140126

141-
assertThat(factory.getAnonymizeFilters()).isEqualTo(new String[]{"/abc"});
142-
assertThat(factory.getPruneFilters()).isEqualTo(new String[]{"//def"});
127+
assertThat(factory.getAnonymize()).isEqualTo(Arrays.asList("/abc"));
128+
assertThat(factory.getPrune()).isEqualTo(Arrays.asList("//def"));
143129
}
144130

145131
@Test

base/src/test/java/com/github/skjolber/jsonfilter/base/AbstractJsonFilterTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public void testInvalidInputs() throws IOException {
128128
}
129129

130130
@Test
131-
public void testEncoding() throws IOException {
131+
public void testEncodingString() throws IOException {
132132

133133
StringBuilder output = new StringBuilder();
134134
AbstractJsonFilter.quoteAsString("\"", output);
@@ -138,6 +138,31 @@ public void testEncoding() throws IOException {
138138
AbstractJsonFilter.quoteAsString(new String(new byte[] {0}), output);
139139
assertThat(output.toString()).isEqualTo("\\u0000");
140140
}
141+
142+
@Test
143+
public void testEncodingChars() throws IOException {
144+
145+
StringBuilder output = new StringBuilder();
146+
char[] charArray = "\"".toCharArray();
147+
AbstractJsonFilter.quoteAsString(charArray, 0, charArray.length, output);
148+
assertThat(output.toString()).isEqualTo("\\\"");
149+
150+
output.setLength(0);
151+
charArray = new String(new byte[] {0}).toCharArray();
152+
AbstractJsonFilter.quoteAsString(charArray, 0, charArray.length, output);
153+
assertThat(output.toString()).isEqualTo("\\u0000");
154+
}
155+
156+
157+
@Test
158+
public void testNumberSize() {
159+
int value = 1;
160+
for(int i = 1; i < 11; i++) {
161+
assertEquals(i, AbstractJsonFilter.lengthToDigits(value));
162+
163+
value = value * 10;
164+
}
165+
}
141166

142167
/*
143168
@Test

benchmark/jmh/src/main/java/com/github/skjolber/jsonfilter/jmh/AbstractSingleFullPathMaxStringLengthFilterBenchmark.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.github.skjolber.jsonfilter.jmh;
1+
package com.github.skjolber.jsonfilter.jmh;
22
import java.io.File;
33
import java.io.IOException;
44

frameworks/jackson/src/main/java/com/github/skjolber/jsonfilter/jackson/JacksonJsonFilterFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ public JsonFilter newJsonFilter() {
6565
truncateStringValue = AbstractJsonFilter.FILTER_TRUNCATE_MESSAGE;
6666
}
6767

68+
String[] pruneFilters = this.pruneFilters.isEmpty() ? null : this.pruneFilters.toArray(new String[this.pruneFilters.size()]);
69+
String[] anonymizeFilters = this.anonymizeFilters.isEmpty() ? null : this.anonymizeFilters.toArray(new String[this.anonymizeFilters.size()]);
70+
6871
if(isActivePathFilters()) {
6972
// check for single prune/anon filter
7073
if(isSinglePruneFilter()) {

frameworks/jackson/src/main/java/com/github/skjolber/jsonfilter/jackson/JacksonJsonLogFilterBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ public JsonFilter build() {
3131

3232
factory.setMaxStringLength(maxStringLength);
3333
if(!anonymizeFilters.isEmpty()) {
34-
factory.setAnonymizeFilters(anonymizeFilters);
34+
factory.setAnonymize(anonymizeFilters);
3535
}
3636
if(!pruneFilters.isEmpty()) {
37-
factory.setPruneFilters(pruneFilters);
37+
factory.setPrune(pruneFilters);
3838
}
3939

4040
factory.setAnonymizeJsonValue(anonymizeJsonValue);

0 commit comments

Comments
 (0)