Skip to content

Commit d51c324

Browse files
chuffchad
andauthored
Validation (#36)
* lazy decoding * java 8 compatible gppmodel tests * rename missed multistate usp* methods to us* * lazier decoding * lazier decoding * tests for null and empty string constructor arguments * validation * fix typo * remove redundant validate call * default validate * remove empty validate method from header core segment * fix usct validator * deprecate multi-state usp* methods * remove deprecated usp methods * cleanup validators * encodeSection lazy fix --------- Co-authored-by: chad <[email protected]>
1 parent a3f62d7 commit d51c324

38 files changed

+3356
-261
lines changed

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/AbstractEncodableBitStringDataType.java

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
package com.iab.gpp.encoder.datatype;
22

3+
import java.util.Collection;
4+
import java.util.function.Predicate;
5+
import java.util.stream.Collectors;
6+
import com.iab.gpp.encoder.error.ValidationException;
7+
38
public abstract class AbstractEncodableBitStringDataType<T> implements EncodableDataType<T> {
9+
protected Predicate<T> validator;
410
protected T value;
511

612
protected AbstractEncodableBitStringDataType() {
7-
13+
814
}
9-
15+
16+
public AbstractEncodableBitStringDataType<T> withValidator(Predicate<T> validator) {
17+
this.validator = validator;
18+
return this;
19+
}
20+
1021
public boolean hasValue() {
1122
return this.value != null;
1223
}
@@ -17,7 +28,18 @@ public T getValue() {
1728

1829
@SuppressWarnings("unchecked")
1930
public void setValue(Object value) {
20-
this.value = (T) value;
31+
T v = (T) value;
32+
if (validator == null || validator.test(v)) {
33+
this.value = v;
34+
} else {
35+
if (v instanceof Collection) {
36+
throw new ValidationException("Invalid value '"
37+
+ ((Collection<?>) v).stream().map(i -> i.toString()).collect(Collectors.joining(",")) + "'");
38+
} else {
39+
throw new ValidationException("Invalid value '" + v + "'");
40+
}
41+
}
42+
2143
}
2244

2345
public abstract String substring(String str, int fromIndex);

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableBoolean.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ public void decode(String bitString) {
2222
}
2323

2424
public String substring(String bitString, int fromIndex) {
25-
// TODO: validate
2625
return bitString.substring(fromIndex, fromIndex + 1);
2726
}
2827
}

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableDatetime.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ public void decode(String bitString) {
2323
}
2424

2525
public String substring(String bitString, int fromIndex) {
26-
// TODO: validate
2726
return bitString.substring(fromIndex, fromIndex + 36);
2827
}
2928
}

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFibonacciIntegerRange.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ public void decode(String bitString) {
2727
}
2828

2929
public String substring(String bitString, int fromIndex) throws DecodingException {
30-
// TODO: add some validation
3130
int count = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 12));
3231
int index = fromIndex + 12;
3332
for (int i = 0; i < count; i++) {

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedBitfield.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ public void decode(String bitString) {
2828
}
2929

3030
public String substring(String bitString, int fromIndex) {
31-
// TODO: validate
3231
return bitString.substring(fromIndex, fromIndex + this.numElements);
3332
}
3433

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedInteger.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ public void decode(String bitString) {
2626
}
2727

2828
public String substring(String bitString, int fromIndex) {
29-
// TODO: validate
3029
return bitString.substring(fromIndex, fromIndex + this.bitStringLength);
3130
}
3231
}

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerList.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ public void decode(String bitString) {
3131
}
3232

3333
public String substring(String bitString, int fromIndex) {
34-
// TODO: validate
3534
return bitString.substring(fromIndex, fromIndex + (this.elementBitStringLength * numElements));
3635
}
3736

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedIntegerRange.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ public void decode(String bitString) {
2626
}
2727

2828
public String substring(String bitString, int fromIndex) {
29-
// TODO: add some validation
3029
int count = FixedIntegerEncoder.decode(bitString.substring(fromIndex, fromIndex + 12));
3130
int index = fromIndex + 12;
3231
for (int i = 0; i < count; i++) {

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFixedString.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ public void decode(String bitString) {
2626
}
2727

2828
public String substring(String bitString, int fromIndex) {
29-
// TODO: validate
3029
return bitString.substring(fromIndex, fromIndex + this.stringLength * 6);
3130
}
3231
}

iabgpp-encoder/src/main/java/com/iab/gpp/encoder/datatype/EncodableFlexibleBitfield.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ public void decode(String bitString) {
2929
}
3030

3131
public String substring(String bitString, int fromIndex) {
32-
// TODO: validate
3332
return bitString.substring(fromIndex, fromIndex + this.getLengthSupplier.getAsInt());
3433
}
3534

0 commit comments

Comments
 (0)